Chapter 03 · Transformerの核心

AttentionとFFNが、意味を磨く

文脈を読み、知識を呼び出す——Transformerの中核メカニズムを、可視化と具体例でじっくり解きほぐす。プロンプトの効きどころも、ここで腑に落ちる。

生成AI · シリーズ 生成AIの仕組み · 全 5 章

Section 07

Attention——文脈に応じて意味を更新する

でも、単語のベクトルが固定されているだけでは、本当の意味は分からないのではないか?

たとえば「数学の問題に時間をかけた」という文を考えてみる。「問題」には「トラブルの問題」と「クエスチョンの問題」がある。「かける(た)」にも「装着のかける」と「費やすのかける」がある。どうやってAIは、文脈に応じた意味を認識しているのか。

ここで登場するのが Attention(アテンション) という仕組みだ。Transformer論文で核となる発明であり、論文タイトル「Attention Is All You Need(注意機構さえあればよい)」が示すとおり、Transformerの中心メカニズムだ。

Attentionは、各単語が「他のどの単語にどれだけ注目すべきか」を計算し、その注目度に応じて自分のベクトルを更新する

Q・K・V——3つの役割で「注目」を計算する

Attentionの内部では、各トークンのベクトルから Q(Query:問い合わせ)K(Key:見出し)V(Value:中身) の3種類のベクトルが作られる。直感的には、QKVは図書館の検索になぞらえると分かりやすい。「自分が何を知りたいか」というQを掲げ、周囲の各トークンの「見出し」であるKと照合し、一致度が高いものから「中身」のVを多めに受け取る、という仕組みだ。

具体的には、QとKの内積で各ペアの類似度(注目度)を計算し、それを √d_k(Kの次元の平方根)で割って Softmaxで正規化する。√d_kで割るのは、次元が大きくなると内積の値が大きくなりすぎてSoftmaxが極端に偏る(勾配が消える)のを防ぐためのスケーリングで、原論文ではこれを Scaled Dot-Product Attention と呼んでいる。

例:「問題」から見た各単語への注目度

数学38%
4%
問題基準
3%
時間22%
3%
かけた18%

↓ 「問題」が周囲のどの単語に注目するかが、Attentionで決まる(下のボタンで実際の動きを確認)

ベクトルの更新を、空間で見てみる

Attentionによる注目度をもとに、「問題」のベクトルが意味空間の中で移動していく様子をアニメーションで見てみよう。下のボタンを順番に押すと、各ステップでベクトルがどう動くかが確認できる。

SEMANTIC SPACE — 「問題」の意味の遷移
具体性 →
↑ 学習関連
トラブル
懸念点
いざこざ
宿題
設問
難問
取り組んだ問題
「問題」
STEP 01 / INITIAL 更新前の「問題」は、「トラブル」「懸念点」「いざこざ」などネガティブな意味の近くに配置されている。

Attentionの2つのメリット

① 複数の意味を持つ単語の使い分けができる

同じ「高い」でも、注目する単語によってベクトルの座標が変わり、意味も変わる。初期位置(0.5, 0.5)から、文脈に応じて別々の方向へ移動する。

「高い」の意味は文脈で変わる
物理的な高さ →
↑ 価値・価格
高級
高価
標高
山頂
「高い」
INITIAL 初期位置 (0.5, 0.5)。文脈情報がないため、中立的な位置にある。

② 違う表現でも、同じ意味の言葉を同一にとらえられる

「太郎は朝早く起きた...(中略)...彼は遅刻しそう」のような文章で、間にどんなに長い文章があっても、Attentionは「彼」から直接「太郎」に注目できる。結果として「彼」のベクトルは「太郎」に近づき、AIは「彼=太郎」だと認識できる

「彼」が「太郎」に近づく
太郎 (0.7, 0.7)
花子
次郎
「彼」
INITIAL 「彼」は当初、誰を指すか確定していない位置 (0.1, 0.8) にある。

この「離れた位置にあるトークン同士でも直接結びつけられる」という性質こそ、Attentionが従来のRNN/LSTMより優れている本質的な理由だ。RNNは「順番に1つずつ」処理する必要があったため、長い文では遠くの依存関係を捉えにくかった。Attentionはそれを並列計算で一気に解決した。

Multi-Head Attention——複数の視点で同時に注目する

Attentionは1つだけでなく、複数の「ヘッド」に分割して並行に計算される。これが Multi-Head Attention だ。各ヘッドは別々のQ/K/V射影を持ち、それぞれが異なる関係パターン(代名詞と名詞の参照、構文的な係り受け、局所的な共起など)を独立に捉える。最後にすべてのヘッドの出力を連結し、再び元の次元に射影する。

