論文まとめ：AdaCos: Adaptively Scaling Cosine Logits for Effectively Learning Deep Face Representations

# はじめに
CVPR2019から以下の論文
[1] X. Zhang, et. al. AdaCos: Adaptively Scaling Cosine Logits for Effectively Learning Deep Face Representations. CVPR2019
のまとめ

arXiv:
https://arxiv.org/abs/1905.00292

既に以下のような日本語のまとめ記事
https://qiita.com/ninhydrin/items/797a308c864e9238c71e
があるので、ここでは数式を追いながら簡潔にまとめ。
数式の番号は論文の番号と一致。

# 概要
- コサイン系のlossは顔認証タスクで高精度を達成しているが、ハイパーパラメータを調整する必要がある
- そこで著者らは適応的なコサイン系lossを作成した
- このlossを用いることで精度が安定し、かつ多くのdatasetでSOTAを達成した

# 手法
## これまでのコサイン系loss

$f\_{i, j}$: i 番目の入力画像に対する j 番目クラスへのlogit
$C$: class数
$P\_{i, j}$: i 番目の入力画像に対する j 番目クラスの推定した確率
として、活性化関数がsoftmaxの場合、$P\_{i, j}$ は

```math
P_{i, j} = \frac{e^{f_{i, j}}}{\sum^C_{k=1} e^{f_{i,j}}} \tag{1}
```

これに対して交差エントロピーlossは

```math
\mathcal{L}_{\bf CE} = -\frac{1}{N} \sum^N_{i=1} \log P_{i, y_i} = -\frac{1}{N} \sum^N_{i=1} \log \frac{e^{f_{i, y_i}}}{\sum^C_{k=1} e^{f_{i, k}}} \tag{2}
```

logitはArcFace[2]の場合だと

```math
f_{i, j} = s \cdot \cos(\theta_{i,j} + \mathbb{1} \{ j = y_i \} \cdot m) \tag{3}
```

角度に対してマージンを加えている。 $\mathbb{1}$ は正解classの時のみ1となる関数。
ArcFaceに関しては拙著 https://qiita.com/masataka46/items/e069384c2622f3b722f9 など参照。

またCosFace[3]の場合だと

```math
f_{i, j} = s \cdot (\cos\theta_{i,j} - \mathbb{1} \{ j = y_i \} \cdot m) \tag{4}
```

今、(3)においてマージンを無視し、かつ $\theta_{i, j}: 1/2\pi \rightarrow 0$ と考えると

```math
f_{i,j} = s \cdot \cos \theta_{i,j}: 0  \rightarrow s
```

なので

```math
P_{i,j} =\frac{e^{f_{i, j}}}{\sum^C_{k=1} e^{f_{i,j}}}: \frac{e^0}{e^0+(C-1)\cdot e^s}  \rightarrow \frac{e^s}{e^s+(C-1)\cdot e^0}
```

となるため

```math
\frac{1}{1+(C-1)\cdot e^s} \leq P_{i,j} \leq \frac{e^s}{e^s+(C-1)} \tag{5}
```

ここで $s \rightarrow \infty$ を考えると、(5)の左辺は０に収束し、右辺は１に収束するので

```math
\lim_{s \rightarrow +\infty} \left( \frac{e^s}{e^s + \left( C-1 \right) } - \frac{1}{1+ \left( C-1 \right) \cdot e^s} \right) = 1 \tag{6}
```

ただし、C に比べて s をかなりでかくしないとダメ。

次に(1)式を

```math
P_{i, y_i} = \frac{e^{f_{i, y_i}}}{e^{f_{i, y_i}} + B_i} = \frac{e^{s \cdot \cos \theta_{i,y_i}}}{e^{s \cdot \cos \theta_{i,y_i}} + B_i} \tag{7}
```

とおく。つまり

```math
B_i = \sum_{k \neq y_i}  e^{f_i,k} = \sum_{k \neq y_i}  e^{s \cdot \cos \theta_{i,k}}
```

とする。この値を調べると、学習中はconstになっているようだ。下図 Figure1 の赤い線は正解クラスでないものに対する $\theta$ の値。

![スクリーンショット 2022-01-30 1.14.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/c0c7beeb-721b-8424-9a24-a62b76e43352.png)

$2/\pi$ あたりに張り付いている。

よっていったん

```math
B_s \approx \sum_{k \neq y_i}  e^{s \cdot \cos \left( \frac{\pi}{2} \right)} = \sum_{k \neq y_i}  e^{0} = C -1
```

とする。

下図の左は（５）式の右辺において C = 2,000にした場合の各 s の値における正解の特徴量に対する角度と推定確率との関係。

下図右は C = 20,000 にした場合。

![スクリーンショット 2022-01-30 1.14.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/71265ae1-eb58-076f-7e7c-fc85c251f254.png)

<font color="red">この図と計算結果が合わないのはなぜ？</font>

$s = 10$ の場合、角度が 0 となっても確率が 1.0 に達していないため、パラメータが更新されている。これは好ましくないだろう。一方、s の値が大きいと、角度が小さくなくても確率が 1.0に達しているためパラメータが更新されない。これも好ましくない。

次に、角度マージン m に関して調べる。(7)式に対して角度マージン m を追加し

```math
P_{i, y_i} = \frac{e^{f_{i, y_i}}}{e^{f_{i, y_i}} + B_i} = \frac{e^{s \cdot \cos (\theta_{i,y_i} + m)}}{e^{s \cdot \cos (\theta_{i,y_i} +m)} + B_i} \tag{8}
```

