記事一覧

大規模言語モデルの系譜と仕組み — Transformer から ChatGPT まで、LLM の全体像を図解で理解する

Word2Vec から GPT-4 に至る LLM の進化の系譜と、Transformer・自己注意機構・テキスト生成・RLHF の仕組みをインタラクティブな図解で徹底解説する。

LLMTransformer自然言語処理深層学習Interactive

はじめに

ChatGPT の登場以来、大規模言語モデル(LLM: Large Language Model)は社会を一変させた。コードを書き、論文を要約し、複雑な質問に答える——これらはすべて「次のトークンを予測する」という驚くほどシンプルな原理から生まれている。

この記事では、LLM の全体像を以下の 6 つの柱で解説する。

  1. 歴史と系譜 — Word2Vec から GPT-4 までの進化
  2. トークナイゼーション — テキストを数値に変換する仕組み
  3. Transformer アーキテクチャ — LLM の心臓部
  4. 自己注意機構 — Transformer の核心アルゴリズム
  5. テキスト生成 — 温度・top-k サンプリングの仕組み
  6. 学習パイプライン — 事前学習から RLHF まで

LLM の系譜 — 10 年の進化

2013Word2Vec単語埋め込み2017TransformerAttention Is All You Need2018BERT / GPT-1事前学習時代の幕開け2020GPT-31750億パラメータ2022ChatGPTRLHF + 指示チューニング2024–GPT-4o / Gemini / Claudeマルチモーダル・推論

言語モデルの進化を振り返ろう。

Word2Vec 時代(2013)

Mikolov et al. (2013) が提案した Word2Vec は、単語を固定次元のベクトル(埋め込み)に変換する手法だ。有名な例として king - man + woman ≈ queen という関係を捉えることができた。しかし、Word2Vec は文脈を考慮しない静的な埋め込みだった。

Transformer の登場(2017)

Vaswani et al. (2017) の論文 "Attention Is All You Need" が全てを変えた。RNN の逐次処理を自己注意機構(Self-Attention)で置き換え、並列計算を可能にした。この革新が現在の LLM の基盤となっている。

事前学習時代(2018–)

Transformer をベースに 3 つのアーキテクチャファミリーが発展した。

Transformer2017 — Vaswani et al.エンコーダ系BERT (2018)マスク言語モデルRoBERTa (2019)頑健なBERTDeBERTa (2020)分離注意エンコーダ・デコーダ系T5 (2019)テキスト→テキストBART (2019)ノイズ除去AEFlan-T5 (2022)指示チューニングデコーダ系GPT-2/3 (2019–20)自己回帰型LMLLaMA (2023)オープンウェイトGPT-4 / Claude (2023–)最先端モデル分類・固有表現抽出・埋め込み翻訳・要約対話・コード生成・推論

エンコーダ系(BERT 系)

BERT(2018)は、マスクされたトークンを予測するマスク言語モデル(MLM)で事前学習される。双方向の文脈を捉えるため、分類・固有表現抽出・類似度計算などの理解タスクに強い。

エンコーダ-デコーダ系(T5 系)

T5(2019)は全てのタスクを「テキスト→テキスト」に統一する。翻訳、要約、質問応答すべてが同じフォーマットで処理できる。

デコーダ系(GPT 系)

GPT シリーズは自己回帰型言語モデルで、左から右へ 1 トークンずつ生成する。パラメータ数の増加とともに能力が飛躍的に向上し、GPT-3(1750 億パラメータ)で few-shot 学習が実証された。現在の ChatGPT、Claude、Gemini はすべてこの系統の発展形だ。

スケーリング則

log(計算量 / パラメータ数 / データ量)log(損失)L(x) ∝ x^(−α)パラメータ数 (N)データ量 (D)計算量 (C)Kaplan et al. 2020, Hoffmann et al. 2022

Kaplan et al. (2020) は、言語モデルの損失がパラメータ数 NN、データ量 DD、計算量 CC のべき乗則に従うことを発見した。

L(x)xαL(x) \propto x^{-\alpha}

さらに Hoffmann et al. (2022)Chinchilla 論文 は、パラメータ数とトークン数を均等にスケールさせるのが最適だと示した。例えば 700 億パラメータのモデルには約 1.4 兆トークンの学習データが必要だ。

