Softmax関数をベースにした Deep Metric Learning が上手くいく理由

はじめに

 Deep Learningを使った距離学習(Metric Learning)では、Contrastive LossやTriplet Lossなどを用いて、画像間の類似性(や非類似性)を直接学習していく方法が広く利用されていますが、学習データの組み合わせや選び方が難しく、学習自体が難航するケースが多い事も知られています。それだけに、これまで様々な改良と工夫が提案されています。
 しかし、最近はこのような学習データ選びに難航することなく、一般的なクラス分類タスクの感覚で、Softmax関数をベースに学習できるMetric Learningが注目を浴びています。ArcFaceなどはその代表的手法でこちらで詳しく説明されています。
 Softmax関数をベースにしたMetric Learningがうまくいく理由、またさらなる改良の余地はあるのか?これらに関して少し紹介しようと思います。

Center Loss

 クラス分類にMetric Learningの要素を取り入れた元祖といえばCenter Loss1ではないでしょうか。Center Lossに関しては、こちらで詳細に説明されていたので、ざっと要点のみを紹介します。
 Center Lossでは、各特徴ベクトルと対応するクラス中心との距離にペナルティを設けることで、クラス分類と特徴空間上のクラス中心位置を同時に学習します。これによりクラス内変動は小さくなるため、より効果的にクラス分離する方法としてECCV2016で発表されました。

 本論文では、CNNの最終層の1つ手前のFC層を2次元に改良し、その値をそのまま2次元平面にプロットする事で特徴量の可視化を行っています。下図はMNISTに対して通常のSoftmax関数でクラス分類した際の中間特徴量を可視化したものです。

スクリーンショット 2020-02-03 17.45.57.png

 損失関数は、通常のSoftmax Cross Entropy Lossに、各特徴ベクトルとそのクラスの中心ベクトルとの距離を表すCenter Lossの項を加えたものになります。
スクリーンショット 2020-02-03 18.09.05.png

クラスの中心Cyiを都度正確に計算するのは計算量的に現実的ではないため、ミニバッチ毎に以下の計算を行い、クラス中心Cyiを逐次更新していきます。

スクリーンショット 2020-02-03 19.02.18.png
スクリーンショット 2020-02-03 19.02.32.png
スクリーンショット 2020-02-03 19.06.13.png

以下はクラス中心の具体的な更新例です。ミニバッチ内でクラスAに属するデータがA1A2A3の3つの場合、クラスAの中心位置CAは下図のように更新されます。

スクリーンショット 2020-02-03 19.22.49.png

 最後に Center Lossの結果を可視化した図を載せておきます。ハイパーパラメータλの値を大きくする事で、クラス内変動も小さくなることが分かります。

スクリーンショット 2020-02-03 19.32.22.png

Sphereface

 Softmax関数を使って学習した場合の特徴空間には固有の角度分布がある事を見出し、Center Lossのようなユークリッド距離によるマージンよりも、角度に基づくマージンの方が適しているという事を主張。Angular Softmax (A-Softmax) Lossを提案2し、CVPR2017で採択されました。

 順に見ていきたいと思います。まず、通常のSoftmax Cross Entropy Lossは以下の通りです。
スクリーンショット 2020-02-03 22.30.08.png
次に、これを内積の公式 ab=||a||||b||cosθ を使って WjTxiの内積部分を書き換えます。
スクリーンショット 2020-02-03 22.49.50.png
さらに、重みパラーメタを正規化して||Wj||=1となるようにし、バイアスbj0にします。
すると、以下のようになり、これをModified Softmax Lossと定義します。
スクリーンショット 2020-02-03 23.03.35.png
次に、このLmodifiedにおける決定境界がどうなっているのか確かめてみます。決定境界とは2つのクラスがちょうど同じ確率になる境界値を指します。

クラス1の重みW1と特徴量xiのなす角をcosθ1、クラス2の重みW2と特徴量xiのなす角をcosθ2とすると、この2つの確率がちょうど同じになるのは以下の条件を満たす場合です。

exicosθ1jexicos(θj,i)=exicosθ2jexicos(θj,i)xicosθ1=xicosθ2θ1=θ2