原論文のbase modelは 8ヘッド、big modelは 16ヘッド。GPT-3では 96ヘッド と、モデルが大規模になるほどヘッド数も増える傾向にある。

Self-Attention と Causal Mask

GPT系のような デコーダ専用モデル では、各トークンが「自分より前のトークンだけ」に注目できるよう Causal Mask(因果マスク) がかけられている。次トークン予測の学習中に未来の答えを覗き見しないためだ。一方、原論文のEncoder-Decoder構成では、デコーダがエンコーダの出力に注目する Cross-Attention も使われ、翻訳のように「ソース文を参照しながら別の言語を生成する」タスクで活躍する。

Note

Transformerが革命的だった理由のひとつは、並列処理が可能になったこと。RNNはトークンを順次処理する必要があったため学習が遅かったが、AttentionではすべてのトークンペアのスコアをGPUで並列計算できる。 オリジナル論文(2017)のbase modelは エンコーダ6層+デコーダ6層、d_model=512、ヘッド数8、各ヘッドの次元d_k=d_v=64、FFNの中間次元d_ff=2048 という構成だった。big modelはこれを倍程度に拡大し、ヘッド数16・d_model=1024・d_ff=4096となっている。

Source: Vaswani et al. (2017), "Attention Is All You Need" (arXiv:1706.03762)

Section 08

FFN——文章をより深く理解する

Attentionで文脈を読み取った後、FFN(Feed Forward Network)が情報を解釈し変換することで、深い理解が実現される。

Attentionが「他の単語の情報を集める(文脈を読み取る)」役割なら、FFNは「集めた情報の意味を深め、磨く」役割を担う。AttentionとFFNの2つは、Transformerの各層で必ずペアで現れる。

正確には、FFNは position-wise(位置ごと) に適用される。つまり、各トークン位置に対して同じ重みのネットワークが独立に適用される。トークン間の情報のやり取りはAttentionに任せ、FFNは各位置の表現を「単独で深く磨く」役割に徹する設計だ。中身は 線形層 → 非線形活性化 → 線形層 の2層MLPで、活性化関数は原論文ではReLU、BERTやGPT-2/3では GELU、Llama・PaLMなどの最近のLLMでは SwiGLU(Swish + Gated Linear Unit)が使われる。

「問題」の例で考える

Attentionによって「時間をかけた数学の問題」に意味が寄ってきた「問題」だが、この時点でも「数学以外の科目」や「トラブル」の意味成分がまだ少し残っている。FFNは、ここから不要な意味を削ぎ落とし、必要な知識を加算する。

FFNの内部:次元の展開と圧縮

Attentionがベクトルを更新しても、「問題」には「トラブル」と「クエスチョン」の両方の成分が混ざり合った重ね合わせの状態になっている。FFNはこれを次の3ステップで処理する。

入力
混ざった状態の
「問題」ベクトル
次元展開 + 知識加算
独立した軸に分離し、
関連知識を加算
圧縮(活性化関数)
不要な成分を
ゼロに抑制

① 次元の展開

モデルの次元を一時的に大きくして、混ざっていた特徴を独立した軸として引き離す。「トラブル」と「クエスチョン」が別々の次元に分離される。GPT-3の場合、12,288次元から49,152次元(=4倍)に展開される。

② 知識の呼び出し(表現加算)

学習データから得た知識を使って、現在の表現に加算する。「数学/時間/問題」という文脈なら「難問」「論理/思考力」「粘り強く」といった関連知識が呼び出される。FFNは、モデルが学習で獲得した「世界の知識」を保持している場所だと考えられている。

③ 活性化関数による圧縮

「しきい値」を使って、不要な成分をゼロに抑制する。「トラブル」「法律/民事」「金銭/職場」「いざこざ」のような今回の文脈に不要な意味が落とされ、磨かれた「問題」のベクトルが残る。最後に元の次元(12,288)に戻される。

Tip

Attentionで文脈情報を集め、FFNで知識を呼び出して意味を磨く。これが繰り返されることで、「粘り強く時間をかけて解いた難しい数学の問題」という、文脈に応じた具体的な意味が確定していく。実は、Transformerのパラメータの大部分はFFNに使われている。GPT-3の総パラメータ約1750億のうち、各層の大半がFFNの重みだ。FFNの中間次元は d_modelの4倍 に設定されることが多い(原論文でもd_model=512に対しd_ff=2048)。

Note

