<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Michael Gao</title>
<link>https://induction1.github.io/notes.html</link>
<atom:link href="https://induction1.github.io/notes.xml" rel="self" type="application/rss+xml"/>
<description>Study notes and paper summaries on mechinterp. Some write ups are partially AI assisted for faster drafting.</description>
<generator>quarto-1.9.36</generator>
<lastBuildDate>Tue, 14 Apr 2026 04:00:00 GMT</lastBuildDate>
<item>
  <title>The Field at a Glance</title>
  <link>https://induction1.github.io/notes/starting-out/</link>
  <description><![CDATA[ 





<p><em>Foreword: the views below draw heavily on Neel Nanda’s writing, conversations with several Yale professors, and my own reading and reflection. Credit where it’s due; mistakes are mine.</em></p>
<p>Mech interp is a large field, and it is impossible to do research at the forefront of every part of it. I want to figure out how to contribute. The field is young, accessible, and full of opportunities, and it is arguably one of the most crucial and neglected parts of AI safety. The flip side is that there is a lot of slop: incorrect conclusions, fancy looking tests, and traps that can waste hundreds of hours. This post collects what I have learned while trying to skim the frontier of current mech interp research.</p>
<section id="the-landscape" class="level2">
<h2 class="anchored" data-anchor-id="the-landscape">The landscape</h2>
<p>Two or three years ago, the dominant attitude was gung-ho. People wanted to completely reverse engineer models, and believed that doing so would give a total and final solution for AI safety. That has not worked out. Starting from <em>A Mathematical Framework for Transformer Circuits</em>, we have been stumped at every step of trying to decode an entire model. We have no great account of positional embeddings, and MLPs remain stubbornly resistant to interpretation. The tools we have let us pick apart the most salient and human understandable parts of a model, but as Neel Nanda puts it, much of what a model does is small bits of machine bias that humans can’t or don’t care to understand.</p>
<p>Two things have driven the field away from that frame. First, models are now capable enough to exhibit genuinely safety relevant behaviors: scheming, eval awareness, deception. Second, retrospective disappointment. Ambitious mech interp made less progress than hoped, and existing techniques struggle with large models, agentic settings, and long chains of thought.</p>
<p>So over the last year, interest has shifted toward finding important and usable ways to interpret <em>parts</em> of models, and applying those techniques to downstream tasks. Fully disentangling a model is insanely hard. Understanding the important parts of its capabilities and being able to steer or edit them is almost as good, and it is actually tractable.</p>
</section>
<section id="theories-of-change" class="level2">
<h2 class="anchored" data-anchor-id="theories-of-change">Theories of change</h2>
<p>Nanda’s recent Alignment Forum post lays out four theories of change for mech interp:</p>
<ol type="1">
<li><strong>Science of misalignment.</strong> Figuring out whether models simply misunderstand instructions, or whether they have ulterior motives when being tested.</li>
<li><strong>Empowering other safety areas.</strong> CoT monitoring, eval awareness suppression, conceptual model psychology.</li>
<li><strong>Preventing egregiously misaligned actions.</strong> Stopping sandbagging, enabling cheap monitoring, investigating flagged behavior.</li>
<li><strong>Directly helping align models.</strong> Preventative steering, CAFT, and similar.</li>
</ol>
<p>Work tends to fall into two buckets: (a) directly backwards engineered from a specific theory of change, and (b) robustly useful settings that look good from multiple angles. The common thread is <strong>pragmatic interp over aspirational interp</strong>: pick tractable sub-problems where qualitative, case specific, unsupervised analysis actually beats other methods, and build toward theories of change that do not require what you can’t deliver.</p>
<p>Two concepts make this concrete. A <strong>North Star</strong> is a meaningful stepping stone goal that connects to AGI going well. A <strong>proxy task</strong> is an objective empirical task on today’s models that tracks progress toward the North Star. Good research keeps both in view at once.</p>
</section>
<section id="how-researchers-actually-research" class="level2">
<h2 class="anchored" data-anchor-id="how-researchers-actually-research">How researchers actually research</h2>
<p>The field has a strong bias toward fancy, intellectually exciting techniques, and this leads to bad tactical decisions. The guiding principle is to use the simplest method that works. The order of attempts:</p>
<ol type="1">
<li>Prompting</li>
<li>Reading the chain of thought</li>
<li>Prefill attacks</li>
<li>Steering vectors</li>
<li>Probes</li>
<li>White box and mechanistic techniques</li>
</ol>
<p>An honest assessment of SAEs fits naturally here. They are strong for <strong>unsupervised discovery</strong>: finding unexpected things like entity recognition, implicit planning, and hidden goals. They are weak for tasks with a clear target, where constructing a dataset to investigate directly tends to outperform them. They are also weak for generalization out of distribution and for unlearning.</p>
</section>
<section id="transferable-strengths-of-mech-interp-researchers" class="level2">
<h2 class="anchored" data-anchor-id="transferable-strengths-of-mech-interp-researchers">Transferable strengths of mech interp researchers</h2>
<p>Nanda identifies five:</p>
<ol type="1">
<li><strong>Working with model internals.</strong> Steering, probing, activation patching. These tools have different failure modes than standard ML.</li>
<li><strong>Deep dives.</strong> Taking a question about model behavior and producing a reliable, principled explanation. Good for auditing, red teaming, and confirming suspected misbehavior.</li>
<li><strong>Scientific mindset.</strong> Forming and testing hypotheses about complex phenomena with no clear ground truth. Designing experiments to falsify claims about fuzzy questions.</li>
<li><strong>Qualitative insight.</strong> Using SAEs and similar tools to find the key factors driving a specific behavior. Model biology work and shutdown resistance are examples.</li>
<li><strong>Unsupervised discovery.</strong> Surfacing hypotheses you would not have thought to look for. Linear world models in Othello, entity recognition in LLMs.</li>
</ol>
</section>
<section id="what-is-exciting-now-chain-of-thought-monitorability" class="level2">
<h2 class="anchored" data-anchor-id="what-is-exciting-now-chain-of-thought-monitorability">What is exciting now: chain of thought monitorability</h2>
<p>Of all the open directions, the one I find most compelling is chain of thought monitorability. The pitch is simple. Today’s frontier reasoning models think aloud in English before answering. If we can trust the CoT, safety gets dramatically easier: we read the CoT and check for anything suspicious. This is the cheapest alignment tool we have ever had. The question is whether it actually works, and for how long.</p>
<section id="cot-faithfulness" class="level3">
<h3 class="anchored" data-anchor-id="cot-faithfulness">CoT faithfulness</h3>
<p>The naive safety strategy is to read the CoT and look for red flags. There is real evidence this works sometimes and fails other times. Arcuschin et al.&nbsp;and Chen et al.&nbsp;both document cases of <strong>unfaithful</strong> CoT, where the reasoning the model writes is not the reasoning the model used. Several distinct failure modes show up:</p>
<ol type="1">
<li><strong>Post hoc rationalization.</strong> The model picks an answer first and then constructs a plausible justification (Arcuschin et al., Lindsey et al.).</li>
<li><strong>Hidden hint following.</strong> Given a hint, the model changes its answer but does not admit to using the hint (Chen et al.).</li>
<li><strong>Logical shortcuts.</strong> Stuck on a math problem, the model claims a valid proof while quietly skipping steps (Arcuschin et al.).</li>
<li><strong>Last minute flips.</strong> A reasonable CoT ends with a final answer that contradicts the reasoning (Arcuschin et al.).</li>
</ol>
<p>These are distinct phenomena with potentially distinct mechanisms, and being able to <em>tell them apart</em> is itself a research question with traction.</p>
<p>A few directions feel tractable:</p>
<ul>
<li><strong>Induce suspicious reasoning and see what happens.</strong> Train the CoT to be distorted, or tell the model its CoT is being monitored. Does it still do the bad behavior but with a cleaner CoT? How complex a behavior can it hide?</li>
<li><strong>Synthetic document finetuning.</strong> Train a model on synthetic documents to believe it should have an unfaithful CoT, then interpret what is happening inside. This is the kind of model organism setup that could actually be mechanistically pinned down.</li>
<li><strong>Causal importance of CoT.</strong> Can we tell when a CoT was causally important for a model’s answer? This is subtle. A causally irrelevant CoT can still produce the same answer, and editing the CoT knocks the model off distribution in ways that change the answer for unrelated reasons.</li>
<li><strong>Better monitors.</strong> Design metrics for whether the CoT is really telling us what we think it is.</li>
</ul>
</section>
<section id="latent-cot-interpretability" class="level3">
<h3 class="anchored" data-anchor-id="latent-cot-interpretability">Latent CoT interpretability</h3>
<p>At some point we probably stop using English CoT. Models will reason in latent vectors, and the cheap safety tool goes away. Figuring out how much interpretability can make up for that loss is a big deal.</p>
<p>The glaring flaw is that we do not know what future latent reasoning models will actually look like. There are contenders, though, and projects targeting any serious contender are probably fruitful, with the caveat that the more specific a project is to one model, the less its lessons generalize.</p>
<p>A concrete starting point: pick an open source latent CoT model, pick a task with high serial depth like a hard math or logic problem, and try to interpret what is happening. De-risk with a mini-project first. Filter for models with hype behind them and that have been shown effective at reasonable scale. A natural extension is to test how well existing techniques (probes, SAEs, activation patching) transfer.</p>
</section>
<section id="why-this-over-everything-else" class="level3">
<h3 class="anchored" data-anchor-id="why-this-over-everything-else">Why this over everything else</h3>
<p>Three reasons. First, it connects directly to a theory of change (empowering other safety areas, specifically CoT monitoring), and also to science of misalignment, since unfaithful CoT is the clearest window into “does the model have ulterior motives.” Second, the proxy tasks are concrete and run on today’s models. Third, there is a built-in deadline: the tool becomes less useful every time a new architecture moves reasoning out of natural language.</p>


</section>
</section>

 ]]></description>
  <category>reflection</category>
  <guid>https://induction1.github.io/notes/starting-out/</guid>
  <pubDate>Tue, 14 Apr 2026 04:00:00 GMT</pubDate>
