「Attention Is All You Need」を本当に読み切るということ

📍 AIのしくみ地図 — 7/29章
この記事はAIの基礎からMeta-Harness·応用比較まで順に読む全29章シリーズの7章目です。
📚 全体地図を見る
← 前の章: F3. Encoder/Decoder · 次の章: F5. Embedding

0. 読む前に

F2で「本のページを広げて、蛍光ペンで線を引く」という比喩で attention の感覚だけはつかんでもらいましたね。F3ではディープラーニングがただとても大きな計算の塊だという話をしました。今回はその二つを繋いで、本当にあの有名な論文を一度ちゃんと開いてみる 回です。

論文のタイトルは「Attention Is All You Need」。2017年にGoogle Brainチームが出した8ページの短い論文です。これが今私たちが使っているChatGPT、Claude、Gemini の中で動いている、ほぼすべての構造の根っこです。Codex がコードを書いてくれるあの計算、Claude が長い文書を要約してくれるあの構造、全部この論文一枚から枝分かれしたものです。

なので私はこの論文を「一度は最後まで読んだことがある」という感覚があると、実務でプロンプトを組むときや道具を選ぶときに、ぶれが大きく減ると思っています。その感覚を一緒に作ってみたいんです。

数式は たったひとつ だけちゃんと見ます。比喩はF2で使った図書館・蛍光ペンをそのまま深掘りします。論文の全ページを追うわけではありません。読み終わったあとに原文を開いたとき、図一枚が読める水準 まで引き上げるのがこの記事のゴールです。

先に一つお断りを。この記事は「機械学習の専攻者向けの解説」ではなく、「Claude・Codexを仕事道具として使う実務者向けの入門」 です。私自身、最初に論文を開いたとき、数式を数行見て閉じた人間なので、そのときの自分が一番聞きたかった説明を今書いています。だから数式がたくさん出てくるかもと心配しなくて大丈夫です。出てくる一行の数式は、代わりにちゃんと解きほぐします。

1. 「Attention Is All You Need」というタイトルがなぜ変に聞こえるのか

最初にこのタイトルを見ると、ちょっと変じゃないですか。私は2019年ごろに初めて見たとき、「Attention が All You Need とは、なんだこのタイトル」と思いました。自己啓発書みたいじゃないですか。「愛がすべて」みたいな文に近い感じがして。

ところがこのタイトルは 当時の学会への挑発 に近いです。2017年以前の言語モデルは、ほとんどが RNN (Recurrent Neural Network) や LSTM という構造を使っていました。単語を左から右へ一個ずつ順番に読みながら、前に見たものを覚えようとする構造でした。CNN (Convolutional Neural Network) を言語に持ち込もうとする試みもありました。

この構造には問題がありました。まず、順番に処理しなければならないので 並列化ができません。GPUに全部載せても「2番目の単語は1番目が終わらないと処理できない」という制約で速度が出ません。もう一つ、文章が長くなるほど 前の方の記憶が薄くなります。LSTMである程度解決しましたが完全ではありませんでした。

論文の著者たちはこの二つの問題を同時に壊しに行きました。そこで RNN を 完全に外し、CNN も外し、attention というメカニズムひとつだけでモデルを組みました。「Attention さえあればいい、他はいらない」という主張をタイトルに打ち込んだわけです。

これが当たりました。翻訳の性能が上がり、学習速度が信じられないほど速くなり、数年後のBERT・GPTシリーズにつながって、NLPの景色が完全に変わりました。今のLLM世代がすべてこの論文の上に建っているのはそのためです。

つまりタイトルは自己啓発書の真似ではなく、「これひとつで他を全部置き換える」 という宣言だったんです。そういう文脈を知ってから見ると、タイトルが少し見慣れた感じになると思います。

ちなみにタイトルを付けた人が誰なのかは著者の間でも少し冗談めかして語られています。Llion Jones という著者が Beatles の「All You Need Is Love」から取ったという話がインタビューに出てきます。学術論文のタイトルにポップソングを引っ張ってくるのはありふれたことではありません。それだけ自信があったということでもあり、結果的にタイトルのおかげで論文が口に上る回数が増えたのも事実です。技術そのものの力が一番大きかったですが、マーケティングの力もひそかにあったわけです。

2. Attention を一文で要約

では attention が一体何をしているのか。私はこれを、この一文で整理しています。

今見ている単語が、同じ文の中の他の単語たちのうち、誰をどれくらい参照すべきかを点数で採点すること。

たとえば「その猫はお腹が空いて、エサ皿の前で鳴いた」という文で、モデルが今「鳴いた」という単語を処理しているとします。この単語を理解するには誰が一番大事でしょうか。

  • 「猫」 → とても大事。誰が鳴いたのかを教えてくれますから。
  • 「お腹が空いて」 → 大事。なぜ鳴いたのかを説明しますから。
  • 「エサ皿」 → 補助的に大事。状況を描いてくれますから。
  • 「その」「前で」 → ほとんど大事ではありません。文法要素ですから。

人間ならこれを自然にやりますよね。「鳴いた」を見ると頭の中で「猫」のほうに手が伸びる。attention はこの作業を 数字で実装した ものです。「鳴いた」を処理するとき、各単語に 0〜1 の点数を付けて、その点数の比率で他の単語の情報を混ぜてくる、という仕組みです。

