土曜の深夜、川口の自宅、ゲーミングPCの前で…
川口(アナリスト・22)

(大学のeスポーツサークル時代、同じ VALORANT の試合を 4視点並列 で観てたんですよ。① プロ実況のYouTube配信(戦略解説)、② 自分のサブアカで対戦(プレイ感覚)、③ マップ全体の俯瞰観戦カメラ(位置情報)、④ 海外RedditのVALORANTスレ(メタ分析の英文)。4画面+Discord通話で 同時に走らせる。これで強くなった。)

凡田(チームリーダー・38, 主人公)

(土曜の22時に Discord で「先輩いま起きてますか」って連絡来て、画面共有で見せられているのがコレ…ただ、これは完全に マルチヘッドアテンション だ。同じ試合 = 1つの単語、4視点 = 4ヘッド、それぞれ 別空間で並列 に文脈を読んで、最後に統合して 「勝ち筋」 を出す。…川口、ちゃんと寝てる?)

川口

(先輩、先週読み返した “Attention Is All You Need” の 8ヘッド構造、これが完全に学生時代の4視点並列と同じ仕組みなんです。今は当社の クライアント提案レビュー も 5視点並列(売上/競合/技術/組織/法務)で走らせていて、これも実質マルチヘッド…あ、コーラ切れた、買ってきます。)

凡田

(土曜深夜にコーラ買いに行くな…でも、確かに彼の 「並列吸収」 は本物だ。)

土曜深夜の川口の自宅、ゲーミングPCの4画面それぞれにプロ実況/対戦画面/マップ俯瞰/Redditスレが表示、Discord通話で凡田が画面越しに困惑顔
この記事の要約(3行)
  • ひとことで言うと、同じ文章を複数の視点で同時に読む 仕組み。Q/K/V を 1組ではなく h 組(典型 8〜16) 並べて、文脈を読み解く担当を増やす拡張。
  • 視点が増えるほど、語順・主語と動詞・修飾関係など 別々の手がかりを取りこぼさず拾える。これが Transformer の性能を大きく押し上げた要因のひとつ。
  • イメージは、1つの文章を複数の専門家が別の観点で同時に読む 編集会議。最後に全員の読みを 1本にまとめ直す(統合の中身は本文で)。

