{"id":112,"date":"2026-04-04T00:19:21","date_gmt":"2026-04-04T00:19:21","guid":{"rendered":"https:\/\/c-by-b.ai\/blog\/?p=112"},"modified":"2026-04-04T00:19:21","modified_gmt":"2026-04-04T00:19:21","slug":"the-suppression-saga","status":"publish","type":"post","link":"https:\/\/c-by-b.ai\/blog\/the-suppression-saga\/","title":{"rendered":"The Suppression Saga"},"content":{"rendered":"\n<p>You have an evidence head that ranks triples with AUC 0.971 \u2014 near-perfect discrimination between relevant and irrelevant. The decision head, running four layers downstream, achieves 84%. The obvious move: use the evidence scores to help the decision head. Suppress irrelevant triples, amplify relevant ones, give the decision head cleaner input.<\/p>\n\n\n\n<p>We tried this five different ways. Every one failed or showed negligible improvement. The failures taught us more about how the model works than the successes did.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Attempt 1: Soft Masking<\/h2>\n\n\n\n<p>The plan: after the evidence head scores triples at L15, multiply each triple&#8217;s hidden state vectors by its normalized score before the forward pass continues to L19. High-scoring triples pass through at full strength; low-scoring ones get attenuated. The decision head at L19 should see amplified signal from relevant evidence.<\/p>\n\n\n\n<p>We built the full pipeline \u2014 suppressed cache builder, five-step orchestrator, go\/no-go thresholds. Ran it. The &#8220;golden architecture&#8221; showed 92.3% overall accuracy with 80% REVISE. An improvement over the 90.5% baseline. We celebrated briefly.<\/p>\n\n\n\n<p>Then we investigated why the 0.8B model showed almost no masking effect, and found the obvious (in retrospect) answer &#8212; we briefly forgot that the decision head uses\u00a0<strong>last-token pooling<\/strong>\u00a0\u2014 it reads the hidden state at position\u00a0<code>seq_len - 1<\/code>, the very last token in the sequence. That position is always 28 tokens past the last evidence triple span, sitting in the action text footer. The masking modifies positions\u00a0<em>within<\/em>\u00a0triple spans. The decision head reads a position\u00a0<em>outside<\/em>\u00a0all spans.<\/p>\n\n\n\n<p>We verified: the masked and unmasked feature vectors were bitwise identical. Every byte the same. The 92.3% result was seed variance, not suppression. The entire pipeline was a structural no-op.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Attempt 2: Triple Reordering<\/h2>\n\n\n\n<p>If we can&#8217;t modify hidden states, maybe we can modify the prompt. Train a separate 0.8B model as an evidence scorer, use its scores to reorder triples so the most relevant appear first (or last, near the decision head&#8217;s reading position).<\/p>\n\n\n\n<p>Built the full pipeline: 0.8B evidence scoring, prompt rewriting, new 4B caches, fresh head training. Result: each intervention made things progressively worse. Reordering dropped accuracy by 2.4 percentage points and REVISE by 4.7 points. Adding score replacement (evidence scores instead of cosine values) degraded further.<\/p>\n\n\n\n<p>The post-mortem revealed why. The evidence head produces&nbsp;<strong>bimodal scores<\/strong>&nbsp;\u2014 54% of triples score exactly 1.0, 32% score near 0.0. It&#8217;s a binary classifier, not a ranker. Using it for ordering replaces the smooth cosine gradient (which the model was trained on and relies on) with a binary partition plus noise. The model&#8217;s existing ordering was more informative than the &#8220;improved&#8221; one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Attempt 3: Adding a Feature Dimension<\/h2>\n\n\n\n<p>Pivot from modifying the model&#8217;s processing to giving it additional input. Append a discretized evidence score as a 2561st dimension to the hidden state vectors before pooling. The evidence signal becomes additive information alongside whatever the model already encoded.<\/p>\n\n\n\n<p>Swept seven layers, ten seeds each. Results: +0.3 to +1.2 percentage points depending on layer. Statistically marginal. The model&#8217;s internal representations already contain the evidence discrimination signal \u2014 adding it explicitly as a feature tells it something it already knows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Attempt 4: Attention-Pooled Extra Dimension<\/h2>\n\n\n\n<p>Same concept with a more expressive architecture \u2014 an attention-pooled head that could learn to weight the evidence channel differently from the 2,560 hidden state dimensions. Also marginal. The attention mechanism couldn&#8217;t find a useful weighting because the signal was redundant.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Attempt 5: Prompt-Level Injection<\/h2>\n\n\n\n<p>The most expensive test: inject evidence scores as a new field in the JSON prompt alongside the cosine values, rebuild the entire hidden state cache (2+ hours), and train fresh heads. This puts the evidence signal into the token stream where the model can attend to it during its forward pass.<\/p>\n\n\n\n<p>Same result. The model converges to the same accuracy band whether it sees evidence scores in the prompt or not.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What the Failures Showed<\/h2>\n\n\n\n<p>Five attempts, one clear conclusion: the evidence head&#8217;s discrimination signal is already encoded in the hidden states the decision head reads. You can&#8217;t improve the decision by re-injecting information the model already has.<\/p>\n\n\n\n<p>But the failures also revealed a structural insight about pooling. Mean pooling averages across all token positions \u2014 it&#8217;s invariant to prompt ordering (we later confirmed this: different prompt orderings produce byte-identical confusion matrices with mean pooling). Last-token pooling reads whatever the model has routed to its final generation position \u2014 it&#8217;s order-sensitive and more powerful but more fragile.<\/p>\n\n\n\n<p>This meant the evidence head&#8217;s real value wasn&#8217;t in modifying the decision pipeline. It was as a\u00a0<strong>standalone signal<\/strong> &#8212; either a gate or a filter or something else &#8212; surely it had some use! But what?<\/p>\n\n\n\n<p><em>Next: three bugs that cost days to find and taught us hard lessons about reproducibility.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>You have an evidence head that ranks triples with AUC 0.971 \u2014 near-perfect discrimination between relevant and irrelevant. The decision head, running four layers downstream, achieves 84%. The obvious move: use the evidence scores to help the decision head. Suppress irrelevant triples, amplify relevant ones, give the decision head cleaner input. We tried this five [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-112","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/posts\/112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/comments?post=112"}],"version-history":[{"count":1,"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/posts\/112\/revisions"}],"predecessor-version":[{"id":113,"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/posts\/112\/revisions\/113"}],"wp:attachment":[{"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/media?parent=112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/categories?post=112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/c-by-b.ai\/blog\/wp-json\/wp\/v2\/tags?post=112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}