OptiRS NAS
Neural Architecture Search and hyperparameter optimization for the OptiRS machine learning optimization library.
Overview
OptiRS-NAS provides comprehensive Neural Architecture Search (NAS) capabilities combined with hyperparameter optimization. This crate implements state-of-the-art NAS algorithms, Bayesian optimization, evolutionary search, and reinforcement learning-based approaches to automatically design optimal neural network architectures and hyperparameters.
Features
- Neural Architecture Search: Automated neural network design
- Bayesian Optimization: Gaussian process-based hyperparameter tuning
- Evolutionary Algorithms: Population-based architecture evolution
- Reinforcement Learning NAS: RL agents for architecture design
- Progressive Search: Gradually growing architecture complexity
- Multi-Objective Optimization: Balancing accuracy, efficiency, and resource usage
- Hardware-Aware NAS: Architecture optimization for specific hardware
- Transfer Learning: Knowledge transfer across architecture searches
- Domain-Specific NAS: Pre-configured search spaces for CV, NLP, TimeSeries, Reinforcement, and Scientific domains
- Architecture Embedding: Vector-space representation and similarity search for architectures
Search Strategies
Bayesian Optimization
- Gaussian Process: Probabilistic surrogate models
- Acquisition Functions: Expected improvement, upper confidence bound
- Multi-Fidelity: Early stopping and progressive evaluation
- Constrained Optimization: Resource-aware search
- Parallel Evaluation: Batch Bayesian optimization
Evolutionary Algorithms
- Genetic Algorithms: Population-based architecture evolution
- Differential Evolution: Continuous hyperparameter optimization
- NSGA-II: Multi-objective Pareto frontier exploration
- CMA-ES: Covariance matrix adaptation evolution strategy
- Population Diversity: Maintaining search diversity
Reinforcement Learning
- Controller Networks: RNN/Transformer controllers for architecture generation
- REINFORCE: Policy gradient-based architecture search
- Progressive NAS: Gradually increasing architecture complexity
- Distributed Training: Parallel architecture evaluation
- Efficient NAS: Resource-constrained architecture search
Installation
Add this to your Cargo.toml:
[]
= "0.3.1"
= "0.4.0" # Required foundation
Feature Selection
Enable specific NAS approaches:
[]
= { = "0.3.1", = ["bayesian", "evolutionary", "reinforcement"] }
Available features:
bayesian: Bayesian optimization methods (enabled by default)evolutionary: Evolutionary algorithmsreinforcement: Reinforcement learning approachesprogressive: Progressive search strategiesmulti_objective: Multi-objective optimizationlearned_integration: Integration with OptiRS-Learned
Usage
Basic Bayesian Optimization
use ;
// Define hyperparameter search space
let search_space = new
.add_continuous
.add_discrete
.add_categorical
.add_discrete
.add_continuous
.build;
// Create Bayesian optimizer
let mut bayesian_opt = new
.with_search_space
.with_surrogate_model
.with_acquisition_function
.with_budget // Number of evaluations
.build?;
// Run optimization
for iteration in 0..100
let best_config = bayesian_opt.best_configuration?;
Neural Architecture Search
use ;
// Define architecture search space
let arch_space = new
.add_layer_types
.add_kernel_sizes
.add_channel_sizes
.add_activation_functions
.add_normalization_types
.with_max_depth
.with_skip_connections
.build;
// Create RL-based NAS controller
let mut nas_controller = new
.with_controller
.with_search_space
.with_reward_function
.with_training_episodes
.build?;
// Search for optimal architectures
let best_architectures = nas_controller.search.await?;
for in best_architectures.iter.enumerate
Multi-Objective Optimization
use ;
// Define multiple objectives
let objectives = vec!;
let mut multi_obj = new
.with_objectives
.with_algorithm
.with_population_size
.with_generations
.build?;
// Run multi-objective optimization
let pareto_frontier = multi_obj.optimize.await?;
// Analyze trade-offs
for solution in pareto_frontier.solutions
Progressive NAS
use ;
// Progressive architecture search with growing complexity
let mut progressive_nas = new
.with_initial_depth
.with_max_depth
.with_growth_strategy
.with_complexity_budget // FLOPs budget
.build?;
// Search with gradually increasing complexity
for stage in 0..5
Hardware-Aware Optimization
use ;
// Define target hardware constraints
let target_hardware = new
.with_device_type
.with_memory_limit // 4GB
.with_power_limit // 5W
.with_latency_constraint // 50ms
.build;
let latency_predictor = from_hardware_profile?;
let mut hw_aware_nas = new
.with_target_hardware
.with_latency_predictor
.with_accuracy_threshold
.build?;
// Search for hardware-efficient architectures
let efficient_architectures = hw_aware_nas.search.await?;
Transfer Learning for NAS
use ;
// Load pre-trained architecture knowledge
let knowledge_base = load_from_file?;
let mut transferable_nas = new
.with_source_knowledge
.with_transfer_strategy
.with_adaptation_budget // Limited budget for new domain
.build?;
// Quickly adapt to new domain
let adapted_architectures = transferable_nas
.adapt_to_new_domain
.await?;
Domain-Specific NAS (Wave 2)
DomainNASEngine
Domain-aware NAS with pre-configured search spaces for common ML domains:
use ;
// Create a domain-specific NAS engine for computer vision
let engine = new;
// Apply constraints to the search
let constraints = vec!;
// Validate constraints before search
engine.validate_constraints?;
Supported domains:
- ComputerVision: Convolutional architectures, pooling, skip connections
- NLP: Attention layers, embedding dimensions, transformer blocks
- TimeSeries: Recurrent layers, temporal convolutions, sequence modeling
- Reinforcement: Policy networks, value heads, exploration modules
- Scientific: Physics-informed layers, conservation constraints
Architecture Embedding
Embed architectures into a continuous vector space for similarity analysis:
use ;
// Create an embedder with weighted sum aggregation
let mut embedder = new;
// Update embeddings for a set of architectures
embedder.update_embeddings?;
// Find top-k most similar architectures to a query
let similar = embedder.find_similar?;
// Compute cosine similarity between two architecture embeddings
let similarity = embedder.cosine_similarity?;
Aggregation methods:
- Mean: Simple average of layer embeddings
- WeightedSum: Weighted combination with learned importance
- AttentionPooling: Attention-based aggregation over layer representations
Architecture Components
Search Space Definition
- Layer Types: Convolution, attention, normalization, activation
- Connection Patterns: Skip connections, dense connections, routing
- Hyperparameters: Learning rates, regularization, optimization settings
- Resource Constraints: FLOPs, memory, latency, energy consumption
Evaluation Framework
- Performance Metrics: Accuracy, F1-score, AUC, perplexity
- Efficiency Metrics: FLOPs, parameters, memory usage
- Hardware Metrics: Latency, throughput, power consumption
- Multi-Fidelity: Early stopping, progressive evaluation, proxy tasks
Search Algorithms
- Surrogate Models: Gaussian processes, neural networks, tree-based models
- Acquisition Functions: Exploration-exploitation trade-offs
- Population Methods: Genetic algorithms, particle swarm optimization
- Gradient-Based: Differentiable architecture search (DARTS)
Advanced Features
Distributed Search
use ;
// Distribute architecture evaluation across multiple workers
let worker_pool = new
.with_workers
.with_gpu_per_worker
.build?;
let distributed_nas = new
.with_worker_pool
.with_load_balancing
.build?;
let results = distributed_nas.parallel_search.await?;
AutoML Pipeline
use ;
// Complete automated machine learning pipeline
let automl = new
.with_data_preprocessing
.with_feature_engineering
.with_architecture_search
.with_hyperparameter_tuning
.with_model_selection
.build?;
let optimized_model = automl.fit.await?;
Performance Monitoring
use ;
let monitor = new
.with_metrics_collection
.with_visualization
.with_early_stopping
.build;
let analytics = new
.track_convergence
.track_diversity
.track_efficiency
.build;
// Monitor search progress
monitor.track_search_progress.await?;
analytics.generate_search_report.await?;
Integration with OptiRS Ecosystem
Learned Optimizer Integration
use LearnedNAS;
use MetaLearner;
// Combine NAS with learned optimizers
let learned_nas = new
.with_meta_learner
.with_architecture_adaptation
.build?;
let co_optimized_result = learned_nas
.co_optimize_architecture_and_optimizer
.await?;
Contributing
OptiRS follows the Cool Japan organization's development standards. See the main OptiRS repository for contribution guidelines.
Research Papers and References
This crate implements techniques from various research papers:
- "Neural Architecture Search with Reinforcement Learning" (Zoph & Le)
- "Efficient Neural Architecture Search via Parameter Sharing" (Pham et al.)
- "DARTS: Differentiable Architecture Search" (Liu et al.)
- "Progressive Neural Architecture Search" (Liu et al.)
- "MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications" (Howard et al.)
License
This project is licensed under the Apache License, Version 2.0.