トークナイゼーション — テキストを数値に

LLM はテキストを直接理解するのではなく、トークンと呼ばれる数値系列として処理する。

入力テキスト"The cat sat on the mat"↓ BPE トークナイザトークン(サブワード)TheID: 464ĠcatID: 3797ĠsatID: 3520ĠonID: 319ĠtheID: 262ĠmatID: 2603

BPE(Byte Pair Encoding)

現代の LLM で最も広く使われるトークナイゼーション手法が BPESennrich et al., 2016)だ。

アルゴリズム:

  1. テキストを文字(またはバイト)単位に分割
  2. コーパス全体で最も頻繁に隣接するペアを見つける
  3. そのペアを 1 つの新しいトークンとしてマージ
  4. 語彙サイズが目標に達するまで繰り返す
# BPE の簡略化された疑似コード
vocab = set(all_characters)
for i in range(num_merges):
    # 最頻ペアを見つける
    pair = most_frequent_pair(corpus)
    # マージして新トークンに
    new_token = pair[0] + pair[1]
    vocab.add(new_token)
    corpus = merge_in_corpus(corpus, pair, new_token)

GPT-4 は約 10 万トークン の語彙を持つ。日本語のように形態素が複雑な言語では、1 文字が 1 トークン以上になることも多い。

なぜサブワードか?

  • 未知語問題の解消: 見たことない単語もサブワードの組み合わせで表現可能
  • 語彙サイズの制御: 文字レベル(語彙小、系列長大)と単語レベル(語彙大、OOV 問題)の中間
  • 多言語対応: 同じ BPE トークナイザで多言語テキストを処理可能

Transformer アーキテクチャ

LLM の心臓部である Transformer(デコーダ型)の構造を見てみよう。

× N入力埋め込み + 位置エンコーディングマルチヘッド自己注意機構残差接続 & 層正規化フィードフォワードネットワーク残差接続 & 層正規化線形層 + Softmax → 確率分布トークン ID 列次トークン予測

Transformer ブロックは以下の 5 つのコンポーネントで構成される。それぞれを詳しく見ていこう。

1. 入力埋め込み + 位置エンコーディング

トークン ID を高次元ベクトル(例: 4096 次元)に変換する。Transformer は RNN と異なり入力を並列に処理するため、トークンの順序情報を位置エンコーディングで明示的に注入する必要がある。

正弦波位置エンコーディング(オリジナル)

Vaswani et al. (2017) の Transformer は正弦波ベースの位置エンコーディングを使用した:

PE(pos,2i)=sin ⁣(pos100002i/d),PE(pos,2i+1)=cos ⁣(pos100002i/d)\text{PE}(pos, 2i) = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \quad \text{PE}(pos, 2i+1) = \cos\!\left(\frac{pos}{10000^{2i/d}}\right)

以下のヒートマップで正弦波 PE のパターンを確認しよう。低い次元(左側)は高周波、高い次元(右側)は低周波の波を形成する。

正弦波位置エンコーディングPE(pos, 2i) = sin(pos / 10000^(2i/d)), PE(pos, 2i+1) = cos(pos / 10000^(2i/d))位置次元012345670123456789101112131415青 = 正 赤 = 負 (偶数次元: sin, 奇数次元: cos)高周波低周波

なぜ正弦波か? 任意の固定オフセット kk に対して PE(pos+k)\text{PE}(pos + k)PE(pos)\text{PE}(pos) の線形関数として表現できるため、モデルが相対位置を学習しやすい。

RoPE(回転位置埋め込み)

現代の LLM(LLaMA, Gemma, Mistral など)では RoPE(Rotary Position Embedding)が主流だ。RoPE はベクトルの次元をペアにして、位置に応じた角度で 2D 回転を適用する。

RoPE (回転位置埋め込み)次元のペアを位置に依存した角度で回転させるpos = 0θ = 0°d₀d₁pos = 1θ = 30°d₀d₁pos = 2θ = 60°d₀d₁q_m · k_n は相対位置 (m − n) のみに依存→ 相対的な位置関係を自然に捉える

