Files
foxhunt/config/training/dqn-production.toml
jgrusewski 11f0a2d207 fix: smoketest epochs=10 (validates C51), production mbp10_data_dir PVC path
- smoketest: epochs=3→10, c51_warmup_epochs=5 — C51 now activates at
  epoch 6 (was never reached with 3 epochs)
- production: mbp10_data_dir → /mnt/training-data/futures-baseline-mbp10
  (PVC mount path, was pointing to local test_data)
- production smoketest uses TOML epochs (no hardcoded override)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:35:10 +02:00

126 lines
3.0 KiB
TOML

# DQN Production Training Profile — H100 80GB
# Full Rainbow DQN: branching + distributional + dueling + double + PER + noisy nets + CQL
#
# Mixed-precision (NVIDIA AMP pattern):
# - f32 master weights, Adam moments, gradients, loss accumulators
# - bf16 shadow copies for cuBLAS GemmEx tensor core GEMM
# - Cosine LR decay: 1e-4 → 1e-5 over 100 epochs
[training]
epochs = 200
learning_rate = 0.0001
gamma = 0.99
weight_decay = 0.0001
adam_epsilon = 1e-8
warmup_steps = 0
hidden_dim_base = 256
reward_scale = 1.0
huber_delta = 1.0
lr_decay_type = 2
lr_min = 0.00001
# Data source: "ohlcv" (1-min candles) or "mbp10" (imbalance bars from MBP-10 order book)
data_source = "mbp10"
imbalance_bar_threshold = 0.5
imbalance_bar_ewma_alpha = 0.1
# OFI feature enrichment from MBP-10 order book data (8 features: OFI L1/L5, depth imbalance, VPIN, Kyle's lambda, bid/ask slope, trade imbalance)
mbp10_data_dir = "/mnt/training-data/futures-baseline-mbp10"
[distributional]
num_atoms = 51
[exploration]
epsilon_start = 1.0
epsilon_end = 0.01
epsilon_decay = 0.995
noisy_sigma_init = 0.3
entropy_coefficient = 0.001
count_bonus_coefficient = 0.1
q_gap_threshold = 0.05
[replay_buffer]
buffer_size = 500000
min_replay_size = 1000
per_alpha = 0.6
per_beta_start = 0.4
regime_replay_decay = 0.3
[early_stopping]
enabled = true
patience = 20
min_epochs_before_stopping = 80
[experience]
gpu_n_episodes = 4096
initial_capital = 35000.0
tx_cost_multiplier = 0.0001
min_hold_bars = 5
[experience.fill_simulation]
ioc_fill_prob = 0.85
limit_fill_min = 0.30
limit_fill_max = 0.80
spread_cost_frac = 0.50
spread_capture_frac = 0.50
[risk]
max_position = 2.0
loss_aversion = 1.5
q_clip_min = -50.0
q_clip_max = 50.0
[advanced]
n_steps = 3
tau = 0.005
c51_warmup_epochs = 5
her_ratio = 0.2
cql_alpha = 1.0
curiosity_weight = 0.1
iqn_lambda = 0.25
spectral_norm_sigma_max = 1.5
spectral_decoupling_lambda = 0.01
gradient_clip_norm = 1.0
[generalization]
shrink_perturb_interval = 20
shrink_perturb_alpha = 0.85
shrink_perturb_sigma = 0.01
adversarial_dd_threshold = 0.005
adversarial_epochs_trigger = 5
anti_lr_good_mult = 3.0
anti_lr_bad_mult = 0.3
anti_lr_sharpe_threshold = 0.3
feature_mask_fraction = 0.3
feature_noise_scale = 0.1
causal_weight = 0.1
causal_intervention_interval = 10
adversarial_warmup_epochs = 50
adversarial_checkpoint_interval = 50
bottleneck_dim = 0
stochastic_depth_prob = 0.2
asymmetric_dd_weight = 0.5
time_reversal_mod = 5
regret_blend = 0.3
position_entropy_weight = 0.01
trade_clustering_penalty = 0.05
ensemble_disagreement_penalty = 0.3
mixup_alpha = 0.2
# Core family intensity scalars for hyperopt (1.0 = neutral, range [0.0, 2.0])
learning_intensity = 1.0
exploration_intensity = 1.0
replay_intensity = 1.0
architecture_intensity = 1.0
risk_intensity = 1.0
# Generalization family intensity scalars for hyperopt (1.0 = neutral, range [0.0, 2.0])
adversarial_intensity = 1.0
regularization_intensity = 1.0
augmentation_intensity = 1.0
loss_shaping_intensity = 1.0
ensemble_intensity = 1.0
causal_intensity = 1.0
[reward]
loss_aversion = 1.5
q_gap_threshold = 0.1
w_dd = 1.0
dd_threshold = 0.02