顔認証におけるマージンベースな損失関数

#概要
これまで、顔認証における様々な損失関数が提案された。最適化手法における損失関数としては現在、Softmax，Contrastive Loss，Triplet Loss，Center Loss，Norm Face，Large-Margin Loss，A-Softmax Lossなどの手法がある。近年の手法の遷移は下記となる。その中、2017以降の主流となっているのはマージンベースな手法である。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/8ccc5d7b-ef48-e213-a339-21f3d905afe7.jpeg)

#前提知識
* **softmax loss**

定義：**Softmax Loss = FC + Softmax + Cross-Entropy**
![softmax loss 1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/47aaab45-976d-51ae-31cd-bba4b34c8426.jpeg)

式：
![softmax loss.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/97ea918f-ba33-40c1-656b-ddde2dbf4866.jpeg)

「Large-Margin Softmax Loss for Convolutional Neural Networks」は初めて、softmax lossをcross entropy、softmax関数、最後の全結合層の組み合わせとして定義した。それ以後の論文はこの式を利用して、様々な亜種を提案した。

#マージンベースな手法
下記、いくつかのロスを簡単に整理した。

* **Large-Margin Softmax(L-Softmax)**
論文：[Large-Margin Softmax Loss for Convolutional Neural Networks](https://arxiv.org/abs/1612.02295)
定義：
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/69eb2e70-795d-1fc4-405f-ceeee0e22eb6.jpeg)
ここでは、
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/a2430e7c-ad2e-1cb0-e193-c8dfc3361587.jpeg)
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/cbd0b5ac-c74a-b63d-bd77-e250cdaef3e0.jpeg)
この図は、softmax loss（m=1）またはL-Softmax loss（m=2,3,4）で学習した特徴を可視化した結果である。クラス内のコンパクトさとクラス間の分離性を高める。直接マージンを求める訳ではなく、あるクラスに属するデータが分離平面上でできるだけ狭い角度に収まるようにする。

* **Sphereface(A-Softmax)**
論文：[SphereFace: Deep Hypersphere Embedding for Face Recognition](https://arxiv.org/abs/1704.08063)
定義：
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/733246fc-c410-e6ad-6ba5-39f9e362ded8.jpeg)
ここでは、
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/1c7e7317-8e68-0a8f-5b94-7b120914afdd.jpeg)
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/aa0eb800-3062-5e24-b838-5fd0cde7adf4.jpeg)

これはL-softmaxで出てくる重み$W$を正規化する。$m=1$のとき、A-Softmax lossはmodified softmax lossになる。

* **Additive Margin Softmax(AM-Softmax)**
論文：[Additive Margin Softmax for Face Verification](https://arxiv.org/abs/1801.05599)
定義：
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/9d86f009-ed99-c6f0-dc44-b12df919f3ac.jpeg)
SphereFaceをベースにして、マージンの取り方は掛け算から足し算へ変更して、重み$W$と特徴ベクトルの両方を正規化し、スケーリング係数$s=30$を設定することによって、トレーニングが容易にできるようになった。

* **CosFace(Large Margin Cosine Loss)**
論文：[CosFace: Large Margin Cosine Loss for Deep Face Recognition](https://arxiv.org/abs/1801.09414)
定義：
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/6d7149bf-3bbf-f26f-2945-4f9eea9f2f70.jpeg)
ここでは、
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/e4ac8de0-2e06-14c3-4d88-ef8baee75819.jpeg)
AM-Softmaxと完全に同じで、重み$W$と特徴ベクトルを正規化している。

* **InsightFace(ArcFace)**
論文：[ArcFace: Additive Angular Margin Loss for Deep Face Recognition](https://arxiv.org/abs/1801.07698)
定義：
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/f7d13767-a899-0794-9c2b-1c325b253aca.jpeg)
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/f282e578-eb05-b086-56a0-2a20f08faf1b.jpeg)

特徴量を l2-normalize してそれと列ごとに l2-normalize した重み$W$を掛けて、それぞれの要素が $cosθ_i$ として表せる特徴量を作る。この要素数は最終的な予測クラス数と同じになっていて、GroundTruth のラベルに対応する要素には $cos(θ + m)$ とマージンを入れることでクラス間をより分離するようにして、この特徴量を softmax につなぐということをする。

#まとめ
Softmax、SphereFace、CosFace、ArcFaceが違いを比較する。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/4a4ece76-04af-8a28-636d-004f35ddec9e.png)
ここで、m1 が SphereFace で m2 が ArcFace で m3 が CosFace の寄与となっている。

マージンがどのように取られるかは手法によって振る舞いが異なり、ArcFace は角度そのものにマージンを加えているので、下図のように線形にマージンが確保されている。
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416370/e45c10fd-bb25-66b8-50ff-00dd4d17f407.jpeg)


#参考
[1] [Deep Face Recognition: A Survey](https://arxiv.org/abs/1804.06655)