RoPE の核心的な性質:2 つのトークンの内積 qmknq_m \cdot k_n が相対位置 (mn)(m - n) のみに依存する。これにより絶対位置を明示的にエンコードせずとも、相対位置関係を自然に捉えられる。

RoPE(x,pos)=(x0cos(θpos)x1sin(θpos)x0sin(θpos)+x1cos(θpos))\text{RoPE}(x, pos) = \begin{pmatrix} x_0 \cos(\theta \cdot pos) - x_1 \sin(\theta \cdot pos) \\ x_0 \sin(\theta \cdot pos) + x_1 \cos(\theta \cdot pos) \\ \vdots \end{pmatrix}

さらに RoPE は位置外挿(学習時より長い系列への対応)が容易で、NTK-aware スケーリングや YaRN によるコンテキスト長拡張の基盤にもなっている。

2. マルチヘッド自己注意機構

Transformer の核心。次のセクションで詳しく解説するが、ここでは全体の中での位置づけを確認する。

単一の注意ヘッドは 1 種類の関係性パターンしか捉えられない。マルチヘッドにすることで、異なるヘッドが異なるパターン(主語-動詞の一致、形容詞-名詞の修飾、共参照など)を並列に学習する。

入力 X (d_model = 512)Head 1d_k = 128Q·Kᵀ/√d_k → V主語-動詞Head 2d_k = 128Q·Kᵀ/√d_k → V形容詞-名詞Head 3d_k = 128Q·Kᵀ/√d_k → V共参照Head 4d_k = 128Q·Kᵀ/√d_k → V構文連結 (d_k × h = 512)線形変換 W_O → 出力マルチヘッド出力 (d_model = 512)MultiHead(Q,K,V) = Concat(head₁, …, headₕ) · W_O
MultiHead(Q,K,V)=Concat(head1,,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) \cdot W_O

ここで headi=Attention(QWQ(i),KWK(i),VWV(i))\text{head}_i = \text{Attention}(Q W_Q^{(i)}, K W_K^{(i)}, V W_V^{(i)})。GPT-3 は 96 ヘッド、LLaMA 2 70B は 64 ヘッドを使用している。

MQA / GQA — 推論効率の最適化

標準のマルチヘッド注意(MHA)では各ヘッドが独立した K, V 射影を持つ。推論時の KV キャッシュが巨大になる問題を解決するために:

方式K,V ヘッド数モデル例特徴
MHA= Q ヘッド数GPT-3最高品質、メモリ大
MQA1PaLM, StarCoderK,V 全共有、推論最速
GQAQ の 1/gLLaMA 2, Mistral品質と効率のバランス

GQA(Grouped-Query Attention)は Q ヘッドをいくつかのグループに分け、各グループで K,V を共有する。LLaMA 2 70B は GQA を採用し、MHA とほぼ同等の品質で推論速度を大幅に改善した。

3. 残差接続 & 層正規化

各サブ層(自己注意と FFN)の出力に入力を加算(残差接続)し、正規化を適用する。

なぜ残差接続が不可欠か

残差接続がないと、逆伝播の勾配は NN 個の層を通過する間に指数的に減衰(または爆発)する。残差接続は勾配のショートカットパスを提供し、深い層にも直接勾配が届く。

xl+1=xl+F(xl)x_{l+1} = x_l + F(x_l)

これにより 100 層以上のネットワーク(GPT-3 は 96 層、LLaMA 2 70B は 80 層)の学習が可能になる。

Post-LN vs Pre-LN

Post-LN (オリジナル)x自己注意加算 (残差)LayerNormFFN加算 (残差)LayerNormPre-LN (現代)xRMSNorm自己注意加算 (残差)RMSNormFFN加算 (残差)
Post-LN (オリジナル)Pre-LN (現代)
正規化の位置サブ層の後サブ層の前
正規化手法LayerNormLayerNorm (GPT-3) → RMSNorm (LLaMA 以降)
学習安定性ウォームアップが必須安定。大規模モデルでも収束しやすい
採用モデル元の Transformer, BERTGPT-3, LLaMA, Mistral

RMSNorm(Root Mean Square Layer Normalization)は LayerNorm の簡略版で、平均を引く操作を省略する:

RMSNorm(x)=xRMS(x)γ,RMS(x)=1di=1dxi2\text{RMSNorm}(x) = \frac{x}{\text{RMS}(x)} \cdot \gamma, \quad \text{RMS}(x) = \sqrt{\frac{1}{d}\sum_{i=1}^{d} x_i^2}

計算量が少なく、実験的に LayerNorm と同等の性能を示すことから、LLaMA 以降のモデルで標準的に使用されている。

4. フィードフォワードネットワーク(FFN)

各トークンに独立に適用される全結合ネットワーク。注意機構が「トークン間の関係」を捉えるのに対し、FFN は「各トークンの特徴変換」を行う。FFN のパラメータは Transformer 全体の約 2/3 を占める巨大な"知識の貯蔵庫"だ。

標準 FFN

オリジナルの Transformer(Vaswani et al., 2017)は ReLU を使用し、GPT-2 以降は GELU に置き換えられた:

FFN(x)=GELU(xW1+b1)W2+b2\text{FFN}(x) = \text{GELU}(x W_1 + b_1) W_2 + b_2

中間層の次元 dffd_{\text{ff}} は通常 4×dmodel4 \times d_{\text{model}}(例: d=4096d = 4096 なら dff=16384d_{\text{ff}} = 16384)。

SwiGLU — 現代の標準

Shazeer (2020) が提案した SwiGLU は Gated Linear Unit にSwish 活性化を組み合わせた手法で、LLaMA, PaLM, Gemma などで採用されている。

SwiGLU フィードフォワードネットワークx (d_model)x · W₁ (d_ff)Swish(x) = x · σ(x)x · W₃ (d_ff)(ゲート)要素積· W₂ → 出力 (d_model)SwiGLU(x) = (Swish(x · W₁) ⊙ (x · W₃)) · W₂
SwiGLU(x)=(Swish(xW1)(xW3))W2\text{SwiGLU}(x) = \bigl(\text{Swish}(x W_1) \odot (x W_3)\bigr) W_2

なぜ SwiGLU が優れるのか:

  • ゲーティング機構: xW3x W_3 がゲートとして機能し、情報の選択的な通過を制御する
  • Swish 活性化: Swish(x)=xσ(x)\text{Swish}(x) = x \cdot \sigma(x) は ReLU と違い滑らかで、負の値も少量通すため勾配の流れが良い
  • SwiGLU は 3 つの行列(W1,W2,W3W_1, W_2, W_3)を使うため、パラメータ数を一定に保つよう dff=83dmodeld_{\text{ff}} = \frac{8}{3} d_{\text{model}} に設定される(標準 FFN の 4×4 \times と異なる)

5. 最終出力層

最後のトランスフォーマー層の出力に RMSNorm を適用し、線形変換(Unembedding)で語彙サイズ V|V| の次元に射影する。softmax で確率分布に変換し、次トークンを予測する。

多くの LLM では埋め込み行列 WEW_E と出力層の重み WUW_U重み共有(weight tying)する。WU=WETW_U = W_E^T とすることで、パラメータ数を V×d|V| \times d 分削減し、入出力の意味空間を一致させる。

デコーダの因果マスク

GPT のようなデコーダ型モデルでは、因果マスク(causal mask)を使って未来のトークンへの注意を遮断する。位置 ii のトークンは位置 1,2,,i1, 2, \ldots, i のトークンにのみ注意できる。

因果マスク (注意行列)緑 = 注意可能, 赤 = マスク (-∞)Key →ThecatsatontheQuery →Thecatsatonthe−∞−∞−∞−∞−∞−∞−∞−∞−∞−∞"sat" (行3) は "The", "cat", "sat" を参照可能、"on", "the" は不可

実装上はスコア行列の上三角部分を -\infty に設定し、softmax 後にゼロになるようにする。これにより、自己回帰生成(左から右に 1 トークンずつ)と整合する。

Transformer ブロック全体の流れ

ここまでの各コンポーネントが実際にどう連携するか、1 つの Transformer ブロックのデータフローをステップバイステップで追跡しよう。

Transformer ブロック順伝播

"I love cats" のデータが1つの Transformer ブロックをどう通過するか追跡しましょう。

