Buckets:

Pranav2748's picture
|
download
raw
14.1 kB

Reasoning decision model on Qwen3.5-4B: final report

Oct 30 - Nov 1, 2026 · one A100 80GB · code, data, logs and checkpoints in the public bucket Mercity/Desicion-Model-Custom (no keys) · notebook results/NOTEBOOK.md, every change to the plan in results/DEVIATIONS.md (31 entries) · dashboard https://claude.ai/artifact/XehYsr1iD4hq2zA3ni241r

V2 + RL is the model to use. Its fast readout answers 72.5% of our 5,442 eval questions (base Qwen3.5-4B: 62.7%); routing the least certain 30% to thinking mode lifts that to 81.8% at 729 thinking tokens per question. On the external S1MB benchmark, training took the model's Task Avg from 32.8 to 47.9. Report doc: https://claude.ai/artifact/RUdY6E2PZgStqNURLGT8g8

What was built

A Jev-style typed decision model: given evidence, a criterion and options, it answers in two ways.

  • Fast readout (System One): one forward pass, a probability per option from the letter logits, ~40 ms.
  • Thinking mode: reasons, then the same letter readout after the chain.
  • Routing: the readout answers by default; the lowest-margin share of questions goes to thinking.

Base model Qwen3.5-4B (hybrid Gated DeltaNet + attention), LoRA r32 / α64 on all linear layers. Three model generations were trained, plus a ~2B model:

Model What changed
v1 readout on 3K questions (gold mixed 50/50 with the model's own vote shares) + 2.7K of its own correct chains
V2 14x the readout data (42K questions, every pool question, half in the eval's option order), 11K chains (4B + 662 questions from Qwen3.5-35B-A3B via API, $6.60), stricter chain filters, lr 2e-4 from a 3-rate sweep, 1.5x faster training setup
V2 + RL GRPO on V2's thinking mode: 60 steps (40 at 1e-5, 20 at 2.5e-5), 8 chains per question, +1 / -1 reward (annotator share for soft labels), -1.5 for no answer by 8,192 tokens, 240 questions (60% never trained on, mostly reasoning-heavy tasksource sources)
2B MiniCPM5-2B picked over Qwen3.5-2B by a pre-registered probe rule; V2 recipe, and a readout-only variant

Headline results (our eval: 5,442 questions; thinking on a 1,498-question subset)

Model Fast readout Thinking Looped chains Routed 30% to thinking Thinking tokens per question at 30%
Base Qwen3.5-4B 62.7% 84.0% 0.9% 73.0% 1,069
v1 69.5% 84.4% 1.4% 78.0% 1,166
V2 72.7% 81.2% 5.1% 81.8% 1,749
V2 + RL (step 60) 72.5% 83.1% 0.2% 81.8% 729
V2 + RL (step 40, 1e-5 only) 72.7% 83.6% 2.0% 82.0% 1,079

(Routing columns use the 1,498-question subset: fast readout there is 61.8 / 70.3 / 76.0 / 75.9 / 76.0%.)

  • The fast readout gained 10 points over the base model (62.7 -> 72.5%), most of it from data: V2's 42K questions took it from v1's 69.5% to 72.7% and its held-out dev score from 65% (1,500 questions) to 81.3%.
  • V2's chain training brought loops into thinking mode (5.1% of chains ran to the 32K cap with no answer), costing 3.2 points; RL removed them (0.2%) and recovered most of the loss, at half the thinking tokens.
  • The routed system is the deployable unit: V2 + RL reaches 81.8% at 30% routed with 729 thinking tokens per question, vs v1's 78.0% at 1,166 and the base model's 73.0%. It recovers 79% of the gap between fast and thinking mode (the plan's target was 80%; v1 recovered 52%).
  • Calibration stays good: fast-readout ECE 0.030 (15 bins, after per-type temperatures fitted on calibration items); after-chain readout ECE 0.057 for V2 + RL vs 0.043 for V2, a difference within noise (+0.014, 95% CI -0.006 to +0.028).

By eval set (fast readout): procedural 46.8 -> 89.5, tasksource 60.4 -> 72.3, OpenDecisions 66.5 -> 73.9, LocalLLaMA 63.0 -> 66.3 (base -> V2 + RL). The two sets least like the training data gained least.

What the ablations and side experiments showed

  • Votes vs gold labels (V2 ablations, the same 12K questions): mixing the model's own vote shares into the readout target lowered accuracy (70.5% vs 71.7% gold-only; -1.2 points, 95% CI -2.1 to -0.3) and made calibration worse on the eval sets (ECE 0.047 vs 0.031), although it looked better on in-distribution dev (0.017 vs 0.034). The votes help on familiar question types and hurt on new ones. v1's gold-only readout remains the best calibrated (0.019).
  • RL learning rate: the 1e-5 phase gave the accuracy (+2.4 points over V2); the 2.5e-5 phase mostly removed the remaining loops (2.0% -> 0.2%) and 30% of the tokens. Training-time accuracy at equal difficulty was flat; the clear training-time effect was decisiveness ("Wait" per finished chain 10 -> 5).
  • Speed: keeping activations for micro-batches up to 8K tokens (no recompute) gave 1.48x training throughput at equal numerics (user's call over a 72 GB guard; peak 71.5 GiB of 80, no OOM). Liger kernels failed the fp32 equivalence check and were not used.
  • Data hygiene: dev and eval ids are disjoint from training; 61 of 999 dev items and 50 of 526 procedural eval items repeat a training question exactly (procedural generators); removing them changes procedural accuracy by <= 0.7 points.

The 2B model

2B variant Fast readout Thinking Looped Routed 30% Routed 50%
MiniCPM5-2B, untrained 50.2% 79.4% 0.1%
V2 recipe (with chains) 65.1% 71.7% 7.4% 71.9% 72.0%
Readout-only (no chains) 66.0% 70.8% 2.1% 71.0% 71.0%
Readout-only fast + untrained thinking 66.0% 79.4% 0.1% 75.6% (253 tok) 78.0% (411 tok)

(Routing in this table: lowest readout margin to thinking, the thinking answer is the chain's parsed letter; the same method gives 81.9% / 742 tokens for V2 + RL at 30%.)

  • MiniCPM5-2B thinks almost as well as our 4B untrained (79.4% vs 83-84%, at ~40% of the tokens), so it was picked.
  • Every fine-tune damaged its thinking (-8 to -9 points): the V2 recipe by copying the 4B's and the teacher's longer, loop-prone chains; readout-only training by teaching it to answer at once (median chain 441 -> 127 tokens).
  • The working 2B is two states of one model: the trained LoRA for the fast readout, the adapter off for thinking. That reaches 75.6% at 30% routed (253 thinking tokens per question) and 78.0% at 50%, within 4-6 points of the 4B.

External benchmarks

Jevals (jevals.com, suite 0.1.0, 3 boards x 300; Decision Score = Brier / RPS skill vs the label prior)

Board Gemini 3.8 Flash Jev Ours, V2 + RL fast Ours, V2 + RL thinking Ours, 2B readout-only fast
PubMedQA (yes/no, unseen in training) 73.0 69.0 58.6 (5th of 8) 63.5 (3rd) 44.6
Banking77 (77 intents) 74.1 67.8 61.3 (6th) 59.3 53.9
HelpSteer2 (5-level score) 4.6 9.2 2.4 -20.1 -0.4

Fast mode sits mid-pack, level with mid-tier LLMs and 6-10 points behind Jev; its probabilities are among the best calibrated on the board (Banking77 ECE 2.8 points vs Jev 9.8). Thinking raises accuracy where the task is reading and reasoning (PubMedQA 86 -> 90%) but its post-chain probabilities are overconfident, which Brier punishes. Training lifted the base 4B's PubMedQA score from 48.1 (raw; 36.4 with our temperatures) to 58.6 on a dataset it never saw.

S1MB (System One Mosaic Benchmark, English v1: 137 benchmarks, 26,269 judgments; 211 complete published models)

Training took the 4B's Task Avg from 32.8 to 47.9 and the 2B's from 18.1 to 37.3; 74 of 211 published models rank above V2 + RL in the leaderboard's Borda order. All runs use the fast readout.

Model Task Avg Yes/no Choice Score Published models above (Borda)
V2 + RL (4B) 47.9 50.7 57.2 35.8 74
v1 (4B) 43.5 50.1 52.3 28.0 100
2B readout-only 37.3 42.3 45.7 24.0 123
Qwen3.5-4B, untrained 32.8 33.8 45.7 18.9 134
MiniCPM5-2B, untrained 18.1 22.9 29.5 2.0 162
superion_s1 (best Task Avg) 74.4
KnowLine-4B-Gen5 (best published 4B) 67.0 65.7 76.5 58.8 19
KnowLine-2B-Gen1 (best published 2B) 44.8 48.4 57.4 28.7 88
Median published model 41.2
  • Most of the gain came with v1 (+10.7 of +15.1). V2's data and RL then added choice (+4.9) and score (+7.8) skill but almost no yes/no skill (50.1 -> 50.7). Benchmarks: 105 of 137 up, 16 down (by more than 0.01).
  • Training fixed a "no" bias and overshot on balanced sets. The untrained 4B said yes on 18% of yes/no judgments where the target is yes 28% of the time; V2 + RL says yes 32% (true recall 44% -> 70%, false recall 91% -> 83%). It now over-says yes on SciTail, Qasper, CanTTalk and Open-Jev customer-control, 4 of the 5 benchmarks that fell by more than 0.1.
  • The largest gains are Open-Jev control and workflow tasks: drone control +1.0, entity alignment +0.83, invoice processing +0.65, VizDoom +0.64 (adjusted skill, 0-1).
  • The 2B gained more than the 4B: readout-only training added 19.2 points; among the ~2B published models only KnowLine-2B-Gen1 (44.8) and unee-2b (44.4) score higher.
  • Method. s1mb_eval.py reimplements the published SCORING.md (running their evaluator was refused by the permission check as third-party code) and is checked on 3 published models: 48 benchmark scores match to 6e-16. Per-task temperatures fitted on our own calibration items (never S1MB) change only the score task: V2 + RL is 46.9 without them. Prompts are our native format; the 904 judgments with more than 26 options use a tournament readout. V2 and the V2-recipe 2B were not run (V2's fast readout equals V2 + RL's; the V2-recipe 2B is dominated by the readout-only 2B).

S1MB with routing (V2 + RL, least certain 30% of judgments to thinking)

Task Fast readout 30% routed Difference [95% CI]
Yes/no 50.7 58.3 +7.6 [+4.5, +11.6]
Choice 57.2 67.6 +10.4 [+6.2, +14.9]
Score 35.8 39.8 +4.0 [-1.1, +9.3]
Task Avg 47.9 55.2 +7.3 [+4.9, +9.9]

Published models above it in Borda order: 74 → 50 (Task Avg level with KnowLine-4B-Gen2, 55.3). 92 benchmarks up, 20 down: thinking wins on computation and multi-step reasoning (Snake +0.86, logical entailment +0.62, temporal NLI +0.53, tic-tac-toe +0.51, AQuA-RAT +0.45) and loses on judgment and graded relevance (ETHICS -0.33, search-relevance score tasks -0.09 to -0.13). 943 thinking tokens per judgment; 158 of 7,881 chains (2.0%) gave no answer and kept the fast answer. Not a like-for-like leaderboard entry: S1MB measures single-pass judgments. The 2B hybrid's routed run was skipped.

Robustness and error analysis (added Nov 1)

  • Bootstrap intervals (results/final_stats.md): readout gains over the base (+9.8 [8.4, 11.2]) and v1 (+3.0 [1.9, 4.2]) hold; RL's thinking gain over V2 holds (+1.9 [0.3, 3.5]); routed V2 + RL ties V2 (+0.1 [-1.3, 1.1]) at 1,020 fewer thinking tokens per question. Corrected: vote-mixed targets lowered readout accuracy (-1.2 [-2.1, -0.3]); the post-chain ECE rise after RL is within noise. Hypotheses: H2 confirmed, H3 met by V2 + RL only, H1 not confirmed, H4 undecided (79.5% [64%, 97%]).
  • S1MB overlap check: gains are larger on benchmarks from datasets never trained on (+17.4 vs +8.4, difference +9.0 [3.4, 14.5]); only 104 of ~18,700 cases share most of their text with training data.
  • Chains read by hand (results/examples_analysis.md): thinking fixes by computing (OpenDecisions 77.0 → 95.8%) and breaks even on judgment sets, where margin routing spends most of its budget; routing by task type could add up to 2.3 points. Chains that guess at dataset conventions are right ~55% vs ~90%. Only 49% of RL questions gave a learning signal (the fast readout's p(gold) did not predict thinking-mode difficulty).
  • Yes/no bias: V2 + RL says yes on 62% of our yes/no questions (gold 50%); one calibration-fitted offset lifts their balanced accuracy 78.4 → 83.6%, but does not help S1MB.

The full write-up (23 pages, 23 figures): results/report/decision_model_report.pdf (bucket: report/).

What I would do next

  1. Fix the chain recipe before more data: filter re-verification loops ("Wait, I'll consider ...") out of training chains, and only train chains a model cannot already produce better itself (MiniCPM's own were better than ours).
  2. Calibrate the after-thinking readout (soft post-chain targets or a calibration term in the RL reward): it is what costs thinking mode on Brier-scored benchmarks.
  3. More RL, set up better: questions screened to split 30-70%, 12-16 chains per question, a 6K-token cap, no spatial puzzles, and the speed work first (batched learning steps, the fast conv kernel) to afford hundreds of steps.
  4. Ship the 2B as fast-readout LoRA + untouched thinking, and test RL on its readout-only variant to recover thinking without losing the readout.
  5. Out-of-distribution gains are the weak spot (LocalLLaMA +3 points over the base, OpenDecisions +7): more diverse training sources beat more questions from the same sources.

Where things are

  • Bucket: run1/ (v1), run2_v2/ (V2, ablations, RL with every sampled chain, merged v2_joint, rl60), run3_2b/ (the 2B, incl. merged v2b_ro_merged), jevals/, s1mb/ (items, our raw readouts, score table), code/, dashboard/, README.md, FINAL_REPORT.md.
  • Deployable models: run2_v2/checkpoints/rl60_merged (4B, bf16, text-only Qwen3_5ForCausalLM); the 2B readout LoRA in run3_2b/results/adapters/v2b_ro on top of openbmb/MiniCPM5-2B.
  • Known caveats: single seeds; the RL run was short (60 steps); Jevals and S1MB were scored with our own reimplementation of their rules (checked against their published numbers), our prompts are our native format, and our training pool contains train-split items of a few of their source datasets (Banking77, HelpSteer2; never the evaluated items).

Xet Storage Details

Size:
14.1 kB
·
Xet hash:
2df5f3eb4cf484864decac333c15c8d4711eb8fbffb3acacc6b47113d3d36f64

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.