Qwen Python-Shaped Silent Executor
The one idea you need
The model runs a short arithmetic program using a fixed set of blank, silent hidden steps, then reports only the final answer with no work shown. The check: shuffle those steps. If scrambling their order changes nothing, no real step-by-step computing ever happened inside them.
The question
Can a small model learn to run little multi-step programs entirely in its head, using private silent thinking steps, instead of writing out its work as text?
What we found
No. The silent hidden steps never cleared single digits: about 8% at best on the simplest programs, 4.5% on unseen longer ones, barely above a zero untrained model and near the 3% you would get by guessing. The tell: scrambling the steps' order worked just as well, so no real step-by-step computing happened. Even visible written reasoning, which hit 62.5% on the shortest programs, crashed to 0% as they grew longer.
Why it matters
Do not expect extra hidden thinking tokens to buy a small model real multi-step execution. Always run a scrambled-order control: if shuffling the hidden steps does not hurt accuracy, you added raw capacity, not reasoning. Test on unseen program lengths, not trained ones.
On this page
Results at a glance 7
How to read
Bars group by program length (4, 8, 16, 24 steps). Height is final-answer accuracy; taller is better. Three bars per group: explicit written-out reasoning, silent ordered hidden steps, and silent shuffled-order hidden steps.
Takeaway → Written reasoning towers at 62.5% on the shortest programs then falls to zero by length 16, while both silent arms stay stuck in single digits everywhere, nearly identical.
Data table
| program length | thinking CoT (frozen) | silent ordered (K=8) | silent shuffled (K=8) |
|---|---|---|---|
| length 4 | 62.5% | 8% | 5.9% |
| length 8 | 25% | 6.6% | 5.9% |
| length 16 | 0% | 3.8% | 4.5% |
| length 24 | 0% | 3.5% | 3.5% |
Numbers from report table (Frozen Probe And CoT Baseline + K Scaling), reports/qwen_python_shaped_silent_executor_report.md
Technical framing
Final accuracy by program length: explicit CoT vs silent latent compute (K=8) — Silent latent compute never leaves the single-digit floor at any length, while explicit CoT works at length 4 then collapses by length 16.
How to read
On unseen 32-step programs. The horizontal axis is the number of private hidden compute steps granted (4 to 32); the vertical axis is final-answer accuracy, higher is better. One line ordered, one scrambled-order.
Takeaway → Both lines wander between about 2% and 5% with no upward trend as steps increase; the scrambled control even peaks highest at 4.9%, so ordered steps buy nothing.
Data table
| private latent compute positions (K) | silent ordered | silent shuffled |
|---|---|---|
| 4 | 3.1% | 3.5% |
| 8 | 4.5% | 2.4% |
| 16 | 4.5% | 4.9% |
| 24 | 4.5% | 4.9% |
| 32 | 4.5% | 4.5% |
Numbers from report table (K Scaling, eval_len32), reports/qwen_python_shaped_silent_executor_report.md
Technical framing
K-scaling on held-out length-32 programs: ordered vs shuffled latent positions — The shuffled-order control tracks ordered compute within noise (peaking higher at 4.9%), so extra latent positions add capacity, not sequential execution.
How to read
On programs combining operations never mixed during training. The horizontal axis is the number of private hidden compute steps (4 to 32); the vertical axis is final-answer accuracy, higher is better. Ordered versus scrambled-order steps.
Takeaway → Both lines hover near 3% at every step count, dipping as low as 1%; piling on hidden compute never recovers execution when the operation mix is new.
Data table
| private latent compute positions (K) | silent ordered | silent shuffled |
|---|---|---|
| 4 | 1% | 2.8% |
| 8 | 3.1% | 2.8% |
| 16 | 3.1% | 3.1% |
| 24 | 3.1% | 3.5% |
| 32 | 3.1% | 3.1% |
Numbers from report table (K Scaling, eval_comp24), reports/qwen_python_shaped_silent_executor_report.md
Technical framing
Held-out operation composition (length 24): more latent compute does not help — On unseen operation compositions both arms flatline near 3% at every K, so added latent compute does not recover execution.
How to read
Bars group by unseen split (length 32, composition 16, composition 24). Height is final-answer accuracy, higher is better. Three bars per group, one for each of three training seeds.
Takeaway → Just by changing the random seed, accuracy swings from about 1% to over 8% across these splits, and more than quadruples on a single split, a lottery as large as any effect the method produces.
Data table
| Held-out evaluation split | Seed 101 | Seed 202 | Seed 303 |
|---|---|---|---|
| Length 32 | 6.2% | 4.2% | 3.1% |
| Composition 16 | 3.1% | 8.3% | 2.1% |
| Composition 24 | 4.2% | 4.2% | 1% |
Numbers from experiments/qwen_python_shaped_silent_executor/reports/metrics.csv
Technical framing
Seed-to-seed spread on held-out splits (silent ordered, K=8) — Training-seed variance (1-8%) is as large as any latent-compute effect, so no single seed's gain is meaningful.
How to read
Bars group by five unseen splits. Height is final-answer accuracy, higher is better. Three bars per group: the untrained frozen model, the trained ordered arm, and the trained scrambled arm.
Takeaway → The untrained baseline sits at exactly zero; both trained arms add only 3 to 5 points and match each other everywhere, so training bought almost nothing.
Data table
| Held-out evaluation split | Frozen direct likelihood | Silent ordered (trained) | Silent shuffled (trained) |
|---|---|---|---|
| Length 16 | 0% | 3.8% | 3.8% |
| Length 24 | 0% | 3.5% | 3.5% |
| Length 32 | 0% | 4.5% | 4.5% |
| Composition 16 | 0% | 4.5% | 4.9% |
| Composition 24 | 0% | 3.1% | 3.1% |
Numbers from experiments/qwen_python_shaped_silent_executor/reports/summary_by_arm.csv
Technical framing
Trained silent arms barely clear a zero frozen baseline on held-out splits — Silent training adds only 3-5 points over a 0% frozen baseline, and shuffled latent positions match ordered ones everywhere.
How to read
Bars group by program length (4, 8, 16, 24). Height is mean output tokens per problem; fewer is cheaper. Two bars: explicit written-out reasoning versus silent hidden-step execution.
Takeaway → Written reasoning emits roughly 750 tokens per answer against 1 for silent, yet still hits 0% on the longer programs, so the cost bought no durable accuracy.
Data table
| Program length | Explicit CoT (frozen) | Silent latent (trained) |
|---|---|---|
| Length 4 | 746 | 1 |
| Length 8 | 768 | 1 |
| Length 16 | 768 | 1 |
| Length 24 | 768 | 1 |
Numbers from experiments/qwen_python_shaped_silent_executor/runs/main_python_shaped_silent_executor_v1/frozen_probe_metrics.csv
Technical framing
Token cost per answer: explicit CoT vs silent latent compute — CoT emits ~750x more tokens per answer yet still drops to 0% accuracy on lengths 16 and 24.
How to read
The horizontal axis is training step (1 to 500); the vertical axis is total training loss, lower is better. Three lines, one per training seed. A learning model would trend steadily downward.
Takeaway → All three curves stay high and jagged between 6 and 8 with no downward trend, showing the silent-execution objective was never actually learned.
Data table
| Training step | Seed 101 | Seed 202 | Seed 303 |
|---|---|---|---|
| 1 | 6.88 | 7.07 | 7.22 |
| 100 | 6.08 | 7.75 | 6.27 |
| 200 | 6.94 | 6.22 | 5.84 |
| 300 | 6.66 | 6.97 | 8.11 |
| 400 | 6.59 | 6.67 | 6.89 |
| 500 | 6.49 | 6.29 | 7.27 |
Numbers from experiments/qwen_python_shaped_silent_executor/reports/training_log.csv
Technical framing
Training loss never converges over 500 steps (all three seeds) — Loss stays high and noisy through 500 steps for every seed, so the silent-executor objective was never actually learned.
In the author’s words from the Report · “Summary”
This standalone experiment tests whether a Qwen 4B model can execute Python-shaped mini-programs with private latent compute positions instead of emitting an explicit execution trace. Best silent ordered length-32 accuracy was 6.2% at K=8. The result is a controlled negative for the tested silent-execution recipe: ordered latent compute reaches 8.0% on trained-length-4 programs and 4.5% on held-out length-32 programs, with held-out-composition length-24 at 3.1%. The shuffled-compute control matches or exceeds the ordered arm, so the K curve does not support private sequential execution. Thinking CoT reached 62.5% on length 4 with 746.5 emitted tokens, but fell to 0.0% on length 24 with 768.0 emitted tokens. … Read the full result →
Overview
Standalone experiment for testing whether a Qwen 4B model can learn to execute Python-shaped mini-programs using private latent compute positions instead of emitting an explicit chain-of-thought trace.
Small artifacts live here:
experiments/qwen_python_shaped_silent_executor/
src/ experiment and reporting code
runs/ per-run configs, metrics, logs
reports/ standalone Markdown/HTML report and figuresLarge artifacts are stored separately:
large_artifacts/qwen_python_shaped_silent_executor/
checkpoints/ QLoRA adapters and heads
caches/ optional cached tensorsPrimary report:
reports/qwen_python_shaped_silent_executor_report.md
reports/qwen_python_shaped_silent_executor_report.htmlReport
Rendered from reports/qwen_python_shaped_silent_executor_report.md
Summary
This standalone experiment tests whether a Qwen 4B model can execute Python-shaped mini-programs with private latent compute positions instead of emitting an explicit execution trace.
Best silent ordered length-32 accuracy was 6.2% at K=8.
The result is a controlled negative for the tested silent-execution recipe: ordered latent compute reaches 8.0% on trained-length-4 programs and 4.5% on held-out length-32 programs, with held-out-composition length-24 at 3.1%. The shuffled-compute control matches or exceeds the ordered arm, so the K curve does not support private sequential execution.
Thinking CoT reached 62.5% on length 4 with 746.5 emitted tokens, but fell to 0.0% on length 24 with 768.0 emitted tokens.
On length 32, ordered silent compute peaked at 4.5% (K=8, state accuracy 5.5%), while shuffled compute peaked at 4.9% (K=16).
The primary decision criterion is held-out length and held-out operation composition. Accuracy at trained lengths is not sufficient evidence of execution; the silent arm must generalize beyond the lengths and operation compositions used during posttraining. The shuffled-compute arm uses the same number of private latent positions but randomizes their order, separating ordered latent computation from extra capacity.
Setup
- Base model:
Qwen/Qwen3-4B. - Train lengths:
4,8,16. - Held-out lengths:
24,32. - Value range: integers
0..31. - Private compute positions:
4,8,16,24,32. - Training seeds:
101,202,303. - Large artifacts:
/workspace/large_artifacts/qwen_python_shaped_silent_executor.
Frozen Probe And CoT Baseline
The frozen probe scores final answers directly with numeric continuation likelihood. The CoT baseline generates explicit intermediate states and is scored on both final answer and state accuracy.
| arm | split | k | n | final_accuracy | state_accuracy | mean_output_tokens |
|---|---|---|---|---|---|---|
| frozen_direct_likelihood | eval_len4 | 0 | 16 | 0.0% | n/a | 1 |
| frozen_direct_likelihood | eval_len8 | 0 | 16 | 0.0% | n/a | 1 |
| frozen_direct_likelihood | eval_len16 | 0 | 16 | 0.0% | n/a | 1 |
| frozen_direct_likelihood | eval_len24 | 0 | 16 | 0.0% | n/a | 1 |
| frozen_direct_likelihood | eval_len32 | 0 | 16 | 0.0% | n/a | 1 |
| frozen_direct_likelihood | eval_comp16 | 0 | 16 | 0.0% | n/a | 1 |
| frozen_direct_likelihood | eval_comp24 | 0 | 16 | 0.0% | n/a | 1 |
| frozen_cot_generate | eval_len4 | -1 | 8 | 62.5% | 50.0% | 746.5 |
| frozen_cot_generate | eval_len8 | -1 | 8 | 25.0% | 0.0% | 768 |
| frozen_cot_generate | eval_len16 | -1 | 8 | 0.0% | 2.3% | 768 |
| frozen_cot_generate | eval_len24 | -1 | 8 | 0.0% | 0.0% | 768 |
K Scaling
| arm | split | k | final_accuracy | state_accuracy | n |
|---|---|---|---|---|---|
| silent_ordered | eval_comp16 | 4 | 2.1% | 6.2% | 96 |
| silent_ordered | eval_comp16 | 8 | 4.5% | 5.8% | 96 |
| silent_ordered | eval_comp16 | 16 | 4.5% | 4.8% | 96 |
| silent_ordered | eval_comp16 | 24 | 4.5% | 4.8% | 96 |
| silent_ordered | eval_comp16 | 32 | 4.5% | 4.8% | 96 |
| silent_ordered | eval_comp24 | 4 | 1.0% | 5.3% | 96 |
| silent_ordered | eval_comp24 | 8 | 3.1% | 5.4% | 96 |
| silent_ordered | eval_comp24 | 16 | 3.1% | 5.5% | 96 |
| silent_ordered | eval_comp24 | 24 | 3.1% | 5.1% | 96 |
| silent_ordered | eval_comp24 | 32 | 3.1% | 5.1% | 96 |
| silent_ordered | eval_len16 | 4 | 4.2% | 6.5% | 96 |
| silent_ordered | eval_len16 | 8 | 3.8% | 6.0% | 96 |
| silent_ordered | eval_len16 | 16 | 3.8% | 5.7% | 96 |
| silent_ordered | eval_len16 | 24 | 3.8% | 5.6% | 96 |
| silent_ordered | eval_len16 | 32 | 3.8% | 5.6% | 96 |
| silent_ordered | eval_len24 | 4 | 4.2% | 8.0% | 96 |
| silent_ordered | eval_len24 | 8 | 3.5% | 6.5% | 96 |
| silent_ordered | eval_len24 | 16 | 3.5% | 5.6% | 96 |
| silent_ordered | eval_len24 | 24 | 3.5% | 5.4% | 96 |
| silent_ordered | eval_len24 | 32 | 3.5% | 5.4% | 96 |
| silent_ordered | eval_len32 | 4 | 3.1% | 6.4% | 96 |
| silent_ordered | eval_len32 | 8 | 4.5% | 5.5% | 96 |
| silent_ordered | eval_len32 | 16 | 4.5% | 5.3% | 96 |
| silent_ordered | eval_len32 | 24 | 4.5% | 4.8% | 96 |
| silent_ordered | eval_len32 | 32 | 4.5% | 5.0% | 96 |
| silent_ordered | eval_len4 | 4 | 6.2% | 8.2% | 96 |
| silent_ordered | eval_len4 | 8 | 8.0% | 8.2% | 96 |
| silent_ordered | eval_len4 | 16 | 8.0% | 8.2% | 96 |
| silent_ordered | eval_len4 | 24 | 8.0% | 8.2% | 96 |
| silent_ordered | eval_len4 | 32 | 8.0% | 8.2% | 96 |
| silent_ordered | eval_len8 | 4 | 7.3% | 6.4% | 96 |
| silent_ordered | eval_len8 | 8 | 6.6% | 6.2% | 96 |
| silent_ordered | eval_len8 | 16 | 6.6% | 6.2% | 96 |
| silent_ordered | eval_len8 | 24 | 6.6% | 6.3% | 96 |
| silent_ordered | eval_len8 | 32 | 6.6% | 6.3% | 96 |
| silent_shuffled | eval_comp16 | 4 | 2.8% | 5.8% | 96 |
| silent_shuffled | eval_comp16 | 8 | 3.1% | 4.7% | 96 |
| silent_shuffled | eval_comp16 | 16 | 4.5% | 4.9% | 96 |
| silent_shuffled | eval_comp16 | 24 | 4.2% | 4.7% | 96 |
| silent_shuffled | eval_comp16 | 32 | 4.9% | 5.0% | 96 |
| silent_shuffled | eval_comp24 | 4 | 2.8% | 5.5% | 96 |
| silent_shuffled | eval_comp24 | 8 | 2.8% | 5.0% | 96 |
| silent_shuffled | eval_comp24 | 16 | 3.1% | 5.0% | 96 |
| silent_shuffled | eval_comp24 | 24 | 3.5% | 4.9% | 96 |
| silent_shuffled | eval_comp24 | 32 | 3.1% | 4.7% | 96 |
| silent_shuffled | eval_len16 | 4 | 4.5% | 5.5% | 96 |
| silent_shuffled | eval_len16 | 8 | 4.5% | 4.6% | 96 |
| silent_shuffled | eval_len16 | 16 | 3.8% | 4.9% | 96 |
| silent_shuffled | eval_len16 | 24 | 3.8% | 4.8% | 96 |
| silent_shuffled | eval_len16 | 32 | 3.8% | 5.3% | 96 |
| silent_shuffled | eval_len24 | 4 | 4.5% | 4.9% | 96 |
| silent_shuffled | eval_len24 | 8 | 3.5% | 5.3% | 96 |
| silent_shuffled | eval_len24 | 16 | 3.1% | 5.0% | 96 |
| silent_shuffled | eval_len24 | 24 | 2.8% | 4.9% | 96 |
| silent_shuffled | eval_len24 | 32 | 3.5% | 4.9% | 96 |
| silent_shuffled | eval_len32 | 4 | 3.5% | 5.2% | 96 |
| silent_shuffled | eval_len32 | 8 | 2.4% | 4.5% | 96 |
| silent_shuffled | eval_len32 | 16 | 4.9% | 4.7% | 96 |
| silent_shuffled | eval_len32 | 24 | 4.9% | 4.6% | 96 |
| silent_shuffled | eval_len32 | 32 | 4.5% | 4.7% | 96 |
| silent_shuffled | eval_len4 | 4 | 6.6% | 6.2% | 96 |
| silent_shuffled | eval_len4 | 8 | 5.9% | 6.5% | 96 |
| silent_shuffled | eval_len4 | 16 | 7.3% | 5.6% | 96 |
| silent_shuffled | eval_len4 | 24 | 7.6% | 6.6% | 96 |
| silent_shuffled | eval_len4 | 32 | 8.0% | 5.1% | 96 |
| silent_shuffled | eval_len8 | 4 | 5.6% | 4.9% | 96 |
| silent_shuffled | eval_len8 | 8 | 5.9% | 4.9% | 96 |
| silent_shuffled | eval_len8 | 16 | 6.9% | 6.1% | 96 |
| silent_shuffled | eval_len8 | 24 | 6.2% | 5.9% | 96 |
| silent_shuffled | eval_len8 | 32 | 6.9% | 5.9% | 96 |