それが全部です。このアイデアひとつをうまく設計したのが論文の核心です。

もう一つだけ押さえておきます。Attention は 「一つの単語」で終わりません。文の中の全ての単語が 同時に この作業をやります。「その」を処理するときは「その」の目で他の単語に点数を付け、「猫」を処理するときは「猫」の目でまた点数を付ける。すべての単語がすべての単語に対して「あなたは私にとってどれくらい大事?」を同時に問うんです。だから一層通すだけで文全体の関係網が一度に更新されます。RNN のように順番待ちしなくていい、というのはこの意味です。

3. Query / Key / Value — 図書館の比喩で完全につかむ

Attention = 図書館のQ·K·Vマッチング
成分 図書館の比喩 attentionでの意味
Query (Q) 「こんな本を探しています」 現在の単語が どんな情報を求めるか
Key (K) 本の表紙のラベル 他の単語たちが どんな情報を持つかのラベル
Value (V) 本の中の実際の内容 다른 단어들の実際の表現値 (混ぜて持ってくる)
QとKの類似度で重みを求め、その重みでVを混ぜて現在の単語の新しいベクトルを作る

ここから有名な Q・K・V の3文字が登場します。初めて見る方は「なぜ急に3文字も出てくるのか、一つだけあればいいんじゃないの」と思うかもしれません。私もそうでした。

F2で使った図書館の比喩を続けて、もっと深く掘ってみますね。

図書館の場面

あなたが図書館に入りました。「猫がなぜ鳴くのか知りたい」という問いを胸に持っています。本は数千冊あります。ところがこの図書館はちょっと特殊で、すべての本の中身を読む必要がなく、本の背に貼ってあるタグ だけを見て、どの本を開くかを決められるようになっています。さあ、どうやって進めるか見てみます。

  1. あなたの問いQ (Query) です。「猫の鳴き声について知りたい。」
  2. 本の背に貼られたタグK (Key) です。各本に「動物行動学」「猫の飼い方」「料理本」「数学書」のようなタグが貼ってあります。
  3. 本の実際の中身V (Value) です。本を開いたときに書かれている文章。

さて、あなたがすることはこれです。Q と K を比較して、問いに合う本を選びます。そして 選ばれた本の V (中身) を読んで情報をまとめます。

Attention はちょうどこの構造です。

  • 今処理している単語 (例:「鳴いた」) が図書館に入ったあなたです。この単語の Query ベクトル Q が出ます。
  • 同じ文の他の単語たち (例:「猫」「お腹が」「空いて」…) それぞれが本です。各単語ごとに Key ベクトル K と Value ベクトル V があります。
  • モデルは Q と各単語の K を比較して 類似度のスコア を出します。「猫」の K と Q が似ていればスコアが高く、「その」の K と Q はスコアが低いです。
  • そのスコアに沿って各単語の V を混ぜ、「鳴いた」の新しい表現を作ります。

類似度をどうやって数字に?

ベクトル2つの「似ている度合い」を測る一番シンプルな方法が 内積 (dot product) です。2つのベクトルを掛けて足すやつです。

  • 2つのベクトルが同じ方向を向いていれば内積は大 → スコア高い
  • 2つのベクトルが直交していれば内積は 0 → スコアなし
  • 2つのベクトルが反対方向を向いていれば内積は負 → スコア低い

Q と K が「同じ方向を向いている」というのは、「この Query が問うている概念と、この Key が代表する概念が重なっている」という意味です。だから内積が類似度として自然に使えるんですね。

ここで大事なこと。Q・K・V はもともと一つの単語の埋め込みから出てきます。各単語は最初ベクトル一つで表されます。そこに3つの異なる重み行列 W_Q, W_K, W_V を掛けて、Q・K・V に分離します。同じ単語を 「質問する側」「タグを貼られる側」「中身を持っている側」 の3つの役割に分けるんです。

この3つの役割の分離がなぜ大事か、少しだけ考えてみれば分かります。「鳴いた」を処理するとき、この単語は「Q としては原因を問う役割」ですが、他の単語が「鳴いた」を参照するときには「K と V として答える役割」になりますよね。同じ単語が文脈によって問う人になったり、答える本になったりしないといけない。Q・K・V の分離はその柔軟さを与える装置です。

もう一度だけ感覚を固めておきます。K と V をなぜ別々に置くのか が最初はピンと来ないかもしれません。「K が似ていればその単語そのものを持ってくればいいじゃないか、V を別に作る必要は?」という疑問ですね。図書館の比喩を最後まで押し通すとこうなります。本の背に貼られた タグ (K) は「この本がどんな主題かを要約したキーワード」です。一方で本の中の 本文 (V) は、あなたが実際に読みたい文章です。タグと本文は違いますよね。タグだけ見て選んで本文を読む、これが検索です。Attention も同じ。「この単語が参照される資格があるか (K)」「この単語が実際に伝える情報 (V)」 は分けたほうが自然で、モデルが学習中に2つの役割をそれぞれ最適化できるようになるんです。

