G検定(ジェネラリスト検定)
とりぷれっとろす
トリプレットロス
Triplet Loss
トリプレットロスは、基準となるアンカー・同じクラスの正例・異なるクラスの負例の3つ組を使い、アンカーと正例の距離がアンカーと負例の距離よりマージン以上小さくなるように埋め込みを学習させる、距離学習の損失関数です。
詳しい説明
3つ組で距離を学習する考え方
トリプレットロスは、データを特徴空間へ写す埋め込みf(x)を学習するための損失関数です。3つのデータを1組(トリプレット)にして使います。
- アンカー(anchor): 基準となるデータ
- 正例(positive): アンカーと同じクラスのデータ
- 負例(negative): アンカーと異なるクラスのデータ
目標は、同じクラスどうしの距離を小さくし、異なるクラスどうしの距離を大きくすることです。顔認証の論文で使われた例では、撮影条件に関係なく同一人物の顔どうしの二乗距離を小さく、別人の顔どうしの二乗距離を大きくする埋め込みを学習します。
満たしたい制約とマージンα
アンカーをxa、正例をxp、負例をxnと書くと、次の制約を満たすことを目指します。
||f(xa) - f(xp)||² + α < ||f(xa) - f(xn)||²
アンカーと正例の距離にマージンαを足しても、アンカーと負例の距離より小さい状態です。単に負例のほうが遠いだけでは足りず、αだけの余裕を持って離れていることを求めます。論文の実験ではα = 0.2に設定されていました。
損失関数の式
最小化する損失は次のとおりです。
L = Σ [ ||f(xa) - f(xp)||² - ||f(xa) - f(xn)||² + α ]+
[ ]+は、中の値がゼロ未満なら0にする操作(max(0, 中の値))です。制約を満たすトリプレットでは中の値が負になるので損失は0です。制約を満たさないトリプレットでは正の損失が生じ、これを減らす方向に埋め込みが学習されます。
トリプレットの選び方が重要な理由
制約をすでに満たしている簡単なトリプレットは損失が0なので、学習に寄与しません。速く収束させるには、制約に違反するトリプレットを選ぶことが重要です。具体的には、アンカーから最も遠い正例(ハードポジティブ)と、アンカーに最も近い負例(ハードネガティブ)を選びます。
ただし、訓練データ全体からこれらを探すのは計算上現実的ではありません。さらに、ラベルの誤りや写りの悪いデータが選ばれやすくなり、学習がうまく進まないおそれがあります。そこで、次のような方法が挙げられています。
- 数ステップごとに、最新のネットワークを使ってオフラインでトリプレットを生成する
- ミニバッチの中からハードな正例・負例をオンラインで選ぶ
顔認証・顔のクラスタリングでは、同一人物の顔どうしを近く、別人の顔どうしを遠くに置く埋め込みの学習に使われました。Triplet Lossは、G検定シラバス2024のキーワードに含まれています。
試験で問われること
G検定
- トリプレットロスは、アンカー・正例(同じクラス)・負例(異なるクラス)の3つ組を使う距離学習の損失関数である。
- 制約は||f(xa)-f(xp)||² + α < ||f(xa)-f(xn)||²で、アンカーと正例の距離にマージンαを足しても、アンカーと負例の距離より小さくなることを求める。
- 損失はL = Σ[||f(xa)-f(xp)||² - ||f(xa)-f(xn)||² + α]+で、制約を満たすトリプレットの損失は0、満たさないトリプレットでは正の損失が生じる。
- 制約を満たす簡単なトリプレットは学習に寄与しないため、ハードポジティブとハードネガティブを選ぶことが速い収束に重要である。選び方には、オフラインで生成する方法とミニバッチ内からオンラインで選ぶ方法がある。
- 顔認証・顔のクラスタリングでは、同一人物の顔どうしを近く、別人の顔どうしを遠くに置く埋め込みの学習に使われた。
最終更新日: 2026/09/23