FFNは単なる「変換層」ではなく、キー・バリュー型の連想記憶として機能している、という解釈がある。1段目の線形層の各行が「キー(訓練データ中の特定パターンと反応する検出器)」として働き、それと一致したときに2段目の対応する行が「バリュー(出力語彙への分布)」として加算される——つまりFFNは、学習で獲得した「世界の知識」を保持する場所だ、というモデルだ。下層は表層的なパターン、上層はより意味的なパターンを捉える傾向も報告されている。

Source: Geva et al. (2021), "Transformer Feed-Forward Layers Are Key-Value Memories" (arXiv:2012.14913, EMNLP 2021)

Section 09

Transformer全体像

生成AIの基礎となっているTransformerは、ここまで説明してきたEmbedding、Attention、FFNの組み合わせで、その大部分がカバーできる。

Transformerの内部では、AttentionとFFNが何層も繰り返し適用される。層を経るごとに意味がより磨かれていき、最終的にその磨かれたベクトルから「次のトークン」の確率が計算される。

残差接続とLayerNorm——深い層を学習可能にする2つの仕組み

各サブ層(AttentionとFFN)の周りには、残差接続(Residual Connection)Layer Normalization が必ず挿入されている。残差接続は「入力をそのままバイパスして出力に足す」仕組みで、勾配が層を貫通しやすくなり、数十〜百を超える深い層でも安定して学習できる。LayerNormは活性化値の平均と分散を整え、スケールの暴走を防ぐ。

原論文は「サブ層の出力にLayerNormをかける」Post-LN 構成だったが、深いモデルでは学習が不安定になりやすかった。GPT-2以降の多くのLLMは、サブ層の入力側にLayerNormを置く Pre-LN 構成を採用していて、こちらのほうが学習率Warmupに頼らずに安定して訓練できる。現代の大規模モデルではPre-LNが事実上の標準だ。

3つの構成——Encoder-only、Decoder-only、Encoder-Decoder

Transformerは構成の選び方で性質が変わる。Encoder-only(BERTなど)は文章理解・分類に強く、Encoder-Decoder(原論文・T5・BARTなど)は翻訳や要約のように「入力を読み込んで別の出力を作る」タスクに向く。そして現在主流のLLM(GPT・Llama・Claudeなど)は Decoder-only 構成だ。次トークン予測という単一の自己回帰目的関数だけで、テキスト中のあらゆるタスクを学習できる、というシンプルさとスケール則の良さが、Decoder-onlyが選ばれている主な理由になっている。

位置情報の与え方——Sinusoidal、Learned、RoPE、ALiBi

Attentionそのものは順序情報を持たないので、トークンの位置を別途モデルに伝える必要がある。原論文は 正弦波(sinusoidal) による固定の位置エンコーディングを採用していた。GPT-2/3などは 学習型の位置埋め込み(learned) を使う。最近の主流は RoPE(Rotary Position Embedding、Su et al. 2021) で、Q・Kを位置に応じて回転させることで相対位置を自然に表現できる。Llama・Mistral・GPT-NeoXなどがこれを採用している。ほかに、注目スコアに位置距離に応じたバイアスを足すだけの ALiBi もある。

GPT-3を例に、スケールを実感する

175B パラメータ数
(1,750億)
GPT-3
96 Transformer
レイヤー数
GPT-3
12,288 埋め込み
次元数
GPT-3
96 Attention
ヘッド数
GPT-3
~50K 語彙サイズ
(トークン種類)
GPT-3
300B 学習トークン数
(3,000億)
GPT-3

GPT-3では、12,288次元のベクトルが96層を経由しながら、AttentionとFFNを繰り返し受けて、意味が磨かれていく。各層を1回通るたびに、トークンのベクトルは「より文脈を理解した」状態に更新される。

主要モデルのアーキテクチャ比較

1.5B 48層 / 1,600次元
25ヘッド
GPT-2 XL
175B 96層 / 12,288次元
96ヘッド
GPT-3
70B 80層 / 8,192次元
64クエリヘッド(GQA)
Llama-3 70B
? 公式仕様非公開
(MoE構成と推測)
GPT-4

※ Llama-3 70Bは、推論を高速化するため GQA(Grouped-Query Attention) を採用していて、64個のクエリヘッドに対しKey/Valueは8グループのみで共有される。GPT-4はOpenAIから詳細仕様が公表されておらず、パラメータ数や層数の数字は外部の推測値しかない点に注意。

Note

