このシリーズではE資格対策として、シラバスの内容を項目別にまとめています。
SiameseNet
概要
SiameseNet(シャムネットまたはサイアミースネット)は、特に画像認識タスクにおいて、ペアのデータが同じクラスに属するか、異なるクラスに属するかを識別するモデルを学習するためのニューラルネットワークのアーキテクチャです。
このネットワークは、ペアの画像データをそれぞれ順伝播し、各画像から埋め込みベクトルを獲得します。ペアデータを処理するディープニューラルネットワーク(DNN)は同じものを利用し、その構造と重みは共有されます。このため、「Siamese」(結合双生児)と名付けられました。
埋め込みベクトルの差の絶対値を取り、全結合層に入力します。この部分の計算は、全結合層まで含めると、重み付きL1ノルムの計算と等しいです。最終的にペア画像が同じクラス(1)か異なるクラス(0)かとして二値分類学習を実行します。全結合層の活性化関数はシグモイド関数で、損失は二値クロスエントロピー関数となります。
SiameseNetは、埋め込みベクトルの学習と最後の全結合層による距離の算出方法の学習を担当しています。この思考方法は、多くの深層距離学習の基礎となっており、画像の類似度の判定やone-shotラベル予測タスクなどに利用されます。
損失関数
SiameseNetの損失関数は、ネットワークが学習する際に最小化するべき目標となる関数で、入力されたペアのデータがどれだけ類似しているかを測定します。以下は、SiameseNetで使用される主要な損失関数についての解説です。
二値クロスエントロピー誤差+L2正則化:
SiameseNetの原論文では、この損失関数が採用されています。具体的には、以下のような式で表されます。
ここで、y は真のラベル(類似ペアの場合は1、非類似ペアの場合は0)、p はモデルによって計算された距離(0から1の範囲)、λ は正則化の強さ、w はモデルの重みです。この損失関数は、類似ペアの距離を小さくし、非類似ペアの距離を大きくする効果を持ちます。L2正則化の項はモデルの複雑さを制限し、過学習を防ぐ役割を果たします。
マージンを考慮した二値クロスエントロピー誤差(Contrastive Loss Function):
この損失関数は、特に最も原始的な対照損失関数として知られており、以下のような式で表されます。
ここで、d は二つの埋め込みベクトルの距離、Y はベクトルの関係を表すラベル(類似=1、非類似=0)、m はマージン(類似ペアとして扱われる距離の最大値)です。この損失関数は、類似ペアの距離を小さくし、非類似ペアの距離を大きくする効果を持ちますが、非類似ペアの場合は、マージンよりも距離が大きい場合は損失が0になるため、マージンの考慮が加わっています。
One-shotクラス分類の性能と限界
One-shotクラス分類とは、クラスが既知のデータをクラスごとに1枚だけ用意し、新しいデータの分類を試みる手法です。この手法は、データセットが非常に限られた状況での分類問題に対応します。
SiameseNetを用いたOne-shotクラス分類では、学習済みのSiameseNetに「分類したい未知画像+クラス既知画像」をペアで入力し、確率の予測を実行します。これを全てのクラス既知画像との組み合わせについて行い、確率が最大のペアに紐付いたクラス既知画像のクラスに、未知画像を分類します。
この方法は、伝統的な分類手法と異なり、ラベル付きデータが非常に限られている状況でも機能します。
One-shotクラス分類は非常に魅力的な概念ではありますが、精度としては必ずしも高くない場合があります。これはProof-of-Concept的な側面が強いためで、当時はそれなりの精度が出るだけで話題になりました。例えば、MNISTの手書き数字の10クラス分類において、SiameseNetによるOne-shot分類の精度は70.3%でした。これは、画素値をそのまま使ったk-近傍法(k=1)の26.5%と比較しても高い結果です。
2つの画像がどれだけ類似しているかを測る際、その基準となる「類似性」の定義は非常に重要です。例えば、「球体」という観点では、バスケットボールとサッカーボールは類似していますが、「ボールの種類」という観点では異なるものと見なされます。
このように、類似性の基準となるコンテキストが異なれば、同じ2つの画像に対しても、その距離の解釈が変わるため、どの観点での類似性を学習するのかを明確にする必要があります。この問題を解決するための一般的な手法がTriplet Lossです。Triplet Lossは、類似ペアと非類似ペアを同時に与えることで、学習時に正確なコンテキストを反映します。
まとめ
最後までご覧いただきありがとうございました。