diff --git a/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs b/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs index 484842d12..cbdfa199e 100644 --- a/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs +++ b/crates/ml/src/cuda_pipeline/gpu_dqn_trainer.rs @@ -323,12 +323,6 @@ pub struct GpuDqnTrainConfig { /// market features from portfolio+MTF+OFI features in the state vector. /// OFI features (8 dims, when enabled) bypass the bottleneck via portfolio_dim. pub market_dim: usize, - /// Gradient budget fraction for IQN. Default 0.40. - pub iqn_grad_budget: f32, - /// Gradient budget fraction for CQL. Default 0.10. - pub cql_grad_budget: f32, - /// Gradient budget fraction for ensemble. Default 0.05. - pub ens_grad_budget: f32, } impl Default for GpuDqnTrainConfig { @@ -377,9 +371,6 @@ impl Default for GpuDqnTrainConfig { enable_gradient_vaccine: true, // always on bottleneck_dim: 16, market_dim: 42, // Default: 42 base features. Overridden to 50 when OFI (MBP-10) enabled. - iqn_grad_budget: 0.40, - cql_grad_budget: 0.10, - ens_grad_budget: 0.05, } } } diff --git a/crates/ml/src/trainers/dqn/config.rs b/crates/ml/src/trainers/dqn/config.rs index d1530bcce..0c6efb783 100644 --- a/crates/ml/src/trainers/dqn/config.rs +++ b/crates/ml/src/trainers/dqn/config.rs @@ -932,17 +932,6 @@ pub struct DQNHyperparameters { /// L_total = L_c51 + iqn_lambda * L_iqn /// Range [0.0, 2.0]: 0.0 = C51 only, 0.5 = balanced, 1.0 = equal weight pub iqn_lambda: f64, - /// Gradient budget fraction for IQN auxiliary objective. - /// Controls how much of the total gradient norm IQN consumes. - /// Range [0.1, 0.8]. Default 0.40. Higher = IQN dominates (good for magnitude sizing). - /// At 0.75, IQN starves C51 — directional learning flatlines. - pub iqn_grad_budget: f64, - /// Gradient budget fraction for CQL regularization. - /// Range [0.0, 0.3]. Default 0.10. - pub cql_grad_budget: f64, - /// Gradient budget fraction for ensemble diversity. - /// Range [0.0, 0.2]. Default 0.05. C51 gets the remainder. - pub ens_grad_budget: f64, /// Spectral norm σ_max — constrains ||W||_σ ≤ σ_max. /// Range [1.0, 10.0]. Default 3.0 (permits Xavier scaling, prevents Q-explosion). pub spectral_norm_sigma_max: f64, @@ -1554,9 +1543,6 @@ impl DQNHyperparameters { num_quantiles: 32, // Default: 32 quantiles qr_kappa: 1.0, // Default: 1.0 (standard quantile Huber loss) iqn_lambda: 0.25, // Default: mild IQN regularization alongside C51 - iqn_grad_budget: 0.40, // Default: balanced — was 0.75 (starved C51 directional learning) - cql_grad_budget: 0.10, // Default: mild CQL regularization - ens_grad_budget: 0.05, // Default: ensemble diversity. C51 gets remainder (0.45) spectral_norm_sigma_max: 3.0, // Default: permits Xavier scaling [1.0, 10.0] spectral_decoupling_lambda: 0.01, // Default: mild logit magnitude penalty (Pezeshki 2021) diff --git a/crates/ml/src/trainers/dqn/fused_training.rs b/crates/ml/src/trainers/dqn/fused_training.rs index b84d36816..23da8a9db 100644 --- a/crates/ml/src/trainers/dqn/fused_training.rs +++ b/crates/ml/src/trainers/dqn/fused_training.rs @@ -139,7 +139,6 @@ unsafe impl Sync for ParentGraph {} /// Per-component gradient norm budget fractions for auxiliary objectives. /// C51 gets whatever remains: `1.0 - sum(active_auxiliary_budgets)`. -/// Configurable via DQNHyperparameters (iqn_grad_budget, cql_grad_budget, ens_grad_budget). /// Default: IQN=40%, CQL=10%, ENS=5%, C51=45%. /// Old hardcoded: IQN=75% — starved C51 directional learning (grad_norm frozen at 0.655). pub(crate) struct GradBudget { @@ -410,9 +409,6 @@ impl FusedTrainingCtx { enable_gradient_vaccine: true, bottleneck_dim: hyperparams.bottleneck_dim, market_dim: 42, // Always 42 base market features — OFI features bypass bottleneck via portfolio_dim - iqn_grad_budget: hyperparams.iqn_grad_budget as f32, - cql_grad_budget: hyperparams.cql_grad_budget as f32, - ens_grad_budget: hyperparams.ens_grad_budget as f32, }; // Create weight set pointer views AFTER GpuDqnTrainer is constructed below. diff --git a/crates/ml/src/training_profile.rs b/crates/ml/src/training_profile.rs index 88e3b674f..6a09c4245 100644 --- a/crates/ml/src/training_profile.rs +++ b/crates/ml/src/training_profile.rs @@ -399,9 +399,6 @@ pub struct SearchSpaceSection { pub branch_hidden_dim: Option<[f64; 2]>, pub gradient_accumulation_steps: Option<[f64; 2]>, pub iqn_lambda: Option<[f64; 2]>, - pub iqn_grad_budget: Option<[f64; 2]>, - pub cql_grad_budget: Option<[f64; 2]>, - pub ens_grad_budget: Option<[f64; 2]>, /// Spectral norm sigma max bounds. pub spectral_norm_sigma_max: Option<[f64; 2]>, /// C51 warmup epochs bounds. @@ -571,9 +568,6 @@ impl HyperoptProfile { "branch_hidden_dim" => ss.branch_hidden_dim, "gradient_accumulation_steps" => ss.gradient_accumulation_steps, "iqn_lambda" => ss.iqn_lambda, - "iqn_grad_budget" => ss.iqn_grad_budget, - "cql_grad_budget" => ss.cql_grad_budget, - "ens_grad_budget" => ss.ens_grad_budget, "spectral_norm_sigma_max" => ss.spectral_norm_sigma_max, "c51_warmup_epochs" => ss.c51_warmup_epochs, "c51_alpha_max" => ss.c51_alpha_max,