Held-Out Composition
| arm | seed | split | k | final_accuracy | state_accuracy | mean_output_tokens |
|---|---|---|---|---|---|---|
| silent_ordered | 101 | eval_comp16 | 4 | 2.1% | 6.2% | 1 |
| silent_ordered | 101 | eval_comp16 | 8 | 3.1% | 5.5% | 1 |
| silent_ordered | 101 | eval_comp16 | 16 | 3.1% | 4.3% | 1 |
| silent_ordered | 101 | eval_comp16 | 24 | 3.1% | 4.3% | 1 |
| silent_ordered | 101 | eval_comp16 | 32 | 3.1% | 4.3% | 1 |
| silent_shuffled | 101 | eval_comp16 | 4 | 2.1% | 4.4% | 1 |
| silent_shuffled | 101 | eval_comp16 | 8 | 3.1% | 4.4% | 1 |
| silent_shuffled | 101 | eval_comp16 | 16 | 3.1% | 4.2% | 1 |
| silent_shuffled | 101 | eval_comp16 | 24 | 3.1% | 4.4% | 1 |
| silent_shuffled | 101 | eval_comp16 | 32 | 3.1% | 4.4% | 1 |
| silent_ordered | 101 | eval_comp24 | 4 | 1.0% | 4.4% | 1 |
| silent_ordered | 101 | eval_comp24 | 8 | 4.2% | 5.7% | 1 |
| silent_ordered | 101 | eval_comp24 | 16 | 4.2% | 5.5% | 1 |
| silent_ordered | 101 | eval_comp24 | 24 | 4.2% | 5.1% | 1 |
| silent_ordered | 101 | eval_comp24 | 32 | 4.2% | 5.1% | 1 |
| silent_shuffled | 101 | eval_comp24 | 4 | 2.1% | 4.2% | 1 |
| silent_shuffled | 101 | eval_comp24 | 8 | 4.2% | 5.9% | 1 |
| silent_shuffled | 101 | eval_comp24 | 16 | 4.2% | 5.5% | 1 |
| silent_shuffled | 101 | eval_comp24 | 24 | 4.2% | 5.0% | 1 |
| silent_shuffled | 101 | eval_comp24 | 32 | 4.2% | 4.9% | 1 |
| silent_ordered | 202 | eval_comp16 | 4 | 2.1% | 5.7% | 1 |
| silent_ordered | 202 | eval_comp16 | 8 | 8.3% | 5.6% | 1 |
| silent_ordered | 202 | eval_comp16 | 16 | 8.3% | 4.3% | 1 |
| silent_ordered | 202 | eval_comp16 | 24 | 8.3% | 4.2% | 1 |
| silent_ordered | 202 | eval_comp16 | 32 | 8.3% | 4.3% | 1 |
| silent_shuffled | 202 | eval_comp16 | 4 | 4.2% | 5.7% | 1 |
| silent_shuffled | 202 | eval_comp16 | 8 | 4.2% | 4.0% | 1 |
| silent_shuffled | 202 | eval_comp16 | 16 | 8.3% | 4.6% | 1 |
| silent_shuffled | 202 | eval_comp16 | 24 | 8.3% | 4.0% | 1 |
| silent_shuffled | 202 | eval_comp16 | 32 | 8.3% | 4.2% | 1 |
| silent_ordered | 202 | eval_comp24 | 4 | 1.0% | 5.7% | 1 |
| silent_ordered | 202 | eval_comp24 | 8 | 4.2% | 4.8% | 1 |
| silent_ordered | 202 | eval_comp24 | 16 | 4.2% | 5.1% | 1 |
| silent_ordered | 202 | eval_comp24 | 24 | 4.2% | 4.8% | 1 |
| silent_ordered | 202 | eval_comp24 | 32 | 4.2% | 4.8% | 1 |
| silent_shuffled | 202 | eval_comp24 | 4 | 4.2% | 5.7% | 1 |
| silent_shuffled | 202 | eval_comp24 | 8 | 3.1% | 3.5% | 1 |
| silent_shuffled | 202 | eval_comp24 | 16 | 4.2% | 4.4% | 1 |
| silent_shuffled | 202 | eval_comp24 | 24 | 4.2% | 5.2% | 1 |
| silent_shuffled | 202 | eval_comp24 | 32 | 4.2% | 4.8% | 1 |
| silent_ordered | 303 | eval_comp16 | 4 | 2.1% | 6.5% | 1 |
| silent_ordered | 303 | eval_comp16 | 8 | 2.1% | 6.4% | 1 |
| silent_ordered | 303 | eval_comp16 | 16 | 2.1% | 5.8% | 1 |
| silent_ordered | 303 | eval_comp16 | 24 | 2.1% | 5.7% | 1 |
| silent_ordered | 303 | eval_comp16 | 32 | 2.1% | 5.7% | 1 |
| silent_shuffled | 303 | eval_comp16 | 4 | 2.1% | 7.3% | 1 |
| silent_shuffled | 303 | eval_comp16 | 8 | 2.1% | 5.7% | 1 |
| silent_shuffled | 303 | eval_comp16 | 16 | 2.1% | 5.9% | 1 |
| silent_shuffled | 303 | eval_comp16 | 24 | 1.0% | 5.9% | 1 |
| silent_shuffled | 303 | eval_comp16 | 32 | 3.1% | 6.5% | 1 |
| silent_ordered | 303 | eval_comp24 | 4 | 1.0% | 5.7% | 1 |
| silent_ordered | 303 | eval_comp24 | 8 | 1.0% | 5.7% | 1 |
| silent_ordered | 303 | eval_comp24 | 16 | 1.0% | 5.9% | 1 |
| silent_ordered | 303 | eval_comp24 | 24 | 1.0% | 5.3% | 1 |
| silent_ordered | 303 | eval_comp24 | 32 | 1.0% | 5.3% | 1 |
| silent_shuffled | 303 | eval_comp24 | 4 | 2.1% | 6.5% | 1 |
| silent_shuffled | 303 | eval_comp24 | 8 | 1.0% | 5.7% | 1 |
| silent_shuffled | 303 | eval_comp24 | 16 | 1.0% | 5.1% | 1 |
| silent_shuffled | 303 | eval_comp24 | 24 | 2.1% | 4.5% | 1 |
| silent_shuffled | 303 | eval_comp24 | 32 | 1.0% | 4.5% | 1 |
| frozen_direct_likelihood | -1 | eval_comp16 | 0 | 0.0% | n/a | 1 |
| frozen_direct_likelihood | -1 | eval_comp24 | 0 | 0.0% | n/a | 1 |

