Transformer構成の基本概念と重要性:LLMを支えるアーキテクチャを分解する
前回までの記事で、言語モデルがN-gramの限界からRNNを経て、Transformerによって「長距離依存の解決」と「並列計算の実現」という2つの壁を乗り越えたことを確認しました。そして、TransformerがEmbedding、Attention、FFNという3つの主要コンポーネントから成り立っていることも見ました。
けれど、そこで終わってしまうと、「部品の名前は知っているが、なぜこの部品が必要なのか?」「なぜこの順番で並んでいるのか?」がまだ掴めていない状態です。ChatGPTのようなLLMの仕組みを説明できるようになるには、この「構成」を部品単位で理解する必要があります。
このシリーズは全7回で、Transformerの構成をA1〜A7に分けて深掘りしていきます。今回はその第1回です。構成の基本概念と重要性を、部品の「役割」と「配置の理由」を中心に整理します。対象は、事前学習ⅠでTransformerの全体像を学び、構成要素を自分の言葉で説明できるようになりたい方です。
この記事の目的は、部品の名前を覚えることではなく、「なぜこの部品が必要で、なぜこの順番なのか?」を説明できるようになることです。
1. なぜTransformerの「構成」を理解する必要があるのか?
モデルを「使う」だけなら、構成の詳細を知る必要はないかもしれません。チャットに質問を投げる分には、内部構造は完全なブラックボックスでも問題ありません。
しかし、現場でLLMを扱うようになると、構成の理解がないままでは説明できない場面に必ずぶつかります。
- コンテキスト長を伸ばすと、なぜ計算コストが急に膨らむのか?
- 同じサイズのモデルなのに、あるモデルは学習が安定し、別のモデルはすぐ発散するのはなぜか?
- モデルの「賢さ」を決めるのは、パラメータ数だけなのか?
- 論文や技術ブログに書かれている「層数」「ヘッド数」「次元数」は、何を意味しているのか?
これらはすべて、Transformerの構成要素と、その配置の理由を知ることで初めて答えられる問いです。構成を理解すると、モデルを「魔法の箱」ではなく「構造が分かる装置」として扱えるようになります。
私自身の経験でも、最初は「Attentionが全部やってくれている」と理解して満足していた時期がありました。ところが、学習が不安定になる問題に直面したとき、原因はAttentionではなく、正規化層の位置や残差接続の設計にあると分かり、構成全体を理解することの重要性を実感しました。
構成の理解は、テストに合格するための知識ではなく、モデルを設計し、デバッグし、評価するための基礎体力です。
2. Transformerは何を解決したのか?:前回の復習
本題に入る前に、前回までの結論をコンパクトに復習しておきます。Transformerが登場するまでの言語モデルには、それぞれ決定的な壁がありました。
| 方式 | 長距離依存 | 並列計算 | 主な課題 |
|---|---|---|---|
| N-gram | 不可 | 可能 | データスパースネス、長距離を扱えない |
| RNN | 限定的 | 不可 | 勾配消失、逐次処理で遅い |
| Transformer | 直接扱いやすい | 可能 | メモリ使用量、計算コスト |
N-gramは「直近のN-1個の単語」しか見られないため、文の先頭の情報が文末に届きませんでした。RNNは隠れ状態を引き継ぐことで文脈を保持しようとしましたが、情報を遠くへ運ぶ途中で勾配が消えてしまい、しかもトークンを順番に処理する構造上、並列化ができませんでした。
Transformerがこれらの壁を壊したのは、すべてのトークン間に直接の接続を張るという発想です。トークンが100個あれば、100×100の関係をまとめて計算します。距離に関係なく、すべてのペアが「一回の計算」でつながるため、長距離依存の問題は構造的に消えます。そして全トークンを同時に処理できるため、GPUの並列計算能力を活かせます。
この「すべてのトークン間に直接接続を張る」仕組みが、次回以降で詳しく扱うSelf-Attentionです。ここでは、「Transformerは、Attentionという仕組みによって長距離依存と並列計算を両立した」という結論だけ押さえておきましょう。
3. Transformerはどんな部品でできているのか?:全体像
Transformerの構成を理解するうえで、まず押さえるべきは、部品の一覧と配置です。オリジナルのTransformerは、翻訳などを行うためにエンコーダとデコーダの2つの大きなブロックを持ちます。一方、GPTやChatGPTのような現代のLLMは、テキスト生成に特化したデコーダのみの構造(Decoder-only)を採用しています。
このシリーズでは、主にこのDecoder-only型の構成を扱います。その理由は、現在の主要なLLMのほとんどがこの形だからです。
Decoder-only型のTransformerは、基本ブロックを層状に重ねた構造です。1つのブロックは、次の4つの部品からできています。
| 部品 | 役割 | 例え |
|---|---|---|
| Embedding層(+位置情報) | 単語をベクトルに変換し、順序情報を付与 | 言葉を「数字の地図」に翻訳する |
| Self-Attention | トークン間の関係性を文脈に応じて計算 | 文中の「どの単語がどの単語を参照すべきか」を決める |
| FFN(フィードフォワード) | 各トークンの表現を非線形に変形し、知識を蓄積 | 参照した情報を「知識」として加工・保持する |
| Add & Norm(残差接続+正規化) | 学習を安定させ、深い層でも勾配を届ける | 崩れそうな建物を支える鉄骨と水平器 |
この4つの部品が「Embedding → Self-Attention → FFN」の順に流れ、その都度Add & Normで補強されるのが、1ブロックの標準的な構成です。そしてこのブロックが、小さいモデルで十数層、大きいモデルでは100層近く積み重なります。
ここで重要なのは、「部品をただ並べただけ」ではなく、なぜこの順番なのか?という点です。次の章で、各部品の役割を詳しく見たうえで、配置の理由を考えます。
4. 各コンポーネントは何を担っているのか?
4.1 Embedding層:言葉を数字に翻訳する
コンピュータは文字を直接理解できません。まず文章を最小単位(トークン)に分割し、各トークンをIDに変換し、さらに学習可能な数値ベクトルに変換します。これがEmbedding層です。
たとえば「私は学校へ行く」という文は、トークン化とID化を経て、各トークンが数百次元のベクトルに変換されます。学習が進むと、意味の近い単語(「学校」と「大学」など)はベクトル空間上で近い位置に配置されるようになります。「単語の意味がベクトルに埋め込まれている」というのは、この状態を指します。
さらにTransformerはトークンを同時に処理するため、位置情報もここで追加されます。この位置情報の扱いには種類があり、A5で詳しく扱います。
4.2 Self-Attention:文脈に応じて重要な単語に注目する
Self-Attentionは、Transformerの中心的な部品です。「学校へ行く」という文の「へ」が、なぜ「学校」に向かうのか。こうした関係性を、文中のすべてのトークンの組み合わせについて計算します。
重要なのは、「どの単語を見るか」が文脈によって変わることです。「銀行でお金を下ろす」の「銀行」と「川のほとりに座る」の「川岸(バンク)」は、同じ単語でも文脈で意味が変わります。Self-Attentionは、この「今の文脈で、どの単語にどの程度注目するか」を学習します。
4.3 FFN:知識を蓄積する
Self-Attentionが「どの単語を見るか」を決めるのに対し、FFNは「見た結果をどう変形するか」を担います。各トークンのベクトルを、中間層で大きく広げてから元の次元に戻す、という変換を行います。
たとえば「学校」という単語を見たとき、モデルは「学校=教育の場、複数の生徒がいる、時間割がある」といった知識を層内の重みとして保持しています。FFNはこの知識の蓄積と適用を担うため、モデルの「記憶」に近い役割と言えます。層が深くなるほど、より抽象的な知識が蓄積されていきます。
4.4 Add & Norm:縁の下の力持ち
最後の部品が、残差接続(Add)とレイヤー正規化(Norm)です。これは派手な働きをする部品ではありませんが、これがなければTransformerは深く積み重ねられません。
残差接続は、処理前の情報を処理後の情報に「上乗せ」する仕組みです。もしAttentionやFFNがうまく働かなくても、元の情報がそのまま流れるため、学習が進むたびに「改善できた分だけ」情報を更新できます。レイヤー正規化は、各層の出力のばらつきを揃え、学習率の変化に敏感になりすぎないようにします。
Add & Normは目立たないものの、深いTransformerを学習するうえで欠かせない部品です。
5. なぜこの構成なのか?:部品を外して考える
「役割」を知っただけでは、配置の理由までは分かりません。そこで有効なのが、「部品を外したら何が起きるのか?」を想像することです。これはTransformerに限らず、アーキテクチャを理解するうえで有効な考え方のひとつです。
| 外す部品 | 何が起きるのか? | なぜそう言えるのか? |
|---|---|---|
| Self-Attention | トークン間の関係を直接捉えられなくなる | 長距離依存の解決がAttentionに依存しているため |
| FFN | 表現の変形と知識の蓄積が弱くなる | FFNが各位置のベクトルを非線形に変換し、知識を重みとして保持しているため |
| 残差接続 | 深いモデルで勾配が消失し、学習が不安定になる | 勾配が層を遡る経路が残差接続で確保されているため |
| LayerNorm | 学習率への敏感さが増し、収束が不安定になりやすい | 各層の出力スケールが揃わなくなり、最適化が難しくなるため |
ここで注意したいのは、「外すと壊れるから必要」という理解では不十分だという点です。実際のモデルでは、正規化をどの位置に置くか?(Pre-NormかPost-Normか?)や、AttentionとFFNの比率など、構成の細部が性能に大きく影響します。つまり構成は「部品の有無」だけでなく「配置と比率」まで含めて設計されている、ということです。
「部品を外して考える」という読み方は、このシリーズのA2以降でも共通して使います。たとえば位置エンコーディングを外すと文の順序が分からなくなる、という論点も、この考え方で整理できます。
6. データはどの順番で流れるのか?
構成要素が分かったところで、実際のデータの流れを追ってみましょう。「私は学校へ行く」という一文が、1つのTransformerブロックを通るときの流れです。
- 文章をトークンに分割し、IDに変換する(トークン化)
- 各トークンIDをベクトルに変換する(Embedding)
- トークンの順序情報を加える(位置情報)
- Self-Attentionで、トークン間の関係を文脈込みで計算する
- FFNで、各トークンの表現を変形し、知識を適用する
- 各ステップで残差接続と正規化を適用する
- 複数のブロックを通過し、最終的に次の単語の確率を出力する
この流れをコードで見ると、構成がより具体的にイメージできます。以下は1ブロック分の最小構成をPyTorchで書いたものです。
import torch
import torch.nn as nn
class TransformerBlock(nn.Module):
"""1つのTransformerブロックの最小構成"""
def __init__(self, d_model: int, n_head: int, d_ff: int):
super().__init__()
# 2. Self-Attention
self.attention = nn.MultiheadAttention(
d_model, n_head, batch_first=True
)
# 3. FFN(中間でd_ff次元まで広げて戻す)
self.ffn = nn.Sequential(
nn.Linear(d_model, d_ff),
nn.GELU(),
nn.Linear(d_ff, d_model),
)
# 4. Add & Norm
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x: torch.Tensor) -> torch.Tensor:
# 未来のトークンを参照しないためのCausal Mask
seq_len = x.size(1)
causal_mask = torch.triu(
torch.ones(seq_len, seq_len, device=x.device, dtype=torch.bool),
diagonal=1,
)
attn_out, _ = self.attention(x, x, x, attn_mask=causal_mask)
# Self-Attention → 残差接続 → 正規化
h = self.norm1(x + attn_out)
# FFN → 残差接続 → 正規化
return self.norm2(h + self.ffn(h))
変数d_modelはベクトルの次元数(たとえば512)、n_headはAttentionの分割数(たとえば8)、d_ffはFFNの中間の広がり(通常はd_modelの4倍)です。この3つの値だけで、1ブロックの規模感が決まります。
このコードが動く、動かないではなく、ブロックの中に「Attention・FFN・Add & Norm」という部品が、この順番で収まっていることを確認できれば十分です。個々の実装の詳細は、このシリーズのA2以降と、実装編で扱います。
構成の理解とは、コードの細部を覚えることではなく、「データがどの順番で、どの部品を通るのか?」を追えることです。
7. 構成を理解すると何ができるようになるのか?
ここまで読んで、「構成の理解にどんな実務的な価値があるのか?」を感じられない方もいるかもしれません。具体化しましょう。
1つ目は、論文や技術ブログが読めるようになることです。 LLM関連の情報はほぼすべて、構成の言葉(層数、ヘッド数、正規化の位置、活性化関数)で書かれています。構成を知らないと、こうした情報はすべて暗号に見えます。
2つ目は、モデルの挙動を切り分けやすくなることです。 たとえば「同じサイズのモデルなのに学習が安定しない」という問題は、多くの場合、正規化や残差接続まわりの設計に原因があります。構成を知っていれば、どこを疑えばいいのかが分かります。
3つ目は、モデル選定の基準ができることです。 コンテキスト長が重要なのか? 推論コストが重要なのか? 学習安定性が重要なのか? 構成要素ごとにトレードオフを理解できると、モデルの選択肢を機能ベースで比較できます。
私自身、構成を理解する前は技術ブログを読んでも「すごそう」としか思えませんでした。構成を理解したあとは、「このモデルはRoPEを使っているから長いコンテキストに強い」「Pre-Normだから学習が安定しやすい」といった形で、情報を判断材料として読めるようになりました。
8. よくある誤解と注意点は何か?
構成の理解を進めるうえで、つまずきやすい誤解がいくつかあります。
誤解1:Attentionがすべてをやっている。 FFNの役割は軽視されがちですが、実際にはモデル全体のパラメータの半分以上がFFNに割かれていると言われます。Attentionが「どこを見るか」を決め、FFNが「どう解釈するか」を決める。両方あって初めて機能します。
誤解2:Transformerの構成はどれも同じ。 エンコーダありきのオリジナルTransformerと、Decoder-onlyのGPT型では構造が異なります。また正規化の位置や活性化関数もモデルごとに異なります。構成は「共通の骨格」であり、細部は進化し続けています。
誤解3:数式が分かれば構成は分かった気になる。 数式は重要ですが、構成の理解は「データフロー」と「各部品の役割」が中心です。まず流れを追えるようになってから、数式に進むほうが挫折しにくいと感じます。
もう1つ注意したいのは、この記事で扱った構成はあくまで「標準的なデフォルト」だということです。実際のモデルは、学習安定性や性能向上のために、ここから細部を変更しています。「デフォルトを知ったうえで、どこが変えられているのか」を観察するのが、次のステップです。
9. まとめ

