← 一覧へ

注意力の進化は、KVキャッシュをどこまで削れるかの歴史だ

この記事の読み方
LLMの注意力まわりは、名前だけ追うとすぐ迷子になる。MHA、MQA、GQA、MLA、SWA、DSA。略語が増え、図も増え、結局どれが何をしているのか分からなくなる。

LLMの注意力まわりは、名前だけ追うとすぐ迷子になる。MHA、MQA、GQA、MLA、SWA、DSA。略語が増え、図も増え、結局どれが何をしているのか分からなくなる。

でも、一本の線で見るとかなり整理できます。

現代LLMの注意力変体は、だいたい同じ問いに答えている。長い文脈を扱うとき、KVキャッシュをどこまで小さくできるか。そして、その代わりに何を失うのか。

Sebastian Raschka の視覚ガイドが良いのは、各方式を流行語ではなく、このトレードオフとして並べているところです。

MHAは贅沢な出発点

標準のMulti-Head Attentionでは、複数のヘッドがそれぞれQuery、Key、Valueを持つ。各ヘッドが違う関係を見る。あるヘッドは直前の語を見るかもしれない。別のヘッドは遠くの主語を見るかもしれない。さらに別のヘッドは構文や照応を拾うかもしれない。

表現力としては素直です。ヘッドごとに自由度がある。

ただし、推論になると問題が出る。生成中、モデルは過去トークンのKeyとValueを保存しておく。これがKVキャッシュです。文脈が長くなるほど、この保存物が重くなる。モデルが大きく、バッチが増え、コンテキストが伸びると、計算そのものよりメモリ帯域とキャッシュが効いてくる。

つまりMHAは、賢いが、記憶の持ち物が多い。

MQAとGQAは「全員が別々に持つのをやめる」

最初の節約は分かりやすい。Queryのヘッドは多く残す。でもKeyとValueは共有する。

Multi-Query Attentionはかなり極端です。多くのQueryヘッドが、少ないKey/Valueを共有する。Grouped-Query Attentionはその中間で、いくつかのQueryヘッドをグループに分け、グループ単位でKey/Valueを共有する。

Raschkaが書いているように、GQAはMHAの置き換えとしてかなり標準的になった。理由は地味です。KVキャッシュ交通量を下げられるのに、実装の変更がそこまで激しくない。

ここで失うものは、ヘッドごとのKey/Valueの自由度です。全員が自分専用のメモを持っていた状態から、何人かで同じメモを見る状態になる。もちろん表現力は少し落ちる可能性がある。でも長文推論のコストが効くなら、その取引は割に合う。

この「割に合う」が大事です。注意力の進化は、理想の美しさではなく、サービングの請求書に押されている。

MLAは「持つ数」ではなく「持ち方」を圧縮する

Multi-Head Latent Attentionは、GQAと同じ問題を違う角度から解く。

GQAはKey/Valueの本数を減らす。MLAは、保存するもの自体を圧縮する。過去トークンの状態をそのまま大量に持つのではなく、より小さな潜在表現として保存し、必要な形に戻して使う。

これはかなり発想が違う。

GQAは、共有による節約です。MLAは、表現の圧縮による節約です。どちらもKVキャッシュを軽くしたい。けれど、削る場所が違う。

長い文脈では、この差が大きくなる。コンテキストが伸びるほど、過去の状態をどう持つかがモデルの運用コストを支配する。だからDeepSeek系のように、MLAと疎な注意を組み合わせる設計が出てくる。

SWAとDSAは「全部を見返すのをやめる」

KVキャッシュを小さくするだけでは足りない。もう一つの問いは、そもそも過去の全部を見る必要があるのか、です。

Sliding Window Attentionは、局所だけを見る。近い過去には強く注意するが、遠い過去は見ない、あるいは少数の全局層に任せる。これは実装も直感も分かりやすい。文章の多くの依存は近くにある。だから毎層で全履歴を見るのはもったいない。

ただし、固定窓は雑でもある。遠くに大事な情報がある場合、窓の外なら見えない。

DeepSeek Sparse Attentionのような方向は、そこをもう少し賢くする。固定窓ではなく、関連しそうな過去トークンを選ぶ。Raschkaの整理では、MLAがキャッシュ表現を圧縮し、DSAが注意パターンの側を削る。つまり、一つは「何を保存するか」、もう一つは「何を見返すか」の最適化です。

注意力の進化は、表現力を少しずつ売っている

ここまで並べると、全部が同じ商売に見えてくる。

MHAは高いが自由。GQAはKey/Value共有で安くする。MLAは保存表現そのものを圧縮する。SWAは見る範囲を絞る。DSAは見る相手を選ぶ。

どれも「ただ良くなった」わけではない。何かを節約し、その代わりに何かを失う。

失うものは、ヘッドごとの独立性かもしれない。遠距離依存の取りこぼしかもしれない。実装の単純さかもしれない。学習の安定性かもしれない。

でも長コンテキスト推論では、節約が必要です。100万トークンの夢は、モデルのロマンだけでは動かない。KVキャッシュ、メモリ帯域、バッチ、レイテンシ、GPU単価が全部一緒に来る。

個人的な見方

注意力変体を覚えるとき、略語から入るとつらい。先に「何を削ったか」を見る方がいい。

Key/Valueの本数を削ったのか。保存表現を圧縮したのか。見返す範囲を削ったのか。選択器を入れて遠くの重要情報だけ拾うのか。

この見方を持つと、新しい方式が出ても慌てなくなる。たいていは同じ表のどこかに置ける。KVキャッシュ、表現力、実装複雑度、長文性能。この四つのどこを動かしたのかを見るだけでいい。

LLMのアーキテクチャは、賢さの物語に見える。でもサービングの現場では、かなりの部分がメモリの物語です。注意力の進化は、モデルが何を見るかの話であると同時に、GPUに何を持たせ続けるかの話でもある。

そこを分かると、MHAからMLAまでの流れが急に一本につながる。

―― AI未来編集室「AIウォッチ」

← 一覧へ