実際、学習が終わったモデルを開いてみると、K と V のベクトルがはっきりと違う分布を作っているのが観察できます。K は「検索されやすい形」、V は「取り出して使いやすい形」にそれぞれ収束することが知られています。

4. 数式はひとつだけ — Scaled Dot-Product Attention

ここで論文の核心的な数式が出てきます。たった一行です。

Attention(Q, K, V) = softmax(Q·K^T / √d_k) · V

初めて見ると少し裏切られた気分になるかもしれません。「これで全部?」と思うくらい短いですからね。ところがこの一行の中に、ここまで話してきたことが全部入っています。一文字ずつほどいていきます。

Q·K^T — すべての Query がすべての Key に問う

Q は問いを行として積んだ行列です。文の中のすべての単語がそれぞれ Query を持っているので、N x d_k サイズ (N = 単語数、d_k = Query の次元) の行列になります。

K^T は Key たちを列として立てた行列。d_k x N サイズ。

二つを掛けると N x N サイズの行列が出ます。この行列の (i, j) マスには、i 番目の単語の Q と j 番目の単語の K の内積 が入ります。つまり、「i 番目の単語が j 番目の単語にどれくらい注目すべきか」 のスコア表が、一度に出てくるわけです。

図書館の比喩に戻ると、すべての読者がすべての本を一度に見て「この読者はこの本とどれくらい関係あるか」を表にまとめる感じです。

/ √d_k — なぜルートで割る?

この部分が数式の中で一番「なんでここまで?」と感じる部分です。ただスコアを出せばいいはずなのに、なぜ √d_k で割るのか?

理由は ベクトルの次元が大きくなると内積の値が大きくなりすぎるから です。

感覚的に説明するとこうなります。内積は各成分同士を掛けて足すものですよね。成分が1個のベクトル2つを内積すると数字1個が出ます。成分が100個のベクトル2つを内積すると、数字100個を足した値になります。次元が大きくなると値も自然と大きくなる。

値が大きくなりすぎると、あとに来る softmax で問題が起きます。softmax は指数関数を使うので、大きな値が入ると一つの場所に確率が 0.99999 に偏ってしまいます。残りはほぼ 0 になる。すると gradient (学習信号) がほぼ 0 になって学習が進まなくなります。

√d_k で割ってやると、値の大きさが次元に関係なく似た範囲に収まります。softmax が健康に動作する。この小さな仕掛けひとつが学習の安定性を大きく引き上げるので、論文でもわざわざ「scaled」を名前に入れ込んでいます。

softmax(...) — スコアを確率に変える

これは次のセクションで別に扱います。

· V — 確率の比率にしたがって Value を混ぜる

softmax を通った値は 0〜1 の比率 です。各単語に「何 % 注目するか」が決まった状態です。

この比率を各単語の Value に掛けて足します。「猫」に 0.6、「お腹」に 0.3、残りに 0.1 が割り振られたとしたら、0.6 × V_猫 + 0.3 × V_お腹 + 0.1 × V_残り が最終出力です。

これが「鳴いた」の新しい表現になります。元はただ「鳴いた」という単語1個だったのが、いまは 「猫が主語で、お腹の空きが原因の鳴き」 という文脈が溶け込んだベクトルに更新されているんです。

この更新が、文の中のすべての単語に対して同時に起こります。1回の行列掛け算で。RNN のように順番待ちする必要がありません。これが並列化の秘密です。

具体的な例でもう一度感覚を取ってみましょう。「その猫はお腹が空いて鳴いた」という 8 トークンの文を考えてください。QK^T を計算すると 8×8 のスコア表が出ます。「鳴いた」という行を見ると、8個のマスにスコアがあります。softmax を通すと、たとえばこんな比率になり得ます。[その:0.02, 猫:0.55, は:0.02, お腹が:0.18, 空いて:0.18, 鳴:0.02, い:0.02, た:0.01]。この比率にしたがって 8 トークンの Value ベクトルを重み付き平均すると、「鳴いた」の新しい表現が出ます。「猫が主語で、空腹が原因の状態の鳴き」 という意味が、ベクトル1本の中に圧縮されるんです。次の層でまたこの作業が繰り返されて、意味がどんどん豊かになっていきます。

数式を逆から一度だけ読み直します。「文全体の Q と K を一度に掛けてスコア表を作り (QK^T)、スコア表を安定化させ (/√d_k)、スコアを比率に変え (softmax)、その比率で Value を混ぜる (·V)。」 この4段階です。1単語1単語処理するのではなく、文全体を行列ひとつとして置いて一度に計算します。この点を覚えておくと、GPU がなぜ Transformer と相性がいいのかも自然に腑に落ちます。GPU は行列掛け算を並列に流し込むのに特化したハードウェアですよね。Transformer がやっていることは「大きな行列掛け算を何度か」がほぼ全部なので、GPU を 100% 使い切れるんです。

5. Softmax がやっていること

softmax は attention で2番目に大事な部品です。数式だけ見るとこうです。

softmax(x_i) = exp(x_i) / Σ exp(x_j)

これを言葉でほどくと「スコア表を、分け合いやすいように % 比率に変換する」ということになります。

