Siamese Networkと Triplet Networkは、2つまたは複数の入力間の類似性を測定する関数を学習することを目的とした、類似性学習の例。

Siamese Network

Siamese Networkは、画像認識、顔認証、テキスト類似性などのタスクに使用されるニューラルネットワークアーキテクチャの一種。
2つの同一のサブネットワークがあり、 同じ重みを共有 して、ペアの入力データに対して一緒にトレーニングされる。
それらの類似度スコアを計算し、入力が類似しているかどうかを判断するために使用できる。
このアーキテクチャは、重みを共有する2つのサブネットワークから構成されている。

各サブネットワークは、2つの入力のうちの1つを処理して特徴ベクトルを生成する。
特徴ベクトルは、ユークリッド距離やコサイン類似度などの距離指標を使用して比較される。
そして、距離指標を使用して類似度スコアを計算する。

Siamese Network には問題点がある。
例えば、うどんの画像とそばの画像を入力すると、麺類の視点からは2サンプルの出力は近づくように学習を行うべきだが、小麦粉から作られた食べ物という視点からは、離すように学習を行うべき。
コンテキスト(例 麺類、小麦粉から作られた食べ物)によって出力される結果が変わるケースが発生する。
つまり、Siamese network ではコンテキストを固定する必要がある。

Triplet Network

Triplet Network は、Siamese Network に似ているが、2 つの入力ではなく、3 つの入力を比較する。
Triplet Network は、アンカー画像、ポジティブ画像、ネガティブ画像の3つの入力を受け取る。
アンカー画像は、ネットワークが参照点として使用する画像。
ポジティブ画像は、アンカー画像に似ている画像であり、ネガティブ画像は似ていない画像。
ネットワークは、アンカー画像とポジティブ画像の間の距離と、アンカー画像とネガティブ画像の間の距離を計算する。
ネットワークの目的は、 アンカーとポジティブ画像の距離を最小限に抑え、アンカーとネガティブ画像の距離を最大限に増やすことを学習すること 。 Triplet Networkは、顔認識など、異なる画像間で人物の顔を認識することが目的の場合に使用される。

最小化したい目的関数。

\[max(d_p −d_n +m , 0)\]