</item>
<item>
  <title>[Review] A Mathematical Framework for Transformer Circuits</title>
  <link>https://induction1.github.io/notes/transformer-circuits/</link>
  <description><![CDATA[ 





<p>Notes on <a href="https://transformer-circuits.pub/2021/framework/index.html">Elhage, Nanda, Olsson et al.&nbsp;(2021)</a>. This paper kicked off the Anthropic transformer circuits thread. This is one of the first serious attempts to reverse engineer what’s happening inside a transformer, and more importantly, it develops the <em>mathematical language</em> for doing so. The results are on tiny attention only models, but the framework (residual streams, QK/OV circuits, path expansions) became the foundation for everything that followed in mechanistic interpretability.</p>
<section id="transformer-overview" class="level2">
<h2 class="anchored" data-anchor-id="transformer-overview">Transformer overview</h2>
<p>A decoder only transformer is an embedding, then a series of residual blocks each containing an attention layer followed by an MLP layer, then an unembedding. Every layer reads from the residual stream via a linear projection and writes back to it by adding its output.</p>
<p><img src="https://latex.codecogs.com/png.latex?x_0%20=%20W_E%20t"> <img src="https://latex.codecogs.com/png.latex?x_%7Bi+1%7D%20=%20x_i%20+%20%5Csum_%7Bh%20%5Cin%20H_i%7D%20h(x_i)"> <img src="https://latex.codecogs.com/png.latex?x_%7Bi+2%7D%20=%20x_%7Bi+1%7D%20+%20m(x_%7Bi+1%7D)"> <img src="https://latex.codecogs.com/png.latex?T(t)%20=%20W_U%20x_%7B-1%7D"></p>
<p>The paper makes a key simplification by dropping the MLP layers entirely and studying attention only transformers. MLPs are nonlinear and have proven much harder to interpret. Even today, understanding MLP layers remains a major open problem. Attention layers, by contrast, are almost entirely linear: once you fix the attention pattern, everything is just matrix multiplies. This makes them tractable to analyze with linear algebra.</p>
<p>They also drop biases and layer normalization. Biases can be simulated by folding them into the weights by creating a dimension that’s always 1, and layer norm can be approximately merged into adjacent weight matrices. These simplifications don’t change the fundamental structure, they just strip away noise to reveal what’s really going on.</p>
</section>
<section id="the-residual-stream-as-a-communication-channel" class="level2">
<h2 class="anchored" data-anchor-id="the-residual-stream-as-a-communication-channel">The residual stream as a communication channel</h2>
<p>Here’s an insight that sounds simple but changes how you think about the whole architecture: the residual stream is just a sum. Each layer adds its contribution, and the result accumulates. Nothing in the architecture processes the residual stream itself. It is purely a communication channel between layers.</p>
<p>Because everything is linear, the residual stream has no privileged basis: you could rotate it and adjust the weights to compensate without changing behavior. Since layers read and write linearly, you can also multiply out “virtual weights” between any two layers to reason about their interaction directly. And because each attention head operates on a small subspace of the full <img src="https://latex.codecogs.com/png.latex?d_%5Ctext%7Bmodel%7D">, heads can easily write to disjoint subspaces and ignore each other entirely. The catch is that the residual stream is massively oversubscribed. There are far more neurons and head dimensions competing to store information than there are residual stream dimensions to go around, so analyzing weights is more productive than staring at activations.</p>
</section>
<section id="attention-heads-and-information-movement" class="level2">
<h2 class="anchored" data-anchor-id="attention-heads-and-information-movement">Attention heads and information movement</h2>
<p>Attention heads are independent and additive. The standard “concatenate and multiply” formulation obscures this, but it’s mathematically equivalent to each head computing its own output and adding it to the residual stream separately. The fundamental action of an attention head is moving information from one token’s residual stream to another’s.</p>
<p>This decomposes cleanly into two independent operations. The <strong>QK circuit</strong> <img src="https://latex.codecogs.com/png.latex?W_E%5ET%20W_%7BQK%7D%5Eh%20W_E"> determines which tokens attend to which, as a bilinear function of source and destination tokens. The <strong>OV circuit</strong> <img src="https://latex.codecogs.com/png.latex?W_U%20W_%7BOV%7D%5Eh%20W_E"> determines what happens to the output logits when a token is attended to. These are both just matrices over the vocabulary, and they can be studied independently. Once you fix the attention pattern, the whole head is linear.</p>
</section>
<section id="zero-layer-transformers" class="level2">
<h2 class="anchored" data-anchor-id="zero-layer-transformers">Zero layer transformers</h2>
<p>With no attention, a zero layer transformer is just <img src="https://latex.codecogs.com/png.latex?T%20=%20W_U%20W_E">. It can’t move information between tokens, so the best it can do is learn the bigram log likelihood of the next token given the current one. Not interesting on its own, but worth noting that the <img src="https://latex.codecogs.com/png.latex?W_U%20W_E"> term shows up as a “direct path” in every larger transformer, absorbing whatever bigram statistics the rest of the model doesn’t handle.</p>
</section>
<section id="one-layer-transformers" class="level2">
<h2 class="anchored" data-anchor-id="one-layer-transformers">One layer transformers</h2>
<p>One layer attention only transformers turn out to be an ensemble of a bigram model and a bunch of “skip trigram” models. A skip trigram is a pattern of the form <code>[source] ... [destination] → [out]</code>, where the head attends from the destination token back to the source token and uses that source to shift the logits for the next token. The path expansion of the logits makes this explicit:</p>
<p><img src="https://latex.codecogs.com/png.latex?T%20=%20%5Ctext%7BId%7D%20%5Cotimes%20W_U%20W_E%20+%20%5Csum_%7Bh%7D%20A%5Eh%20%5Cotimes%20W_U%20W_%7BOV%7D%5Eh%20W_E"></p>
<p>The first term is the bigram direct path. Each other term is a head’s contribution, split cleanly into an attention pattern <img src="https://latex.codecogs.com/png.latex?A%5Eh"> and an OV matrix <img src="https://latex.codecogs.com/png.latex?W_U%20W_%7BOV%7D%5Eh%20W_E"> that tells you how attending to a source token adjusts the logits.</p>
<p>The OV and QK matrices are nominally huge, roughly 50k by 50k, but their rank is only <img src="https://latex.codecogs.com/png.latex?d_%5Ctext%7Bhead%7D">, so 64 or 128. They’re low rank factorizations of a giant behavior table, and reading off the largest entries gives you interpretable skip trigrams. Most of what these heads learn is <strong>copying</strong>: the OV circuit boosts the probability of whatever token it attends to, and the QK circuit attends back to tokens that could plausibly come next. This is already a primitive form of in context learning.</p>
<p>Copying shows up cleanly in the eigenvalues of the OV circuit. If <img src="https://latex.codecogs.com/png.latex?v"> is an eigenvector with positive eigenvalue <img src="https://latex.codecogs.com/png.latex?%5Clambda">, then <img src="https://latex.codecogs.com/png.latex?Mv%20=%20%5Clambda%20v"> means that the set of tokens represented by <img src="https://latex.codecogs.com/png.latex?v"> mutually boost their own logits when attended to. A copying head should have mostly positive eigenvalues, and in practice about 10 of 12 layer 1 heads do. Random matrices have a roughly even split of positive and negative eigenvalues, for contrast.</p>
<p>The one layer model also exhibits a fun failure mode: because each head factors its behavior through a single source-destination interaction and a single OV matrix, three way interactions leak. If a head learns to boost <code>keep ... in → mind</code> and <code>keep ... at → bay</code>, it will also boost <code>keep ... in → bay</code> and <code>keep ... at → mind</code>. These “skip trigram bugs” are small, but they’re an early example of interpretability surfacing real model failures from the weights alone.</p>
</section>
<section id="two-layer-transformers-and-induction-heads" class="level2">
<h2 class="anchored" data-anchor-id="two-layer-transformers-and-induction-heads">Two layer transformers and induction heads</h2>
<p>The key difference between one and two layer models is <strong>composition</strong>. A second layer head can read from a subspace that a first layer head wrote to, so its attention pattern or output can depend on what an earlier head did. There are three kinds:</p>
<ul>
<li><strong>Q-composition</strong>: <img src="https://latex.codecogs.com/png.latex?W_Q"> of a later head reads a subspace written by an earlier head.</li>
<li><strong>K-composition</strong>: <img src="https://latex.codecogs.com/png.latex?W_K"> of a later head reads a subspace written by an earlier head.</li>
<li><strong>V-composition</strong>: <img src="https://latex.codecogs.com/png.latex?W_V"> of a later head reads a subspace written by an earlier head.</li>
</ul>
<p>Q and K composition change the <em>attention pattern</em> of the second head, letting it attend based on what earlier heads computed. V-composition is different: it chains value movement with value movement, effectively creating a single “virtual attention head” with attention pattern <img src="https://latex.codecogs.com/png.latex?A%5E%7Bh_2%7D%20A%5E%7Bh_1%7D"> and OV matrix <img src="https://latex.codecogs.com/png.latex?W_%7BOV%7D%5E%7Bh_2%7D%20W_%7BOV%7D%5E%7Bh_1%7D">.</p>
<p>Path expanding the two layer logit equation gives a direct path, individual head terms identical to the one layer case, and new virtual head terms from V-composition.</p>
<section id="induction-heads" class="level3">
<h3 class="anchored" data-anchor-id="induction-heads">Induction heads</h3>
<p>The main result of the paper. In the two layer model studied, composition is used almost entirely for one thing: constructing <strong>induction heads</strong>. An induction head implements the pattern <code>[a][b] ... [a] → [b]</code>. It looks back through the context for previous occurrences of the current token and predicts whatever came next. This is a much more powerful form of in context learning than the one layer copying heads, and it works even on sequences of random tokens, since it doesn’t rely on bigram-like statistics about which tokens usually follow which.</p>
<p>A first layer <strong>previous token head</strong> attends from each position to the one before it and copies that token’s information into the residual stream. A second layer head then uses <strong>K-composition</strong> to read those shifted keys: the query is the current token, but the keys have been shifted forward by one position. Matching query to key finds positions where the previous token matches the current one, which is exactly where a repeated sequence would continue. The OV circuit of the second head is a copying matrix, so attending there copies the next token forward.</p>
<p>Checking the theory: induction heads should have a copying OV matrix and a “matching” QK matrix on the K-composition term. Both conditions correspond to strongly positive eigenvalues, and all the induction heads in the model sit in the extreme corner of this 2D space of eigenvalue positivity. This is not a circular test, because K-composition being large doesn’t mechanically force the resulting matrix to have positive eigenvalues; that only happens if the algorithm really is the induction algorithm.</p>
</section>
<section id="term-importance-and-virtual-heads" class="level3">
<h3 class="anchored" data-anchor-id="term-importance-and-virtual-heads">Term importance and virtual heads</h3>
<p>Path expansion gives an equation with exponentially many terms: direct path, individual heads, pairs of composed heads, triples, and so on. To check whether the high order virtual head terms actually matter, the authors ablate them using a recursive trick: run the model, record attention patterns, then run again with the patterns frozen and attention head outputs progressively zeroed out. Differences in loss isolate the contribution of each order of V-composition.</p>
<p>The result: virtual heads from V-composition contribute very little in this two layer model. Almost all the useful behavior lives in the direct path plus individual heads. That said, the number of possible virtual heads grows exponentially with depth, so in larger models they may well carry much more weight. Q and K composition, importantly, are a separate story and clearly do matter here since they’re the mechanism behind induction heads.</p>
</section>
</section>
<section id="where-this-leaves-us" class="level2">
<h2 class="anchored" data-anchor-id="where-this-leaves-us">Where this leaves us</h2>
<p>The paper makes no claim to explain real language models. It explains tiny attention only toy models and develops a vocabulary: residual stream, virtual weights, QK and OV circuits, path expansion, composition, induction heads. That vocabulary turns out to be the right one. Even in the presence of MLPs, attention heads still read and write through the residual stream, and circuits built purely out of attention still exist in large models. Induction heads in particular show up in transformers of every size studied since, and they drive much of in context learning.</p>
<p>As the authors admit, there are certainly limitations. MLPs are two thirds of a standard transformer’s parameters, and this framework says nothing about them. Large chunks of model behavior live there, and until MLP layers yield to a similar decomposition, full reverse engineering of a real model stays out of reach. But the foothold is real. Everything from activation patching to SAEs to attribution graphs sits on top of the conceptual frame this paper put down.</p>


</section>

 ]]></description>
  <category>circuits</category>
  <category>paper-notes</category>
  <guid>https://induction1.github.io/notes/transformer-circuits/</guid>
  <pubDate>Sat, 11 Apr 2026 04:00:00 GMT</pubDate>
</item>
</channel>
</rss>
