Files
foxhunt/services/ml_training_service/tuning_config.yaml
jgrusewski 04d8802c94 refactor: remove 8 always-on use_ booleans — features are mandatory
Remove use_double_dqn, use_dueling, use_per, use_branching,
use_distributional, use_noisy_nets, use_huber_loss, and use_cql
from DQNConfig, DQNHyperparameters, and DqnParams structs.

These features are always enabled (Rainbow DQN standard). The boolean
flags were dead code — every constructor set them to true, and the
only code paths that set them to false were in tests that disabled
features for simplicity. With the fields removed, the features are
unconditionally active, eliminating ~490 lines of dead configuration.

Key changes:
- Struct field declarations removed from 3 core config structs
- Conditional branches (if use_X { ... } else { ... }) simplified:
  dueling/branching/PER network creation is now unconditional
- Checkpoint metadata hardcodes "true" for backward compatibility
- Hyperopt search space index 11 (use_branching) fixed at 1.0
- TOML/YAML config files cleaned of removed fields
- Tests that toggled these flags updated or rewritten

45 files changed, -487 net lines. Zero new test failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:45:54 +01:00

334 lines
7.6 KiB
YAML

# Hyperparameter Tuning Configuration for Foxhunt ML Models
# Defines search spaces for Optuna optimization
# Global tuning settings
global:
optimization_direction: maximize # maximize sharpe_ratio
pruning_enabled: true
median_pruner:
n_startup_trials: 5 # No pruning for first 5 trials (establish baseline)
n_warmup_steps: 10 # Wait 10 epochs before starting to prune
interval_steps: 5 # Check for pruning every 5 epochs
sampler: TPE # Tree-structured Parzen Estimator
# Model-specific search spaces
models:
TLOB:
epochs:
type: int
low: 10
high: 100
step: 10
learning_rate:
type: float
low: 0.00001
high: 0.01
log: true
batch_size:
type: categorical
choices: [32, 64, 128, 256]
sequence_length:
type: categorical
choices: [50, 100, 200]
hidden_dim:
type: categorical
choices: [64, 128, 256, 512]
num_heads:
type: categorical
choices: [4, 8, 16]
num_layers:
type: int
low: 2
high: 8
step: 1
dropout_rate:
type: float
low: 0.0
high: 0.5
step: 0.05
use_positional_encoding:
type: categorical
choices: [true, false]
MAMBA_2:
epochs:
type: int
low: 30
high: 100
step: 10
learning_rate:
type: categorical
choices: [0.00001, 0.0001, 0.001] # Conservative range for state-space models
batch_size:
type: categorical
choices: [16, 32, 64] # Memory-intensive due to state propagation (4GB VRAM constraint)
hidden_dim:
type: categorical
choices: [128, 256, 512] # d_model in MAMBA-2 architecture
state_size:
type: categorical
choices: [8, 16, 32] # d_state: Critical for state-space dynamics
num_layers:
type: categorical
choices: [2, 4, 8] # Layer depth affects memory and expressiveness
expansion_factor:
type: categorical
choices: [2, 4] # expand: Controls inner dimension (d_inner = expand * d_model)
dropout:
type: float
low: 0.0
high: 0.3
step: 0.05
# State-space specific parameters
dt_min:
type: float
low: 0.0001
high: 0.01
log: true # Time-step minimum for discrete-time dynamics
dt_max:
type: float
low: 0.01
high: 1.0
log: true # Time-step maximum
# Architecture toggles
use_ssd:
type: categorical
choices: [true, false] # Structured State Duality
use_selective_state:
type: categorical
choices: [true, false] # Selective state mechanism
hardware_aware:
type: categorical
choices: [true, false] # Hardware-aware optimizations (RTX 3050 Ti)
# Training parameters
grad_clip:
type: float
low: 0.5
high: 2.0
step: 0.25 # Gradient clipping for state-space stability
weight_decay:
type: float
low: 0.0001
high: 0.01
log: true
warmup_steps:
type: int
low: 100
high: 2000
step: 100
DQN:
epochs:
type: int
low: 50
high: 500
step: 50
learning_rate:
type: float
low: 0.00001
high: 0.01
log: true
batch_size:
type: categorical
choices: [32, 64, 128, 256]
replay_buffer_size:
type: categorical
choices: [10000, 50000, 100000, 500000]
epsilon_start:
type: float
low: 0.9
high: 1.0
step: 0.05
epsilon_end:
type: float
low: 0.01
high: 0.1
step: 0.01
epsilon_decay_steps:
type: int
low: 1000
high: 10000
step: 1000
gamma:
type: float
low: 0.9
high: 0.999
step: 0.01
target_update_frequency:
type: int
low: 100
high: 1000
step: 100
use_prioritized_replay:
type: categorical
choices: [true, false]
PPO:
epochs:
type: int
low: 50
high: 500
step: 50
learning_rate:
type: float
low: 0.00001
high: 0.01
log: true
batch_size:
type: categorical
choices: [64, 128, 256, 512]
clip_ratio:
type: float
low: 0.1
high: 0.3
step: 0.05
value_loss_coef:
type: float
low: 0.1
high: 1.0
step: 0.1
entropy_coef:
type: float
low: 0.0
high: 0.1
step: 0.01
rollout_steps:
type: int
low: 128
high: 2048
step: 128
minibatch_size:
type: categorical
choices: [32, 64, 128, 256]
gae_lambda:
type: float
low: 0.9
high: 0.99
step: 0.01
LIQUID:
epochs:
type: int
low: 20
high: 100
step: 10
learning_rate:
type: categorical
choices: [0.0001, 0.001, 0.01] # 3 learning rate options for fast convergence
batch_size:
type: categorical
choices: [32, 64, 128] # 3 batch size options
hidden_dim:
type: categorical
choices: [64, 128, 256] # 3 hidden dimension options for LTC/CfC cells
# ODE Integration Parameters (Critical for continuous-time dynamics)
ode_steps:
type: categorical
choices: [3, 5, 10, 20] # Number of integration steps per forward pass
solver_type:
type: categorical
choices: ["Euler", "RK4", "Adaptive"] # ODE solver selection
# Sparsity and Network Structure
sparsity_level:
type: categorical
choices: [0.5, 0.7, 0.9] # Connection sparsity (0.9 = 90% connections pruned)
num_layers:
type: categorical
choices: [1, 2, 3] # Depth of liquid network
# Time Constant Parameters (tau)
time_constant_tau:
type: categorical
choices: [0.01, 0.1, 1.0] # Base time constant for ODE dynamics
tau_min:
type: float
low: 0.001
high: 0.05
log: true
tau_max:
type: float
low: 0.5
high: 5.0
log: true
use_adaptive_tau:
type: categorical
choices: [true, false] # Enable/disable volatility-aware tau adaptation
# Activation Functions
activation:
type: categorical
choices: ["Tanh", "Sigmoid", "ReLU"] # Cell activation function
output_activation:
type: categorical
choices: ["Linear", "Tanh", "Sigmoid"] # Output layer activation
# Regularization
dropout_rate:
type: float
low: 0.0
high: 0.3
step: 0.05
l2_regularization:
type: float
low: 0.00001
high: 0.001
log: true
# Network Type
network_type:
type: categorical
choices: ["LTC", "CfC", "Mixed"] # Liquid Time-constant, Closed-form Continuous-time, or Mixed
# Market Regime Adaptation
market_regime_adaptation:
type: categorical
choices: [true, false] # Enable regime-aware time step adaptation
# Early Stopping
early_stopping_patience:
type: int
low: 5
high: 20
step: 5
# Default time step (dt) for ODE integration
default_dt:
type: float
low: 0.001
high: 0.1
log: true
TFT:
epochs:
type: int
low: 10
high: 100
step: 10
learning_rate:
type: float
low: 0.00001
high: 0.01
log: true
batch_size:
type: categorical
choices: [32, 64, 128, 256]
hidden_dim:
type: categorical
choices: [64, 128, 256, 512]
num_heads:
type: categorical
choices: [4, 8, 16]
num_layers:
type: int
low: 2
high: 8
step: 1
lookback_window:
type: int
low: 10
high: 100
step: 10
forecast_horizon:
type: int
low: 1
high: 20
step: 1
dropout_rate:
type: float
low: 0.0
high: 0.5
step: 0.05