Token Cost

Training Dynamics
| seed | step | k | shuffle_train | loss | final_loss | state_loss | quick_best_final_accuracy |
|---|---|---|---|---|---|---|---|
| 101 | 1 | 16 | 0 | 6.8775 | 3.4548 | 3.42271 | 1.6% |
| 101 | 100 | 16 | 0 | 6.08486 | 2.88249 | 3.20237 | 4.7% |
| 101 | 200 | 32 | 0 | 6.94451 | 3.6356 | 3.30891 | 4.7% |
| 101 | 300 | 32 | 0 | 6.66169 | 3.31026 | 3.35143 | 4.7% |
| 101 | 400 | 8 | 0 | 6.59244 | 3.11415 | 3.47829 | 9.4% |
| 101 | 500 | 8 | 0 | 6.48572 | 3.26102 | 3.2247 | 4.7% |
| 202 | 1 | 32 | 0 | 7.07435 | 3.60426 | 3.47009 | 7.8% |
| 202 | 100 | 16 | 0 | 7.74787 | 3.9714 | 3.77647 | 4.7% |
| 202 | 200 | 8 | 0 | 6.22488 | 3.20113 | 3.02375 | 6.2% |
| 202 | 300 | 16 | 0 | 6.97321 | 3.54642 | 3.4268 | 3.1% |
| 202 | 400 | 32 | 0 | 6.6744 | 3.36998 | 3.30442 | 4.7% |
| 202 | 500 | 16 | 0 | 6.28751 | 3.08885 | 3.19866 | 4.7% |
| 303 | 1 | 8 | 0 | 7.21715 | 3.61773 | 3.59942 | 4.7% |
| 303 | 100 | 4 | 0 | 6.27121 | 3.313 | 2.95821 | 10.9% |
| 303 | 200 | 8 | 0 | 5.83825 | 3.0105 | 2.82775 | 6.2% |
| 303 | 300 | 8 | 0 | 8.10723 | 4.23574 | 3.87149 | 4.7% |
| 303 | 400 | 8 | 0 | 6.8929 | 3.36954 | 3.52336 | 3.1% |
| 303 | 500 | 8 | 0 | 7.26673 | 3.6519 | 3.61482 | 6.2% |