スコアが [3, 1, 0, -1] のように出たとしますね。これはただ大きい数字と小さい数字の集まりで、「比率」ではありません。そのまま使うのは難しい。softmax に入れるとだいたい [0.84, 0.11, 0.04, 0.01] くらいが出ます。これで全ての値が 0〜1 の間にあり、全部足すと 1 になる。

なぜこれが大事かというと、「他の単語に対する注目の比率」 は本来確率の形でないと意味が通らないからです。0.6、0.3、0.1 のように、各対象にどれくらい資源を配分するかを決める比率で、合計が 100% にならないといけない。

そして softmax には 大きな値をもっと大きく、小さな値をもっと小さくする 性質があります。指数関数のせいです。元のスコアで 3 と 1 の差は 2 倍でしたが、softmax を通すと 0.84 と 0.11 で約 7.6 倍差になります。この「強調効果」のおかげで、モデルが「本当に大事な単語に確実に集中して、残りはほぼ無視する」判断をできるんです。

曖昧なスコアが入れば softmax も曖昧な比率を吐き、ハッキリしたスコアが入ればハッキリした比率を吐きます。モデルが単語間の関係を「強く確信するか、分散して見るか」を、softmax の入力規模を調節することで制御しているわけです。さっきの √d_k で割る理由ともここで繋がります。規模調節がないとモデルがいつも確信しすぎてしまって、学習が壊れます。

ここにもう一つ面白い性質があります。softmax には「temperature」という概念があり、分子の指数関数の入力を温度値 T で割る操作です。T が小さいと (例: 0.1) softmax が尖って一つの場所に確率が集まり、T が大きいと (例: 5) 平たくなって確率が均等に広がります。ChatGPT で「創造性の調整」として出てくる temperature パラメータが、まさにこれです。次トークン予測の最後の softmax をどれだけ尖らせるかを決めているんですね。低い temperature = 保守的・繰り返し気味、高い temperature = 多様・気まぐれ。この概念が attention 内部の softmax と まったく同じ原理 で動いていることを知っておくと、あとで API 設定をいじるときの感覚がぐっとよくなります。

6. Multi-Head Attention — 複数の編集者が同時に蛍光ペンを引く

ここで F2 で使った蛍光ペンの比喩を拡張します。

本のページが1枚あるとします。1人が蛍光ペンで大事な部分に線を引くとすれば、その人の基準ひとつだけで引かれます。ある人は文法に注目するし、ある人は感情を表す単語に注目するし、ある人は固有名詞に注目するでしょう。

編集者を複数同時に呼んでみるとどうでしょう。それぞれが違う色の蛍光ペンを持って、同じページを同時に見ていきます。1人は青で主語-動詞の関係を、1人は赤で否定表現を、1人は緑で時間表現を引いてくれる。全部終わるとページには複数の色の線が重なって、立体的な解釈が出ます。

これが Multi-Head Attention です。論文では head を 8 個使いました。

具体的にどうやって分けるか

さっき見た attention は Q・K・V をそれぞれ1セットずつ使っていましたよね。Multi-head はこれを 8 セットに分けます

元の次元が d_model = 512 だったとしたら、これを 64 次元ずつ 8 個 に分割します。各 head は自分だけの W_Q, W_K, W_V を持って独立に attention を計算します。終わったら 8 個の結果を連結 (concatenate) して、また 512 次元のベクトルに戻し、最後の重み W_O で混ぜ合わせます。

各 head が「別の種類の関係」を担当するように学習が自然と誘導されるのが、不思議な点です。明示的に「あなたは文法、あなたは感情」と指示したわけではないのに、学習が終わると各 head が実際に違う役割を引き受けています。これを可視化した有名な図があります (Jay Alammar の “Illustrated Transformer” ブログに綺麗に載っています)。

なぜそのまま大きいのを1つ使わないのか

「64 次元 × 8 個 = 512 次元なんだから、512 次元の head を1個使えばいいじゃないか」という疑問が自然に出てきますよね。

数学的には表現力自体は似ています。でも実際には 分けた方が学習がよく進みます。理由を感覚的に言うと、1個の大きな head は「ひとつの視点ですべての関係を説明しよう」としてしまいます。複数の小さい head に分けると、それぞれが「狭い視点ひとつずつ」を担当するようになり、異なる視点が 強制的に分化 します。

料理でたとえると、1人が 5 人分の料理を全部やるのと、5 人がそれぞれ 1 人前ずつ受け持つのとの違いみたいなものです。後者は味のムラはあっても各皿の集中度が高くなる。組織の分業と同じ原理です。

もう一つ効果があります。分けても 計算コストが増えない んです。64 次元の head 8 個の計算量は、512 次元の head 1 個とほぼ同じ。同じ予算で「ひとつの視点を深く」ではなく「複数の視点をそれぞれ」を選べるということ。これは単に表現力の問題ではなく 計算対効用 の問題です。タダで手に入る多様性と見てよいです。

この Multi-head 構造がなかったら Transformer が実際にここまでうまく動いたかどうか、と思えるくらい中核的な仕掛けです。以後に出たほぼすべての Transformer 派生モデル (GPT、BERT、T5、Claude 系列) がこの multi-head 構造をそのまま保っている理由もここにあります。

