AI・機械学習
上級

LLMコントラスティブ損失(エルエルエムコントラスティブソンシツ)

類似ペアの表現を近づけ、非類似ペアの表現を遠ざける損失関数。文埋め込みモデルや検索特化LLMの学習に不可欠な技術。

0 回閲覧
0 いいね

LLMコントラスティブ損失とは

コントラスティブ損失(Contrastive Loss)は、入力ペアの関係性に基づいて表現空間を構造化する損失関数群の総称である。「意味的に近い入力は埋め込み空間で近くに、遠い入力は遠くに」配置されるようにモデルを学習させる。

LLMの文脈では、文埋め込みモデル(Sentence Transformers、BGE、E5等)の学習や、検索拡張生成(RAG)のリトリーバ学習で中心的な役割を果たす。

主要なコントラスティブ損失の派生

InfoNCE / NT-Xent

SimCLR(2020年)で普及した形式で、1つの正例に対してバッチ内の他の全サンプルを負例として扱う。温度パラメータ τ で分布の鋭さを制御する。

L = -log(exp(sim(z_i, z_j)/τ) / Σ_k exp(sim(z_i, z_k)/τ))

τ = 0.05〜0.1 が文埋め込みモデルの標準値で、値が小さいほど分布が鋭くなり、ハードネガティブへの感度が上がる。

Triplet Loss

アンカー・正例・負例の三つ組を使い、アンカーと正例の距離がアンカーと負例の距離よりマージン m 以上小さくなるよう学習する。

L = max(d(a, p) - d(a, n) + m, 0)

FaceNetで有名だが、LLM文脈ではバッチ効率の低さからInfoNCEに置き換わりつつある。

Multiple Negatives Ranking Loss(MNRL)

Sentence-Transformers で標準的な損失。バッチ内の全ペアをクロスで正例/負例として扱い、1バッチからO(N²)の学習信号を抽出する。

文埋め込みモデルでの適用

モデル損失関数次元数MTEB平均特徴
BGE-M3InfoNCE + 蒸留102468.2多言語・3形式対応
E5-Mistral-7BInfoNCE409666.6LLMベース埋め込み
Voyage-3コントラスティブ102467.8RAG特化
Qwen3-Embedding-8BMNRL + Hard Neg358470.5最新性能
Snowflake Arctic Embed LInfoNCE102465.1コスパ重視

ハードネガティブマイニング

コントラスティブ学習の品質は負例の選び方に大きく依存する。ランダムサンプリングの負例は「簡単すぎる」ため学習信号が弱い。

手法比較

  1. In-Batch Negatives: バッチ内の他サンプルを負例に。シンプルだがバッチサイズに依存
  2. BM25 Hard Negatives: キーワード検索で上位だがラベル上は非関連の文書。語彙的に類似だが意味的に異なるペアが得られる
  3. Cross-Encoder Distillation: 高精度なCross-Encoderのスコアを蒸留して負例の難易度を調整
  4. Self-Mining: 学習中のモデル自身で負例を検索。エポックごとに再マイニング

GTE-Qwen2やBGE-M3は、BM25ハードネガティブ + Cross-Encoder蒸留の組み合わせが最も高い精度を達成している。

コントラスティブ学習のスケーリング

バッチサイズがコントラスティブ学習の性能に直結するため、GPUメモリが制約になる。GradCache(勾配キャッシュ)技術により、論理的なバッチサイズを物理GPUメモリの制約から切り離すことが可能になった。16GB VRAM でも論理バッチサイズ65,536を実現する報告がある。

FAQ

Q1: 交差エントロピーとコントラスティブ損失の使い分けは?

次トークン予測(生成タスク)には交差エントロピー、文・文書の類似度学習(検索・分類タスク)にはコントラスティブ損失を使う。RAG向けリトリーバはほぼ全てコントラスティブ学習。

Q2: バッチサイズが小さいと性能が落ちる?

In-Batch Negatives方式では負例の多様性がバッチサイズに依存するため、小バッチは不利。GradCacheや外部負例メモリバンクで緩和可能。

Q3: 教師なしコントラスティブ学習は可能?

SimCSE(2021年)がドロップアウトによるデータ拡張で教師なしコントラスティブ学習を実現した。ただし教師ありの方が性能は高い。