Interpretation Guide
A positive result requires the ordered silent arm to improve with K on longer programs while the shuffled-compute control does not show the same curve. It also requires held-out length and held-out composition performance to remain strong; otherwise the model has learned a distribution-specific transducer rather than an executable procedure.
Artifacts
- Run directory:
experiments/qwen_python_shaped_silent_executor/runs/main_python_shaped_silent_executor_v1/ - Reports:
experiments/qwen_python_shaped_silent_executor/reports/ - Checkpoints:
large_artifacts/qwen_python_shaped_silent_executor/checkpoints/main_python_shaped_silent_executor_v1/
Experiment log 2
Show the running log (2 entries)
Design
This standalone experiment tests silent/internal execution on a Python-shaped mini-language. Programs are executable by a deterministic harness, but prompts present them as readable Python-like code. The model is evaluated in three roles:
- frozen direct final-answer scoring;
- explicit chain-of-thought generation with intermediate state reporting;
- trained private latent compute with direct final/state heads.
The decisive comparisons are held-out program length, held-out operation composition, K-private-compute scaling, and a shuffled-compute control.
Large trainable artifacts are stored under /workspace/large_artifacts/qwen_python_shaped_silent_executor.
Iteration Notes
smoke_python_shaped_silent_executor_v1tested the first 128-value version. It completed end to end, but raw prompting made the CoT baseline ramble and truncate.smoke_python_shaped_silent_executor_v2switched model-facing prompts to Qwen chat formatting. CoT outputs became concise but remained weak.smoke_python_shaped_silent_executor_v3enabled Qwen thinking mode for the CoT baseline. This made CoT a stronger and more expensive baseline.pilot_python_shaped_silent_executor_v1andv2showed that the 128-value target space was too diffuse: QLoRA learned frequent-answer priors, not execution, and ordered latent positions did not beat shuffled positions.The substrate was revised to small integers
0..31with smaller operation constants.smoke_python_shaped_silent_executor_v4validated the corrected generator and faster frozen scoring.pilot_python_shaped_silent_executor_v3tested the corrected substrate with the default latent recipe. It learned a weak signal but still showed no ordered-vs-shuffled separation.pilot_python_shaped_silent_executor_v4removed K=0 from training and increased state supervision. This was more aligned with the execution hypothesis but did not improve the gate.main_python_shaped_silent_executor_v1ran the final multi-seed experiment: three QLoRA seeds, train lengths4,8,16, held-out lengths24,32, held-out operation compositions, thinking-CoT baseline, ordered latent K-sweep, and shuffled-compute control.
Figures 5
Data files 24
Result tables and metrics copied from the experiment folder — preview inline or open the raw file.
reports/k_summary.csv5.2 kBreports/metrics.csv22 kBreports/summary_by_arm.csv369 Bruns/main_python_shaped_silent_executor_v1/all_trained_metrics.csv16 kBruns/main_python_shaped_silent_executor_v1/frozen_probe_metrics.csv691 Bruns/main_python_shaped_silent_executor_v1/run_summary.json294 Bruns/main_python_shaped_silent_executor_v1/trained_metrics_seed101_ordered.csv5.4 kBruns/main_python_shaped_silent_executor_v1/trained_metrics_seed202_ordered.csv5.6 kBruns/main_python_shaped_silent_executor_v1/trained_metrics_seed303_ordered.csv5.5 kBruns/pilot_python_shaped_silent_executor_v1/all_trained_metrics.csv4.6 kBruns/pilot_python_shaped_silent_executor_v1/frozen_probe_metrics.csv461 Bruns/pilot_python_shaped_silent_executor_v1/trained_metrics_seed101_ordered.csv4.6 kBruns/pilot_python_shaped_silent_executor_v2/all_trained_metrics.csv5.3 kBruns/pilot_python_shaped_silent_executor_v2/frozen_probe_metrics.csv461 Bruns/pilot_python_shaped_silent_executor_v2/run_summary.json292 Bruns/pilot_python_shaped_silent_executor_v2/trained_metrics_seed101_ordered.csv5.3 kBruns/pilot_python_shaped_silent_executor_v3/all_trained_metrics.csv5.7 kBruns/pilot_python_shaped_silent_executor_v3/frozen_probe_metrics.csv461 Bruns/pilot_python_shaped_silent_executor_v3/run_summary.json292 Bruns/pilot_python_shaped_silent_executor_v3/trained_metrics_seed101_ordered.csv5.7 kBruns/pilot_python_shaped_silent_executor_v4/all_trained_metrics.csv5.9 kBruns/pilot_python_shaped_silent_executor_v4/frozen_probe_metrics.csv461 Bruns/pilot_python_shaped_silent_executor_v4/run_summary.json291 Bruns/pilot_python_shaped_silent_executor_v4/trained_metrics_seed101_ordered.csv5.9 kB
16 more result files not shown here — browse the full folder on GitHub.
Reproduce
This entry is source code or analysis only — there is no separate run to reproduce.