したがって、クラス1とクラス2の確率がちょうど同じになるのは、重みW1W2の角度を2等分する直線方向にxiがある場合です。
スクリーンショット 2020-02-03 23.42.12.png
この結果から、Softmax Lossによって学習された特徴量xiというのは、本質的にはsoftmaxをかける直前の最後の重みWjの角度に沿った分布をとっていることがわかります。
スクリーンショット 2020-02-03 23.54.56.png
これはつまり、Softmax関数に対して、Center Lossのようにユークリッド距離ベースのマージンを組み合わせるのは親和性がよくない事を示唆しており、角度に沿ったマージンを設ける事こそが最も効果的であると示しています。

Angular Softmax (A-Softmax) Loss

Angular Softmax (A-Softmax) Lossは以下のように定義されています。
スクリーンショット 2020-02-04 0.29.05.png
Lmodifiedに対して、自クラスの重みWyiとのなす角θyi,iにのみ係数mのペナルティを与えるため、決定境界を本来の位置よりも自クラスの重みWyiのに近くに寄せる効果が期待あります。
スクリーンショット 2020-02-04 0.39.42.png

CosFaceやArcFace

 Spherefaceが主張するような角度に沿ったマージンをとるやり方は、Sphereface以降にもいくつか提案されています。CosFace3やArcFace4などがそれにあたります。
スクリーンショット 2020-02-04 0.59.41.png

 詳細な内容は割愛しますが、簡単に説明すると、CosFaceからはxiの正規化も行われるようになったため、2つのベクトルのなす角のcosθがそのまま類似度として表現できるようになりました。また、cosθの値が小さすぎてSoftmaxが機能しなくなるのを防ぐためにハイパーパラメータsを導入しています。
 さらにその後、ArcFaceはマージンの場所を変更しています。角度に直接マージン指定しているので、Softmaxにおける分離境界は区間全体に渡って線形かつ一定となります。

Uniform Loss

 SpherefaceなどのCosine Based Softmax LossにUniform Lossという新しい項を追加する事で、クラス中心を均一に分散させる等分布制約を課し、特徴空間を最大限に活用できるようにする手法が提案5されました。CVPR2019で採択されています。Uniform Lossは、特徴空間である超球面上で、クラスの中心をクラス間反発を伴う電荷のように考え、そのポテンシャルエネルギーを最小化するような働きをします。これまでの既存手法は、クラス間距離を大きくすることとクラス内変動を小さくすることを目標にしているものが多いですが、Uniform Lossではそれに加えてクラス間距離の最小値の最大化も期待できます。

 Center Loss の場合は、クラス内の要素とクラス中心との間の距離を単に最小化するのみで、そもそもクラス間の関係は記述されていません。
スクリーンショット 2020-02-04 13.03.15.png

 SpherefaceCosfaceArcface の場合は、超球面上でマージンを持った識別境界が学習されるので、結果的にクラス内変動は小さく、クラス間距離は大きくなるように学習が進みます。ただし、特徴空間の全体的な分布を明示的に制約しているものはないため、特徴空間内で局所的な配置となり、バランスが取れていない可能性があります。
スクリーンショット 2020-02-04 13.08.08.png

 Uniform Lossは、球の表面上に電荷を配置した場合、それらが均一に分布した場合にポテンシャルエネルギーが最小化されるという事実がモチベーションとなっているので、クラスの中心を電荷とみなし、その電位エネルギーを表す関数をLossとして表現します。
スクリーンショット 2020-02-04 13.15.19.png

2つのクラス間にその距離の2乗に反比例する反発力Fを定義します。
スクリーンショット 2020-02-04 13.17.52.png

距離関数d は、クーロンの法則をそのまま踏襲しユークリッド距離を使用します。また、反発力Fが大きくなりすぎるのを防ぐために1を加えます。
スクリーンショット 2020-02-04 13.21.18.png

全てのクラス中心のペアワイズのエネルギーの平均値としてUniform Lossを定式化します。
スクリーンショット 2020-02-04 13.25.32.png