A1の要点を整理します。
- Transformerは、N-gramとRNNの壁(長距離依存・並列計算)をAttentionで解決した
- 1ブロックは、Embedding、Self-Attention、FFN、Add & Normの4部品から成る
- Self-Attentionは「どこを見るか」、FFNは「どう解釈するか」を担う
- Add & Normは地味だが、深い学習を可能にする縁の下の力持ち
- 構成は「部品の有無」だけでなく「配置と比率」まで含めて設計されている
- 構成を理解すると、論文が読め、トラブルが切り分けられ、モデル選定の基準ができる
いちばん押さえてほしいのは、構成の理解は「部品を並べた図を覚えること」ではない、という点です。各部品が何を担い、なぜその順番で並んでいるのかを説明できるようになることが、このシリーズのゴールです。
10. 今回のブログの考察:A2への橋渡し
A1の役割は、Transformerという建物の「設計図を広げる」ことでした。設計図を見ただけで建物が建つわけではありませんが、どこに何があるのかが分かれば、次からは「部品ごとの詳細」に集中できます。
次回のA2では、この構成の中心にあるSelf-Attentionを深掘りします。なぜTransformerが並列計算できるのか? Query・Key・Valueがそれぞれ何をしているのか? 複数のヘッド(マルチヘッド)に分ける意味は何なのか?を、計算の流れと具体例で追っていきます。A1で描いた地図の中心に、最も重要な部品が待っています。
このシリーズでは、構成要素を「名前で覚える」のではなく、「役割と配置の理由」から理解していきます。次回も、一緒にこの地図をたどっていきましょう。
参考文献
-
Vaswani, A., Shazeer, N., Parmar, N., et al. (2017). “Attention Is All You Need”. In NIPS 2017. https://arxiv.org/abs/1706.03762
-
Radford, A., Wu, J., Child, R., et al. (2019). “Language Models are Unsupervised Multitask Learners”. Technical Report, OpenAI.
-
Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”. arXiv preprint arXiv:1810.04805.
-
Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016). “Layer Normalization”. arXiv preprint arXiv:1607.06450.
-
He, K., Zhang, X., Ren, S., & Sun, J. (2016). “Deep Residual Learning for Image Recognition”. In IEEE CVPR 2016.
このシリーズの案内
この記事は「A: Transformer構成」シリーズ(全7回)の第1回です。
| # | テーマ | 内容(予定) |
|---|---|---|
| A1 | Transformer構成の基本概念と重要性 | 全体像と部品の役割(今回) |
| A2 | Self-Attentionの詳細 | Query・Key・Value、マルチヘッド、効率化 |
| A3 | 正規化と活性化関数 | LayerNorm、GELU、SwiGLU、学習安定化 |
| A4 | トークン化と語彙構築 | BPE、SentencePiece、語彙サイズの影響 |
| A5 | 位置エンコーディングの進化 | 絶対位置からRoPE・ALiBiへ |
| A6 | 構成要素の統合と設計 | レイヤー構成、Pre/Post-Norm、スケーリングとの関係 |
| A7 | 理論の総まとめ | 全体の整合と実装(Bシリーズ)への橋渡し |
1. 前の記事
- A1: 言語モデルの本質と進化軌跡(第三回) – N-gramからTransformerへの進化
- A2: Transformerモデル構造の全体像(第三回) – 3つの主要コンポーネント
2. 次に読む
- A2: Self-Attentionの詳細 – 構成の中心部品を深掘り
3. 技術を深掘りしたい方へ
- B1: Embedding層と入出力形状の追跡 – トークン化と埋め込みの実装詳細

コメント