LLM【事前学習Ⅱ:基礎理論 A-1】

事前学習Ⅱ

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ブロックを通るときの流れです。

  1. 文章をトークンに分割し、IDに変換する(トークン化)
  2. 各トークンIDをベクトルに変換する(Embedding)
  3. トークンの順序情報を加える(位置情報)
  4. Self-Attentionで、トークン間の関係を文脈込みで計算する
  5. FFNで、各トークンの表現を変形し、知識を適用する
  6. 各ステップで残差接続と正規化を適用する
  7. 複数のブロックを通過し、最終的に次の単語の確率を出力する

この流れをコードで見ると、構成がより具体的にイメージできます。以下は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. まとめ

ChatGPT Image 2026年8月30日 17_03_17

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で描いた地図の中心に、最も重要な部品が待っています。

このシリーズでは、構成要素を「名前で覚える」のではなく、「役割と配置の理由」から理解していきます。次回も、一緒にこの地図をたどっていきましょう。


参考文献

  1. Vaswani, A., Shazeer, N., Parmar, N., et al. (2017). “Attention Is All You Need”. In NIPS 2017. https://arxiv.org/abs/1706.03762

  2. Radford, A., Wu, J., Child, R., et al. (2019). “Language Models are Unsupervised Multitask Learners”. Technical Report, OpenAI.

  3. 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.

  4. Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016). “Layer Normalization”. arXiv preprint arXiv:1607.06450.

  5. 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. 前の記事

2. 次に読む

3. 技術を深掘りしたい方へ

コメント

タイトルとURLをコピーしました