SpherefaceのLoss(Cosine Based Softmax Loss)関数の部分は以下の通りです。
スクリーンショット 2020-02-04 13.30.10.png

この2つのLossの和が最終的なLoss関数となります。
スクリーンショット 2020-02-04 13.31.25.png

最後に、クラスの中心の更新方法ですが、これはCenter Lossのそれと全く同じ方法で更新します。

ちなみに余談になりますが、3次元球面上にN個の点を置き、点間の球面距離の最小値が最大となるように配置した場合、その球面距離の長さはいくつになるか?という問題はTammes問題と呼ばれていて、現在でも完全な解答が見つかっていない数学上の未解決問題の一つだそうです。

P2SGrad

 SenseTime ResearchとThe Chinese University of Hong Kongの共同研究として、AdaCos6とP2SGrad7という2つの論文が2019年5月7日に同じAuthorから同時に発表されました。どちらの論文もCVPR2019で採択(AdaCosの方はOral採択)されています。提案されている手法もさることながら、Sphereface、Cosface、ArcfaceなどのCosine Based Softmax Lossの本質的な違いや、勾配の最適化のプロセスに関して言及している点が特に面白いと感じました。AdaCosに関しては既にこちらで説明されていたので、P2SGradの方を詳しくみていきたいと思います。

 さて、P2SGradですが、特筆すべきは、特定の損失関数を定式化せずに、モデルを最適化できる点だと思います。Metric Learningに関わらず、一般的なDeep Learningでは損失関数を定義し、損失関数が小さくなるように重みやバイアスを更新しながら学習していくというのが定石です。しかし、P2SGradでは、特徴空間の重みベクトルを更新するための最適な勾配方向と大きさを直接的に求め、それをBackpropagationしてパラメータの最適化を進めていきます。さらに、損失関数を定義しなくてよいということは、ArcFaceやCosFaceの損失関数にあったmsといったハイパーパラメータを調整する必要もありません。

Cosine Based Softmax Loss の Backpropagation

まずは、角度マージンのない Cosine Based Softmax Lossに関する勾配を確認しておきます。
次の fi,jは 特徴量xiのクラスj に関する logits になります。

(1)fi,j=sxi,Wjxi2Wj2=sxi^,Wj^=scosθi,j

xi^Wj^はそれぞれxiWjの正規化されたベクトルを表します。

クラス数がCの場合、i 番目の特徴量がクラス jである確率Pi,jは、Softmax関数で下記のように書けます。

(2)Pi,j=Softmax(fi,j)=efi,jk=1Cefi,k

正解クラスがyiの場合のCross Entropy Lossは次のようになります。

(3)LCE(xi)=logPi,yi=logefi,yik=1Cefi,k

この LCE(xi) に対し、xiWj の勾配を求めます。

(4)LCE(xi)xi=j=1C(Pi,j1(yi=j))f(cosθi,j)cosθi,jxi
(5)LCE(xi)Wj=(Pi,j1(yi=j))f(cosθi,j)cosθi,jWj

関数 1(yi=j) は、j=yiのとき1で、それ以外は0になります。
さらに cosθi,jxicosθi,jWj を計算すると、それぞれ以下のようなベクトル値になります。

(6)cosθi,jxi=1xi2(Wj^cosθi,jxi^)
(7)cosθi,jWj=1Wj2(xi^cosθi,jWj^)

次に、f(cosθi,j)の部分を計算します。fは logits 部分を表す関数なので、角度マージンを持たないf(cosθi,j)scosθi,jです。したがって f(cosθi,j)=s となります。
Cosfaceの場合はf(cosθi,yi)=s(cosθi,yim)なのでf(cosθi,yi)=sとなり、Arcfaceの場合はf(cosθi,yi)=scos(θi,yi+m)なので、f(cosθi,yi)=ssin(θi,yi+m)sinθi,yiとなります。

いずれにしても、f(cosθi,j)はパラメータsmcosθi,yiによって決まるスカラー値になります。また、普通はs>1の値を使うので、上記は全てf(cosθi,j)>1となります。

