金曜の夜23時、アイマイ社のフロア、赤崎が会議室の机に突っ伏している…
赤崎(部長・42)

(あぁ…パワポ150枚、本文は全部できた。図表もコーヒー器具のごとく整った。あとは 各スライドのタイトル だけ…30分 悩んでる。「攻めの新規事業戦略」か「成長軌道への転換」か「次の10年に向けた変革」か。…どれも、なんかピンと来ない。)

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

赤崎さん、まだ帰ってないんですか。あ、…タイトル付けで悩んでる んですね。それ、見たことあります。20年 パワポ作ってきても、最後の スライドタイトル が一番難しいって、よく言われてました。

赤崎

そう、構成は固まってる。各スライドの中身ベクトルも、頭の中で 1スライドにつき数千次元くらい の意味で持ってる。でも、それを 「7〜13文字の見出し」 に圧縮して、しかも パワポ語彙20,000語 から1つ選ぶ作業が…本当に難しい。

凡田

(これ完全に アンエンベディング行列 W_u の話だ。内部の高次元意味ベクトル → 語彙への射影。LLM が毎回 次トークン1個出すたびにやってるのが、まさに赤崎さんが30分悩んでるこの作業。…20年やっても悩むんだから、AI が完璧にやれないのも当然。)

金曜夜23時のオフィス会議室、赤崎が机に突っ伏してパワポのスライドタイトル候補を悩む、3つの候補が思考バブルに浮かぶ、凡田が後ろから差し入れコーヒーを持って様子を見ている図
この記事の要約(3行)
  • ひとことで言うと、Transformer が頭の中で考え抜いた 「意味のかたまり」を、辞書に載っている単語ぜんぶの点数表に翻訳して、次に出す一語を決める出口の装置(行列名や数式は本文で)。
  • これがないと、モデルの中身は意味を表す数字の列のままで 「で、次の単語は何?」に答えられない。入口で単語を数字に変える仕組みと対になっていて、出口で数字を単語に戻す係。
  • イメージは 採点会場。考え終えた答案を全候補に配り、各単語が「自分が次にふさわしい度」を点数で名乗り出る。いちばん高得点の語が選ばれる、という最後の一押し。

