モデルの予測確率分布と正解の one-hot 分布の間の交差エントロピーを計算する損失関数。LLM の事前学習・ファインチューニングにおける最も基本的な損失関数であり、次トークン予測タスクで各時刻の -log P(正解トークン) を平均する。
Cross-Entropy Loss(交差エントロピー損失)は、分類タスクにおけるモデル出力の確率分布と正解ラベルの分布との乖離を測定する損失関数である。LLM では語彙サイズ V(通常 32,000〜128,000)のソフトマックス出力に対し、正解トークンの確率の負の対数を計算する。GPT-4、Llama 3 405B、Claude 3.5、Mistral Large 2 など、事実上すべての主要 LLM が事前学習にこの損失関数を採用している。
テキスト系列 x_1, x_2, ..., x_T に対する Cross-Entropy Loss は:
L_CE = -(1/T) * Σ_{t=1}^{T} log P_θ(x_t | x_1, ..., x_{t-1})
| フレームワーク | 関数名 | 特記事項 |
|---|---|---|
| PyTorch | nn.CrossEntropyLoss | ignore_index でパディング除外、reduction='mean' が標準 |
| JAX/Flax | optax.softmax_cross_entropy | one-hot と logits を入力 |
| TensorFlow | tf.keras.losses.SparseCategoricalCrossentropy | from_logits=True 推奨 |
| Triton | カスタムカーネル | Flash Attention と統合して GPU メモリ削減 |
大規模 LLM では語彙サイズが大きいため、ソフトマックス計算がボトルネックになる。Llama 3(語彙 128,256)では出力層だけで 128,256 × 8,192 = 約 10 億パラメータ。メモリ効率化のため Chunked Cross-Entropy(バッチ方向に分割して逐次計算)が採用される。
| Loss 値 | Perplexity | 解釈 | 例 |
|---|---|---|---|
| 3.0+ | 20+ | 学習初期 | ランダム初期化直後 |
| 2.0 | 7.39 | 学習中盤 | 基本的な文法を習得 |
| 1.5 | 4.48 | 学習後半 | 流暢な文生成可能 |
| 1.2 | 3.32 | 収束近傍 | 高品質な LLM |
| 1.0 | 2.72 | 理論的下限に近い | 最先端モデル |
Q1: Cross-Entropy Loss と Negative Log-Likelihood の違いは? A: 数学的に同一。正解が one-hot ベクトルの場合、Cross-Entropy は正解クラスの -log P(正解) に帰着し、これが Negative Log-Likelihood(NLL)そのもの。PyTorch の実装でも CrossEntropyLoss = LogSoftmax + NLLLoss。
Q2: 語彙サイズが大きいと Loss 計算はどう変わりますか? A: 語彙 128K の場合、各時刻のソフトマックスに 128K 次元の指数関数計算が必要でメモリ・計算コストが増大する。対策として Chunked Cross-Entropy(系列方向に分割計算)や、稀少トークンをサンプリングする Sampled Softmax がある。
Q3: Loss が途中で跳ね上がる(Loss Spike)原因は? A: データ品質問題(異常に長い文、壊れた UTF-8、重複データ)、学習率の急変、勾配爆発が主因。Llama 3 では Loss スパイク検出時にチェックポイントを巻き戻し、該当データバッチをスキップする戦略を採用。