7. Positional Encoding — なぜ sin/cos なのか

Transformer には大きな穴がひとつあります。Attention 自体には 順序情報がありません

RNN は単語を順番に読んでいたので、順序が自動で入ってきていました。ところが Transformer はすべての単語を一度に処理しますよね。「猫がご飯を食べた」と「ご飯が猫を食べた」が attention 目線だと区別できないんです。単語の集合が同じならアテンションのスコアも同じですから。

そこで 各位置ごとに固有のパターン を単語の埋め込みに足してあげます。1 番目の位置にはこの信号、2 番目の位置にはこの信号、というふうに。これを Positional Encoding と呼びます。

論文の著者たちは、この信号を sin と cos で作りました。

PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

数式だけ見るとずいぶん人工的なんですが、理由が綺麗なんです。

なぜ sin/cos がいいのか

一つ目、位置が変われば値が変わります。pos が 1 のときと 2 のときで sin/cos の値が違うので、モデルは「1 番と 2 番は別の位置」と区別できます。

二つ目 — ここが核心なのですが — 相対距離の計算が自動でできます。sin/cos の数学的な性質のおかげです。

感覚的にほどいてみますね。2 つの位置 pos_1 と pos_2 があるとします。この2つの PE ベクトルを比較したとき、距離が 1 の関係 (例: 1番-2番) と距離が 10 の関係 (例: 1番-11番) は、違う形の差を見せます。そして距離が同じなら — 1番-2番でも 5番-6番でも — 同じ形の差 が出ます。

つまりモデルは「この2つの単語が何マス離れているか」を、2 つの PE の関係だけから自然に学べます。単に「この単語は3番の位置」という絶対位置だけでなく、「この単語はあの単語から3マス離れたところ」という相対位置まで扱えるわけです。

三つ目、学習にはなかった位置もある程度処理できます。訓練のときに 100 単語の文章しか見ていなくても、sin/cos は 100 番目を超える位置も数学的に定義されていますから。完璧ではないですが、学習済みの埋め込みを使うより柔軟です。

今出ている最新モデルたちは sin/cos の代わりに RoPE (Rotary Position Embedding) のような派生を多く使っていますが、基本のアイデア — 「位置ごとに固有のパターンを与え、そのパターンに相対距離の情報が溶け込むようにする」 — は、この論文から出発したそのままです。

Positional encoding が重要な理由は実務でも見えてきます。たとえば Claude や GPT に長い文書を入れたとき「真ん中の部分があまり拾えない」という現象 (Lost in the Middle と呼ばれます) が観察されるのですが、これは部分的に、位置情報が長距離で薄れるからです。最新モデルたちが 100 万トークンコンテキストをサポートする流れの中でも、位置エンコーディングをどう設計するか が研究され続ける理由がここにあります。このテーマはあとで M1 (Retrieval Layer) の回でもまた出てきます。

8. Feed-Forward Network — 各位置で一人で考えをまとめる

Attention で文の中の他の単語たちの情報を一巡させると、各単語は「文脈が溶け込んだベクトル」になります。その次の段階が Feed-Forward Network (FFN) です。

構造はシンプルです。2 層の全結合ニューラルネット (fully-connected) に ReLU のような活性化関数が間に挟まっているだけ。各単語のベクトルがこの FFN を通ることで もう一度加工 されます。

面白いのは、この FFN が position-wise だという点です。どういうことかというと 各位置ごとに同じ FFN が独立に適用される という意味です。1 番目の単語ベクトル、2 番目の単語ベクトル、3 番目の単語ベクトルがそれぞれ同じ FFN を別々に通ります。位置同士は混ざりません。

位置同士を混ぜる仕事はさっき attention がやりましたから。FFN は「さあ、あなたの位置で受け取った情報を一人でまとめて」という役割です。

カフェでたとえるとこうです。会議でアイデアを交換して (attention)、そのあとそれぞれ自分の席に戻って一人でノートをまとめる (FFN)。交換の段階と整理の段階が交互に繰り返されるのが、Transformer ブロックの基本パターンです。

Layer Normalization がなぜ必要か

各ブロックの中には Layer Norm というものが挟まっています。数式は複雑に見えますが、役割はシンプルです。ベクトルの中の値たちの平均と分散を正規化する ものです。

学習を長く回していると、ベクトルの値がデコボコに暴れ始めます。ある次元は値がすごく大きく、ある次元はすごく小さく。これがひどくなると gradient が爆発したり消えたりして学習が壊れます。Layer Norm は毎回値を「平均 0、分散 1 くらいの綺麗な範囲」に引き戻す安全装置です。

ディープラーニングに「Normalization」と付く技法が多い理由もここにあります。深いネットワークで値が暴走しないようにするのが、学習の安定性の大きな宿題ですから。

FFN が実はモデルの「知識の倉庫」の役割をしているという研究もあります。Attention は単語同士の関係を描く装置、FFN は「この単語がどんな概念と繋がるか」を重みに保存しておく装置、という解釈です。たとえば「パリ」という単語が入ると、ある FFN のニューロンが「フランスの首都」という関連概念を活性化させる、という具合に。Transformer ブロックが「関係を描く (attention) → 意味を取り出す (FFN)」を交互に繰り返す構造だと考えると、なぜこの2つが1セットで繰り返されるのかが自然に腑に落ちます。

