The two-stage transfer experiment (pretrain/pretraining.py), its analysis
scripts and the pretraining figures of paper_plot.py.
# pretraining transfer: each run adds N_TRIALS (5) new seeds of PRETRAIN_RULESET
# (fdgo_delaygo) at the configured lambda (0.9); seeds with a completed run are
# never redrawn, so rerun it to grow the cohort, then refresh its analysis caches
python pretrain/pretraining.py
python pretrain/pretraining_analysis.py --feature L21e3lam0.9
python pretrain/pretraining_post.py --feature L21e3lam0.9
# pretraining: Relevant and Irrelevant motifs only
python figures/paper_plot.py pretraining --pretraining-groups motifs
# pretraining: motifs plus DelayAnti and DelayPro (default)
python figures/paper_plot.py pretraining --pretraining-groups all
# pretraining: the runs trained with lambda = 0.9 (m_time_scale 400 ms)
python figures/paper_plot.py pretraining --pretraining-lambda 0.9--pretraining-groups {motifs,all} controls the conditions shown in every
pretraining paper figure: backbone probe, transfer speed, learning trajectory,
rule vectors, principal angles, and both aggregate CVE figures. motifs selects
only Relevant/Irrelevant motifs; all also includes the DelayAnti/DelayPro
single-task controls and remains the default. The selection applies to both
combined and per-seed caches, including the CVE self-reference, and can be
combined with --pretraining-bound mod2, --no-legend, or --only, for example:
python figures/paper_plot.py --only learning_trajectory --pretraining-groups motifs.
Other experiment modes are unaffected. Output filenames are unchanged, so
running the other group selection replaces the same figure; --only preserves
unrelated figures, while mode runs clear the top-level paper_plot/ outputs (see docs/multitask_analysis.md).
The pretraining figures read one variant of the pretrain/pretraining.py
runs (dmpn, hidden 200, L2 1e-3, batch 128), chosen by two options that select
the matching files in pretraining_analysis/ by name and never mix variants:
--pretraining-bound {mod1,mod2} picks the M bound ([-1, 1], the default, or
[-2, 2], tagged mb2), and --pretraining-lambda {0.99,0.9} picks the M
retention per 40 ms step. 0.99 (default) is the historical cohort trained with
m_time_scale 4000 ms, whose file names carry no tag; 0.9 selects the runs
trained with 400 ms, tagged lam0.9 (for example
fdanti_delaygo_dmpn_seed3_+hidden200+L21e3lam0.9+batch128+angle_result.pkl).
The two options combine (L21e3mb2lam0.9). Every pretraining figure aggregates
all cached seeds of the selected variant, and the run banner prints the
selected lambda, m_time_scale and feature string. Output filenames do not
encode the variant, so rendering another selection replaces the same figures.
python figures/paper_plot.py --only learning_trajectory_linear exports
learning_trajectory_linear_n.png: the seeds and condition means of
learning_trajectory_n.png on a broken linear iteration axis. The left panel
shows the first 1000 iterations at full scale
(_LEARNING_TRAJECTORY_LINEAR_SPLIT), where the relevant motif saturates and
the irrelevant motif does most of its climbing; the right panel continues to
40000 (_LEARNING_TRAJECTORY_LINEAR_XMAX), by which the irrelevant motif's
mean has reached its plateau in both λ cohorts (about 16k iterations at 0.99,
28k at 0.9). One unbroken axis to the end of training (80k) squeezed
everything that happens into its first percent. Each panel resamples the seeds
on its own linear grid, so its sample points differ from the log figure's
log-spaced grid, and the saved message names the two ranges. Both figures are
included in pretraining mode and honor the group/bound options.
rule_vectors_n.png is drawn at the learning_trajectory size (the six-bar
all layout keeps that height and width per bar). Each bar keeps its two-line
"MemoryAnti ↔ partner" tick label, in a 5 pt font so that neighbouring labels
do not collide at that width.
For --pretraining-groups motifs, the four bars form two pairs (2 | 2) set
apart by a wider gap and a dark vertical divider; all keeps its evenly spaced
layout.
Both pretrain/pretraining_analysis.py and pretrain/pretraining_post.py write
analysis data to pretraining_analysis/, pooled figures to pretrain/fig/, and
per-seed figures to pretrain/fig_seed/. The latter includes per-checkpoint
PCA/sanity checks, single-checkpoint diagnostics, and seed-filtered accuracy plots.
Existing outputs with matching filenames are overwritten. Training inputs and
checkpoints remain in pretraining/; paper_plot.py reads the centralized
analysis data and continues to save publication figures in paper_plot/.