ロス関数 - Shinichi0713/LLM-fundamental-study GitHub Wiki
InfoNCE(Information Noise-Contrastive Estimation)
InfoNCE(Information Noise-Contrastive Estimation)とは、**コントラスト学習(contrastive learning)でよく用いられる損失関数(loss function)**の一つです。
主に自己教師あり学習や表現学習の分野で、類似ペア(positive pair)と非類似ペア(negative pair)を区別するために使われます。
仕組み・目的
- 目的:
与えられた「アンカー(anchor)」と「ポジティブ(positive)」のペアが、他の「ネガティブ(negative)」サンプルよりも似ている(近い)ように、エンコーダのパラメータを学習させること。 - 使われる場面:
SimCLR、MoCo、CPC など、さまざまなコントラスト学習手法で使われています。
数式(簡易版)
バッチ内に $N$ 個のサンプルがあり、
- $q$ … アンカー(例: クエリ特徴ベクトル)
- $k^+$ … ポジティブ(例: 同じ画像の別変換の特徴ベクトル)
- $k^-$ … ネガティブ(例: 他の画像の特徴ベクトル)
InfoNCE損失は、以下のように書けます:
$$ \mathcal{L} = -\log \frac{\exp(\text{sim}(q, k^+)/\tau)}{\exp(\text{sim}(q, k^+)/\tau) + \sum_{i=1}^{K} \exp(\text{sim}(q, k_i^-)/\tau)} $$
- $\text{sim}(a, b)$:コサイン類似度などの類似度関数
- $\tau$:温度パラメータ(スケーリング用)
直感的な意味
- 「アンカー」と「ポジティブ」は似ていてほしい(類似度を高く)
- 「アンカー」と「ネガティブ」は似ていないでほしい(類似度を低く)
- これを損失関数として最小化することで、意味的に近いもの同士の特徴ベクトルが近づき、遠いもの同士は離れるように学習されます。
まとめ
- InfoNCEは、コントラスト学習で「正例と負例を区別する」ための損失関数。
- これにより、良い表現(特徴ベクトル)を自己教師ありで学習できる。
- SimCLRやMoCoなど、現代の多くの表現学習手法で使われている。