技術約6分で読めます

ファインチューニングで暗記した知識をLLMが推論に使えない原因を層単位で特定した論文

いけさん目次

ファインチューニングで暗記させた知識をLLMが推論で使えないのは、知識が推論回路の走る中間層に伝わっていないから、という論文がarXivに出ていた(arXiv:2607.08393)。
この「知っているのに使えない」状態をKnowing–Using Gapと名付け、Qwen-2.5の1.5B/3B/7BとLlama-3.2/3.1の1B/3B/8Bの計6モデルで検証している。

著者は香港科技大学(HKUSTとHKUST(GZ))のグループ。
単一層SFTJ-lensで層単位の話が続いていたので、その流れで読んだ。

暗記0.998、その知識を使う推論は0.078

STaRKという半構造化知識ベースのベンチマーク(生物医学のPrimeと学術文献のMAG)から、モデルが知らない事実を1,000件取り出す。
事実は「エンティティ→関係→エンティティ」のトリプル形式で、これを文章に展開してファインチューニングする。フルパラメータとLoRA(rank 16・α32)の両方で試している。

評価は、注入した事実をそのまま聞く一問一答(暗記)と、その事実を使う2種類の推論タスク。
Chainingは覚えた事実2つを直列につなぐ2段推論で、論文の例だとこうなる。

  • 暗記1: 「胚で発現するタンパク質は? → IGFBP3」
  • 暗記2: 「IGFBP3を標的とする薬は? → Mecasermin」
  • 2段推論: 「胚で発現するタンパク質を標的とする薬は? → Mecasermin」

もう1つのIntersectionは「gliomaとhypothyroidismの両方に関係する曝露は?」のように、複数の事実に共通する答えを絞り込むタスク。
どちらも、個別の暗記ができていれば新しい知識を何も足さずに解ける問題になっている。
それでも暗記と推論の正答率はここまで開いた(6モデルから抜粋)。

モデル暗記ChainingIntersection
Qwen-2.5-1.5B0.9980.0780.440
Qwen-2.5-7B0.9960.1240.504
Llama-3.1-8B0.9860.1820.458

時間方向にもズレがある。
LoRAのChainingでは、暗記が飽和するのが平均10.4エポック、推論の正答が安定するのが平均15.0エポックで、4.6エポック遅れて到達した。
IntersectionのラグはChainingより小さく0.6エポック。
暗記精度を基準にした早期終了(early stopping)は、知識が使えるようになる前に学習を止めてしまう。

self-patchingは自分の隠れ状態を自分に移植する

原因を探る道具として、論文はself-patchingという介入手法を作った。
activation patching(別の実行時の内部状態を差し込んで出力の変化を測る、機構解釈の定番手法)の変種で、移植元も移植先も同じファインチューニング済みモデル自身という点が名前の由来。

(1) 暗記プロンプト(一問一答)を流し、ソース層のhead entity(事実トリプルの主語側エンティティ)のトークン位置から隠れ状態を取り出して保存する。
(2) 推論プロンプトを流し、ターゲット層の同じエンティティのトークン位置に保存した隠れ状態を差し替える。
(3) そのまま前向き計算を続け、正解トークンの確率がどれだけ変わったかを記録する。
(4) これを全部の層ペアで繰り返し、どこからどこへの移植が失敗を直すかをヒートマップにする。

flowchart TD
    A[暗記プロンプトを実行] --> B[ソース層の<br/>エンティティ位置の隠れ状態を保存]
    B --> C[推論プロンプトを実行]
    C --> D[ターゲット層の<br/>同じエンティティ位置に差し替え]
    D --> E[前向き計算を続行]
    E --> F[正解トークンの確率変化を記録]
    F -->|層ペアを変えて走査| A

既存のcausal tracing(正常に動くケースにノイズを入れて、どこを壊すと出力が崩れるかで重要箇所を探す手法)とは逆で、self-patchingは失敗しているケースを「どこに移せば直るか」で走査する。
推論に失敗している事例そのものに直接適用できる。

注入した知識は早期層と後期層にとどまっていた

スキャンの結果、失敗を直せる移植位置は2つのクラスタに集中していた。
深さ80%付近の後期層から深さ50%付近の中間層への移植と、深さ10%付近の早期層から同じく中間層への移植。
つまり、注入された知識は早期層と後期層には載っているのに、推論の計算が走る中間層まで伝わっていない。

論文はこれをknowledge-circuit misalignment(知識と推論回路のずれ)仮説と呼んでいる。
暗記タスクの損失は数エポックで下がりきり、そこで勾配の更新が止まる。
知識の表現はその時点の置き場所で更新されなくなり、中間層の推論回路からは読み出せないままになる(論文はこれをstranded=座礁と呼んでいる)。

この解釈を裏づけるのがオラクル条件(テスト事例ごとに全層ペアを走査して最良の移植先を選ぶ理想条件)の数字で、パッチ1回でここまで戻った。

モデルChaining同+オラクル移植Intersection同+オラクル移植
Qwen-2.5-1.5B0.0780.7930.4400.987
Qwen-2.5-7B0.1240.7740.5040.956
Llama-3.1-8B0.1820.7950.4580.921

重みは1ビットも変えずに、表現を推論回路のある層へ置き直しただけで正答が戻った。
これは人間で言う丸暗記とは違う。丸暗記は意味を理解していないので、思い出させても応用問題は解けない。
ここでは答えを出せる形の知識がすでにモデル内にあり、応用の場面で呼び出されていないだけ。
公式を聞かれれば即答できるのに、文章題でその公式を使うことに気づかない生徒に近い。

なお、先日読んだRL訓練の層局在の論文では、利得が深さ40〜60%の中間層に集中していた。今回の移植先の中心50%前後は、その真ん中に入る。

固定の層ペアでも6〜7割戻る

オラクルはテスト事例ごとの総当たりなので、そのままでは実用にならない。
そこで論文は、上の2クラスタを固定の層ペア2本(総層数Lに対して後期0.8L→中間0.5Lと、早期0.1L→中間0.5L)に決め打ちする戦略を試している。
これだけで、オラクルが直せた分の58〜75%を回復した。Chainingの平均だと、パッチなし0.121→固定ペア0.357(オラクル0.444)。

ただしこれは推論時の介入であって、学習の直し方ではない。
毎回の入力について、事実の主語側エンティティがプロンプトのどこにあるかを知っている前提の処置で、任意の質問が飛んでくる運用には使えない。
論文自身も限界(limitations)の節で、ファインチューニング中に「どの事実が使えないまま終わるか」を予測する早期シグナルの開発を今後の課題に挙げている。

J-lensとself-patchingの関係

道具としてのself-patchingは、J-lensと対になる位置にある。
J-lensは各層の残差ストリーム(各層が読み書きしながら次へ渡すベクトル列)を語彙に射影して、その層で何が読み出せるかを見る観測の道具で、モデルには触らない。
self-patchingは隠れ状態を実際に動かして、そこに移すと出力が変わるかまで確かめる介入の道具になる。

この論文の主張をレンズ側の言葉に置き換えると、一問一答では答えのトークンが後期層で浮上するのに、2段推論では中継エンティティが中間層で浮上してこない、という予測になる。
J-lens記事で確かめた、答えの根拠になる未発話の概念(ブーツの形の国=イタリア)が中間層に載っている現象の、ちょうど失敗側にあたる。

self-patchingの走査結果で層を選び、単一層SFTの要領で中間層側だけ再学習したら、このずれは解消するのか。論文はそこまではやっていない。