Chapter 03 · Transformerの核心
文脈を読み、知識を呼び出す——Transformerの中核メカニズムを、可視化と具体例でじっくり解きほぐす。プロンプトの効きどころも、ここで腑に落ちる。
生成AI · シリーズ 生成AIの仕組み · 全 5 章
Section 07
でも、単語のベクトルが固定されているだけでは、本当の意味は分からないのではないか?
たとえば「数学の問題に時間をかけた」という文を考えてみる。「問題」には「トラブルの問題」と「クエスチョンの問題」がある。「かける(た)」にも「装着のかける」と「費やすのかける」がある。どうやってAIは、文脈に応じた意味を認識しているのか。
ここで登場するのが Attention(アテンション) という仕組みだ。Transformer論文で核となる発明であり、論文タイトル「Attention Is All You Need(注意機構さえあればよい)」が示すとおり、Transformerの中心メカニズムだ。
Attentionは、各単語が「他のどの単語にどれだけ注目すべきか」を計算し、その注目度に応じて自分のベクトルを更新する。
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 と呼んでいる。
↓ 「問題」が周囲のどの単語に注目するかが、Attentionで決まる(下のボタンで実際の動きを確認)
Attentionによる注目度をもとに、「問題」のベクトルが意味空間の中で移動していく様子をアニメーションで見てみよう。下のボタンを順番に押すと、各ステップでベクトルがどう動くかが確認できる。
同じ「高い」でも、注目する単語によってベクトルの座標が変わり、意味も変わる。初期位置(0.5, 0.5)から、文脈に応じて別々の方向へ移動する。
「太郎は朝早く起きた...(中略)...彼は遅刻しそう」のような文章で、間にどんなに長い文章があっても、Attentionは「彼」から直接「太郎」に注目できる。結果として「彼」のベクトルは「太郎」に近づき、AIは「彼=太郎」だと認識できる。
この「離れた位置にあるトークン同士でも直接結びつけられる」という性質こそ、Attentionが従来のRNN/LSTMより優れている本質的な理由だ。RNNは「順番に1つずつ」処理する必要があったため、長い文では遠くの依存関係を捉えにくかった。Attentionはそれを並列計算で一気に解決した。
Attentionは1つだけでなく、複数の「ヘッド」に分割して並行に計算される。これが Multi-Head Attention だ。各ヘッドは別々のQ/K/V射影を持ち、それぞれが異なる関係パターン(代名詞と名詞の参照、構文的な係り受け、局所的な共起など)を独立に捉える。最後にすべてのヘッドの出力を連結し、再び元の次元に射影する。
原論文のbase modelは 8ヘッド、big modelは 16ヘッド。GPT-3では 96ヘッド と、モデルが大規模になるほどヘッド数も増える傾向にある。
GPT系のような デコーダ専用モデル では、各トークンが「自分より前のトークンだけ」に注目できるよう Causal Mask(因果マスク) がかけられている。次トークン予測の学習中に未来の答えを覗き見しないためだ。一方、原論文のEncoder-Decoder構成では、デコーダがエンコーダの出力に注目する Cross-Attention も使われ、翻訳のように「ソース文を参照しながら別の言語を生成する」タスクで活躍する。
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
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は、ここから不要な意味を削ぎ落とし、必要な知識を加算する。
Attentionがベクトルを更新しても、「問題」には「トラブル」と「クエスチョン」の両方の成分が混ざり合った重ね合わせの状態になっている。FFNはこれを次の3ステップで処理する。
モデルの次元を一時的に大きくして、混ざっていた特徴を独立した軸として引き離す。「トラブル」と「クエスチョン」が別々の次元に分離される。GPT-3の場合、12,288次元から49,152次元(=4倍)に展開される。
学習データから得た知識を使って、現在の表現に加算する。「数学/時間/問題」という文脈なら「難問」「論理/思考力」「粘り強く」といった関連知識が呼び出される。FFNは、モデルが学習で獲得した「世界の知識」を保持している場所だと考えられている。
「しきい値」を使って、不要な成分をゼロに抑制する。「トラブル」「法律/民事」「金銭/職場」「いざこざ」のような今回の文脈に不要な意味が落とされ、磨かれた「問題」のベクトルが残る。最後に元の次元(12,288)に戻される。
Attentionで文脈情報を集め、FFNで知識を呼び出して意味を磨く。これが繰り返されることで、「粘り強く時間をかけて解いた難しい数学の問題」という、文脈に応じた具体的な意味が確定していく。実は、Transformerのパラメータの大部分はFFNに使われている。GPT-3の総パラメータ約1750億のうち、各層の大半がFFNの重みだ。FFNの中間次元は d_modelの4倍 に設定されることが多い(原論文でもd_model=512に対しd_ff=2048)。
FFNは単なる「変換層」ではなく、キー・バリュー型の連想記憶として機能している、という解釈がある。1段目の線形層の各行が「キー(訓練データ中の特定パターンと反応する検出器)」として働き、それと一致したときに2段目の対応する行が「バリュー(出力語彙への分布)」として加算される——つまりFFNは、学習で獲得した「世界の知識」を保持する場所だ、というモデルだ。下層は表層的なパターン、上層はより意味的なパターンを捉える傾向も報告されている。
Source: Geva et al. (2021), "Transformer Feed-Forward Layers Are Key-Value Memories" (arXiv:2012.14913, EMNLP 2021)Section 09
生成AIの基礎となっているTransformerは、ここまで説明してきたEmbedding、Attention、FFNの組み合わせで、その大部分がカバーできる。
Transformerの内部では、AttentionとFFNが何層も繰り返し適用される。層を経るごとに意味がより磨かれていき、最終的にその磨かれたベクトルから「次のトークン」の確率が計算される。
各サブ層(AttentionとFFN)の周りには、残差接続(Residual Connection) と Layer Normalization が必ず挿入されている。残差接続は「入力をそのままバイパスして出力に足す」仕組みで、勾配が層を貫通しやすくなり、数十〜百を超える深い層でも安定して学習できる。LayerNormは活性化値の平均と分散を整え、スケールの暴走を防ぐ。
原論文は「サブ層の出力にLayerNormをかける」Post-LN 構成だったが、深いモデルでは学習が不安定になりやすかった。GPT-2以降の多くのLLMは、サブ層の入力側にLayerNormを置く Pre-LN 構成を採用していて、こちらのほうが学習率Warmupに頼らずに安定して訓練できる。現代の大規模モデルではPre-LNが事実上の標準だ。
Transformerは構成の選び方で性質が変わる。Encoder-only(BERTなど)は文章理解・分類に強く、Encoder-Decoder(原論文・T5・BARTなど)は翻訳や要約のように「入力を読み込んで別の出力を作る」タスクに向く。そして現在主流のLLM(GPT・Llama・Claudeなど)は Decoder-only 構成だ。次トークン予測という単一の自己回帰目的関数だけで、テキスト中のあらゆるタスクを学習できる、というシンプルさとスケール則の良さが、Decoder-onlyが選ばれている主な理由になっている。
Attentionそのものは順序情報を持たないので、トークンの位置を別途モデルに伝える必要がある。原論文は 正弦波(sinusoidal) による固定の位置エンコーディングを採用していた。GPT-2/3などは 学習型の位置埋め込み(learned) を使う。最近の主流は RoPE(Rotary Position Embedding、Su et al. 2021) で、Q・Kを位置に応じて回転させることで相対位置を自然に表現できる。Llama・Mistral・GPT-NeoXなどがこれを採用している。ほかに、注目スコアに位置距離に応じたバイアスを足すだけの ALiBi もある。
GPT-3では、12,288次元のベクトルが96層を経由しながら、AttentionとFFNを繰り返し受けて、意味が磨かれていく。各層を1回通るたびに、トークンのベクトルは「より文脈を理解した」状態に更新される。
※ Llama-3 70Bは、推論を高速化するため GQA(Grouped-Query Attention) を採用していて、64個のクエリヘッドに対しKey/Valueは8グループのみで共有される。GPT-4はOpenAIから詳細仕様が公表されておらず、パラメータ数や層数の数字は外部の推測値しかない点に注意。
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 PaperSection 10
ここまでの仕組みを理解すると、「プロンプトを具体的に書くと精度が上がる理由」も腑に落ちる。
プロンプトの情報量が増えると、Attentionが注目すべきキーワードが増え、FFNでより具体的な知識が加算される。結果として、回答の精度が上がる。
プロンプトに数個の入出力例を入れるだけでタスクをこなせる現象は、GPT-3の論文で Few-shot / In-Context Learning として広く知られるようになった。仕組みから見れば、新しいトークンの表現はAttentionで「過去の全トークン」に注目しながら更新される。つまり、プロンプトに置いた例題そのものが、その後のトークン予測に影響を与えるバイアス源として働いている、と理解できる。重みは更新されないが、文脈による条件付けで出力分布が大きく変わる。
「ステップ・バイ・ステップで考えて」と促すと正答率が上がるCoTも、仕組みから自然に説明できる。Transformerは1トークンを生成するごとに固定の計算量しか使えないため、難しい問いに即答させる=計算量が足りないという構造的な制約がある。CoTは中間トークンを書き出させることで、その分だけモデルに「考える計算ステップ」を与え、しかも自分自身が書いた途中経過にAttentionで戻って参照できるようになる。
役割を割り当てるプロンプトが効く理由は、モデルに「人格」が宿るからではない。学習データの統計から、その役割らしい文体・語彙・推論パターンに高い確率が割り振られ、出力分布がその「らしい完成形」へ偏るからだ。あくまで条件付き確率分布の話であって、内部に専門家が現れるわけではない、という点を冷静に押さえておきたい。
「料理」ベクトルが他のキーワードで更新されない → 抽象的な回答になる。「おいしい料理」の概念が広すぎて、AIは焦点を絞れない。
「料理」ベクトルが「冬」「温まる」「日本」「家庭」によって更新される → 鍋、おでん、シチューなど具体的な回答になる。
一方で、「とにかく長く書けば精度が上がる」というわけでもない。LLMには「Lost in the Middle(中盤忘却)」と呼ばれる現象が知られていて、長い文章の真ん中に置かれた情報には注意が向きにくい傾向がある。重要な指示は文の冒頭や末尾に置くのが効果的だ。
また、最近のモデルは数万〜数十万トークンのコンテキストウィンドウを持つが、コンテキストが大きいほど計算コストが上がる(Attentionの計算量はトークン数の2乗に比例する)。RAG(Retrieval-Augmented Generation)などで本当に必要な情報だけを渡すのが、品質とコストのバランスを取る上で重要になる。
これがプロンプト設計が大事な理由のすべてではない。学習データに含まれる指示パターンへの適合、モデルが訓練された会話形式、温度パラメータなどさまざまな要因が絡む。ただ、Attentionで意味が更新される仕組みを背景として知っておくと、コンテキスト設計の重要性をより深く理解できる。
大規模化に伴って突然できるようになる「創発(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)