GPT-3の175Bパラメータの内訳は、約173B(99%以上)がTransformerの96層分の重みに使われている。残りはトークン埋め込み(約0.62B)、位置埋め込み(約0.025B)、出力射影など。各Transformer層には、Attention(Q/K/V/O射影で4×d²)、FFN(2×d×4d)、LayerNorm などが含まれる。学習データはCommon Crawlが約60%、WebText2が約22%、Books1+Books2が約16%、Wikipediaなどから構成される(合計約3,000億トークン)。

Source: Brown et al. (2020), "Language Models are Few-Shot Learners" / OpenAI GPT-3 Paper

Section 10

プロンプトの重要性を仕組みから理解する

ここまでの仕組みを理解すると、「プロンプトを具体的に書くと精度が上がる理由」も腑に落ちる。

プロンプトの情報量が増えると、Attentionが注目すべきキーワードが増え、FFNでより具体的な知識が加算される。結果として、回答の精度が上がる。

なぜ「例を見せる」と精度が上がるのか(In-Context Learning)

プロンプトに数個の入出力例を入れるだけでタスクをこなせる現象は、GPT-3の論文で Few-shot / In-Context Learning として広く知られるようになった。仕組みから見れば、新しいトークンの表現はAttentionで「過去の全トークン」に注目しながら更新される。つまり、プロンプトに置いた例題そのものが、その後のトークン予測に影響を与えるバイアス源として働いている、と理解できる。重みは更新されないが、文脈による条件付けで出力分布が大きく変わる。

なぜChain-of-Thought(CoT)は効くのか

「ステップ・バイ・ステップで考えて」と促すと正答率が上がるCoTも、仕組みから自然に説明できる。Transformerは1トークンを生成するごとに固定の計算量しか使えないため、難しい問いに即答させる=計算量が足りないという構造的な制約がある。CoTは中間トークンを書き出させることで、その分だけモデルに「考える計算ステップ」を与え、しかも自分自身が書いた途中経過にAttentionで戻って参照できるようになる。

「あなたは経理のプロです」が効く本当の理由

役割を割り当てるプロンプトが効く理由は、モデルに「人格」が宿るからではない。学習データの統計から、その役割らしい文体・語彙・推論パターンに高い確率が割り振られ、出力分布がその「らしい完成形」へ偏るからだ。あくまで条件付き確率分布の話であって、内部に専門家が現れるわけではない、という点を冷静に押さえておきたい。

曖昧な指示

「おいしい料理教えて」

「料理」ベクトルが他のキーワードで更新されない → 抽象的な回答になる。「おいしい料理」の概念が広すぎて、AIは焦点を絞れない。

具体的な指示

「冬に食べる、体が温まる日本の家庭料理を教えて」

「料理」ベクトルが「冬」「温まる」「日本」「家庭」によって更新される → 鍋、おでん、シチューなど具体的な回答になる。

コンテキスト長の問題:長すぎても効かない

一方で、「とにかく長く書けば精度が上がる」というわけでもない。LLMには「Lost in the Middle(中盤忘却)」と呼ばれる現象が知られていて、長い文章の真ん中に置かれた情報には注意が向きにくい傾向がある。重要な指示は文の冒頭や末尾に置くのが効果的だ。

また、最近のモデルは数万〜数十万トークンのコンテキストウィンドウを持つが、コンテキストが大きいほど計算コストが上がる(Attentionの計算量はトークン数の2乗に比例する)。RAG(Retrieval-Augmented Generation)などで本当に必要な情報だけを渡すのが、品質とコストのバランスを取る上で重要になる。

Warning

これがプロンプト設計が大事な理由のすべてではない。学習データに含まれる指示パターンへの適合、モデルが訓練された会話形式、温度パラメータなどさまざまな要因が絡む。ただ、Attentionで意味が更新される仕組みを背景として知っておくと、コンテキスト設計の重要性をより深く理解できる。

Note

大規模化に伴って突然できるようになる「創発(Emergent Abilities)」も話題になった。一方で、Schaeffer et al. (2023) は 「創発の多くは評価指標の選び方によるアーティファクト」 と論じている。完全一致のような不連続な指標を使うと急に立ち上がって見えるが、対数尤度のような連続的な指標で測ると、性能はスケールに対して滑らかに伸びている、というのが彼らの主張だ。「ある日突然賢くなった」と素朴に解釈する前に、メトリクスを疑う目を持っておきたい。

Source: Brown et al. (2020), "Language Models are Few-Shot Learners" (arXiv:2005.14165) / Wei et al. (2022), "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" (arXiv:2201.11903) / Schaeffer et al. (2023), "Are Emergent Abilities of Large Language Models a Mirage?" (arXiv:2304.15004, NeurIPS 2023)