Buckets:
| # Lab notebook: think-then-decide (latent denoising passes as thinking) | |
| Times UTC. Observations as they happened; numbers from the files named. | |
| ## 2026-11-06 | |
| **12:54** Box: A100-SXM4 80GB (RunPod), 255 CPUs, 1 TB RAM. Bucket `Mercity/Desicion-Model-Custom` (previous | |
| project: Qwen3.5-4B decision model with token thinking) reviewed; its 76.5 GB of checkpoints deleted locally (they | |
| stay in the bucket) to keep disk free. | |
| **13:00** jev-dllm cloned (3b8c01b), S1 downloaded at the pinned revision. S1's model code reviewed (27-line | |
| bidirectional Qwen3 override; `last_hidden_state` is post final-norm; accepts `inputs_embeds`). Training data: | |
| 40,000 train / 1,000 dev, lengths with 32 thought slots median 246, p99 846, max 1,395 tokens (none over 2,048). | |
| Core: 6,744 decisions in 17 suites; 221 ContractNLI items exceed 4,096 tokens (S1's protocol drops them). | |
| **13:03 E0 step 1** (`runs/e0/core-s1-theirs`): jev-dllm's own evaluator on S1, this GPU, bf16, batch 32: | |
| Jabr 65.94, MASSIVE en-US 77.87, Civil Comments 82.67 = published; JevBench original 84.72 (published 86.11, | |
| one item), VitaminC 67.61 (67.95), PubMedQA 57.20 (57.60): bf16 cross-GPU flips. 118 s of forward time. | |
| **13:20 E0 step 2** (`runs/e0/core-s1-ours*`): our harness, same 6,523 items: suites within 1-2 items of | |
| jev-dllm's run (JevBench original 86.11 = published), reasoning group 63.96 in both. 1.4% argmax flips remain | |
| with jev-dllm's exact batches, max |dp| 0.13 (DEVIATIONS #3). | |
| **13:25** Speed: profile showed a memory-bound small model (GEMMs ~25% of GPU time; unfused RMSNorm/RoPE/SwiGLU/ | |
| casts and attention backward dominate). torch.compile on the decoder layers: 1.6x (22.8k token-passes/s at K=4). | |
| Checkpointing: 1.5-2x slower. Padding: K=1 micro-batches were ~3x padded; a padding-aware split brings every K to | |
| ~1.17x (adopted after E1; E1 ran with the budget-only split, same maths). | |
| **13:33** Is the training set memorised by S1 (3 epochs on it)? No: on 5,000 train items KL 0.18, acc 93.5%, | |
| 23% with p(gold) < 0.9; held-out new_dev KL 0.31, acc 88%. Enough signal; plan's data kept. | |
| **13:40 E1** started (S1 + head, no thinking, 1 epoch). Dev at step 250 (peak LR): KL 0.260 -> 0.327, acc 90.3 -> | |
| 87.6%. S1's released checkpoint was selected on this dev set (min KL), so dev is biased toward S1; Core decides. | |
| **13:55 E1 done** (`runs/e1`): 1,250 steps, 14.4 min, peak 61.4 GiB (budget-only split; K=1 steps were one | |
| ~3x-padded micro-batch), no OOM retries. Dev: KL 0.260 -> 0.303, acc 90.3 -> 91.5%. Core (all 6,744): | |
| reasoning 64.99, lookup 74.10, other 60.50, Core17 macro 66.08. (S1 at 4,096 protocol: 63.96 / 73.96.) | |
| **14:02 E2 started** (32 slots, K ~ U{1,2,4,8} per step, budget 42,000): peak 74.8 GiB (94%), 22.5k | |
| token-passes/s, ~1.4 s/step. Gate stays at |g| ~ 1e-4 (needs ~0.014 for the feedback to match the mask | |
| embedding's norm 0.46); W drifts from identity by Adam noise (||W - I|| 1.28 at step 380; its gradient is | |
| proportional to g ~ 0, but Adam rescales it to lr-sized steps). Dev at 250: K1 89.9 / K4 89.8%. | |
| **14:16** Notes pilot failed: vLLM 0.33 needs `ninja` on PATH (installed in its venv). Saved weights were | |
| 2x size (ThinkDecide registers base.model twice as `bb`); fixed, E1 file deduplicated (310 keys, identical). | |
| First bucket sync: `think-decide/` (token scan before every sync; .env never in the tree). | |
| **14:38 E2 done** (`runs/e2`): 1,250 steps, 29.4 min, peak 74.9 GiB (94%), 0 OOM retries. Gate 0 -> 0.0019 (needs | |
| ~0.014 to matter); dev K1 = K4 = 91.37%. Core (all 6,744; K=8 eval took 27 min): reasoning 64.67 / 64.65 / 64.82 / | |
| 64.76 at K = 1 / 2 / 4 / 8; lookup 74.45 -> 74.35. Paired bootstrap: K8 - K1 reasoning +0.08 [-0.27, +0.43]; | |
| E2@1 - E1 reasoning -0.31 [-1.51, +0.87]. **H1 and H2 not supported for E2.** | |
| Diagnosis: the feedback x = e_mask + g W LN(h) deadlocks at g = 0. h is a last-layer state (not input-embedding | |
| space), so W must learn a mapping before feedback helps; W's gradient is proportional to g, and g's gradient points | |
| along W LN(h), which is meaningless until W has learned. Under Adam both move by noise (W drifted ||W - I|| ~1.3 | |
| by step 380). So E2's null speaks to this initialisation, not to latent thinking as such. | |
| S1's predictions at the Notes slots are generic (entropy ~5.6 nats/slot, greedy "The1 is is the the,,,,"), so a | |
| soft-token feedback would start nearly content-free too. | |
| **14:50** Exploratory arms added (labelled post hoc, after E2's diagnosis; one change each vs E2): | |
| E2o = gate init 0.014 (feedback norm = mask-embedding norm, so W gets gradient from step 0); | |
| E2s = soft-token self-conditioning (slot input = E^T softmax(own token logits), mask excluded; gate fixed at 1): | |
| the continuous-diffusion version, no learned mapping needed. | |
| **15:05 Notes** (`runs/e3/notes.jsonl`, Qwen3.5-9B, greedy): the first pilot showed concluding bullets that name | |
| the answer ("The highest milestone reached is Release") and world-knowledge notes contradicting labels; prompt | |
| tightened (facts/rules only, no conclusion, never name an option) and the leak filter extended to the gold | |
| option's short name and stem. 10,000 notes, 9,370 pass (dbpedia 271 and clinc 112 name the gold class); median | |
| 76 tokens, max 175 (cap 256: none capped). | |
| **15:10 Teacher** (frozen S1 reads the note; keep a note only if it lowers CE to the target): placement probe on | |
| 1,500 notes (first in file order: arc, clinc, sgd, snli only): after-options keep 70.7% vs before 64.8% -> | |
| "after" (also position-aligned with the student's slots). Full cache: 5,409 / 9,370 kept (57.7%). Teacher | |
| accuracy with vs without note: 93.6 vs 93.7% (ARC 96.9 vs 91.8, BoolQ 89.9 vs 88.8, GoEmotions 65.0 vs 68.2). | |
| Frozen S1 barely uses notes, so E3's target sits close to S1's own states. | |
| **15:12 S1 all 6,744 items** (`runs/s1`): reasoning 64.07, lookup 73.96, other 61.49, Core17 66.07. | |
| E1 - S1: reasoning +0.92. | |
| **15:52 E3 trained** (`runs/e3`; 5,409 items with teacher targets): 29.6 min, peak 74.9 GiB, 0 OOM retries. Gate | |
| 0 -> 0.00097 (smaller than E2's 0.0019): the distillation terms did not open the channel. Dev K1 91.47 / K4 91.26%. | |
| In a direct test at init the distill losses gave the gate a gradient of 1.45 at K=2, but the target is close to | |
| S1's own states (frozen S1 barely uses notes), so the consistent signal stayed small. | |
| **16:00 Re-think (user asked for something that would actually show diffusion can replace thinking).** On S1's | |
| data even gold-aware notes do not help frozen S1 (93.6 vs 93.7%), so these benchmarks have little headroom for any | |
| thinking. A convincing test needs a task where token thinking is known to help a lot: the previous project's | |
| procedural decisions (4B: 46.8% readout vs 95.1% after thinking). New testbed E6 = tasksource/procedural-typed- | |
| decisions (Apache-2.0; 18 families x 5 levels; not in S1's training data): 78,548 train states (one question | |
| each, stratified), 1,751 dev (validation split), 3,484 test (test split). Lengths: median 550 tokens (level 0: | |
| 330, level 4: ~1,000), max 6,334 -> train max length 8,192 (no drops; a 2,048 cap would have dropped 2.5%, nearly | |
| all level 3-4). Arms (32k items, 1 epoch, backbone lr 2.5e-5 = S1's own, the same for all): P1 control (head, | |
| K=1), P2o (plan's loop, gate opened at 0.014), P2s (soft-token feedback). Evals compiled (all procedural arms). | |
| **P0: S1 zero-shot** test 42.37% (L0 53.3 -> L4 34.2), dev 41.73%. | |
| **16:10** Procedural CoT notes for E5 (token thinking by diffusion) started beside E3's eval: only 5 prompts/s while | |
| sharing the GPU (~1.5 h for 32k) and holding 40 GB that P1 needs; stopped (nothing written). Will regenerate for | |
| 8,000 items when the GPU has room. | |
| **16:20 E3 Core** (all 6,744): reasoning 64.51 / 64.08 / 64.39 / 64.47 at K = 1/2/4/8. Pre-registered verdicts | |
| (results/results.md): H1 not met (E2 K8-K1 +0.08 [-0.27, +0.43]; E3 -0.04 [-0.58, +0.59]), H2 not supported | |
| (E2 best - E1 -0.31 [-1.51, +0.91]), H3 not supported (-0.59 [-1.84, +0.60]). Only significant difference: E3 lookup | |
| +1.17 [+0.31, +2.04] over E1. One more epoch (E1/E2/E3 alike) trades suites: Civil Comments +6-7, ContractNLI +2-4, | |
| PubMedQA -5.6 to -7. | |
| **16:45 P1** (procedural control, 32k items, K=1): 1,000 steps, 18 min. Test 88.68% (L0 96.3, L1 91.9, L2 87.9, | |
| L3 84.0, L4 83.2); dev 89.08%. | |
| **17:05 Two research agents** (literature, independent briefs) converged: (1) latent thinking positions need dense | |
| supervision (Coconut without curriculum, filler tokens, SIM-CoT collapse, He/Welleck/Fried 2602.03769: extra | |
| unsupervised positions hurt); (2) feedback should be in a space the model understands (soft token mixtures, not | |
| last-layer states; LAW: hidden-state feedback < 1.5%); (3) two-pass stop-gradient self-conditioning beats backprop | |
| through all passes (Loopholing, LAW), and Loopholing reports fine-tuning-only retrofit failed; (4) noise during | |
| training is a curriculum (clean-only training: 0% in 2609.01449); (5) the procedural states carry 3.25 questions | |
| each, often intermediate steps of one another (governing_policy -> access_allowed -> review_risk; world_location -> | |
| belief -> belief_matches_world; shortest_cost -> edge_essential), which my prep had dropped. | |
| **17:35 P2o killed at step ~520** (user's call; plan's loop, gate opened at 0.014): dev K1 = K4 at step 250 (72.36%) | |
| and 500 (83.97%); gate drifted 0.0140 -> 0.0139. The open channel was ignored. | |
| **17:40 MQ (answer diffusion)**: all questions of a state on one canvas (S1's block format); masked diffusion over | |
| answers (reveal each question's gold Yes/No tokens with prob 1-t, t ~ U(0,1), loss on masked questions); readout | |
| = S1's native Yes/No, no new parameters, no gate. Eval modes on all questions of the 3,484 test states: parallel | |
| (1 pass), sequential (commit the most confident question per pass), oracle (others revealed). MQ-soft adds two-pass | |
| stop-gradient self-conditioning with soft Yes/No beliefs (p=0.8) and an eval of K soft passes. | |
| **18:00 MQ results** (`runs/mq`, 32k train states = 105,286 questions, 1 epoch, 21 min; test = all 11,582 questions of | |
| the 3,484 test states). Parallel 88.45 / sequential 88.98 / oracle 90.84. Paired bootstrap (macro over families): | |
| **sequential - parallel +0.48 [+0.21, +0.76]** (first positive result of the project); multi-question states +0.52 | |
| [+0.22, +0.82]; L3-4 +0.51 [-0.01, +1.02]; target questions +0.42 [-0.17, +0.97]. Oracle - parallel +1.75 [+1.45, | |
| +2.06] (L3-4 +3.02): sequential recovers ~27% of the headroom. Gain grows with commit rank (rank 1 +0.6, rank 2 | |
| +0.8, rank 3 +1.5): later answers profit from committed earlier ones. Families: policy_applicability 97.5 -> 99.0 | |
| (oracle 100), entity_belief_tracking 98.8 -> 100, record_eligibility 76.8 -> 78.1 (oracle 87.5). | |
| MQ parallel on the target questions 90.67 vs P1 88.68: training on all questions helps one-pass accuracy too. | |
| Under-training check (user): P1 dev was still rising at the end (87.1 -> 89.0% over the last 250 steps); we used 9% | |
| of the 360k train states. Queued MQ-large (128k states, soft self-conditioning) after P2s and MQ-soft. | |
| **18:05 P2s killed at step ~310** (soft-token slots, no gate; user asked for a no-gate test): learning the task (loss | |
| 1.23 -> 0.70, dev 71.8% at step 250) but dev K1 = K4 exactly; grad norm spikes to 171 through the vocabulary softmax. | |
| **18:40 MQ step test** (same questions, B passes total, ceil(open/passes left) commits per pass): all questions 88.45 / | |
| 88.72 / 89.01 / 88.97 / 89.01 at 1/2/3/4/6 steps; states with 6+ questions 80.48 / 80.30 / 81.73 / 81.43 / 81.67. | |
| More steps help up to ~3, then plateau. | |
| **19:15 MQ-soft** (two-pass soft-belief self-conditioning): parallel 86.95, sequential 87.86, soft2-4 87.64-87.70, | |
| oracle 89.93 (all questions). Gains vs its own parallel: sequential +0.80 [+0.54, +1.06], soft4 +0.81 [+0.50, +1.14]: | |
| continuous soft passes match discrete commits, but soft training costs 1.5 points of one-pass accuracy, so MQ is better | |
| in absolute terms. My pick rule compared gains, not accuracy, and started a 216k-state MQ-soft run; stopped at 18%. | |
| **19:45 User redirected** to the intended architecture: a set of latent vectors iterated K times, read once by a | |
| decision head. Third literature review (TRM/HRM/Huginn/LaDiR/2609.01449): random depth, truncated BPTT, belief | |
| feedback in separate slots, same init noise at train and eval, EMA. Found that the plan's decision head added its | |
| correction to pre-norm option states (norm ~1,700 vs ~46 post-norm): nearly inert in E1-E3 (DEVIATIONS #14). | |
| **20:00-21:05 Latent reasoners (LDR v2, 38M params, 32 latents, K ~ U{1..12})**: A frozen P1 88.68 -> 88.71 (K=0 -> | |
| 32); B frozen MQ encoder, all sub-questions 88.03 -> 87.98; C encoder trained jointly from S1 85.05 -> 85.05 (and | |
| below P1); D frozen raw S1 42.43 -> 42.46 (learned nothing; grad norm 0.01-0.3). All flat (CIs include 0). | |
| **21:10 Wrap-up** (user's call): REPORT.md + results/report.pdf, figures fig1-fig6, summary_stats.json; bucket sync. | |
Xet Storage Details
- Size:
- 12.9 kB
- Xet hash:
- 1bb75e51d9116967c3b04db87a5a91a9047fa7a052cace97eb0c5a4c1db0220f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.