Q/K/V (#035) で、アテンションの中身が 3つの行列演算 で書けると見た。あれは 「1組」 の話。実は Transformer はこの Q/K/V を h 組 並列 で走らせている。なぜか、何が嬉しいのか。

キーワードは 「視点並列」。同じ文章を、別の角度から同時に読む — これが Transformer が言語理解で性能を出した、いちばん根の深い理由のひとつ。

マルチヘッドとは — Q/K/V を h 組 用意する

マルチヘッドアテンションの仕組みは、単純に書くとこうなる:

h は原典の 「Attention Is All You Need」(Vaswani et al., 2017)では 8。現在の LLM では 16, 32, 64, 96 など、モデルサイズに応じて拡張されている。

1単語ベクトルから h 組の Q/K/V が生成され、h 個のアテンションが並列実行され、concat + W_O で1本に統合される図

図1: マルチヘッドアテンションの全体フロー — h 組の Q/K/V を並列で走らせ、最後に concat + W_O で統合

なぜ 「1ヘッド」 では足りないのか

1組の Q/K/V で計算するアテンションは、1つの確率分布(softmax の出力)を作る装置。つまり「ある単語が、文中の他のどの単語に注目するか」を 1パターン しか同時に表現できない。

これでは現実の言語理解には足りない。同じ単語に対して、人間は同時に 複数の関係性 を見ている:

1ヘッドだと、これらのどれか1つしか同時に扱えない。ヘッドを h 個に分けて並列に走らせると、各ヘッドが別の関係性を担当して、文脈を多角的に組み立てられる。

emergent な役割分担 — 各ヘッドが勝手に 「視点」 を分ける

面白いのは、各ヘッドにどの関係性を担当させるか、人間が 事前に指示しない ところ。h 個のヘッドの重み行列は、全部 ランダム初期化 から訓練が始まる。それが訓練を通じて、自然と 役割が分担される。

解釈論文(Clark et al., 2019 「What Does BERT Look At?」 など)では、訓練済み Transformer の各ヘッドが具体的にどんな関係性を学習しているか観測されている。例:

これは 創発的(emergent) な現象で、訓練データから 「どう分担するのが損失を最小化するか」 を h 個のヘッドが自動で見つけ出す。人間が「お前は構文係、お前は意味係」と言うわけではない。

文 '猫が魚を食べた' を 4つのヘッドが別々の矢印(位置/主述/修飾/距離)で解釈する図、各ヘッドが異なる関係性に注目

図2: ヘッドの役割分担 — 各ヘッドが文中の別の関係性に注目するよう、訓練を通じて自然と分業

計算コスト — h を増やしても安く済む仕掛け

素朴に考えると「ヘッドを h 個並列で走らせるなら、計算量も h 倍になるのでは?」と思える。実は、そうならない。仕掛けは 「各ヘッドの次元を意図的に薄くする」 ところにある。順を追って見る。

ステップ① まず、アテンションの計算量は 「ベクトルの厚み」 に比例する

アテンションの中心は Q と K の内積(関連スコア計算)(#005)。1回の内積コスト ≒ ベクトル次元 D に比例(D 個の掛け算と D 個の足し算が必要)。

単一ヘッドだと Q/K の次元 = d_model のまま。例: d_model = 512 → 内積1回のコスト目安 = 512。

ステップ② マルチヘッドにすると、各ヘッドの次元を 1/h に 「細切り」 にする

h ヘッドに分割する際、各ヘッドの Q/K/V の次元を d_k = d_model / h に絞るのが Transformer の設計ルール。例: d_model = 512, h = 8 → 各ヘッドの次元 d_k = 64。

つまり 「512次元の太いベクトル1本」 を 「64次元の細いベクトル8本」 に細切り にしている。各ヘッドは「薄く狭い視野」しか見ない。

単一ヘッドの512次元の太いベクトル1本を、マルチヘッドでは64次元の細いベクトル8本に細切りにする図、横幅の総和は同じ

図3: 次元の細切り — 1本の太いベクトル(512次元)を、8本の細いベクトル(各64次元)に分割。横幅の総和は変わらない

ステップ③ 1ヘッドあたりの内積コストも 1/h に減る

内積コストは次元に比例するので、1ヘッドあたりのコスト = d_k = 64(単一ヘッドの 1/8 倍)。次元を薄くしたぶん、各ヘッドは速い。

ステップ④ h 個並列で合計しても、単一ヘッドと同じ

これを h 個 並列に走らせるので、合計コスト = h × d_k = h × (d_model / h) = d_model。例: 8 × 64 = 512 = 単一ヘッドと ぴったり同じ。

各ヘッドの次元 1ヘッドのコスト目安 ヘッド数 合計
単一ヘッド 512 512 × 1 512
マルチヘッド(h=8) 64 64 × 8 512
単一ヘッド(1枚の丸ごとピザ)と マルチヘッド(8切れに分割したピザ)の総面積は同じ、コストも同じだがマルチヘッドは8人が同時にかじれる図

図4: ピザの面積アナロジー — 丸ごと1ピース(単一)も 8切れ(マルチ)も、総面積=コストは同じ。違いは 「並列度」

「ピザの面積は同じだが、1ピースを8切れに分けて配る」イメージ。トータルは変わらないが、8人が同時に別の場所をかじれるようになる、というのがマルチヘッドのメリット。

結果として 「視点を増やすけれど、各視点の解像度は下げる」 という設計が成立。1つの視点で深く見るより、複数の視点で浅く広く見るほうが、言語理解では性能が出るという経験則がここにある。

つまりマルチヘッドは 「ほぼ無料で性能を上げる」 拡張。追加コストは concat 後の W_O 行列 1個分 だけ。これが Transformer の標準装備になっている理由。

コンサル感覚 — 「察し」 の並列度を分解する

Q/K/V (#035) で、大蔵の 「接客の察し」 は 3つの台帳(質問・見出し・本文)で説明できる、と見た。マルチヘッドはここから更に1段進んで、その 「察し」 を h 個の独立フィルタで並列に走らせる 仕組み。

大蔵の実際の接客は、お客様に対して 同時に複数のフィルタ で察している:

これが大蔵が 「達人」 である理由 = 並列フィルタを多重に持っている。1フィルタしか持たない接客係は 「表面的な察し」 で止まる。

コンサル提案レビューでの応用: クライアントの 「AI 文脈理解」 要件を、「何ヘッド相当の察しが必要か」 で評価すると、ベンダー実装の妥当性を判定しやすい。例えば顧客サポート AI なら、「商品系 / 感情系 / 緊急度系 / 履歴系 / 個人属性系」の5ヘッド相当が最低ライン、というように。

月曜の朝、アイマイ社のオフィス、川口がチームMTGで提案資料を出す…
川口

先輩、土曜の深夜にお話しした件、提案資料に 「ヘッド数換算」 という新指標を入れました。顧客サポートAIのベンダー評価軸、商品系/感情系/緊急度系/履歴系/個人属性系の 5ヘッド相当 以上ないと 「達人レベルの察し」 にならない、という根拠付き比較表です。47スライドあります。

大蔵(アシスタントマネージャー・35)

あら、川口さん、”5ヘッド相当の察し” って、私の 20年の銀座カフェ接客 はどう見積もっていらっしゃるの? 表情・年齢・同伴者・前回注文・季節・天気・お客様の声のトーン…これで 少なくとも7ヘッド はあると思いますの。あと、私には 「昼前のお客様の二日酔い度」 という独自ヘッドもございますわ。

御託(シニアコンサル・39)

フッ、マルチヘッドか。私の場合は ベルリンフィルの定期演奏会 で言うと、同じシンフォニーを 首席指揮者の解釈、客演指揮者の解釈、ライブ録音、CDマスタリング、配信アーカイブ と 5視点並列 で吸収してきた。これが私の “知性のヘッド数“…

大蔵

(やっと レコード盤じゃない比喩 を出してきましたわね。…でも、それ 結局オーディオ周辺 でしょう?)

凡田

御託さん、その5視点、確かに 並列ですが d_k が圧倒的に低い 印象です。…で、川口の提案、「5ヘッド相当」 を比較表の評価軸 に入れるのは筋がいい。クライアントに 「なぜこのベンダーがいいのか」 を 1枚の表 で見せられるなら、刺さる。あと、川口、土曜深夜に Discord で起こすの、来週から控えてね。

月曜朝のオフィスで川口がホワイトボードに5ヘッドの評価表を書き、大蔵が

マルチヘッドの 「深さ」 — Transformer ブロックごとに h ヘッド

もう一段の構造として、Transformer ブロックは何層にも積まれる(典型 12層、24層、80層、120層…)(#032)。各層の中に 独立した h ヘッド がある。

Transformer ブロックの縦積み構造図 左半分は N層スタック(層1〜層N)、右半分は1ブロックの中身ズーム(LayerNorm→マルチヘッドアテンション H1〜H8 →残差→LayerNorm→MLP→残差)

図6: Transformer の縦積み構造 — 左: N層スタック(GPT-2 small=12, GPT-3=96, Llama-3 70B=80) / 右: 1ブロックの中身(マルチヘッド+残差+正規化+MLP)

つまり「層数 × ヘッド数」の 掛け算 でアテンションのフィルタ数が決まる:

ブロックの中にヘッドが並列で入っている入れ子構造、GPT-2 small (12ブロック × 各12ヘッド = 144フィルタ) と GPT-3 175B (96ブロック × 各96ヘッド = 9,216フィルタ) を縦積みで表現

図5: 入れ子構造 — 外枠1個 = 1ブロック(=1層)、その中の小四角 = 1ヘッド。GPT-3 は GPT-2 small の 約64倍 のフィルタ数