はじめに
今回は、近年のDeep Metric Learning (深層距離学習)の発展を再評価して、論文で論じられている程のパフォーマンス向上が実際にはなかったことを実験的に示した論文を紹介しつつ、Deep Metric Learningについて紹介しようと思います。
[2003.08505] A Metric Learning Reality Check
この論文は2020/03/18にarXiv上に上がった論文で、この記事執筆段階では採録情報は確認できていません(ただし、フォーマットはECCV的雰囲気)。
実験は、著者のベンチマークツールを使って行っているとのこと。
Deep Metric Learningとは
概要
Deep Metric Learningとは、意味の近い入力画像同士の距離が近く、逆に、意味の遠い入力画像同士の距離が遠くになるような空間に埋め込むような変換を行う学習手法のことを指します。
以下の図はDeep Metric Learningの行うことを表しています。ある画像を表すanchorに対して、意味的に近い画像のpositive sampleと意味的に遠い画像のnegative sampleがあるとします。Deep Metric Learningでは、これらの画像を別の空間に埋め込みます。この空間での距離が意味的な近さを表すように埋め込みの変換が行われるわけです。
雰囲気的に一般的なクラス分類と似ているように見えますが、目的が異なります。「各クラスあたりのサンプル数に対してクラス数が非常に多いケース」及び「学習データで予測クラスを網羅できないケース」での利用を目的にしていると解釈しています。
具体的な利用例
具体例として分かりやすいのは、商品の検索と顔認証だと思います。
例えば、zozo社が行っているようなファッションアイテムの検索です。アイテム数は非常に多いため、一般的なクラス分類の問題に落とし込むことは難しいですが、距離を尺度として用いることができる空間に埋め込みができれば、意図するアイテムを見つけることができます。このような推薦システムでは全く同じものでなくても、近いものが推薦されるという意味でも有意義で非常に相性がよいと思います。
また、顔認証も分かりやすいと思います。顔認証にはverificationとidentificationという2つがあります。
verificationとはある人物が特定の人物かどうかを判定することです。埋め込んだ空間の距離に一定の閾値を設けて判断します。また、identificationはその人物が誰なのかを判定します。埋め込んだ距離で最も近い人物 (及びKNN等)を割り当てることでその人が誰なのかを推定します。
Deep Metric Learningの概要として以下の記事が分かりやすいのでより詳細に見たい方はこちらもご参照下さい。
Deep Metric Learningの種類
大きく分けて、以下の3つの潮流があると思います。
- contrastive loss: 2サンプルを1組にして距離を学習
- triplet loss: 3サンプルを1組にして距離を学習
- クラス分類誤差: クラス分類にマージンの層を加えるなどしてクラス分類誤差で学習
contrastive loss / triplet loss
contrastive lossとtriplet lossはDeep Metric Learningの基本的なアプローチです。
- contrastive loss: [Hadsell+ CVPR'06] Dimensionality reduction by learning an invariant mapping (コレ自体はDeepではない)
- triplet loss: [Weinberger+ 06] Distance Metric Learning for Large Margin Nearest Neighbor Classification (The Journal of Machine Learning Research) (コレ自体はDeepではない)
まず、constrastive lossから説明します。あるサンプルとそれと意味的に近いサンプルとの距離を、意味的に遠いサンプルの距離をとして、それぞれのマージン(固定値)を、としたとき、contrastive lossは以下のように表せます。
ここで、プラス付きの鍵括弧は0以下の場合は0にするということを意味しています。(Deep Metric Learningの文脈でよく出てくるようです)多くの場合、は0とされることが多く、正例の距離は0に、負例の距離はになるように学習が行われます。
この手法の欠点は、実際には2つの任意の画像の意味的距離は一律ではないにも関わらず、固定値であるマージンで一律であるように扱われているところです。この欠点を改善するために、triplet lossが提案されました。
triplet lossでは、あるサンプルとの距離が意味的に近いものを、遠いものをとして、マージンをとして以下のように表せます。
正例の距離が小さく、負例の距離が大きくなるような学習を行いつつ、contrastive lossであった距離の制約を緩めることができています。
また、これらの手法は上記のようなロスのとり方に加え、学習に使うペアもしくはトリプレットの組のサンプルの仕方も大事になります。そのため、論文として新たに提案されているものは、ロスもしくはサンプルの仕方の改善が行われているようです。
クラス分類誤差
主流なアプローチは、contrastive lossとtriplet lossのように明示的に距離を最適化させていくわけですが、最近ではクラス分類に一工夫入れて、暗黙的に最適化する方法があります。特に有名なものにangular marginを取る手法があります。CNNからの出力を正規化して、angular marginと呼ばれる処理(ペナルティを加える)を行い、後はクラス分類を行うという手法です。以下のような手法があります。
- SphereFace: [Liu+ CVPR'17] SphereFace: Deep Hypersphere Embedding for Face Recognition
- CosFace: [Wang+ CVPR'18] CosFace: Large Margin Cosine Loss for Deep Face Recognition
- ArcFace: [Deng+ CVPR'19] ArcFace: Additive Angular Margin Loss for Deep Face Recognition
顔認識特有の距離学習の処理というわけではないものの、このような学習のさせ方は基本的に顔認識にフォーカスさせて提案されているようです。
その他情報
Deep Metric Learningは詳しく説明されている記事がいくつかあるので、より詳細に知りたい方は覗いてみるとよいかと思います。
以下の記事はMetric Learning全般に分かりやすくまとめてあります。
以下の記事はangular marginのMetric Learningについて分かりやすくまとめてあります。
以下の記事はtriplet lossについての解説で、contrastive lossとの対比について記述があります。
Deep Metric Learningの既存の比較の悪い点
論文に掲載された評価値の進展は以下のようになっており、急速に発展しているように見えます。(評価値については後ほど説明)
しかし、実際にはフェアな比較ができていないことが指摘されています。 大きく以下の2つの問題を挙げています。
- 提案以外の条件も異なる
- 評価指標が適切でない
提案以外の条件も異なる
具体的に以下のような部分が異なってしまい、平等な条件で比較ができていないことが指摘されています。
- ネットワークが異なる (実際にネットワークを変えて試すと大きく結果が変わる)
- 埋め込みの次元が異なる
- データ拡張の仕方が異なる (公開実装を見ると、一般的なものよりリッチなデータ拡張が行われている例があった)
- 最適化手法(Optimizer)が異なる
- 論文に記載されていない工夫が含まれる (公開実装に、論文に記述させていない工夫があり、それが精度に大きく影響している例があった)
- 信頼区間の記載がなく、改善されているか分かりにくい
- validationデータが用意されておらず、testデータでチューニングしている (testデータでhyper parameterの調整をしてしまっている)
評価指標が適切でない
指標として、以下の3つが一般的に使われます。
- Recall@K: 埋め込んだ空間で評価。埋め込み空間で距離が近いK個のうちに、該当クラスがあるかどうかを元に算出するものと思います。著者は、一般的にRecall@1として使われるものをPrecision@1と記述しているため、図のPrecision@1はRecall@1と同等です。
- Normalized Mutual Information (NMI): クラスタリングをしてから正規化相互情報量で評価。
- F1 Score: クラスタリングをしてからF1値で評価。
以下はトイデータセットで評価値を検証したものですが、左から右にかけて精度を高く出したいわけですが、NMI、F1、R@1 (Recall@1)ではほとんど値が変わらず、うまく評価できていないことが指摘されています。
また、NMIとF1 Scoreに関してはそもそもクラスタリングを使う必要があり、このアルゴリズムが評価値に影響を及ぼすため、あまり好ましくないことも指摘されています。Recall@Kに関しては直接埋め込み空間で評価しているところはよいもののイマイチ(著者談)ということです。
著者は改良として、Mean Average Precision at R (MAP@R)を提案しています。まず、R-Precisionという指標を定義しています。このR-Precisionは同じクラスの数R個分だけ近傍のサンプルと取り、そのうち、実際に何個分同じクラスが含まれているかの値です。MAP@Rはその原理のもと、Mean Average Precisionを取ったものです。この部分は物体認識のmAPの計算方法が頭にあるとイメージが付きやすいように思います。個人的な感想としても、著者が提案したもののほうがgeneralな評価としてはよいように思いました。
フェアな比較
以下が、学習条件を同じにして比較した図です。評価値は著者が提案したものではなく、Recall@1 (=Precision@1)です。データは一般的によく使われる、CUB200、Cars196、SOPの3つが使われています。
条件を揃えて実験してみると、精度の改善はさほどなされていないことが分かります。
以下は著者が提案した評価指標 (MAP@R) で評価したものです。hyper prameter調整でできた4つの精度の高いモデル (128次元)を4つ結合させて評価したConcatenatedと別々に評価して4つの平均を出したSeparatedの2つで評価値を出しています。
こちらを見ても、論文でいわれる程の精度向上が見られないことが分かります。
終わりに
Deep Metric Learningの動向と実は対して発展していなかったという話をしました。
今回のような実は実験条件が揃っていないという話は、Deep Metric Learningに限らずあるのではないかなと思っています。しかし、ここまで精度が変わらないというのは驚きで、面白く、意味のある論文だと感じました。
また、逆に捉えると、論文と同じ条件にこだわらず、学習やネットワークの工夫をすれば、多少古いモデルでも精度の高いモデルができたり、論文値的なSOTAの評価値よりも高いモデルを作れたりするということでもあるので、実用的にはその辺りをきちんとしていくことは大事だなと思いました。
参考
同じ論文について説明した記事もありましたので、興味がある方はこちらもご参照下さい。