とする。$B\_i \approx C-1$, s = 30 として各 m における正解クラスの特徴量に対する角度と推定確率との関係は以下。

![スクリーンショット 2022-01-30 1.14.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/cd30d334-9198-70da-d2a1-a501f2c0d07a.png)

当然ながら、m を大きくすると正解クラスの特徴量と推定した特徴量との角度 $\theta\_{i, y\_i}$ がより小さくならないと確率は上がらない。

しかしいずれにしても確率が変化する角度のレンジが狭い。

（７）式を改めて

```math
P_{i, y_i} = \frac{e^{\tilde{s} \cdot \cos (\theta_{i, j})}}{\sum^C_{k=1} e^{\tilde{s} \cdot \cos \theta_{i, k}}}  \tag{9}
```

とする。$\tilde{s}$ は最適な s 。

## 提案手法 1

ここからの目標は確率 P の傾きが最大となるような角度 $\theta\_{i, k\_i}$ と s との関係を求めること。

正解クラスに対する確率 $P(i,y\_i)$ の傾きは

```math
\| \frac{\partial P_{i, y_i} (\theta)}{\partial \theta } \|
```

だが最大のところでは２回微分が０となる。

```math
\frac{\partial^{2} P_{i, y_i} (\theta_{0})}{\partial \theta_{0}^{2} } = 0 \tag{10}
```

この条件を満たすときの s と θとの関係を求める。しかしこの式を解いても超越方程式になるので、$P(\theta) = 1/2$ という前提を用いると

```math
s_0 = \frac{\log B_i}{\cos \theta_0} \tag{11}
```

が求まる。

例えば、π/2 から 0 に なだらかに変化するものを考えると、Fig2 の点線のように $\theta = 4/\pi$ の場合であろう。このとき s は

```math
\begin{eqnarray}
\tilde{s}_f = \frac{\log B_i}{\cos{\frac{\pi}{4}}} &=& \frac{\log \sum_{k \neq y_i} e^{s \cdot \cos \theta_{i, k}}}{\cos{\frac{\pi}{4}}} \tag{12} \\
&=& \sqrt{2} \cdot \log (C-1) 
\end{eqnarray}
```

である。

## 提案手法 2 Dynamically adaptive scale parameter

$B\_i$ や θ に対して（１１）式が常に成立するような s とすれば、終始勾配が取れ、うまくいくだろう。

よって以下ではこのような $B\_i$ と θ を求め、それに対する s を求める。

$B\_i$ は

```math
B^{(t)}_{avg} = \frac{1}{N} \sum_{i \in \mathcal{N}^{(t)}} B_i^{(t)} = \frac{1}{N} \sum_{i \in \mathcal{N}^{(t)}} \sum_{k \neq y_i} e^{\tilde{s}_d^{(t-1)} \cdot \cos \theta_{i, k}} \tag{13}
```

とし、t-1 イテレーション時の s を用いた $B_i$ の値の平均値とする。

ここで $\mathcal{N(t)}$ は t イテレーションにおけるミニバッチ。

また θ は t イテレーション時の正解クラス特徴量との角度の中央値とする。そうすると s は

```math
\tilde{s}_d^{(t)} = \frac{\log B_{avg}^{(t)}}{\cos \theta^{(t)}_{med}} \tag{14}
```

となる。

さらに初期値を（１２）式とし、また θ の値が $4/\pi$ を超えないよう設定する。

```math
\tilde{s}^{(t)}_d = \begin{cases}
\sqrt{2} \cdot \log (C-1) & t=0 \\
\frac{\log B^{(t)}_{avg}}{\cos \left( \min \left( \frac{\pi}{4}, \theta^{(t)}_{mod} \right) \right)} & t \geq 1 \tag{15}
\end{cases}
```

この $\tilde{s}^{(t)}\_d$ を用いて勾配は

```math
\frac{\partial \mathcal{L} (\vec{x_i})}{\partial \vec{x_i}} = \sum^C_{j=1} (P^{(t)}_{i,j} - \mathbb{1}(y_i=j) ) \cdot \tilde{s}^{(t)}_d \frac{\partial \cos \theta_{i,j}}{\partial \vec{x_i}} \\
\frac{\partial \mathcal{L} (\vec{W_j})}{\partial \vec{x_i}} = (P^{(t)}_{i,j} - \mathbb{1}(y_i=j)) \cdot \tilde{s}^{(t)}_d \frac{\partial \cos \theta_{i,j}}{\partial \vec{W_j}} \tag{16}
```

ここで $P^{(t)}\_{i,j}$ は

```math
P^{(t)}_{i,j} = \frac{e^{\tilde{s}^{(t)}_{d} \cdot \cos \theta_{i, j}}}{\sum^C_{k=1} e^{\tilde{s}^{(t)}_d \cdot \cos \theta_{i, k}}} \tag{17}
```



# reference

[2] Jiankang Deng, Jia Guo, and Stefanos Zafeiriou. Arcface: Additive angular margin loss for deep face recognition. arXiv preprint arXiv:1801.07698, 2018.
[3] Hao Wang, Yitong Wang, Zheng Zhou, Xing Ji, Zhifeng Li, Dihong Gong, Jingchao Zhou, and Wei Liu. Cosface: Large margin cosine loss for deep face recognition. arXiv preprint arXiv:1801.09414, 2018.