「似ているものは近く、似ていないものは遠く」に配置される埋め込み空間を学習する距離学習を学ぶ項目です。2サンプルを比較するSiamese networkと、3サンプルを比較するTriplet networkという2つの代表的な枠組みを理解します。
📖 概要
通常の分類モデルは「入力がどのクラスに属するか」を直接予測しますが、クラス数が膨大な場合や、学習時に存在しなかったクラスを扱いたい場合(顔認証で新規ユーザーを登録する場面など)には、この枠組みは不向きです。そこで有効なのが距離学習(Metric Learning)です。距離学習では、入力をベクトル(埋め込み)に変換するネットワークを学習し、その埋め込み空間上の距離が「意味的な類似度」を反映するようにします。同一人物の顔画像同士は近く、別人の顔画像同士は遠くなるような空間ができれば、距離の比較だけで照合や検索が可能になります。
このように、タスクに有用な特徴ベクトルそのものを学習するという意味で、距離学習は表現学習の一種と位置づけられます。学習の枠組みは比較するサンプル数で大別され、2サンプルのペアを使う Siamese network + contrastive loss と、3サンプルの組を使う Triplet network + Triplet loss が代表例です。E資格では、それぞれの損失関数の形と「マージン」の役割が問われやすい項目です。
🔍 キーワード解説
表現学習
表現学習は、タスクの遂行に有用な特徴表現(特徴ベクトル)をデータから自動的に学習することを指します。距離学習は「サンプル間の距離関係」という形で表現の良し悪しを定義する表現学習の一種であり、得られた埋め込みは顔認証・画像検索・異常検知など、学習時に想定していなかったクラスへの照合にも利用できます。
Siamese network
Siamese network(シャムネットワーク)は、重みを共有した2つの同一ネットワークに2つの入力をそれぞれ通し、得られた2つの埋め込みベクトルの距離を比較する構造です。重み共有により、2つの入力は必ず同じ変換で埋め込まれるため、距離の比較が意味を持ちます。ペアが「同じクラスか、異なるクラスか」というラベルだけで学習でき、署名照合や顔照合などに用いられてきました。
contrastive loss
contrastive loss(対照損失)は、Siamese networkの学習に用いられる代表的な損失関数です。埋め込み間の距離を d、マージンを m とすると、概ね次の形をとります。
類似ペア(同一クラス): L = d^2 非類似ペア(異なるクラス): L = max(0, m - d)^2
つまり、似ているペアは距離が小さくなるほど損失が下がり、似ていないペアはマージン m 以上離れれば損失がゼロになります。マージンを設けることで、非類似ペアを無限に引き離そうとする無駄な学習を防ぎます。
Triplet loss
Triplet loss は、基準となるアンカー(anchor)、アンカーと同じクラスのポジティブ(positive)、異なるクラスのネガティブ(negative)の3サンプルを使う損失関数です。アンカーとポジティブの距離を d(a, p)、アンカーとネガティブの距離を d(a, n)、マージンを m とすると次のように書けます。
L = max(0, d(a, p) - d(a, n) + m)
「アンカーとポジティブの距離が、アンカーとネガティブの距離よりマージン以上小さい」状態になれば損失がゼロになります。ペアを絶対的に近づける・遠ざけるcontrastive lossと異なり、同一アンカーから見た相対的な距離関係を直接最適化できる点が特徴です。学習を効果的に進めるには、条件をぎりぎり破るような難しい組(ハードサンプル)を選ぶサンプリングの工夫が重要とされます。顔認証の分野で広く知られるようになった損失関数です。
Triplet network
Triplet network は、重みを共有した3つの同一ネットワークにアンカー・ポジティブ・ネガティブの3入力を通し、Triplet lossで学習する構造です。Siamese networkの3入力版と捉えることができ、2サンプル比較では捉えにくい「どちらがより似ているか」という相対関係を学習に取り込めます。
📝 試験でのポイント
- contrastive loss と Triplet loss の式の形を区別して覚えましょう。前者は「ペアごとに近づける/マージンまで遠ざける」、後者は「3つ組の相対距離をマージン付きで比較する」構造です
- 損失関数の穴埋めや、「損失がゼロになる条件」(Triplet lossなら d(a, p) + m ≤ d(a, n))を問う計算問題が想定されます
- Siamese network・Triplet network の共通点は「重み共有」です。なぜ重みを共有する必要があるのか(同一の埋め込み空間で距離を比較するため)を説明できるようにしておきましょう
- アンカー・ポジティブ・ネガティブの役割の対応関係は定番の出題ポイントです
- 距離学習が通常の分類と異なり、学習時に存在しなかったクラスにも適用できる(埋め込みの距離比較で照合できる)という利点も押さえておきましょう
📚 まとめ
距離学習は、意味的な類似度が距離に反映される埋め込み空間を学習する表現学習の一種です。2サンプルを重み共有ネットワークで比較する Siamese network は contrastive loss で「類似ペアは近く、非類似ペアはマージン以上遠く」を学習します。3サンプルを使う Triplet network は Triplet loss で「アンカーから見てポジティブがネガティブよりマージン以上近い」という相対関係を学習します。式の形とマージンの役割を軸に整理しておきましょう。
