§ フォワード・パス (Forward pass)
Softmax 関数への入力が x のとき、出力 y は、 \[ y_j = \frac{\exp(x_j)}{\sum_k{\exp(x_k)}} \] である。また、exp 関数でのオーバーフローを回避するため、
\[ \frac{\exp(x_j)}{\sum_k{\exp(x_k)}} = \frac{C \exp(x_j)}{C \sum_k{\exp(x_k)}} = \frac{\exp(x_j + \log{C})}{\sum_k{\exp(x_k + \log{C})}} \] を利用して、 \[ \log{C} = -\max_j x_j \] と置き、計算する [1]。
§ 導関数 (Derivatives)
Softmax の導関数は、i = j のとき、 \[ \frac{\partial y_j}{\partial x_i} = y_i(1 - y_i) = y_i - y_i y_j \] i ≠ j のとき、 \[ \frac{\partial y_j}{\partial x_i} = -y_i y_j \] である [2]。
§ バックワード・パス (Backward pass)
y の誤差が δy のとき、x の誤差 δx は、\[ \delta x_i = \sum_k{ \delta y_k \frac{\partial y_k}{\partial x_i} } = \delta y_i y_i - y_i \sum_k{ \delta y_k y_k } \] である [3][4]。
§ 参考文献
-
Softmax classifier - CS231n Convolutional Neural Networks for Visual Recognition
http://cs231n.github.io/linear-classify/#softmax
Softmax 関数のフォワード・パスの計算について。 -
linear algebra - Derivative of Softmax loss function - Mathematics Stack Exchange
http://math.stackexchange.com/questions/945871/derivative-of-softmax-loss-function
Softmax 関数の導関数について。 -
Backpropagation, Intuitions - CS231n Convolutional Neural Networks for Visual Recognition
http://cs231n.github.io/optimization-2/
バックプロパゲーションについて。 -
chainer.functions.activation.softmax — Chainer 1.6.1 documentation
https://chainer.readthedocs.org/en/stable/_modules/chainer/functions/activation/softmax.html
Python 言語での Softmax 関数の実装。