📥Embed+PE
📏RMSNorm
🔀Q,K,V
🎯Attn W
Attn Out
Res+
📏RMSNorm
FFN
Res+
📤Output
ステップ 0: 入力埋め込み + 位置エンコーディング
トークン:Ilovecats
X = Embed + PE
I0.82−0.150.440.91
love0.330.78−0.220.56
cats0.610.420.73−0.08
1 / 10

自己注意機構 — Transformer の核心

自己注意機構(Self-Attention)は、各トークンが他の全トークンとの関連度を動的に計算し、文脈に応じた表現を作り出す仕組みだ。

数式

Attention(Q,K,V)=softmax ⁣(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right) V
  • QQ(Query): 各トークンが「何を探しているか」を表すベクトル
  • KK(Key): 各トークンが「何を持っているか(どんな情報で自分を検索してほしいか)」を表すベクトル
  • VV(Value): 各トークンが「実際に渡す情報」を表すベクトル
  • dk\sqrt{d_k}: スケーリング因子。内積が大きくなりすぎて softmax が飽和するのを防ぐ

インタラクティブデモ

自己注意機構(Self-Attention)

"The cat sat" に対する自己注意の計算過程を見てみましょう。

トークン:Thecatsat
X (Input)
The1.00.20.50.8
cat0.30.90.10.6
sat0.70.40.80.2
1 / 8

なぜ自己注意が革新的なのか

  1. 長距離依存: RNN では遠いトークンの情報が減衰するが、自己注意は全トークンに直接アクセスできる
  2. 並列計算: RNN は逐次処理だが、自己注意は行列演算なので GPU で高速に並列計算できる
  3. 解釈可能性: 注意重みを可視化することで、モデルが「どこに注目しているか」を解析できる

計算量の課題

自己注意の計算量は系列長 nn に対して O(n2)O(n^2) であり、長い文脈では問題になる。これに対する解決策が活発に研究されている。

手法計算量概要
通常の注意O(n2)O(n^2)全トークン対を計算
Flash AttentionO(n2)O(n^2)(メモリ O(n)O(n)IO 効率を最適化、HBM アクセスを削減
Multi-Query AttentionO(n2)O(n^2)K,V のヘッドを共有し推論を高速化
Grouped-Query AttentionO(n2)O(n^2)MQA と MHA の中間。LLaMA 2 以降で採用
Ring AttentionO(n2/p)O(n^2 / p)複数デバイスでコンテキスト長を並列分割

テキスト生成 — 次トークン予測の仕組み

LLM の推論はシンプルだ。コンテキスト(入力トークン列)を与えると、次に来るトークンの確率分布を出力する。この確率分布からトークンをサンプリングし、それをコンテキストに追加して繰り返す——これが自己回帰生成だ。

生成戦略

Greedy decoding: 常に最高確率のトークンを選ぶ。決定的だが単調な出力になりがち。

温度スケーリング: ロジットを温度 TT で割ってから softmax を適用する。

pi=exp(zi/T)jexp(zj/T)p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}
  • T<1T < 1: 分布が鋭くなる → より決定的(事実を述べるタスク向き)
  • T>1T > 1: 分布がなだらかになる → より多様・創造的(創作向き)
  • T0T \to 0: greedy decoding に収束

Top-k サンプリング: 確率上位 kk 個のトークンだけを残し、残りをゼロにして再正規化する。

Top-p (Nucleus) サンプリング: 確率の累積和が pp(例: 0.95)を超えるまでのトークンだけを残す。動的に候補数が変わるため、top-k より柔軟。

インタラクティブデモ

テキスト生成デモ

LLMが温度とtop-kサンプリングで1トークンずつテキストを生成する過程を見てみましょう。

コンテキスト:Thecat
sat
logit: 3.20%
is
logit: 2.80%
ran
logit: 1.50%
the
logit: 0.90%
very
logit: 0.40%
1 / 8

学習パイプライン — 生のモデルから対話 AI へ

事前学習大規模コーパスで次トークン予測数兆トークンSFT(教師ありFT)指示データで教師あり微調整〜10万件の指示データRLHF / DPO人間の選好に合わせて整合報酬モデル + PPO or DPOデプロイAPI / チャットインターフェース量子化・推論最適化

