SanSi: A Looped Typed Decision Model for System 1.5 Thinking
Summary (Overview)
- Core contribution: SanSi introduces a looped typed decision model that applies the same transformer layers recursively before producing a typed readout, bridging the gap between fast single-pass (System 1) and generated reasoning (System 2) — termed "System 1.5 thinking."
- Key finding: Looping adds 13.5 accuracy points over a non-looped model of the same shape (72.0% vs. 58.4% on 10,027 test decisions), brings a 1.4B model within 1.8 points of a 4.2B single-pass model, and extends solvable reasoning depth beyond training.
- Anytime prediction: By reading option probabilities after every loop and training each with proper scoring rules, one model serves every budget from 1 to 8 loops; three loops deliver 88% of the gain.
- Mechanistic insights: Loops improve missing-evidence detection (AUROC 0.835→0.935), but calibration peaks at loop 3 as confidence keeps rising after answers settle; harder items settle later.
- Practical impact: As a reward for reinforcement learning without gold answers, SanSi raises a generator's F1 by 7.7 points when read at loop 8.
Introduction and Theoretical Foundation
Background
- Typed decision models answer a declared question without generating text: a decision head returns probabilities over declared options in a single forward pass.
- Single-pass models allocate fixed computation per decision, which fails for multi-step reasoning (e.g., liar chains where accuracy drops from 100% to chance level with increasing depth).
- The paper positions looping as a middle ground: applying the same layers recursively adds computation but no parameters while maintaining the typed contract.
Theoretical Basis
- Looped transformers learn iterative algorithms and generalize to longer inputs (Giannou et al., 2023; Yang et al., 2024), building on Universal Transformers (Dehghani et al., 2019).
- System 1.5 thinking (Wang et al., 2025): each loop revises the hidden state before committing to an answer, without generating tokens.
- The work builds on Ouro (Zhu et al., 2025), a language model pre-trained to loop, with the full stack trained for looping (unlike Jev-LCT which loops only top layers).
Key Definitions
- Typed decision: A call with state , question , and declared options; the model returns a distribution with no text.
- Target distribution: One-hot for items with a correct option; uniform for unanswerable items; annotators' label distribution for crowd-labeled items.
Methodology
Looped Backbone
Ouro-1.4B applies one stack of 24 transformer layers repeatedly:
where is the final normalization, is both output of loop and input of loop ; running loops costs passes with no added parameters.
Readout After Every Loop
The option logits are computed from the last prompt token's hidden state :
where holds frozen language-model head rows, is a rank-16 trained correction, and is a trained scale — one per loop.
Training Objective
Every loop is trained with a sum of two proper scoring rules:
- Cross-entropy penalizes confident errors; Brier score is bounded and considers all options.
- The backbone is frozen; only LoRA adapters (rank 64, 60.6M params) and readouts (0.27M) are trained.
- Training uses loops (twice Ouro's pre-training) for 1,000 steps of 16 items.
Evaluation Suite
A diverse suite of 10,027 test decisions from 59 sources across six item types:
| Item type | Train | Test In-dist. | Near | Far |
|---|---|---|---|---|
| A Classification | 2,400 | 321 | - | 768 |
| B Multi-step reasoning | 5,500 | 800 | 991 | 1,281 |
| C Uncertain evidence | 2,300 | 478 | 640 | 440 |
| D Long documents | 1,000 | 357 | - | 544 |
| E Sentence pairs | 1,600 | 160 | 240 | 968 |
| F Knowledge | - | - | - | 1,808 |
| Total | 12,800 | 2,116 | 1,871 | 5,809 |
Empirical Validation / Results
RQ1: Does Looping Help?
Main results (mean ± std over 3 seeds):
| Model | Params | Loops | Cost | All Acc (%) | In-dist. | Near | Far | ECE ↓ | Evidence AUROC ↑ |
|---|---|---|---|---|---|---|---|---|---|
| SmolLM2-1.7B | 1.7B | 1 | 1.1 | 58.4±0.7 | 76.1±0.8 | 57.7±0.6 | 52.3±0.7 | .069±.020 | .765±.009 |
| Ouro-1.4B, one loop | 1.4B | 1 | 1.0 | 58.6±0.2 | 77.3±1.0 | 59.9±0.9 | 51.3±0.4 | .137±.009 | .837±.007 |
| Qwen3.5-2B | 1.9B | 1 | 1.2 | 66.7±0.7 | 84.3±1.4 | 62.3±2.5 | 61.7±0.4 | .123±.007 | .896±.002 |
| Qwen3.5-4B | 4.2B | 1 | 2.4 | 73.8±0.6 | 88.5±0.4 | 68.9±2.4 | 70.1±0.3 | .113±.003 | .948±.003 |
| Kev-4B (our data) | 4.2B | 1 | 2.1 | 74.3±0.3 | 88.6±0.2 | 70.9±0.7 | 70.3±0.6 | .119±.004 | .947±.002 |
| SanSi, loop 3 | 1.4B | 3 | 2.9 | 70.4±0.6 | 85.6±0.6 | 67.0±1.6 | 65.9±0.9 | .082±.010 | .921±.006 |
| SanSi | 1.4B | 8 | 7.7 | 72.0±0.7 | 86.6±0.6 | 67.7±2.7 | 68.0±0.1 | .093±.012 | .935±.004 |
| SanSi-2.6B | 2.7B | 8 | 14.8 | 75.8±0.6 | 88.4±0.8 | 74.4±2.5 | 71.6±0.3 | .078±.000 | .943±.000 |
Key observations:
- Looping adds 13.5 points over same-shape non-looped model (58.4→72.0%).
- The gain is largest on knowledge questions (+17.6), long documents (+16.7), and multi-step reasoning (+15.1); smallest on classification (+3.1).
- SanSi-2.6B surpasses Qwen3.5-4B by 2.0 points with only 63% of its parameters.
RQ2: How Do Answers Change Across Loops?
- Loop 2 adds 8.5 points, loop 3 adds 3.5, loop 4 adds 1.2; loops 5–8 add only 0.4.
- 90.2% of answers are final by loop 4; after loop 5, fixes and breaks balance.
- Harder items settle later: items solved by all three single-pass models settle after 1.4 loops; those solved by none settle at 2.8.
- Late-settling answers are unreliable: 82.2% of never-changing answers are right vs. only 35.6% of those settling at loop 8.
RQ3: What Do Loops Do to Probabilities?
- Confidence rises on right (0.769→0.869) and wrong (0.567→0.660) answers alike; error-detection AUROC improves only slightly (0.760→0.795).
- Calibration peaks at loop 3 (ECE 0.082), then degrades to 0.093 at loop 8.
- Missing-evidence detection improves dramatically: hard answers on unanswerable items drop from 27.1% to 17.5%; evidence AUROC rises from 0.835 to 0.935.
RQ4: Does Looping Buy Reasoning Depth?
On depth-controlled tasks (liar chains, object swaps):
- SanSi extends solvable depth beyond training: on unseen depths (9–16, training up to 8), SanSi reaches 72.6% vs. 50.0% (chance) for Qwen3.5-4B.
- Parameters do not replace loops: Qwen3.5-4B holds depth 3 on both tasks; SanSi at loop 8 leads by 22.6–29.5 points on unseen depths.
Ablations
- Training objective: Per-loop loss is crucial — last-loop-only training collapses early loops (35.6% at loop 1) and loses 1.1 points at loop 8.
- Brier term: Dropping it raises ECE from 0.093 to 0.104 and hard answers on unanswerable items from 17.5% to 20.0%.
- Backbone: Adding loops to non-looped SmolLM2 brings no gain (58.3% vs. 58.4%); the gain rests on looped pre-training.
- Running beyond trained loops hurts: SanSi falls from 72.0% at loop 8 to 70.1% at loop 16.
- Averaging loops is a free fix: keeps accuracy (71.8%) and halves ECE (0.044 vs. 0.093).
Theoretical and Practical Implications
Theoretical Implications
- Loops as computation: Looping trades computation for parameters, providing a third axis (beyond model size and generated reasoning) for improving decision accuracy.
- Depth generalization: Loops enable solving problems deeper than training demonstrates, suggesting iterative refinement mechanisms akin to algorithmic reasoning.
- Calibration dynamics: The divergence between accuracy (improving) and calibration (peaking at loop 3) reveals a fundamental tension in iterative inference.
Practical Implications
- Anytime prediction: One model serves multiple compute budgets — critical for deployment scenarios with varying latency requirements.
- Verifier applications: SanSi as a reward model improves generator F1 by 7.7 points (39.5→47.3) without gold answers, but only when read at sufficient depth (loops 4–8); loop 1 actively damages training (F1 drops to 29.1).
- Cost considerations: Eight loops cost 7.7× single-pass GPU time; three loops cost 2.9× and deliver 88% of the gain.
Conclusion
Main Takeaways
- Looping transforms a 1.4B model into a competitive alternative to 4.2B single-pass models, with the trade-off being computation rather than parameters.
- The anytime nature (reading at any loop) makes the model adaptable to varying computational budgets.
- Loop dynamics reveal that harder items settle later, and late-settling answers are unreliable — suggesting future work on loop-selection rules.
- The benefits depend critically on looped pre-training; the recipe alone cannot create the loops.
Future Directions
- Adaptive halting: A rule to choose the loop per item (11.7% of items are right at some loop but wrong at loop 8).
- Scaling: Testing on larger and more diverse looped backbones as they become available.
- Broader verifier evaluation: Extending the reward-model case study to more datasets and generators.
Limitations
- Findings rely on one backbone family (Ouro 1.4B/2.6B); generalization to other looped backbones is untested.
- Depth analysis uses only two program-generated tasks.
- The suite is English-only and assembled from existing datasets; potential pre-training contamination cannot be excluded.
Related papers
- ProgramGym: Scaling Training Environments for Long-Horizon Program Reproduction Agents
ProgramGym builds 1,648 verifiable program-reproduction environments and a role-isolated agent workflow, boosting a 27B model from 34.87% to 56.25% tests passed, exceeding flagship models.
- Scaling Laws for Looped Mixture of Experts
Loop scaling laws unify recurrence and sparsity in MoE models, showing sparsity yields ~3x active-parameter efficiency and recurrence ~2x total-parameter efficiency on reasoning tasks.
- Retrofitting Recurrent Depth into a Pretrained Language Model: Installation, Extrapolation, Transfer, and Retention at Two Parameter Budgets
A pretrained instruction-tuned model can be surgically converted into a recurrent-depth architecture that learns a persistent iterative procedure, outperforming dense baselines on depth-rewarding reasoning tasks.