← Ledger

Reading the logs of MIT's AI weight-editing experiments

An MIT team showed an AI reading and rewriting the weights of other neural networks. I went through their released logs to see what each of the eight experiments did and what's behind the headline numbers.

Contents
  1. The first layer gives the game away
  2. Writing weights mostly means writing rules
  3. The math result fixed a broken mode
  4. Bigger networks needed tools, not reading
  5. What I want to try next

I had Claude go through the full logs of a new MIT study where GPT-6 Astra, OpenAI’s newest model, read and rewrote the weights of other neural networks. Weights are the numbers inside an AI model, and normally only training changes them. The results are real, but most are smaller than they sound. The edits are mostly rules wired in by hand or one bug fix, and reading raw weights with no tools only worked on tiny networks.

I found it through Matthew Berman’s video. The original write-up is a blog post, not a peer-reviewed paper, and the team released every prompt, reply and network. That’s the only reason any of this could be checked, so credit to them. It’s a fun place to keep going from, not a sign of AI about to rewrite itself.

  • Naming a game from a trained network (experiment 1). It got all four. The game is visible in the first layer of weights, as the picture below shows.
  • Saying what a tiny image model draws (2). All three shapes right. It drew them as outlines, but the models draw filled shapes.
  • Naming the language a tiny language model learned (3). Right all six times, but only 48 to 62% sure, picking from three. It used Python and a known interpretability method.
  • Fixing a car stuck on a ramp (4). It worked in all 1,024 runs. The fix is a hand-wired rule made of about 50 numbers.
  • Writing game networks from scratch (5). Its Breakout network scored 20 times a trained one. 96% of its weights are zero and the rest work like switches.
  • Writing a Go network (6). Without test games it lost to a trained network of the same size. With 50 rounds of test games it won 70 to 79% of games.
  • Finding the people-pleaser (7). From the weights alone it couldn’t tell which of two models agrees with whatever answer you suggest. Allowed to see where each model looks while it reads, it picked right all three times.
  • Making a small model better at math (8). 7.9% to 48.1%, by removing a looping bug. On a model that didn’t loop, nothing improved.

The first layer gives the game away

All four game networks have the same shape and the same inputs, so the only clue is the weights. But you don’t need to read deep. Plot how strong the first-layer weights are for each square of the 10 by 10 grid and the games show up on their own.

Eight heatmaps on a 10 by 10 grid, one column per game. Top row, the player's weights: one bright row along the bottom for Breakout, one bright column on the left for Pong, a maze of corridors for Pac-Man, a block over the road for Freeway. Bottom row, the reward weights: three rows of bricks for Breakout, the right edge for Pong, two single squares for Pac-Man, the top row for Freeway.
Where each trained network's first layer is strong. Brighter is stronger. The top row is the squares where the player can be, the bottom row the squares where rewards are. Made from the team's released networks.

Breakout’s player lives on one row, a paddle. Pong’s lives on one column. Pac-Man’s draws a maze and Freeway’s covers the road. Astra’s answers point at exactly these patterns. Doing that from 17,253 numbers pasted in as text, with no tools, is still neat. But it’s pattern spotting on the first layer, not understanding the network, and the researchers say as much about their first two experiments.

Writing weights mostly means writing rules

In experiments 4 to 6 Astra didn’t tune a network the way training does. It wrote a small program and turned it into weights, using huge values that make each neuron act like an on/off switch.

  • The car. The fix is 51 lines like actor0.W[6, 122] = 80. Most of the 6,073 changed numbers come from zeroing six neurons per layer so it could take them over. The real fix is about 50 hand-picked numbers that say back up, go full throttle past a certain spot, then hand control back to the trained network.
  • Breakout. 815 of the 20,486 weights aren’t zero, with values like 1,000 and -200. The first layer works out where the ball will land and the second moves the paddle there. The input is a 10 by 10 grid of on/off squares, not a screen of pixels.
  • Go. A 336-line Python script set the weights. One kind of neuron gets +4 from “my stone is here”, -1 from each stone next to it, and a bias that makes it output exactly how many empty points surround my stone. Later layers use that to find groups about to be captured.

That’s a real skill, and a person with a few hours and a calculator could do the same kind of thing. What makes trained networks good is the millions of small in-between values nobody wrote, and these experiments mostly skip that. Someone on X found open models do better writing the rules as plain Python than as weights, which fits.

The math result fixed a broken mode

Qwen3.5-0.8B is a small open model with a “thinking” mode that loops. In that mode 93% of its answers on the MATH-500 test kept repeating themselves until they hit the 32,768-token length limit. Astra found the direction in two layers that drives the looping and removed it, changing 131,072 weights (0.016%). The loops mostly stopped, and the score rose with them.

RunMATH-500 scoreAnswers that hit the length limit
Unedited7.993.0
Edited, 10 test passes12.387.2
Edited, 25 test passes14.186.4
Edited, 50 test passes48.133.1
The score went up when the loops went away

A test pass is one batch of up to 512 practice problems Astra could run the model on. What the 6x headline leaves out:

  • It’s one run. The runs left out of the post made no edit or gained less. The 5-pass run and a second 10-pass run made no edit at all.
  • Thinking mode isn’t the default. Qwen’s model card says this model runs without thinking by default, and the post never gives that score. Several people on X who re-ran it that way say the unedited model already scores close to the edit, and one reports 45.6%.
  • The edit itself is real. Hugging Face rebuilt it from the logs and got 51.0%.
  • It can’t add skill. On Gemma 3 270M, which rarely loops, no edit moved the score more than about a point.

Bigger networks needed tools, not reading

The two “reading” tests on bigger models were less like reading. In experiment 3 Astra had Python and ran 6 to 11 scripts on the 7.2 million weights, using a method from a 2021 interpretability paper. In experiment 7, on two copies of a 270-million-weight model, four tries from the weights alone came out as coin flips, at 15 minutes to 2 hours per pair. It only got there with a tool that runs both models and shows where they look, at 30 to 40 minutes per pair. Pasting the raw weights in as text only ever worked up to 172,000 weights.

What I want to try next

Editing a small image model’s weights toward a color or a texture, and checking every step, because it’s easy to blame the wrong neuron.

Every experiment's size and setup
#NetworkWeightsWhat Astra had
1Game player on a 10 by 10 grid17,253The weights as text, no tools
2Tiny image model, 12 by 12 shapes23,824The weights as text, no tools
3Tiny language model that predicts letters7.2 millionPython, but it couldn’t run the model
4Car controller171,664The weights as text, no tools, one reply
5Game players written from zero20,486The game’s rules and code, no tools
6Go player written from zero1.48 millionPython, plus up to 50 rounds of test games
7Gemma 3270 millionPython, then a tool showing where it looks
8Qwen3.50.8 billionPython, plus up to 50 test passes

Experiments 1 and 2 took a minute or two per network. The Breakout network took 8 minutes. Go took 22 minutes with no test games and about an hour and a half with 50. Each math run took 8.5 to 20 hours.

Claude read the write-up, all eight experiments’ logs and the reactions on X for this post, and checked every number against the logs.