ステージ 1: 事前学習(Pre-training)

目的: 言語の一般的な知識を獲得する

数兆トークンの大規模テキストコーパス(Web テキスト、書籍、コード)から、次トークン予測タスクを反復学習する。

Lpretrain=t=1TlogP(xtx<t;θ)\mathcal{L}_{\text{pretrain}} = -\sum_{t=1}^{T} \log P(x_t | x_{<t}; \theta)

この段階のモデルは文の続きを生成できるが、「質問に答える」「指示に従う」といった振る舞いはできない。

ステージ 2: 教師あり微調整(SFT)

目的: 指示に従うようにする

高品質な(指示, 応答)ペアのデータセット(約 10 万件)で微調整する。これにより、モデルが「ユーザーの質問に対して回答する」というフォーマットを学習する。

[指示] 日本の首都はどこですか?
[応答] 日本の首都は東京です。

ステージ 3: RLHF(人間のフィードバックによる強化学習)

目的: 人間の選好に合わせる

SFT だけでは、事実に基づかない回答や有害な出力を生成することがある。RLHF はこれを改善する。

  1. 報酬モデルの学習: 人間のアノテータが複数の回答をランキング → 報酬モデルを学習
  2. PPO(近接方策最適化): 報酬モデルのスコアを最大化するようにポリシー(LLM)を更新。ただし元のモデルから乖離しすぎないよう KL ペナルティを加える
JRLHF=E[R(x,y)βKL(πθπref)]\mathcal{J}_{\text{RLHF}} = \mathbb{E}\bigl[R(x, y) - \beta \, \text{KL}\bigl(\pi_\theta \| \pi_{\text{ref}}\bigr)\bigr]

DPO(Direct Preference Optimization) は RLHF を簡素化した手法で、報酬モデルを明示的に学習せず、選好データから直接ポリシーを最適化する。LLaMA 2 自体は PPO ベースの RLHF を使用したが、その後 Zephyr、LLaMA 3 などのオープンモデルで DPO が広く採用されている。

現代 LLM の主要テクニック

KV キャッシュ

自己回帰生成では、新しいトークンを生成するたびに全トークンの K, V を再計算するのは無駄だ。以前のステップで計算した K, V をキャッシュして再利用する仕組みが KV キャッシュ。推論速度を大幅に向上させるが、メモリ消費が系列長に比例して増加する。

量子化

LLM のパラメータを 32/16 ビット浮動小数点から 4/8 ビット整数 に変換し、メモリと計算コストを削減する。GPTQAWQ などの手法により、精度をほぼ維持したまま 70B モデルを単一 GPU で動作可能にする。

MoE(Mixture of Experts)

Mixtral に代表される手法。FFN 層を複数の「エキスパート」に分割し、各トークンに対してルーターが少数(例: 8 個中 2 個)のエキスパートを選択する。全パラメータ数は大きいが、推論時に活性化されるパラメータは少ないため、効率的に大規模化できる。

コンテキスト長の拡張

初期の Transformer はコンテキスト長 512 トークン程度だったが、現在は 100 万トークン以上を処理できるモデルも存在する。RoPE の周波数スケーリング、YaRN、Ring Attention などの手法が使われている。

まとめ

LLM の核心技術を 6 つの柱で見てきた。

  1. 歴史: Word2Vec → Transformer → BERT/GPT → スケーリング則による大規模化
  2. トークナイゼーション: BPE によるサブワード分割で任意のテキストを数値系列に
  3. Transformer: 自己注意 + FFN + 残差接続を N 層積み重ねたアーキテクチャ
  4. 自己注意: softmax(QKT/dk)V\text{softmax}(QK^T/\sqrt{d_k})V で全トークン間の関連度を動的計算
  5. テキスト生成: 温度・Top-k・Top-p サンプリングによる確率的な自己回帰生成
  6. 学習パイプライン: 事前学習 → SFT → RLHF/DPO で「次トークン予測器」を「対話 AI」に変換

「次のトークンを予測する」という一見単純な ── しかし十分にスケールさせると驚くべき能力を発揮する ── 原理が、現代の AI を支えている。

参考文献