prose refresh: TL;DR, 9-family tables, marginal-returns conclusions, v2 findings
Browse files- make_report.py +67 -28
make_report.py
CHANGED
|
@@ -578,16 +578,22 @@ def report(evals, rows):
|
|
| 578 |
"",
|
| 579 |
"## TL;DR",
|
| 580 |
"",
|
| 581 |
-
"We train
|
| 582 |
"fixed-4-long: 2) on a synthetic multi-hop task: given a random",
|
| 583 |
"mapping f, a start state x and a hop count k, output f^k(x).",
|
| 584 |
"Training only ever uses k ≤ 8; evaluation uses k up to 64 with",
|
| 585 |
-
"freshly generated mappings. **
|
| 586 |
-
"weight-tied block applied R times) learns the trained task far",
|
| 587 |
"better than a fixed-depth transformer at matched parameters and",
|
| 588 |
-
"even at matched *total* training compute
|
| 589 |
-
"
|
| 590 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 591 |
"",
|
| 592 |
"## 1. The task",
|
| 593 |
"",
|
|
@@ -635,7 +641,7 @@ def report(evals, rows):
|
|
| 635 |
"",
|
| 636 |
"",
|
| 637 |
"",
|
| 638 |
-
"### The
|
| 639 |
"",
|
| 640 |
"| family | blocks x unrolls | params | per-step block-applications | total training FLOPs | seeds |",
|
| 641 |
"|---|---|---|---|---|---|",
|
|
@@ -645,6 +651,9 @@ def report(evals, rows):
|
|
| 645 |
"| rec-1x-dynamic | 1 x R~U{2..8} | 234,880 | ~5 avg | 2.73e15 | 3 |",
|
| 646 |
"| rec-4x4 | 4 x 4 | 829,696 | 16 | 8.68e15 | 3 |",
|
| 647 |
"| fixed-4-long | 4 x 1, 100k steps | 829,696 | 4 | 8.74e15 | 2 |",
|
|
|
|
|
|
|
|
|
|
| 648 |
"",
|
| 649 |
"Three comparison axes follow from this table:",
|
| 650 |
"",
|
|
@@ -662,6 +671,13 @@ def report(evals, rows):
|
|
| 662 |
"",
|
| 663 |
"",
|
| 664 |
"",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 665 |
"## 3. What is evaluated",
|
| 666 |
"",
|
| 667 |
"Every evaluation cell uses freshly generated mappings (nothing",
|
|
@@ -900,23 +916,41 @@ def report(evals, rows):
|
|
| 900 |
" better than fixed-4 (0.761 vs 0.487) with 4x fewer parameters",
|
| 901 |
" and identical training FLOPs - but seed variance is large",
|
| 902 |
" (0.59-0.95), so this needs more seeds to be a firm claim.",
|
| 903 |
-
"3. **
|
| 904 |
-
"
|
| 905 |
-
"
|
| 906 |
-
"
|
| 907 |
-
"
|
| 908 |
-
"
|
| 909 |
-
"
|
| 910 |
-
" small to realise the achievable gains.",
|
| 911 |
"4. **Inference-time unrolls are tuned to the trained R, not to the",
|
| 912 |
-
" task's hop count
|
| 913 |
-
"
|
| 914 |
-
" R
|
| 915 |
-
"
|
| 916 |
-
"
|
| 917 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 918 |
" at this scale** *(observation)*: rec-4x4's k=64 accuracy across",
|
| 919 |
-
" seeds is 0.18 / 0.18 / 0.39.",
|
|
|
|
| 920 |
"",
|
| 921 |
"### How could the OOD deficit be fixed? (discussion)",
|
| 922 |
"",
|
|
@@ -924,9 +958,13 @@ def report(evals, rows):
|
|
| 924 |
"about the levers - which this study tests and which it does not:",
|
| 925 |
"",
|
| 926 |
"1. **Aligned / per-iteration supervision** - make the training",
|
| 927 |
-
" computation match the task's serial structure
|
| 928 |
-
"
|
| 929 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 930 |
"2. **Adaptive halting** (ACT, Universal Transformer) - let the",
|
| 931 |
" model decide how many unrolls to run per input, so R stops",
|
| 932 |
" being a fixed hyperparameter. Untested here.",
|
|
@@ -934,9 +972,10 @@ def report(evals, rows):
|
|
| 934 |
" theory says serial *tokens* substitute for serial depth (Li et",
|
| 935 |
" al. 2402.12875) and can grow with k at inference. Untested.",
|
| 936 |
"4. **Curriculum and data coverage** - the frontier in 4.3b tracks",
|
| 937 |
-
" the training-data limit (k<=8) almost exactly
|
| 938 |
-
"
|
| 939 |
-
"
|
|
|
|
| 940 |
"5. **Scale** - the frontier also scales with serial depth (4.3b),",
|
| 941 |
" so more parameters *and* more unrolls should extend it. Only",
|
| 942 |
" partially tested (fixed-4-long).",
|
|
|
|
| 578 |
"",
|
| 579 |
"## TL;DR",
|
| 580 |
"",
|
| 581 |
+
"We train nine families of tiny transformers (3 seeds each, except",
|
| 582 |
"fixed-4-long: 2) on a synthetic multi-hop task: given a random",
|
| 583 |
"mapping f, a start state x and a hop count k, output f^k(x).",
|
| 584 |
"Training only ever uses k ≤ 8; evaluation uses k up to 64 with",
|
| 585 |
+
"freshly generated mappings. **Observations:** (1) recurrent depth",
|
| 586 |
+
"(a weight-tied block applied R times) learns the trained task far",
|
| 587 |
"better than a fixed-depth transformer at matched parameters and",
|
| 588 |
+
"even at matched *total* training compute; (2) end-of-chain aligned",
|
| 589 |
+
"supervision (R=k) fails on credit assignment, but adding a +4",
|
| 590 |
+
"unroll margin, an untied stem layer and dense per-iteration",
|
| 591 |
+
"supervision fully rescues it (0.106 -> 1.000 in-distribution,",
|
| 592 |
+
"sections 4.7-4.8); (3) **no model in this budget class generalises",
|
| 593 |
+
"well to untrained hop counts** (best mean acc ~0.27 at k=64 vs 1.0",
|
| 594 |
+
"in-distribution): the capability frontier tracks the training-data",
|
| 595 |
+
"limit in every family that learns, so the remaining bottleneck is",
|
| 596 |
+
"data coverage, not architecture.",
|
| 597 |
"",
|
| 598 |
"## 1. The task",
|
| 599 |
"",
|
|
|
|
| 641 |
"",
|
| 642 |
"",
|
| 643 |
"",
|
| 644 |
+
"### The nine families and what is matched",
|
| 645 |
"",
|
| 646 |
"| family | blocks x unrolls | params | per-step block-applications | total training FLOPs | seeds |",
|
| 647 |
"|---|---|---|---|---|---|",
|
|
|
|
| 651 |
"| rec-1x-dynamic | 1 x R~U{2..8} | 234,880 | ~5 avg | 2.73e15 | 3 |",
|
| 652 |
"| rec-4x4 | 4 x 4 | 829,696 | 16 | 8.68e15 | 3 |",
|
| 653 |
"| fixed-4-long | 4 x 1, 100k steps | 829,696 | 4 | 8.74e15 | 2 |",
|
| 654 |
+
"| rec-1x-aligned | 1 x k (R = k) | 240,256 | ~4.5 avg | 2.46e15 | 3 |",
|
| 655 |
+
"| rec-1x-m4 | 1 x (k+4) | 242,048 | ~8.5 avg | 4.62e15 | 3 |",
|
| 656 |
+
"| rec-1x-m4+dense | 1 x (k+4), stem, dense loss | 440,320 | ~9.5 avg | 4.62e15* | 3 |",
|
| 657 |
"",
|
| 658 |
"Three comparison axes follow from this table:",
|
| 659 |
"",
|
|
|
|
| 671 |
"",
|
| 672 |
"",
|
| 673 |
"",
|
| 674 |
+
"Rows 7-9 (sections 4.7-4.8) test a fourth axis - *supervision and",
|
| 675 |
+
"halting structure*: whether training the unroll count to match the",
|
| 676 |
+
"task (R = k or k+4), with and without per-step supervision,",
|
| 677 |
+
"changes what the recurrence learns. (*The m4+dense row's stored",
|
| 678 |
+
"FLOPs under-counts its stem by ~12%; flagged rather than silently",
|
| 679 |
+
"corrected.*)",
|
| 680 |
+
"",
|
| 681 |
"## 3. What is evaluated",
|
| 682 |
"",
|
| 683 |
"Every evaluation cell uses freshly generated mappings (nothing",
|
|
|
|
| 916 |
" better than fixed-4 (0.761 vs 0.487) with 4x fewer parameters",
|
| 917 |
" and identical training FLOPs - but seed variance is large",
|
| 918 |
" (0.59-0.95), so this needs more seeds to be a firm claim.",
|
| 919 |
+
"3. **Serial depth converts to hop capability with sharply",
|
| 920 |
+
" diminishing marginal returns at the data limit** *(observation)*:",
|
| 921 |
+
" the per-k frontier scales at roughly one hop per block-",
|
| 922 |
+
" application (4.3b) until it hits the training-data limit k<=8,",
|
| 923 |
+
" after which returns collapse to ~zero for every family",
|
| 924 |
+
" (k=9..16 accuracy 0.04-0.28 regardless of 4 vs 16 serial",
|
| 925 |
+
" applications).",
|
|
|
|
| 926 |
"4. **Inference-time unrolls are tuned to the trained R, not to the",
|
| 927 |
+
" task's hop count - unless the loss makes the alignment",
|
| 928 |
+
" explicit** *(observation)*: fixed-R models peak sharply at their",
|
| 929 |
+
" training-time R (rec-1x4 at k=4: 0.06 at R=3 -> 0.94 at R=4)",
|
| 930 |
+
" and more unrolls usually hurt (rec-4x4 at k=8: 1.00 at R=4 ->",
|
| 931 |
+
" 0.39 at R=16). Training with R=k alone does not remove this",
|
| 932 |
+
" coupling (4.7), but dense per-iteration supervision with a +4",
|
| 933 |
+
" margin does: the m4+dense model's fixed-R sweep shows a clean",
|
| 934 |
+
" staircase (+0.634) instead of a peak at one R (4.8).",
|
| 935 |
+
"5. **Dense per-iteration supervision - not margin, not",
|
| 936 |
+
" architecture - is what makes aligned training work**",
|
| 937 |
+
" *(observation)*: the ablation ladder R=k (0.106) -> +margin",
|
| 938 |
+
" (0.262) -> +margin+stem+dense (1.000) isolates per-step signal",
|
| 939 |
+
" as the decisive ingredient; margin alone leaves the model at",
|
| 940 |
+
" 0.26 because the cross-depth credit-assignment problem remains.",
|
| 941 |
+
"6. **Length generalisation to untrained hop counts is weak",
|
| 942 |
+
" everywhere** *(observation)*: best mean k=64 accuracy ~0.27",
|
| 943 |
+
" (rec-4x4), vs 1.0 in-distribution. Consistent with **theory**:",
|
| 944 |
+
" constant-depth transformers sit in TC^0/AC^0 and cannot compute",
|
| 945 |
+
" iterated composition f^k for unbounded k without growing depth",
|
| 946 |
+
" or serial steps (Merrill & Sabharwal 2305.15401; Li et al.",
|
| 947 |
+
" 2402.12875) - and our data-coverage result (conclusion 3) shows",
|
| 948 |
+
" the binding constraint at this scale is the training",
|
| 949 |
+
" distribution, not the architecture.",
|
| 950 |
+
"7. **Single-seed comparisons of OOD generalisation are unreliable",
|
| 951 |
" at this scale** *(observation)*: rec-4x4's k=64 accuracy across",
|
| 952 |
+
" seeds is 0.18 / 0.18 / 0.39; the dense variant's is 0.116 /",
|
| 953 |
+
" 0.038 / 0.070.",
|
| 954 |
"",
|
| 955 |
"### How could the OOD deficit be fixed? (discussion)",
|
| 956 |
"",
|
|
|
|
| 958 |
"about the levers - which this study tests and which it does not:",
|
| 959 |
"",
|
| 960 |
"1. **Aligned / per-iteration supervision** - make the training",
|
| 961 |
+
" computation match the task's serial structure. **Tested here",
|
| 962 |
+
" (4.7-4.8) with a clear decomposition**: exact alignment (R=k)",
|
| 963 |
+
" fails on credit assignment; a +4 margin helps a little; dense",
|
| 964 |
+
" per-iteration supervision toward f^{min(t,k)}(x) with an untied",
|
| 965 |
+
" stem fully rescues in-distribution learning. Supervising every",
|
| 966 |
+
" unroll toward f^t(x) without the hold-rule (Fan et al.",
|
| 967 |
+
" 2409.15647) remains untested.",
|
| 968 |
"2. **Adaptive halting** (ACT, Universal Transformer) - let the",
|
| 969 |
" model decide how many unrolls to run per input, so R stops",
|
| 970 |
" being a fixed hyperparameter. Untested here.",
|
|
|
|
| 972 |
" theory says serial *tokens* substitute for serial depth (Li et",
|
| 973 |
" al. 2402.12875) and can grow with k at inference. Untested.",
|
| 974 |
"4. **Curriculum and data coverage** - the frontier in 4.3b tracks",
|
| 975 |
+
" the training-data limit (k<=8) almost exactly - even for the",
|
| 976 |
+
" fully-fixed m4+dense model (4.8) - so this is now the most",
|
| 977 |
+
" promising lever: train on longer chains or a growing-k",
|
| 978 |
+
" curriculum. Untested here.",
|
| 979 |
"5. **Scale** - the frontier also scales with serial depth (4.3b),",
|
| 980 |
" so more parameters *and* more unrolls should extend it. Only",
|
| 981 |
" partially tested (fixed-4-long).",
|