scwbd-004 / config.yaml
jacob-valdez's picture
Upload config.yaml with huggingface_hub
410b16a verified
Raw
History Blame Contribute Delete
14.1 kB
model:
n_regions: 414
local_core: learned
family_state: true
family_cores: {}
family_allow_derived_partition: false
d_key: 16
d_value: 16
d_grid: 12
d_context: 4
d_prediction: 8
state_dependent_variance: true
scale_prolongations: []
hidden: 1408
n_local_layers: 3
region_embed: 192
context_dim: 128
message_dim: 12
n_delay_bins: 8
n_spectral_modes: 8
n_adaptation: 2
n_uncertainty: 4
dt_model: 0.008
hemo_ratio: 25
bold_predict_frames: 1
bold_every: 1
residual_rho_max: 0.35
residual_init_scale: 0.05
encoder_channels: 192
encoder_layers: 3
dropout: 0.0
control_graph: none
scalar_state_ablation: false
dense_coupling_ablation: false
n_eeg_channels: 64
n_behaviour: 2
montages:
sleepedf_real:
kind: bipolar
channels:
- EEG Fpz-Cz
- EEG Pz-Oz
ds000117_real:
kind: digitised
positions_file: configs/montages/ds000117_eeg.json
channels:
- EEG001
- EEG002
- EEG003
- EEG004
- EEG005
- EEG006
- EEG007
- EEG008
- EEG009
- EEG010
- EEG011
- EEG012
- EEG013
- EEG014
- EEG015
- EEG016
- EEG017
- EEG018
- EEG019
- EEG020
- EEG021
- EEG022
- EEG023
- EEG024
- EEG025
- EEG026
- EEG027
- EEG028
- EEG029
- EEG030
- EEG031
- EEG032
- EEG033
- EEG034
- EEG035
- EEG036
- EEG037
- EEG038
- EEG039
- EEG040
- EEG041
- EEG042
- EEG043
- EEG044
- EEG045
- EEG046
- EEG047
- EEG048
- EEG049
- EEG050
- EEG051
- EEG052
- EEG053
- EEG054
- EEG055
- EEG056
- EEG057
- EEG058
- EEG059
- EEG060
- EEG065
- EEG066
- EEG067
- EEG068
- EEG069
- EEG070
- EEG071
- EEG072
- EEG073
- EEG074
ds004024_rest_real:
kind: monopolar
channels:
- Fp1
- Fpz
- Fp2
- AF7
- AF3
- AFz
- AF4
- AF8
- F7
- F5
- F3
- F1
- Fz
- F2
- F4
- F6
- F8
- FT7
- FC5
- FC3
- FC1
- FCz
- FC2
- FC4
- FC6
- FT8
- T7
- C5
- C3
- C1
- Cz
- C2
- C4
- C6
- T8
- TP9
- TP7
- CP5
- CP3
- CP1
- CPz
- CP2
- CP4
- CP6
- TP8
- TP10
- P7
- P5
- P3
- P1
- Pz
- P2
- P4
- P6
- P8
- PO7
- PO3
- POz
- PO4
- PO8
- O1
- Oz
- O2
- Iz
use_bf16: true
compile: false
posterior:
summary_channels: 128
summary_layers: 4
flow_layers: 6
flow_hidden: 256
n_bands: 7
n_pcs: 16
dropout: 0.0
nuisance_dim: 0
cond_norm: dataset_std_v2
lr_scale: 5.0
data:
sim_index_fast: data/sim_corpus_414/index_fast.json
sim_index_slow: /data/scwbd/sim_corpus/index_slow.json
real_eeg_root: data/eegmmidb/1.0.0
real_sleep_root: data/sleep-edfx/1.0.0/sleep-cassette
ds000117_root: data/ds000117/1.1.0
ds004024_root: data/ds004024/1.0.0
ds000113_root: data/ds000113
bold_roots: {}
enable_perturbation: true
window: 64
context: 24
fs_hz: 125.0
batch: 8
num_workers: 4
pin_memory: false
val_fraction: 0.05
real_test_fraction: 0.25
split_policy: stable_hash_v2
seed: 20260807
train:
run_name: scwbd-004
out_dir: checkpoints/scwbd-004
report_dir: reports/training
seed: 20260809
device: cuda
anatomy_force_fallback: false
amp_dtype: bfloat16
cuda_reserve_gb: 80.0
max_wall_seconds: 165600
max_steps_per_stage: null
bold_lr_scale: 1.0
resume: true
stages:
- name: T1_measured_founding
steps: 4000
lr: 0.0006
weight_decay: 0.01
warmup: 200
grad_clip: 1.0
batch: null
log_every: 20
ckpt_every: 500
enabled: true
lambda_slice: 1.0
lambda_obs: 1.0
lambda_forecast: 1.0
lambda_perturb: 0.0
lambda_anat: 0.0
lambda_scale: 0.05
lambda_homeo: 0.02
lambda_cal: 0.1
lambda_posterior: 0.0
lambda_kl: 0.01
lambda_residual: 0.02
lambda_port: 0.02
extra:
curriculum:
scope: regional + interface, measured only
admits:
- 1
tier_permissions:
1:
- family_local.*
- family_residual.*
- coupling.*
- msg_readin.*
- assimilate.*
- context.*
- family_readout.*
- observation.*
- eeg.*
- eeg_montages.*
- bold.*
- behaviour.*
objective:
- likelihood
- forecast
- port
rationale: 'As 003, with one difference that is not a curriculum change: `bold.*`
now reaches a Balloon-Windkessel integrator that actually runs, so log_kappa,
log_gamma, log_tau, alpha and neural_gain receive gradient from this stage
instead of sitting bit-identical to their initialisation for the whole run.'
- name: T2_calibration
steps: 600
lr: 0.0003
weight_decay: 0.01
warmup: 60
grad_clip: 1.0
batch: null
log_every: 20
ckpt_every: 300
enabled: true
lambda_slice: 1.0
lambda_obs: 1.0
lambda_forecast: 1.0
lambda_perturb: 0.0
lambda_anat: 0.0
lambda_scale: 0.05
lambda_homeo: 0.02
lambda_cal: 0.3
lambda_posterior: 0.0
lambda_kl: 0.01
lambda_residual: 0.02
lambda_port: 0.02
extra:
curriculum:
scope: instrument nuisance
admits:
- 1
- 2
tier_permissions:
1:
- family_local.*
- family_residual.*
- coupling.*
- msg_readin.*
- assimilate.*
- context.*
- family_readout.*
- observation.*
- eeg.*
- eeg_montages.*
- bold.*
- behaviour.*
2:
- eeg.log_gain
- eeg.offset
- eeg.log_noise
- eeg.nuisance*
- eeg_montages.*.log_gain
- eeg_montages.*.offset
- eeg_montages.*.log_noise
- eeg_montages.*.nuisance*
objective:
- likelihood
- calibration
rationale: 'Per-channel gain, offset and noise floor across four montages.
Admitted late and narrowly: a calibration source has tiny measurement variance
and would win a pure inverse-variance contest.'
- name: T3_population_prior
steps: 800
lr: 0.0003
weight_decay: 0.01
warmup: 80
grad_clip: 1.0
batch: null
log_every: 20
ckpt_every: 400
enabled: true
lambda_slice: 1.0
lambda_obs: 1.0
lambda_forecast: 1.0
lambda_perturb: 0.0
lambda_anat: 0.05
lambda_scale: 0.05
lambda_homeo: 0.02
lambda_cal: 0.1
lambda_posterior: 0.0
lambda_kl: 0.01
lambda_residual: 0.02
lambda_port: 0.02
extra:
curriculum:
scope: anatomical prior
admits:
- 1
- 2
- 3
tier_permissions:
1:
- family_local.*
- family_residual.*
- coupling.*
- msg_readin.*
- assimilate.*
- context.*
- family_readout.*
- observation.*
- eeg.*
- eeg_montages.*
- bold.*
- behaviour.*
2:
- eeg.log_gain
- eeg.offset
- eeg.log_noise
- eeg.nuisance*
- eeg_montages.*.log_gain
- eeg_montages.*.offset
- eeg_montages.*.log_noise
- eeg_montages.*.nuisance*
3:
- coupling.gain_*
- coupling.global_scale
objective:
- likelihood
- forecast
- anatomy
rationale: The 9-family partition and the connectome scale enter after the
measured sources have fixed the representation they modulate.
- name: T4_simulator
steps: 5000
lr: 0.0002
weight_decay: 0.01
warmup: 250
grad_clip: 1.0
batch: null
log_every: 20
ckpt_every: 500
enabled: true
lambda_slice: 1.0
lambda_obs: 1.0
lambda_forecast: 1.0
lambda_perturb: 0.0
lambda_anat: 0.05
lambda_scale: 0.05
lambda_homeo: 0.02
lambda_cal: 0.1
lambda_posterior: 1.0
lambda_kl: 0.01
lambda_residual: 0.02
lambda_port: 0.02
extra:
curriculum:
scope: simulator-conditioned inference
admits:
- 1
- 2
- 3
- 4
tier_permissions:
1:
- family_local.*
- family_residual.*
- coupling.*
- msg_readin.*
- assimilate.*
- context.*
- family_readout.*
- observation.*
- eeg.*
- eeg_montages.*
- bold.*
- behaviour.*
2:
- eeg.log_gain
- eeg.offset
- eeg.log_noise
- eeg.nuisance*
- eeg_montages.*.log_gain
- eeg_montages.*.offset
- eeg_montages.*.log_noise
- eeg_montages.*.nuisance*
3:
- coupling.gain_*
- coupling.global_scale
4:
- family_local.*
- family_residual.*
- coupling.*
- msg_readin.*
- assimilate.*
- context.*
- family_readout.*
- posterior.*
objective:
- likelihood
- forecast
- slice
- posterior
rationale: 'The amortised posterior is founded here and only here; no measured
recording carries a theta label. Tier 4 does NOT reach `eeg.*`, `eeg_montages.*`,
`bold.*` or `behaviour.*`: a simulator may not calibrate an instrument.'
- name: T5_measured_return
steps: 3000
lr: 0.00012
weight_decay: 0.01
warmup: 150
grad_clip: 1.0
batch: null
log_every: 20
ckpt_every: 500
enabled: true
lambda_slice: 1.0
lambda_obs: 1.0
lambda_forecast: 1.0
lambda_perturb: 1.0
lambda_anat: 0.02
lambda_scale: 0.05
lambda_homeo: 0.02
lambda_cal: 0.1
lambda_posterior: 0.2
lambda_kl: 0.01
lambda_residual: 0.02
lambda_port: 0.02
extra:
curriculum:
scope: return to measured
admits:
- 1
- 2
tier_permissions:
1:
- family_local.*
- family_residual.*
- coupling.*
- msg_readin.*
- assimilate.*
- context.*
- family_readout.*
- observation.*
- eeg.*
- eeg_montages.*
- bold.*
- behaviour.*
- tms_drive.*
2:
- eeg.log_gain
- eeg.offset
- eeg.log_noise
- eeg.nuisance*
- eeg_montages.*.log_gain
- eeg_montages.*.offset
- eeg_montages.*.log_noise
- eeg_montages.*.nuisance*
objective:
- likelihood
- forecast
- perturbation
rationale: The 1 -> 4 -> 1 return, so the final population weights are conditioned
on evidence rather than on the generator. `tms_drive.*` is granted here
and nowhere else.
- name: T6_individual
steps: 1200
lr: 0.0006
weight_decay: 0.01
warmup: 60
grad_clip: 1.0
batch: null
log_every: 20
ckpt_every: 300
enabled: true
lambda_slice: 1.0
lambda_obs: 1.0
lambda_forecast: 1.0
lambda_perturb: 0.0
lambda_anat: 0.0
lambda_scale: 0.05
lambda_homeo: 0.02
lambda_cal: 0.1
lambda_posterior: 0.0
lambda_kl: 0.01
lambda_residual: 0.02
lambda_port: 0.02
extra:
curriculum:
scope: person and session effects, population weights frozen
admits:
- 1
individualize: true
tier_permissions:
1:
- individualizer.*
- eeg.log_gain
- eeg.offset
- eeg.log_noise
- eeg.nuisance*
- eeg_montages.*.log_gain
- eeg_montages.*.offset
- eeg_montages.*.log_noise
- eeg_montages.*.nuisance*
objective:
- likelihood
- forecast
rationale: '75 of sleep-edfx''s 78 participants were recorded on two consecutive
nights, and it is the only corpus here with a second session of the same
person. The effect is fitted on the training nights and scored on the held-out
one by `session_individualisation`, per participant with a cluster bootstrap
over participants. A learning rate at the T1 level rather than a decayed
one, because these tensors start at zero and have 1,200 steps to leave it
-- the population weights they modulate are frozen, so there is nothing
for a large step to destabilise. The falsifier is stated in the evaluation
and not softened here: if the between-participant spread of the applied
theta shift is at or near zero on a split built to let it be non-zero, the
third capability is unsupported and the site says so.'
arm:
role: treatment
controls_for: ''
justification: 'Heterogeneous region-indexed state with per-family operators (`family_state:
true`), as 003. 004 changes the BOLD likelihood and adds a fitted person effect;
neither touches the arm.'
mixture_cards: configs/curriculum/source_cards
notes: 'SC-WBD-004. Two structural changes on 003: the measured fMRI likelihood integrates
the Balloon-Windkessel ODE across the interval a BOLD frame covers rather than indexing
8 neural steps against 8 TRs, and a person/session effect is fitted in a sixth stage
on sleep-edfx''s two-night structure. The BOLD horizon is REDUCED to `bold_predict_frames`
of 8 target frames to pay for the first; that reduction belongs on the model card
next to any fMRI number.'