# multiclass focal loss Cクラスあったときの i番目のクラスのsoftmaxの変換 $$ y_i=softmax(x_i)=\frac{e^{x_i}}{\sum_k^C e^{x_k}} $$ $$ FocalLoss=f(y_i)=-t_i(1-y_i)^\gamma \log y_i $$ $t_i=0\ or\ 1$となる loss としては全てのクラスについて足し上げる(平均でも良いが)ため $$ L=\sum_k^C f(y_k) $$ となる。 ## 1階微分 各変数$x_i$についての微分は $$ \frac{dL}{dx_i}=\frac{d}{dx_i}\sum_k^C f(y_k)=\left(\frac{df(y_1)}{dx_i}+\frac{df(y_2)}{dx_i}+\cdot\cdot\cdot+\frac{df(y_C)}{dx_i}\right) $$ $$ =\left(\frac{df(y_1)}{dy_1}\frac{dy_1}{dx_i}+\frac{df(y_2)}{dy_2}\frac{dy_2}{dx_i}+\cdot\cdot\cdot+\frac{df(y_C)}{dy_C}\frac{dy_C}{dx_i}\right)=\sum_k^C\frac{df(y_k)}{dy_k}\frac{dy_k}{dx_i} $$ 各項の微分を計算すると $$ \frac{df(y_k)}{dy_k}=t_k\gamma(1-y_k)^{\gamma-1}\log y_k-\frac{t_k(1-y_k)^{\gamma}}{y_k} $$ $$ \frac{dy_k}{dx_i}=\left\{ \begin{array}{ll} y_k(1-y_k) & k=i \\ -y_iy_k & k\neq i \end{array} \right. $$ ちなみに今回正解ラベルは$K$のみで$t_K=1$とし、それ以外は0となる。つまり $$ \frac{dL}{dx_i}=\sum_k^C\frac{df(y_k)}{dy_k}\frac{dy_k}{dx_i}=\frac{df(y_K)}{dy_K}\frac{dy_K}{dx_i} $$ $t_K=1$とすると $i=K$のとき(つまり$x_i$が正解ラベル列のとき) $$ \frac{dL}{dx_K}=\left(\gamma(1-y_K)^{\gamma-1}\log y_K-\frac{(1-y_K)^{\gamma}}{y_K}\right)(y_K(1-y_K)) $$ $i=j\neq K$のとき(つまり$x_i$が不正解ラベル列のとき) $$ \frac{dL}{dx_j}=\left(\gamma(1-y_K)^{\gamma-1}\log y_K-\frac{(1-y_K)^{\gamma}}{y_K}\right)(y_K(-y_j)) $$ ## 2階微分 同様に計算して $$ \frac{d^2L}{dx_i^2}=\frac{d}{dx_i}\left(\sum_k^C\frac{df(y_k)}{dy_k}\frac{dy_k}{dx_i}\right)=\sum_k^C\left(\frac{df(y_k)}{dy_k}\frac{d^2y_k}{dx_i^2}+\frac{dy_k}{dx_i}(\frac{d}{dx_i}\frac{df(y_k)}{dy_k})\right) $$ 各項の計算は $$ \frac{d^2y_k}{dx_i^2}=\left\{ \begin{array}{ll} \frac{d}{dx_i}(y_k(1-y_k))=\frac{dy_k}{dx_i}-\frac{dy_k^2}{dy_k}\frac{dy_k}{dx_i}=y_k(1-y_k)-2y_k^2(1-y_k) & k=i \\ \frac{d}{dx_i}(-y_iy_k)=-y_k\frac{dy_i}{dx_i}-y_i\frac{dy_k}{dx_i}=-y_ky_i(1-y_i)+y_i^2y_k & k\neq i \end{array} \right. $$ $$ =\left\{ \begin{array}{ll} y_k(1-2y_k)(1-y_k) & k=i \\ y_k(1-2y_i)(-y_i) & k\neq i \end{array} \right. $$ $$ \frac{d}{dx_i}\frac{df(y_k)}{dy_k}=t_k\gamma(1-y_k)^{\gamma-1}\frac{d}{dx_i}\log y_k+t_k\gamma\log y_k\frac{d}{dx_i}(1-y_k)^{\gamma-1}\\-t_k(1-y_k)^{\gamma}\frac{d}{dx_i}\frac{1}{y_k}-\frac{t_k}{y_k}\frac{d}{dx_i}(1-y_k)^{\gamma} $$ $$ =\frac{t_k\gamma(1-y_k)^{\gamma-1}}{y_k}\frac{dy_k}{dx_i}-t_k\gamma(\gamma-1)\log y_k (1-y_k)^{\gamma-2}\frac{dy_k}{dx_i}\\ +t_k(1-y_k)^{\gamma}y_k^{-2}\frac{dy_k}{dx_i}+\frac{t_k\gamma(1-y_k)^{\gamma-1}}{y_k}\frac{dy_k}{dx_i} $$ 同じように正解ラベルは$K$で$t_K=1$で、それ以外を0とするとlossの箇所は $$ \frac{d^2L}{dx_i^2}=\sum_k^C\left(\frac{df(y_k)}{dy_k}\frac{d^2y_k}{dx_i^2}+\frac{dy_k}{dx_i}(\frac{d}{dx_i}\frac{df(y_k)}{dy_k})\right)=\frac{df(y_K)}{dy_K}\frac{d^2y_K}{dx_i^2}+\frac{dy_K}{dx_i}(\frac{d}{dx_i}\frac{df(y_K)}{dy_K}) $$ となる。 よって、同じように$i=K$のときと$i=j\neq K$で分けて計算する