9. Residual Connection — 「壊れてもオリジナルは残す」

Transformer ブロックには Attention と FFN 以外にも、もう一つ隠れた構造があります。Residual Connection です。式で書くとこうです。

出力 = x + F(x)

x が入力で、F(x) が attention や FFN のような変換です。変換の結果だけを使うのではなく、元の x をそのまま足してあげる んです。

これがなぜ大事かというと、ネットワークが深くなったときに学習が進まなくなる問題 を解決してくれるからです。層が多くなると gradient が前の方までほとんど届かず、前の層が学習されませんでした。これを「vanishing gradient」と呼びます。

Residual を入れると gradient が 変換を飛び越えて、元の経路で直接伝わります。高速道路の横に非常用の車線をひとつ置いたような感じ。本線が詰まっても非常車線で情報が流れるので、前のほうまで信号が届きます。

もう一つよい点は、各ブロックが「変に学習しても、最低限オリジナルは残る」 という点。F(x) が変な値を吐いても、元の x が足されているので、最悪でも入力をそのまま保存できます。モデルが各ブロックで「必要なら何か変え、いらないならそのままにしておく」という選択ができるようになるわけです。

この3つの部品 — Attention、FFN、Residual+LayerNorm — が1セットで Transformer ブロックになります。論文ではこれを encoder 6 層、decoder 6 層で積み上げました。

ちなみに Residual はもともとビジョン側の ResNet (2015) で先に提案された構造です。画像分類で層を 100 層以上積むと学習が壊れる問題を解決した論文で、Transformer はこのアイデアをそのまま持ってきて言語モデルに適用しました。いい部品が別の分野で発見されたらすぐ持ってきて使うのが、ディープラーニングの伝統で、Residual はその代表例のひとつです。

10. Transformer ブロック全体の絵 — これで論文の図が読める

論文の有名な Figure 1。左に encoder、右に decoder が描かれているあの図。初めて見ると矢印が多くて目が回るんですが、ここまで話してきた部品をもって一気に解釈してみます。

Encoder (左の6層)

入力文が左下から入ります。

  1. Input Embedding + Positional Encoding — 各単語がベクトルに変換され、位置パターンが足されます。
  2. Multi-Head Self-Attention — 各単語が同じ文の中の他の単語たちを参照して更新されます。「Self」と呼ぶ理由は Q・K・V がすべて同じ文から出てくるからです。
  3. Add & Norm — Residual + Layer Norm。
  4. Feed Forward — 各位置で一人でまとめる。
  5. Add & Norm — また Residual + Layer Norm。
  6. ここまでが 1 層。これを 6 回繰り返します。

6 層上に登るほど、各単語のベクトルは どんどん高度な文脈情報が溶け込んだ状態 になっていきます。1 層は主語-動詞のような基本関係、上の層は長い文章の主題・トーンのような抽象的な関係を掴む傾向が、実験的に観察されています。

Decoder (右の6層)

出力文が右下から入ります。翻訳モデルなので「ここまで生成した翻訳文」です。

  1. Output Embedding + Positional Encoding — encoder と同じ。
  2. Masked Multi-Head Self-Attention — ここで「masked」が大事です。decoder は左から1つずつ単語を作っていくので、まだ作っていない右の単語を先読みできませんよね。そこで attention のスコア表で 未来の位置をマスクして (隠して) 0 にします。「未来の単語を盗み見ないようにする」装置です。
  3. Add & Norm
  4. Cross-Attention (Encoder-Decoder Attention) — ここがポイント。Q は decoder から出て、K・V は encoder の最終出力から来ます。今作っている翻訳の単語が 原文のどこを参照するか を決める部分です。翻訳モデルの核心的な接続部です。
  5. Add & Norm
  6. Feed Forward + Add & Norm
  7. 6 回繰り返し。
  8. 最後に Linear + Softmax で次の単語の確率分布。

ここまで見ると図が「ああ、要するに encoder ブロックと decoder ブロックを積んで、decoder に cross-attention を足しただけなんだ」と読めるようになっているはずです。

今使われている GPT 系モデルは、このうち decoder 部分だけ を使っています。エンコーダはありません。Cross-attention もなし。代わりに masked self-attention を積んで「ここまで書いた文 → 次の単語予測」だけを繰り返します。BERT のようなモデルは逆に encoder 部分だけ を使っています。Transformer は encoder・decoder 2 つの軸を両方示し、後続のモデルたちが自分の目的に合わせて片方を選んで育てた、という流れです。

Cross-Attention をもう一文だけほどくと

Cross-attention がなぜ翻訳モデルで決定的かを、もう少しだけほどいておきます。韓国語「고양이가 울었다 (猫が鳴いた)」を英語に翻訳するとしましょう。Decoder が「The」を作って、次に「cat」を作る番です。「cat」を作るとき decoder は 原文の「猫」という単語を集中して見るべき です。この「原文のどこを見るべきか」を決めるのが cross-attention です。Q が decoder から出て (今何を作っているか)、K・V が encoder から来る (原文に何があるか) 理由がここで出てきます。「作っている側が問い、原文の側が答える」 という構図です。RNN ベースの seq2seq 時代にも attention のメカニズムはあったのですが、Transformer はこれを中核部品にまで引き上げました。