それでは改めて、LCE(xi)Wjjによって場合分けして整理してみましょう。

jyiの場合

(8)LCE(xi)Wj=Pi,jf(cosθi,j)cosθi,jWj=Tcosθi,jWj

j=yiの場合

(9)LCE(xi)Wj=(Pi,j1)f(cosθi,j)cosθi,jWj=Ucosθi,jWj

Pi,jはSoftmaxの値なので、取り得る値の範囲は Pi,j[0,1] です。つまり、上式のTおよびUはそれぞれT>0U<0 の範囲をとるスカラー値ということになります。

Backpropagationによって重みベクトルWjは、下記のように最適化されていきます。

(10)WjWjηLCEWj

これらの事実にもとづいてまとめると、以下の事がわかります。

  • 正解クラスの重みパラメータWyiは、BackpropagationによってWyiに垂直なcosθi,jWj の方向に更新されていく。そしてその勾配ベクトルの長さは(Pi,j1(yi=j))f(cosθi,j)である。

  • 正解じゃないクラスの重みパラメータWjは、BackpropagationによってWjに垂直な cosθi,jWjの方向に更新されていく。そしてその勾配ベクトルの長さは(Pi,j1(yi=j))f(cosθi,j)である。

  • cosθi,jWjは、Wjに対して垂直方向なので、これは最速かつ最適でとても合理的な更新である。

  • Cosine Based Softmax Lossは、CosFaceやArcFaceなどいろいろあるが、更新する勾配方向は全て同じである。これらの本質的な違いは勾配の長さ部分であり、この部分がモデルの最適化に大きく影響している。

スクリーンショット 2020-02-05 8.19.29.png

勾配の長さ

 これまでみてきたように、勾配の長さは (Pi,j1(yi=j))f(cosθi,j)なので、Pi,jの値が勾配の長さに大きく影響します。さらに、Pi,jは logits fi,jと正の相関があります。そして、logits fi,jはハイパーパラメータsmの影響を強く受けます。

 ArcFaceの例をみていきます。fi,yiscos(θi,yi+m)です。ハイパーパラメータsmが異なると同じθi,yiの場合でも、Pi,yiの値が大きく変わる事がわかります。

スクリーンショット 2020-02-05 10.30.36.png

 ここであらためて考えるべきは、ArcFaceの本来の目的です。ArcFaceはクラス分類をしたいのではなく、抽出された2つのベクトルx1x2のなす角θが近いか否かを知りたいのです。つまり、本来的にはθi,yiの大きさこそが、Backpropagationにおいて重要な勾配の長さ(つまりは、Pi,j)に影響しなければならないのに、ハイパーパラメータsmが強く関与してしまっています。
 さらに、もうひとつ。Pi,yiの値はクラス数Cによっても変化します。クラス数Cの増加とともに、不正解のクラスPi,j に割り当てられる確率は、多かれ少なかれ小さくなっていくことが予想されます。これはClosedなクラス分類問題においては合理的です。ただし、これはOpen-Setの問題である顔認識には適していません。

 勾配の長さに影響を与える値として f(cosθi,j) もあります。これはCosine Based Softmax Lossの種類によって異なります。

角度マージンを持たないCosine Based Softmax Lossの場合、

(11)f(cosθi,j)=s

Cosfaceの場合、

(12)f(cosθi,j)=s

Arcfaceの場合、

(13)f(cosθi,j)=ssin(θi,j+m)sinθi,j

となります。

つまり、角度マージンを持たないCosine Based Softmax Loss、および Cosfaceにおいては、f(cosθi,j)で勾配の長さに与える影響は、常に一定sである事を示しています。しかし、Arcfaceでは、勾配の長さとθi,jは負の相関関係にあり、これは完全に予想に反しています。θi,yiが徐々に減少すると、一般的には Pi,yiの勾配を短縮する傾向がありますが、Arcfaceでは長さを伸ばす傾向があります。したがって、Arcfaceでは f(cosθi,j)が勾配の長さに与える幾何学的な意味は説明されなくなります。

スクリーンショット 2020-02-05 11.59.19.png

