LLMフォーカル損失(エルエルエムフォーカルソンシツ)
簡単なサンプルの損失を減衰させ、困難なサンプルに学習を集中させる改良型交差エントロピー損失。クラス不均衡問題に効果的。
LLMフォーカル損失とは
フォーカル損失(Focal Loss)は、2017年にFacebook AI Research(現Meta AI)のLin et al.が物体検出タスク(RetinaNet)のために提案した損失関数である。交差エントロピー損失に (1 - p_t)^γ という変調項を掛けることで、モデルが既に高い確信度で正解しているサンプル(簡単なサンプル)の損失寄与を自動的に抑制し、確信度の低い困難なサンプルに学習リソースを集中させる。
FL(p_t) = -α_t (1 - p_t)^γ log(p_t)
ここで γ はフォーカシングパラメータ(通常 γ=2)、α_t はクラスバランシング重みである。
LLMでの応用
クラス不均衡への対処
自然言語の語彙分布はZipf則に従い、上位1%のトークンが全出現の50%以上を占める。標準的な交差エントロピー損失では、頻出トークン(the, a, is等)の予測精度向上に学習が偏り、低頻度の専門用語や固有名詞の学習が不十分になる。フォーカル損失はこの不均衡を自動的に緩和する。
トークン分類タスクでの効果
| タスク | 標準CE F1 | Focal Loss F1 | γ値 | 改善幅 |
|---|---|---|---|---|
| 固有表現認識(NER) | 91.2 | 93.4 | 2.0 | +2.2 |
| 品詞タグ付け(POS) | 97.1 | 97.3 | 1.0 | +0.2 |
| 感情分析(3クラス) | 86.5 | 88.7 | 2.0 | +2.2 |
| 意図分類(50クラス) | 78.3 | 82.1 | 3.0 | +3.8 |
| コード生成(CodeLlama) | 68.0 | 69.8 | 1.5 | +1.8 |
クラス数が多く不均衡が激しいタスクほどフォーカル損失の効果が大きい。
γ パラメータの影響
| γ値 | 挙動 | 推奨用途 |
|---|---|---|
| 0 | 標準的な交差エントロピーと同一 | ベースライン比較 |
| 0.5 | 穏やかなフォーカシング | 軽度の不均衡 |
| 1.0 | 中程度のフォーカシング | 一般的なNLPタスク |
| 2.0 | 強いフォーカシング(論文推奨) | 重度の不均衡・NER |
| 5.0 | 極端なフォーカシング | ほぼ外れ値のみに集中・過学習注意 |
γ=2 が最も汎用的に使われるが、LLMの事前学習ではγ=0.5〜1.0の控えめな値が安定する傾向がある。
派生と関連手法
Poly-1 Focal Loss
Google Research(2022年)が提案。フォーカル損失の多項式展開の第1項を調整することで、追加のハイパーパラメータ1つ(ε_1)で性能を改善する。ImageNetでの実験ではフォーカル損失を+0.3%上回った。
Class-Balanced Focal Loss
クラスの有効サンプル数(effective number of samples)に基づいてα_tを自動計算する手法。ロングテール分布のクラスに対して特に有効で、手動でのα調整が不要になる。
Dice Loss + Focal Loss
セグメンテーションタスクで使われるDice Lossとフォーカル損失を組み合わせた手法。トークン分類(NER等)にも転用されている。
実装上の注意点
数値安定性
(1 - p_t)^γ の計算で p_t ≈ 1 のとき浮動小数点精度の問題が生じる。PyTorch の torch.clamp で下限を設定するか、log-sum-exp トリックで安定化する必要がある。
学習率の調整
フォーカル損失は損失値の絶対値が標準CEより小さくなるため、学習率を1.5〜3倍に引き上げる必要がある場合がある。AdamWのweight decayも合わせて調整が推奨される。
FAQ
Q1: LLMの事前学習にフォーカル損失は使える?
技術的には可能だが、事前学習は膨大なデータで均等に学習するため効果が限定的。ファインチューニングやタスク特化学習で真価を発揮する。
Q2: γ の最適値はどう決める?
検証セットでグリッドサーチ(0.5, 1.0, 2.0, 3.0, 5.0)するのが標準。不均衡度が高いほどγを大きくする。
Q3: αとγの両方を調整する必要がある?
αはクラス重み、γはサンプル難易度の調整で役割が異なる。両方を使う場合は交互に最適化するのが実用的。