11. なぜこの論文があれほどの衝撃だったのか

2017 年に出たこの短い論文が 8 年経ってもいまだ LLM 時代の起源と呼ばれる理由を、いくつかに整理してみます。

1. 並列化ができるようになった。 RNN が「単語を順番に処理」している間、Transformer は「すべての単語を一度に処理」します。GPU 1 枚に全部乗せて学習すると速度が大きく伸びます。このおかげでデータとモデルの規模を大幅に上げることが現実的になりました。

2. Scaling law の扉を開いた。 Transformer は 層を積むほど、データを増やすほど性能が上がり続ける という性質がありました。2020 年の OpenAI の Scaling Laws for Neural Language Models 論文がこの性質を定量的に示し、ここから「とにかく大きくすればもっと上手くやる」という戦略が力を得ました。GPT-3 → GPT-4 → Claude → Gemini の道のりがすべてこの論理の上にあります。

3. 汎用性がとんでもなかった。 論文は翻訳問題から始まりましたが、すぐに他のタスク (要約、QA、分類、コード生成) に広がりました。BERT (2018) が encoder だけ、GPT (2018) が decoder だけ使ってそれぞれ違う強みを伸ばし、時間が経つにつれて decoder-only の構造が今の ChatGPT・Claude 系列に収束しました。

4. 非言語ドメインにも広がった。 Vision Transformer (ViT) は画像に、Perceiver は映像・音声・センサーデータにまで、Transformer の構造がほぼすべてのモダリティに乗り移りました。「attention さえあればいい」というタイトルが言語を超えてもある程度当たっていたわけです。

CodexClaude Code を使うとき、裏で動いているモデルはすべてこの論文の decoder 系列です。Prompt を入れると masked self-attention でここまでのトークンを読み、次のトークンを一つ確率で引き、また読み、また引く。この過程を繰り返して長い返答が生成されていきます。内部構造を知っているのと知らないのとの差は、「なぜ長いプロンプトで前半が薄まるのか」「なぜ同じ質問なのに答えが揺れるのか」といった実務問題を追いかけるときに現れます。

5. 解釈性の手がかりを与えた。 RNN は内部で何が起きているか見るのが難しかったです。Attention はスコア表を直接取り出せます。「この単語があの単語に 0.8 で注目した」が数字で出てくるので、モデルがどの関係に注目したかの可視化が可能になりました。完全な解釈性とは言えませんが、モデルの中を少しでも覗ける窓ができた、ということです。Anthropic の “circuits” 研究や mechanistic interpretability の流れが Transformer 以後に加速した理由のひとつも、ここにあります。

実務感覚でもう一度

この 5 つの効果が合わさって、いまの LLM 生態系ができあがりました。2026 年時点で ほぼすべての商用 LLM が decoder-only Transformer を使っています。細部は少しずつ違います。Claude は MoE (Mixture of Experts) を一部の層で使っていて、GPT 系列も似た流れで、Gemini は multimodal に特化した変形が入っています。それでも 骨格はみなこの論文 です。2017 年に提案された構造が 8 年経っても現役、というのはとても珍しいことです。ビジョンの CNN が 20 年ほど主流だったように、Transformer もしばらくの間は主流で居続けそうです。

実務者としてこの構造を理解しておくとよい点をもう一つだけ言うと、道具選びの基準 ができることです。「このモデルはコンテキストをどこまでサポートしてる?」「このモデルの attention 構造は長い文書に強い派生かな?」という問いが出せるようになるんですね。スペックシートを見るとき、数字だけでなく、その数字がどこから来ているかの感覚がつかめます。

もう一つの実務ポイント。Attention がどれくらい計算コストを食うかが分かれば、長いコンテキストを入れるほどなぜ API 料金が急激に上がるのか が理解できます。Attention の QK^T 演算はトークン数 N に対して O(N²) の複雑度ですから。トークンが 2 倍になると attention 計算は 4 倍です。10 倍長くなれば 100 倍。100 万トークンのコンテキストを扱うモデルが高価な理由がここにあります。この O(N²) のボトルネックを減らすために、Flash Attention、Sliding Window Attention、Linear Attention といった最適化手法がずっと研究されています。こういう用語が技術ニュースに出たとき「ああ、あの論文のあの部分を最適化する話だ」と感じられれば、追いかけるのがずっと楽になります。

12. mathbullet の動画と、続けて読むおすすめ

この記事は「比喩中心、数式はたったひとつ」で引っぱってきました。でも、あるときから数式の証明までちゃんと見たくなる瞬間が来ます。そういうときに私がおすすめしたいのが、mathbullet という YouTube チャンネルの解説です。

mathbullet – Attention is All You Need 解説

mathbullet は論文の数式を黒板で1行ずつ解きながら、なぜこの形になったのかを数学的に導いていくスタイルです。このブログが「図書館の比喩で感覚をつかむ」だとしたら、mathbullet は「黒板の前で証明を追いかける」です。2 方向が合わさると論文がずっとしっかり頭に定着します。

