モデルの解説を読んでいると、アテンション(Attention)という言葉が説明抜きで出てきます。
「文脈を見る仕組み」くらいの理解でも記事は読めてしまうので、そのまま素通りしがち。
ところがコンテキストウィンドウが重い理由も、長文の推論が急に遅くなる理由も、たどるとここに行き着くのです。
数式を追わなくても、何を計算しているのかは言葉で追いかけられます。
アテンションは「どこをどれだけ見るか」の重み付け
やっていることは、意外なほど素朴な操作です。
ある単語を処理するとき、文中の他のすべての単語に対して「どれくらい関係あるか」の点数を付け、その点数で情報を混ぜ合わせる。
たとえば「その本を読んだので、彼女に返した」という文で「返した」を処理するなら、「本」への点数が高くなってほしいところ。
文法規則を書き込むのではなく、関係の強さを学習で決めさせるのがアテンションの発想になります。
点数の合計が 1 になるよう正規化されるので、限られた注意をどこに配るかという配分の問題として扱えるわけですね。
Q・K・V は「問い合わせ」「見出し」「中身」
実装の話に一歩入ると、必ず 3 つの記号が出てきます。
クエリ(Q)・キー(K)・バリュー(V)の 3 つで、いずれも同じ入力から別々の重みで作られたベクトル。
図書館にたとえるなら、Q が探している問い、K が本の背表紙、V が中身という役割分担。
まず Q と K を突き合わせて「この本はどれくらい問いに合うか」の点数を出し、その点数で V を混ぜて取り出す、という順番になります。
ここで大事なのは、K と V が別々に用意されているという点。
見つけるための手がかりと、実際に持ち帰る情報を分けているので、「探しやすさ」と「中身の濃さ」を別々に学習できるのです。
マルチヘッドは同じ文を複数の視点で読む
一組の Q・K・V だけでは、拾える関係が一種類に偏ってしまう。
そこで同じ入力に対して複数のアテンションを並列に走らせ、結果を結合する構造が使われます。
これがマルチヘッドアテンションで、あるヘッドは主語と述語の対応、別のヘッドは代名詞の指す先、といった具合に違う関係を担当することになる。
どのヘッドが何を見るかは人間が指定するものではなく、学習の結果として勝手に分かれます。
MoE のエキスパートと同じで、人間が読んで意味の分かる分担になっている保証はないと考えておくのが無難。
担当が学習で勝手に決まるという性質は、MoE の記事でも同じ形で顔を出します。
本当の効きどころは並列に計算できること
アテンションの価値は、精度よりも計算のかたちにありました。
2017 年の論文「Attention Is All You Need」は、再帰も畳み込みも完全に取り払い、アテンションだけで組んだ構造を Transformer として提案しています。
それ以前の再帰型は、前の単語の計算が終わらないと次に進めない作りだった。
対してアテンションは全単語の関係を一度に計算できるので、GPU の並列性をそのまま使い切れるという利点が生まれます。
同論文は、英仏翻訳で 8 基の GPU を 3.5 日回して当時の単一モデル最高スコアを出し、それが先行研究の学習コストのごく一部で済んだと報告している。
賢くなったから広まったのではなく、大きくしても学習が回るから広まったという順番なのです。
長い文脈が重くなる理由もここにある
いいことばかりではなく、代償もはっきりしています。
全単語どうしの点数を出すという性質上、計算量は系列長の二乗に比例して増える。
入力が 2 倍になれば計算は 4 倍、10 倍になれば 100 倍という伸び方をします。
しかも生成時は、過去のトークンぶんの K と V を保持し続ける必要がある。
この保持したものが KV キャッシュで、長文になるほどメモリを食う原因になります。
キャッシュの中身と増え方は、別記事で整理しました。
プロンプトが長いと料金も応答時間も跳ね上がる、という体感はこの二乗と保持コストの合わせ技から来ているわけですね。
逆にその保持を課金面で活かすのがプロンプトキャッシュ。
論文の原典はAttention Is All You Need(arXiv:1706.03762)。
最後に
アテンションは、文脈を理解する魔法ではありませんでした。
どの単語をどれだけ見るかの重み付けを、学習で決めているだけの仕組み。
そのかわり全単語を一度に見られるので並列化が効き、モデルを大きくしてもスケールする土台になりました。
長文でコストが跳ねる話も、逆にキャッシュで安くなる話も、根はこの同じ構造にあると押さえておくと迷いません。
以上です。












コメントを残す