- 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>
126 lines
3.0 KiB
TOML
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
|