JA EN
体系Transformerの仕組み
·★ 会員·論文·11分で読めます

Attentionの変種図鑑 — MQA・GQA・スライディング窓・線形注意

MQA・GQA・スライディング窓・線形注意は、それぞれ勝手に生まれた別々の工夫ではありません。KVキャッシュの大きさを決める一本の掛け算式があり、変種は「どの項を叩いたか」で分類できます。系譜を式の上に並べ直すと、何を捨てて何を得たのかが一目で見えます。

対象textタスクattention

Fast Transformer Decoding: One Write-Head is All You Need


「注意」は一種類ではない

Attention機構を1から理解するで見たのは、教科書に載っている素の自己注意でした。全単語が全単語を見渡し、内積で重みを決め、Valueを混ぜる。美しい仕組みですが、実際に動いているモデルの設定ファイルを開くと、そのままの形はむしろ少数派です。

会議の比喩を続けます。あなたは参加者全員の名札(Key)を見比べ、発言(Value)をメモに混ぜる係でした。参加者が10人ならこれで困りません。ところが実際のLLMは、会話が進むほど参加者が増え続ける会議室にいます。1万トークンの文脈とは、1万人分の名札と発言を捨てずに机に積み上げたまま、次の一言を考えるということです。

変種と呼ばれるものたちは、この積み上がった机をどう畳むかの答えです。そして重要なのは、それぞれが好き勝手に生まれた別々の工夫ではないことです。畳める場所は数えられるほどしかなく、変種はそのどれを叩いたかで整理できます。

高いのは2か所ある

まず「何が高いのか」を分けます。混同されがちですが、コストの正体は場面によって別物です。

学習時と、プロンプトを一度に読み込むプリフィルの段階では、n×nn \times nnn は文の長さ)の点数表そのものが重荷になります。文が2倍なら表は4倍。ここは計算量とメモリの両方の話です。

一方、1トークンずつ吐き出す生成の段階では、点数表は1行しかできません。新しいトークンのQueryと過去全部のKeyとの照合、それだけです。にもかかわらず生成は遅い。理由は計算ではなく、過去のKとVを丸ごと読み出すことにあります。これがKVキャッシュで、その大きさは全部が掛け算で決まります。

MKV=2×L×hkv×dhead×n×B×pM_{\mathrm{KV}} = 2 \times L \times h_{kv} \times d_{\mathrm{head}} \times n \times B \times p
(1)

要するに、KVキャッシュの大きさは「層数 × KVヘッド数 × ヘッドの幅 × 溜まったトークン数 × 同時実行数」の掛け算で、それにKとVの2種類ぶんと、数値1個あたりのバイト数を掛けただけです。順に読みます。先頭の 22 はKとVの2種類ぶん。LL は層の数(層ごとに別のキャッシュを持つ)。hkvh_{kv} はKVヘッドの本数。dheadd_{\mathrm{head}} は1ヘッドあたりの幅。nn は溜まったトークン数。BB は同時に捌いている会話の数。pp は数値1個のバイト数(FP16なら2)。

全部が掛け算だ、という点が肝心です。どれか1つを 1/81/8 にすれば、全体がそのまま 1/81/8 になります。逆に言えば、削れる場所は式の中にしかありません。だから変種の系譜は、この式のどこを叩いたかで分類できます。

FIG 1文長が伸びたとき O(n²) と O(n) がどれだけ離れるか。縦軸を「線形」に切り替えると、n² の曲線だけが画面の上へ消えていく — 長文が高いのはこの離れ方のせいです

MQA — 名簿を1冊にする

最初の一手は、いちばん乱暴な引き算でした。2019年にNoam Shazeerが提案した Multi-Query Attention(MQA) は、Queryヘッドは複数のまま、KとVのヘッドを1本だけにします。質問は人それぞれでよいが、参照する名簿は1冊を全員で回し読みする設計です。式の hkvh_{kv}11 になるので、キャッシュはヘッド数ぶんの1に縮みます。

なぜ速度に直結するのか。生成では1トークン作るたびにKVキャッシュを丸ごと読み出します。演算自体は軽く、読み出しの帯域が律速です。読むバイト数が 1/h1/h になれば、そのまま待ち時間が縮む。FLOPsはほとんど変わらないのに速くなる、という一見奇妙な現象の正体はこれです。

代償は表現力です。ヘッドごとに違う見方を持てるのが利点だったのに、見る対象を全ヘッドで共有してしまう。品質の低下は小さいと報告されましたが、ゼロではありません。

2023年、Ainslieらが出した折衷案が Grouped-Query Attention(GQA) です。 本のQueryヘッドを 個のグループに分け、グループごとに1組のKVを共有します。 ならMQA、 ならMHA。両端に既存手法を持つ連続したつまみです。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. Fast Transformer Decoding: One Write-Head is All You Need. arXiv:1911.02150論文ページ·PDF
  2. GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints. arXiv:2305.13245論文ページ·PDF
  3. Longformer: The Long-Document Transformer. arXiv:2004.05150論文ページ·PDF
  4. Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention. arXiv:2006.16236論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です