スパースオートエンコーダによる解釈
LLMの中間活性を単義的な特徴へ分解できる。重ね合わせを疎な辞書でほどくSAEの原理と学習の勘所、特徴ステアリングによる因果検証まで実装目線で押さえる。
- 1.モデルは特徴数が次元数を超える情報を、ほぼ直交な方向へ重ねる「重ね合わせ」で符号化する。これがニューロンを多義的にし、活性を過完備・疎な辞書へ写すSAEでほどく。
- 2.目的関数は再構成誤差+疎性罰則。L1はシュリンケージ(係数の過小化)を招くため、TopK・JumpReLU・Gated SAEなど発火の有無と大きさを分離する改良が主流。
- 3.得た特徴は発火例で命名でき、係数を強制的に上下させて順伝播し直すと出力がその概念へ偏る/消える。相関でなく介入で因果を確かめられ、ステアリングにも使える。
なぜ活性はそのまま読めないのか
学習済み Transformer の中間層には、各トークン位置ごとに数千次元の**活性ベクトル(残差ストリームや MLP 出力)**が流れています。これを1次元ずつ眺めても意味が読めないのは、**1つのニューロンが複数の無関係な概念に反応する多義性(polysemanticity)のためです。理想は1ニューロン=1概念の単義性(monosemanticity)**ですが、実モデルはそうなっていません。
原因は重ね合わせ(superposition)です。モデルが表現したい特徴の数は、利用できる次元数より遥かに多い。d 次元空間の直交基底は d 本しか取れませんが、ほぼ直交なベクトルなら(Johnson-Lindenstrauss の補題どおり)指数的に多く詰め込めます。そこでモデルは、滅多に同時発火しないスパースな特徴群を、小さな干渉を許しながら1つの次元方向に重ねて符号化します。結果、ニューロン基底(座標軸)と意味を持つ特徴方向がずれ、軸を読んでも意味が現れません。この壁の背景は 誘導ヘッドと機械論的解釈可能性 でも触れていますが、本記事はそれをほどく道具そのものを掘り下げます。
分散最大の方向を取る手法(PCA など)は重ね合わせをほどけません。重ね合わせの特徴は分散の大小ではなくスパース性で詰め込まれ、しかも特徴数が次元数を超える「過完備」だからです。近似的に直交な方向は分散上も見分けにくく、直交回転では分離しきれません。次元を増やしてでも疎な基底を学ぶ別の道具が要ります。
SAE:過完備な辞書への疎な射影
その道具がスパースオートエンコーダ(Sparse Autoencoder, SAE)です。活性 x(次元 d)を元より大きい辞書サイズ m(m は d の数倍〜数十倍)へ写し、その表現 z がごく少数しか発火しないよう制約して、z から x を再構成します。
z = ReLU(W_enc · (x - b_dec) + b_enc) # z: 過完備な特徴, 長さ m ≫ d
x̂ = W_dec · z + b_dec # 各特徴 = W_dec の列(辞書ベクトル)
L = ‖x - x̂‖² + λ · ‖z‖₁ # 再構成誤差 + L1 疎性罰則
これは辞書学習(dictionary learning)の一形態です。W_dec の各列が「特徴方向(辞書要素)」で、z の各成分がその特徴の強度。疎性罰則が z をほぼゼロに保つため、重ね合わせで潰れていた特徴が個別の次元へほどけます。学習後、各特徴を「どの入力で発火するか」で観察すると、「アラビア語のテキスト」「電話番号の局番」「肯定的な感情」「特定の API 呼び出し」といった人間が名付けられる単義概念に対応します。教師なしで、辞書を大規模化(数百万特徴)すればより細かい概念まで分離できます。
| 性質 | 生のニューロン基底 | SAEで得た特徴 |
|---|---|---|
| 1次元あたりの意味 | 多義的(複数概念が混在) | 単義的(1概念に対応しやすい) |
| 次元数 | モデル幅に固定 | 過完備(元の数倍〜数十倍) |
| 発火の密度 | 密(多くが常時活動) | 疎(少数だけ発火) |
| 介入のしやすさ | 効果が他概念へ漏れる | 特定特徴を狙って増減できる |
疎性の作り方:L1 のバイアスと後継
素朴な L1 罰則には構造的な欠点があります。L1 は「発火の有無」だけでなく発火の大きさまで一様に押し下げるため、再構成に必要な特徴の係数まで縮むシュリンケージ(活性の過小化)が起き、再構成誤差と疎性がトレードオフで綱引きします。この歪みを避けるため、発火するか否かと発火したらどれだけかを分離する改良が主流です。
| 手法 | 疎性の与え方 | 狙い・特徴 |
|---|---|---|
| L1 SAE | ‖z‖₁ を罰則 | 実装が単純だが係数を一律に縮めるバイアス |
| TopK SAE | 上位 k 個のみ残し他を0 | 1トークンあたり発火数 k を固定。罰則係数の調整が不要 |
| JumpReLU SAE | しきい値超えだけ通す不連続活性 | 小さな偽発火を落としつつ大きさは縮めない |
| Gated SAE | 発火ゲートと大きさを別経路で学習 | L1 をゲート側だけに掛け大きさの縮みを回避 |
TopK は 1 トークンあたりの発火数 k を上限で固定するので、罰則係数 λ の探索が要らず疎性を直接制御できます。JumpReLU と Gated はいずれも「小さすぎる係数はノイズとして落とし、残す特徴は縮めない」思想で、同じ疎性のもとで再構成誤差を下げやすいことが報告されています。
W_dec の各列ノルムを1に正規化しないと、モデルは「辞書ベクトルを大きくして z を小さく見せる」抜け道で L1 罰則を回避できます。列を単位ノルムに拘束(または正規化に対応する勾配補正)することで、疎性罰則が本来意図する「発火する特徴数を減らす」圧力として効きます。
学習の病理:死特徴とバイアス項
SAE の学習では特有のつまずきがあります。第一に**死特徴(dead feature)です。訓練の初期に一度も発火しなくなった特徴は、勾配がほぼ流れず二度と復活せず、辞書容量の無駄になります。実務では、一定期間発火していない特徴を検出し、再構成が最も苦手なサンプルの方向へ再初期化(resampling)**する、あるいは死にかけの特徴に補助的な損失(例:非発火特徴だけで残差を再構成させる補助項)を与えて蘇生させます。
第二に前処理です。エンコーダ入力から b_dec を引き(x - b_dec)、b_dec をデータ平均で初期化しておくと、活性のオフセット(コモンモード)を辞書で表現せずに済み、特徴が意味のある変動成分に集中します。
SAE は活性の完全な写像ではなく近似辞書です。再構成した x̂ を元の x の代わりにモデルへ流すと、下流性能はわずかに劣化します(この劣化量を「差し替えたときの損失増」で測る)。読めていない成分が残るため、「SAE 特徴で説明しきれない」挙動が必ず残ることを前提に解釈する必要があります。
特徴を読む:単義性の確認
得た特徴が本当に単義かは、複数の証拠で裏づけます。(1) 最大発火例:その特徴が強く発火する入力を集め、共通の概念が見えるか。(2) 発火の疎性・特異性:無関係な文脈で発火しないか。(3) ロジット寄与:W_dec の列を出力語彙へ射影し(アンエンベディングとの内積)、その特徴がどのトークンを押し上げるかが概念と整合するか。この3点が揃って初めて「この方向はこの概念」と言えます。単なる最大発火例の列挙は、たまたま相関した見せかけを拾う危険があるため、介入による確認(次節)とセットで扱います。
ステアリング:因果を介入で確かめる
SAE の真価は、特徴方向が分かると因果的な介入ができる点です。順伝播の途中で、ある特徴 i の係数 z_i を目標値へ強制的に置き換え(クランプ)、x̂ を作って以降の層へ流す。すると出力がその概念へ偏る/消える。観察(相関)に留まらず「この特徴が出力を引き起こす」を確かめられ、そのまま特徴ステアリング(feature steering)——挙動の意図的な操作——になります。
# 特徴 i を強度 c で注入するステアリング(概念)
z = encode(x) # 元の特徴係数
z[i] = c # 対象特徴だけ目標値にクランプ
x_new = decode(z) # または x + c · W_dec[:, i] を残差へ加算
# x_new を次層へ流すと出力が特徴 i の概念へ寄る
有名な例では、ある特徴を過剰に強めると、無関係な話題でもその概念(特定の橋、特定の言語、特定の書式など)に固執する応答が生まれます。重要なのは、生ニューロンを直接いじる操作と違い、SAE 特徴は単義的なので副作用が概念に閉じやすいことです。ただし完全に独立ではなく、特徴どうしの相互作用や再構成誤差により、狙い外の変化が漏れることはあります。同種の「望ましい方向へ寄せる」制御を報酬・選好で行う RLHF と DPO が学習時の手当てなのに対し、ステアリングは推論時に活性へ直接介入する点が対照的です。
プロンプトは入力語で、LoRA は重み差分で挙動を変えます。SAE ステアリングは特定の内部特徴の活性値を直接動かすため、粒度が細かく解釈と表裏一体です。どの特徴を動かしたかがそのまま「なぜそう出力したか」の説明になり、望まない概念(例:特定の失敗モード)を推論時に抑制する用途にも使えます。
何がわかり、何が残るのか
SAE は重ね合わせをほどく現状もっとも実用的な手段ですが、限界も明確です。(1) 再構成誤差が残り情報が欠落する。(2) 辞書サイズ・疎性の取り方で得られる特徴が変わり、粒度が割れる/混ざる「特徴分割(feature splitting)」が起きる。(3) 特徴どうしをつなぐ回路全体(特徴 A が特徴 B を駆動する経路)の自動抽出は依然難しい。(4) 「人間が名付けられた」ことと「モデルが実際にその意味で使っている」ことの一致は、介入で都度検証するしかない。表現空間そのものの偏り(埋め込み空間の幾何 の異方性など)も、特徴の読みやすさに影響します。
- 重ね合わせ:特徴数 > 次元数を、ほぼ直交なベクトルで実現。多義性の原因。PCA では解けない。
- SAE 目的:
xを過完備辞書zへ写し、再構成誤差+疎性罰則で学習。W_decの列が特徴方向。 - 疎性の改良:L1 はシュリンケージを招く。TopK(発火数固定)・JumpReLU・Gated が発火の有無と大きさを分離。
- 学習病理:死特徴は再初期化で蘇生。
b_decでオフセットを除く。再構成誤差は必ず残る。 - ステアリング:特徴係数をクランプして順伝播し、介入で因果を確認。副作用が概念に閉じやすい。
まとめ
活性がそのまま読めないのは、モデルが重ね合わせで特徴数 > 次元数を詰め込み、ニューロンを多義化するためです。スパースオートエンコーダは活性を過完備で疎な辞書へ分解し、単義特徴という人間可読の基本単位を取り出します。疎性の作り方は L1 のシュリンケージを避ける TopK・JumpReLU・Gated が主流で、死特徴の蘇生や b_dec 前処理といった学習の作法が実用の鍵です。さらに特徴係数のクランプによるステアリングで、相関でなく因果を確かめられます。より広い機構的解釈の文脈は 誘導ヘッドと機械論的解釈可能性、SAE 特徴が支える文脈内の振る舞いは インコンテキスト学習はなぜ起きるのか も合わせて参照してください。
AI/機械学習 Article
スパースオートエンコーダによる解釈を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
解釈可能性
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 6
導入後に効く点
目的関数は再構成誤差+疎性罰則。L1はシュリンケージ(係数の過小化)を招くため、TopK・JumpReLU・Gated SAEなど発火の有無と大きさを分離する改良が主流。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 6
判断チェックリスト
- 自社の用途が「解釈可能性 / SAE」に近いか確認する。
- 強みである「モデルは特徴数が次元数を超える情報を、ほぼ直交な方向へ重ねる「重ね合わせ」で符号化する。これがニューロンを多義的にし、活性を過完備・疎な辞書へ写すSAEでほどく。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。