合わせておすすめしたい資料たち:

  • Jay Alammar — The Illustrated Transformer (ブログ)。絵で Transformer 全体の構造を追っていく記事。この記事の図書館の比喩とそのまま地続きの視点です。
  • 3Blue1Brown — Deep Learning シリーズ (YouTube)。ディープラーニングの基礎感覚をアニメーションで掴める、一番良いシリーズ。
  • Andrej Karpathy — Let’s build GPT (YouTube)。Attention からミニ GPT までコードで書きながら追いかける 2 時間の講義。この記事で感覚を掴んだあとに見ると、ずっと追いかけやすくなります。

原文論文 (arXiv:1706.03762) は検索すればすぐ出てきます。ここまで読んでいただいた状態で論文の Figure 1 だけでも一度開いてみると、前よりずっと多くのものが読めるはずです。

毎週月曜日、AIトレンドニュースレター配信中

会員登録すると、毎週月曜日に「今週のAI・バイブコーディング最新情報」をお届けします。
バナー広告なし・本当に役立つ情報だけを厳選するクリーンなAI専門メディアです。


ニュースレター登録(無料・30秒)→


締めの一文: Attention は「今見ている単語が、誰をどれくらい見るべきかを点数で採点すること」であり、そのスコアを softmax で比率に変え、比率にしたがって Value を混ぜる。この 3 つの動作を複数の head で、複数の層で積み上げたものが Transformer です。いま私たちが使っているすべての LLM が、この構造の上にあります。

次の読みもの

  • F5 — Embedding とは何か [公開済み]
  • B1 — AI Agent は何が違うのか [準備中]
  • M1 — Retrieval Layer がなぜ必要か [準備中]

シリーズのはじめから: F1 — LLM とは何か · F2 — Transformer は何をしたのか · F3 — ディープラーニングがただ大きな計算である理由

よくある質問 (FAQ)

Q1. Attention と Transformer は同じものですか?

違います。Attention は メカニズム一つ です。「今の単語が他の単語をどれくらい見るかをスコアで採点する」演算ですね。Transformer は この attention を複数積んで作った全体のモデル構造 です。Attention が部品で、Transformer が完成した機械、と考えると分かりやすいです。他のモデルも attention を使えますが、Transformer は attention を 主役 にした初めてのモデルでした。

Q2. 数式を一つだけ見ても本当に論文の内容が全部カバーできるんですか?

Attention(Q,K,V) = softmax(QK^T / √d_k) V この一行は、論文で一番核心的な「何を計算するか」を含んでいます。残りはこの演算を どう積むか、どう並列化するか、順序情報をどう入れるか といった周辺設計です。ブログの水準では、この数式ひとつを感覚的に理解していれば論文の 80% は読めます。残り 20% — 実際の学習の損失関数、ハイパーパラメータ選択、BLEU スコアの実験結果 — は、実務でモデルを自分で訓練するときに必要になる部分です。

Q3. この論文を理解するとプロンプトエンジニアリングに直接役立ちますか?

役立ちます。たとえば「なぜ長いコンテキストで前半の情報が薄まるのか」は、attention スコアが遠く離れた単語どうしで集まりにくい現象とつながっています。「なぜ指示文をプロンプトの末尾に繰り返すと効くのか」も、attention が近くのトークンに寄る傾向から説明できます。構造が分かるとプロンプト戦略に「なぜ」が付いて、ぶれが減ります。とはいえ論文の理解がなくても実務は可能なので、興味が湧いたときにゆっくり積み上げていけば大丈夫です。


ニュースレターのご案内

毎週月曜日、AI・LLM・エージェント関連の実務整理を一通ずつお届けします。こういう技術解説を落ち着いて積み上げていきたい方は、ぜひ購読してください。

ニュースレター登録(無料・30秒)


🗺 マップ上の現在地

シリーズのご案内 (AIのしくみ地図 20編)
– F0: AI・ML・DL・LLM の用語整理
– F1: LLM とは何か
– F2: Transformer は何をしたのか
– F3: ディープラーニングがただ大きな計算である理由
F4: Attention Is All You Need 解説 (現在の記事)
– F5: Embedding とは何か
– F6: モデルはどう学習するのか
– M1: Retrieval Layer がなぜ必要か
– (以下20編まで)


著者: バイブコーディング テイラー(Lovable公式アンバサダー)
運営: テイラーの隠れ家(shuntailor.net)

📍 シリーズ位置
AIのしくみ地図 · 4/20編

Attention数式を真正面からの位置にある編です。前後編のリンクは記事下部のマップ上の現在地ボックスで確認してください。

💡 この編の一行要約

図書館のQ·K·V比喩一つと数式一本(scaled dot-product attention)で原論文を最後まで読み解く編。

ソースリスト


著者: バイブコーディング テイラー (VibeCoding Tailor) — Lovable公式アンバサダー. AI·バイブコーディング専門メディアshuntailor.net運営.
本シリーズ「AIのしくみ地図」20編は、ウィキの蓄積と公式論文・公式ドキュメントを根拠に整理した体系的学習カリキュラムです。

JAKO