マルチヘッドアテンション (#036) + MLP (#037) のペアが N 層スタックされ、各トークンのベクトルが 文脈を反映した最終ベクトル に育つ。

でも、ベクトルのままでは 「次の単語」 として出力できない。意味ベクトル(d_model 次元) → 語彙(vocab_size 個)のどれを出すかのスコア に変換する必要がある。それが アンエンベディング行列 W_u の役割。

W_u の役割 — 最終ベクトルを語彙スコアに翻訳する

Transformer 全体の出力フローを最後の方だけ書き出すと、こうなる:

  1. N 層スタックの出力: 最終ベクトル h(次元 d_model、例 4096)
  2. × W_u を掛ける: h @ W_u → ロジット(次元 vocab_size、例 50,257)
  3. softmax (#024): ロジットを確率分布に変換
  4. サンプリング (#025): 確率分布から1単語を選ぶ

ここで ② が W_u の仕事。形状は d_model × vocab_size(例: 4096 × 50,257)。重みの数は 約 2億。LLM の中でも比較的大きなパラメータ塊。

Transformer N層スタック出力の最終ベクトル(d_model=4096) × W_u行列(4096×50,257) = ロジット(50,257次元) → softmax → サンプリング の流れ図

図1: 最終ベクトル h → W_u 行列で射影 → ロジット → softmax → 次トークン選択

補足: 「射影行列」 って何? — 「影を落とす」 アナロジー

本記事のタイトルにも出てくる 「射影(projection)」 という言葉、聞き慣れないと止まる人が多いので一度整理する。

物理アナロジー: 太陽光が落とす影の長さ

真上から太陽光が地面に当たっているとする。地面に立った棒 がある。棒を 真っ直ぐ垂直 に立てれば、影は 真下のほぼ点(影=0)。棒を 地面に近い角度で倒す と、影は 長く伸びる(影=大)。

これが 射影 の原型イメージ。「ある方向(地面)に対して、別のベクトル(棒)が どれだけ 「その方向に沿っているか」」を 影の長さ で測る操作 = 射影。

数学では: 内積が 「影の長さ」

2つのベクトル a, b があるとき、a を b の方向に射影したときの影の長さ = a と b の 内積(を、b の長さで正規化したもの) (#005)

アンエンベディングは 「50,257本の方向への射影を一気に計算」 する装置

Transformer の最終ベクトル h は d_model 次元(例: 4096)の 「意味の方向」。W_u の各列(全 50,257 列)は、各単語に対応する d_model 次元の 「方向ベクトル」。

つまり h @ W_u という行列計算は、1本の意味ベクトル h を、50,257 個の 「単語方向」 それぞれに射影して、影の長さを一気に計算している。影が長い単語 = 意味が近い = ロジット高い → softmax で確率高い → サンプリングで選ばれやすい。

これが 「射影行列」(projection matrix) という名前の由来。W_u は「意味空間 → 語彙スコア空間」への射影装置。

意味ベクトルhと各単語方向ベクトルの射影、影の長さがロジットになる図、近い方向は長い影、無関係な方向は短い影

図3: 射影 = 「影の長さ」 — h と 「猫」 の方向が近いほど影が長い、これがロジット

幾何的イメージ — 各単語が 「投影先」 の方向を持つ

W_u は形状 d_model × vocab_size。各列(全部で vocab_size 列)が、1つの単語に対応する d_model 次元のベクトル

つまり W_u は 「語彙の中の各単語が、d_model 空間のどの方向を表すか」 の辞書。最終ベクトル h が来ると、h と各単語ベクトルの内積 (#005) = 「どれくらい似ているか」 のスコア = ロジットになる。

つまり W_u は 「内部の意味方向」 と 「語彙の各単語の方向」 を、内積で照合する仕組み。これは アテンションの Q · K と同型 の構造(意味ベクトル = 「質問者」、各単語ベクトル = 「見出し」)。

入口 Embedding との対称性 — 重み共有(weight tying)

W_u と対称的なのが、入口の Embedding 行列 W_e (#002)。Embedding は vocab_size × d_model の形状で、「単語 ID → ベクトル」 の変換を担う。

形状を比較すると:

そこで、多くのモデル(GPT-2, GPT-Neo, Llama 等)で W_u = W_e^T(転置)で重み共有 する設計が採用されている。これを weight tying(重み共有)と呼ぶ。

メリット:

ただし GPT-3 以降の大規模モデルでは weight tying を外す ことも増えている。理由: モデルが大きくなれば 2億パラメータの削減は相対的に小さい(GPT-3 175B 全体の 0.1%)、別行列にした方が表現力が上がる、など。

入口Embedding W_e(vocab_size×d_model)と出口Unembedding W_u(d_model×vocab_size)の対称性、weight tying で同じ行列の転置で共有する構造図

図2: W_e と W_u の対称性 — 形状が互いに転置、weight tying でパラメータ節約

赤崎アナロジーで整理 — パワポタイトル付けの数学的構造

赤崎の 「30分悩むスライドタイトル付け」 は、構造的に W_u と同じ:

赤崎(パワポ職人) LLM(W_u)
頭の中の 「スライドの意味」 数千次元 最終ベクトル h(d_model 次元)
パワポ慣用語彙 約20,000語 vocab_size(例 50,257)
各候補語を吟味してスコア付け W_u で各単語との内積 = ロジット
最終的に1つ選ぶ softmax + サンプリング
30分悩む 0.05秒で1万単語処理

赤崎がやっている 「意味を語彙に圧縮する」 工程は、Transformer の最終ステップそのもの。違いは 処理速度候補吟味の徹底さ だけ。

裏返すと、パワポタイトル付けで20年悩み続ける作業を、LLM は毎トークン 0.05秒で律儀にやっている。GPT-4 が500トークン応答するなら、25秒間に W_u 計算を 500回やっている。

翌週月曜の朝、アイマイ社のオフィス、赤崎が完成したパワポを抱えてくる…
赤崎

凡田くん、金曜の続きで、結局 「次の10年に向けた変革」 にしました。…で、君が言ってた アンエンベディング の話、確かに私のタイトル付けと同じ構造だね。「意味を語彙に圧縮」 の最終工程。…なら、AI に タイトル候補3本 出させて、私は選ぶだけにすればよかったか?

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

あら部長、それ 当社のアシスタント職を AI に置き換える って話でしょう? 私の銀座カフェ接客の 「最後の一言」 も、お客様にお返しする時 「ごゆっくりお過ごしくださいませ」「またのお越しをお待ちしておりますわ」 で、毎回 0.2秒 悩んでおりますの。これも W_u ですわね。

川口(アナリスト・22)

(部長、赤崎さんのパワポタイトル比喩は weight tying の説明にも応用できます。入口で 「意味」 を埋め込む方向 と、出口で 「意味」 を取り出す方向が 同じ単語空間を共有 しているのが weight tying。GPT-2 / Llama は採用、GPT-3 以降は規模が大きくて節約効果が薄いから外している。…で、AI にタイトル3本出させる提案、学術界の関連研究も480本超 ありますので、当社の生成AI案件で見積もり書きます。)

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

フッ、Unembedding か。これは私の マリーナベイサンズ17回滞在 で言うと、「今夜何を食べるか」 を ホテル内の50店舗から1店舗に絞る 作業に等しい。17回 × 平均7泊 = 約120夕食 の選択を、私は毎回 d_model = 私の食欲ベクトル を 各店舗ベクトル と内積で照合してきた。これが私の 「美食 W_u」

赤崎

(御託の経費はどうなってるんだろう…でも比喩としては悪くない。)

月曜朝のアイマイ社オフィスで赤崎が完成パワポを抱え、大蔵が

W_u の 「サイズ」 と LLM 全体への影響

W_u はパラメータ数で言うと、LLM 全体の中でも一定の存在感:

モデルが小さいと W_u がパラメータの大部分を占める。GPT-2 small のように 31% が W_u だと、weight tying のメリットは大きい(これがなぜ小型モデルで weight tying が標準だったかの理由)。

大規模モデルでは MLP(2/3) (#037) + アテンション(1/3)が圧倒的多数を占めるので、W_u の相対比は小さくなる。

深掘り記事 ・ 公開中ロジット(Logit) (#039)W_u が出力するスコアそのものの解説、softmax 前の生スコア。

深掘り記事 ・ 公開中ソフトマックス(Softmax) (#040)ロジットを確率分布に変換する関数。