勾配の長さを決定するP2SGradの提案

 ここからがようやく本題で、ハイパーパラメーター、クラス数、logitsのいずれにも依存せず、θi,jのみによって勾配の長さを決定する新しい方法P2SGradを説明します。P2SGradは特定の損失関数を定義せずに、直接勾配を求めるため、式(4)(5)を見直していきます。
 まず、勾配方向はこれまで説明してきた通り、最も最適な方向なのでここを変更する必要はありません。次に、勾配の長さ部分であるPi,jf(cosθi,j)を考えます。f(cosθi,j)に関しては、そもそもハイパーパラメータを除外したいという目的で見直しているので、ここは1にしてしまいます。

 次に、Pi,jですが Pi,jの代わりにcosθi,jを使う事を考えます。理由は以下の3つです。

  • Pi,jcosθi,jは値の理論範囲[0,1]が同じである。ただし、θi,j[0,π/2]とする。
  • Pi,jとは異なり、cosθi,jはハイパーパラメーターやクラス数Cのいずれからも影響を受けることはない。
  • 推論時はcosθによる類似度を元に顔認識を行う。Pi,jはClosedなクラス分類タスクにのみ適用される確率に過ぎない。

これらを考慮し、新しいP2SGradを定式化します。式(4)(5)はそれぞれ式(14)と式(15)に置き換えられます。

(14)G~P2SGrad(xi)=j=1C(cosθi,j1(yi=j))cosθi,jxi
(15)G~P2SGrad(Wj)=(cosθi,j1(yi=j))cosθi,jWj

このP2SGradは簡潔ではあるがとても合理的です。yi=jの場合は勾配の長さとθi,jは正の相関となり、jyiの場合は、負の相関が成り立ちます。

 最後に学習のやり方を説明します。一般的な学習はfoward処理により式(3)のCross Entropy Lossを求め、その後、backpropagationにより最終層から式(4)と式(5)を逆伝播し、各層の重みやバイアスパラメータの勾配を順に求めて行きます。P2SGradを使った学習では、foward処理によって得た特徴量xiから直接 式(14)と式(15)を求めます。後は通常の学習と同じ手順でそれを逆伝播し、各層の重みやバイアスパラメータの勾配を順に求めていきます。

実験

 詳しい実験結果はオリジナル論文を見てもらうとして、参考までにLWFのデータセットで実験した結果を載せておきます。CNN部分はResNet-50を使い、学習のイテレーションとθi,yiの平均値の関係を示した図です。
スクリーンショット 2020-02-05 16.13.14.png
P2SGradによる学習はその他のCosine Based Softmax Lossよりも θi,yiの減少が早い事がわかります。


  1. Y. Wen, K Zhang, Z Li, and Y. Qiao. “A Discriminative Feature Learning Approach for Deep Face Recognition." In ECCV, 2016. 

  2. W. Liu, Y. Wen, Z. Yu, M. Li, B. Raj, and L. Song. “Sphereface: Deep hypersphere embedding for face recognition.” In CVPR, 2017. 

  3. H. Wang, Y. Wang, Z. Zhou, X. Ji, D. Gong, J. Zhou, Z. Li, and W. Liu, "CosFace: Large Margin Cosine Loss for Deep Face Recognition," in Proc. of CVPR, 2018. 

  4. J. Deng, J. Guo, N. Xue, and S. Zafeiriou. "ArcFace: Additive Angular Margin Loss for Deep Face Recognition," In CVPR, 2019. 

  5. Y. Duan, J. Lu, and J. Zhou. "Uniformface: Learning Deep Equidistributed Representation for Face Recognition." in CVPR, 2019. 

  6. X. Zhang, R. Zhao, Y. Qiao, X. Wang, and H. Li. "AdaCos: Adaptively Scaling Cosine Logits for Effectively Learning Deep Face Representations." in CVPR, 2019. 

  7. X. Zhang, R. Zhao, J. Yan, M. Gao, Y. Qiao, X. Wang, and H. Li. "P2SGrad: Refined Gradients for Optimizing Deep Face Models." in CVPR, 2019. 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
ユーザーは見つかりませんでした