大規模言語モデルは、文章を書く道具としてはもうおなじみだが、この元記事が扱うのは少し変わった使い方だ。モデルの「重み」、つまり学習済みの数値の塊そのものを読んだり、必要に応じて書き換えたりできるのではないか、という話である。しかも対象は理屈上の夢物語ではなく、GPT-6 Astraのようなフロンティア級モデルが、実際にどこまでできるかを検証している。性能向上の話としても、解釈可能性の話としても、かなり刺さる内容だと思う。
元記事の主張は明快だ。フロンティアLLMは、ニューラルネットワークの重みを「自然言語のまま」読んで、必要なら編集までできる。著者らはこれを Weight-Space Programming と呼んでいる。ここでいう重みは、ふつうは勾配降下法や専用の最適化アルゴリズムが更新する数値群だが、Astraはその重み列を見て、ネットワークが何を学習したのかを当てたり、壊れた挙動を直したり、さらには新しい方策を最初から書いたりする。
最初の実験では、PPOで学習した4つのゲーム用方策ネットワークを対象にした。ゲームは Breakout、Pong、Pac-Man、Freeway の独自10×10版で、ネットワーク構成は共通の MLP 500→32→32→5、tanh、重みは17,253個。Astraにはゲーム名を伏せたまま重みだけを渡し、「このネットワークは何のゲームのために学習されたのか」と尋ねる。すると、4つすべてで正解を当てた。著者は、入力チャネルの重みがどの場所に集中しているか、出力層がどの行動を分けているかを手掛かりにしているのではないかと説明している。
次に、12×12のグレースケール画像を生成する3つの diffusion model を調べた。対象は円、三角形、四角形を出力する DDPM で、Astraは重みだけを見て、どの図形を生成するモデルかを当てる。ここではforward passは禁止されている。Astraはこれも言い当てたが、面白いのは、実際の出力が「塗りつぶし図形」なのに、Astraは輪郭として解釈してしまった点だ。著者はこのズレを、単に計算で当てたのではなく、重みの構造や幾何を読んでいる証拠だとみている。
さらに踏み込んだのが、4層×6ヘッドの小さな文字レベルTransformerだ。学習対象は Python、ローマ字表記の日本語、英語の3種類で、入力層と出力層を外し、中間の4つのTransformer blockだけをAstraに渡す。するとAstraは、どの言語で学習されたかを全て当てただけでなく、24個のattention headのうち「コピーに使う induction head」がどれかも特定した。しかも、測定して見つかった本物のコピーheadと一致している。
後半では、読むだけでなく「修正する」例が出てくる。Astraは、0.8B規模の Qwen3.5-0.8B の重みを見て、数学性能を落としている原因を見つけ、0.016%の重みだけを編集した。学習ループも勾配も使わない。結果として MATH-500 は7.9%から48.1%へ上がり、しかも instruction following も IFEval で3倍に伸びたという。つまり、自然言語で目的を与えるだけで、LLMが重みを読んで、問題箇所を見つけ、最小限の修正を加えるところまで来ている、というのが元記事の骨子だ。
驚きはあるが、私はこの結果をそのまま「LLMが神秘的に理解した」とは受け取らないほうがいいと思う。むしろ、重みの中にあるパターンを、LLMがかなり人間寄りの言葉で説明可能な形に変換している、と見るほうが自然だ。ゲームなら入力チャネルの分布、図形ならエッジの局所構造、言語ならコピーheadの有無。いずれも、人間が見ても完全には読めないが、全く無秩序でもない。Astraはその中間をうまく拾っているように見える。
ただし、ここで気をつけたいのは「当てた」ことと「一般に読める」ことは違う、という点だ。4つのゲームを当てる、3種類の図形を当てる、3種類の言語を当てる。どれもきれいなデモではあるが、現場で本当に欲しいのは、未知の巨大モデルの特定の失敗原因を安定して読めるかどうかだ。元記事もそこは慎重で、あくまで early results としている。私はこの慎重さが重要だと思う。能力があることは示せても、まだ「どこまで頼れるか」は別問題だからだ。
この話の面白さは、単に「モデル内部を読めました」では終わらないところにある。従来、重みの更新は optimizer の仕事だった。Adam や Muon のような小さな数式系に、人間が帰納バイアスを押し込んでいたわけだ。元記事は、その役回りを自然言語で考えるLLMが引き受け始めるかもしれない、と言っている。これはかなり大きな転換だと思う。
もし本当にそうなら、モデル開発のボトルネックは「勾配をどう流すか」だけではなく、「どの機能がどの重みに宿っているかをどう言語化し、どう介入するか」になる。そうなると、評価指標も変わるはずだ。精度だけでなく、説明可能な修正か、局所的な編集で済むか、別タスクへ副作用が出ないかが重要になる。Qwen3.5-0.8Bの例で数学が上がっただけでなく instruction following も改善したのは、偶然かもしれないが、少なくとも「重みの局所修正が別の能力を引き出す」可能性を示している。ここは、今後のモデル編集研究にかなり効いてくるはずだ。
一方で、この技術が実用化したときの怖さもある。重みを自然言語で読めるなら、悪意ある編集もしやすくなるからだ。たとえば、特定の出力傾向だけを変える、あるいはモデルの性格や安全性に関わる部分を局所的にいじる、といったことが理屈の上ではやりやすくなる。元記事はそこまで踏み込んでいないが、私はここを無視できないと思う。
さらに、0.016%だけを直して大きく改善した、という結果は魅力的に見える反面、再現性の面では慎重さが要る。別のモデル、別の失敗パターン、別の重み初期化でも同じようにうまくいくのか。もし再現性が低いなら、それは「理解して直した」というより「たまたま刺さる微修正を見つけた」に近い可能性もある。だからこそ、今後は成功例の派手さより、失敗例や限界の記述が大事になると思う。こういう研究は、当たった一発より、外したときに何が見えるかのほうが価値を持つことが多い。
最後に、これは研究室の中だけの話では終わらない気がする。今後、LLMが重みの構造を読めるようになるなら、モデル開発者は「学習済みモデルをブラックボックスとして渡す」だけでは足りなくなるかもしれない。どの層に何が埋まっているかを人間が概念的に追えるようにする設計、あるいはLLMに読ませやすい内部表現を意識する設計が、地味だが効いてくる可能性がある。
私は、Weight-Space Programming は「LLMがコードを書く」より一段深い段階だと思う。コードはまだ人間が読む言語でできているが、重みは本来、読み手の存在を想定していない。それを自然言語のまま扱えるなら、モデル開発はかなり変わる。もっとも、今のところはまだ実験段階で、万能な手法ではない。だからこそ、これは大げさに騒ぐより、「重みを読むための新しいインターフェースが生まれた」と受け止めるのがいちばん正確ではないかと思う。
参考: Sparks of Weight-Space Programming: LLMs can natively read & write neural network weights