Agreement rather than normalisation keeps depth reusable in looped language models
Organizations: lab260, Yerevan, Armenia · BitmanagerAI, Dubai, UAE · St. Petersburg Federal Research Center of the Russian Academy of Sciences, St. Petersburg, Russia
Abstract
Looped language models apply one block of layers repeatedly, and the design pays off only if depth is reusable: loop steps beyond the trained budget must remain usable at inference. We ask whether that rests on normalising the state between loop steps, as the released Ouro models do, or on agreement between the loop a model is trained with and the loop it is run with. On released weights this loop-boundary normalisation can be removed without adding parameters and with the readout path bit-identical, and the operation is an identity at one loop step, which serves as an implementation check. Removing it takes Ouro-1.4B and Ouro-2.6B to zero accuracy by the trained budget on a balanced binary task (chance 0.500). State-norm growth, the failure that prior accounts predict, is not the cause: the norm stays within a factor of 2.021 while the head commits to a single wrong token. Yet in 19M-parameter models trained from scratch on two synthetic tasks, 16 seeds per configuration, training without the normalisation is never worse than training with it and extrapolates better: the two are closest at the trained depth and separate on both sides of it (Cliff's delta up to 0.867 beyond the budget). Both results follow if agreement, and not the normalisation itself, is what keeps depth reusable. The damage sits in the readout together with the last layer of the block: in the models trained from scratch, refitting the head over the frozen modified loop recovers a third of the lost accuracy and plateaus, while refitting the last block layer with it recovers all of it. Finally, comparing looped with stacked depth at an equal inference loop count is confounded by unequal overshoot of the trained budget; at matched overshoot the advantage of looping vanishes on one task and shrinks on the other.
Figures & tables
Appendix figures & tables9 assets
Supplementary material from the paper’s appendix.
Appendix
| role | model | parameters | loop topology |
|---|---|---|---|
| released | Huginn-3.5B | 3.5B | no boundary norm measured |
| released | Ouro-1.4B | 1.4B | boundary norm, shared with readout |
| released | Ouro-2.6B | 2.6B | boundary norm, shared with readout |
| from scratch | LoopedLM, | 19–76M | either, dedicated, set before training |
| setting | value |
|---|---|
| width , heads, MLP multiplier | 512, 8, 4 |
| layers trained loop steps | (normalisation axis and loop arm); ; |
| boundary normalisation | RMSNorm between loop steps, skipped on the last; on or off |
| readout normalisation | RMSNorm before the unembedding, always on |
| context, tokens per batch, training tokens | 256, 65 536, |
| optimiser, peak learning rate, precision | AdamW, , bfloat16 |
| configuration | ||||
|---|---|---|---|---|
| (loop) | 0.999 | 0.994 | 0.971 | 0.907 |
| 0.998 | 0.985 | 0.958 | 0.918 | |
| (stack) | 0.995 | 0.992 | 0.959 | 0.828 |
| , loop vs | +0.22 | +0.39 | +0.11 | -0.11 |
| , loop vs | 0.589 | 0.310 | 0.818 | 0.818 |
| , loop vs (stack) | +0.50 | +0.25 | +0.25 | +0.33 |
| configuration | ||||
|---|---|---|---|---|
| (loop) | 1.000 | 0.998 | 0.998 | 0.957 |
| 1.000 | 1.000 | 0.948 | 0.733 | |
| (stack) | 1.000 | 0.997 | 0.925 | 0.737 |
| , loop vs | +0.00 | -0.17 | +0.58 | +0.53 |
| , loop vs | 1.000 | 0.699 | 0.132 | 0.180 |
| , loop vs (stack) | +0.00 | +0.03 | +0.56 | +0.78 |
| arm | task | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| O26-base | circuit | 0.530 | 0.584 | 0.627 | 0.642 | 0.620 | 0.598 | 0.588 | 0.590 | 0.591 | 0.583 |
| O26-base | hops | 0.074 | 0.107 | 0.164 | 0.166 | 0.154 | 0.142 | 0.147 | 0.138 | 0.122 | 0.106 |
| O26-fbraw | circuit | 0.530 | 0.500 | 0.058 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| O26-fbraw | hops | 0.074 | 0.071 | 0.049 | 0.082 | 0.038 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| O14-base | circuit | 0.471 | 0.591 | 0.600 | 0.619 | 0.561 | 0.550 | 0.537 | 0.530 | 0.527 | 0.524 |
| O14-base | hops | 0.074 | 0.070 | 0.121 | 0.154 | 0.140 | 0.152 | 0.149 | 0.149 | 0.128 | 0.117 |
| circuit | ||||||
|---|---|---|---|---|---|---|
| as trained | 0.578 | 0.742 | 0.998 | 0.864 | 0.621 | 0.601 |
| loop-boundary norm removed | 0.578 | 0.626 | 0.639 | 0.701 | 0.708 | 0.710 |
| + readout refit | 0.671 | 0.718 | 0.756 | 0.765 | 0.728 | 0.729 |
| recovered | — | 78% | 33% | 39% | — | — |
| vs removed | 0.031 | 0.062 | 0.031 | 0.031 | 0.625 | 0.625 |
| vs as trained | 0.031 | 0.312 | 0.031 | 0.094 | 0.562 | 0.562 |
| circuit, refit steps | 0 | 30 | 100 | 300 | 1000 | 3000 |
|---|---|---|---|---|---|---|
| unembedding, accuracy | 0.639 | 0.729 | 0.744 | 0.751 | 0.755 | 0.761 |
| unembedding, recovered | 0% | 25% | 29% | 32% | 33% | 34% |
| + final norm, accuracy | 0.639 | 0.726 | 0.742 | 0.756 | 0.756 | 0.765 |
| + final norm, recovered | 0% | 25% | 29% | 33% | 33% | 35% |
| + last loop block, accuracy | 0.639 | 0.791 | 0.869 | 0.940 | 0.982 | 0.996 |
| + last loop block, recovered | 0% | 43% | 65% | 85% | 96% | 100% |