2016-02-14

Softmax 関数の Backpropagation

§ フォワード・パス (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]。

§ 参考文献

  1. Softmax classifier - CS231n Convolutional Neural Networks for Visual Recognition
    http://cs231n.github.io/linear-classify/#softmax
    Softmax 関数のフォワード・パスの計算について。
  2. linear algebra - Derivative of Softmax loss function - Mathematics Stack Exchange
    http://math.stackexchange.com/questions/945871/derivative-of-softmax-loss-function
    Softmax 関数の導関数について。
  3. Backpropagation, Intuitions - CS231n Convolutional Neural Networks for Visual Recognition
    http://cs231n.github.io/optimization-2/
    バックプロパゲーションについて。
  4. chainer.functions.activation.softmax — Chainer 1.6.1 documentation
    https://chainer.readthedocs.org/en/stable/_modules/chainer/functions/activation/softmax.html
    Python 言語での Softmax 関数の実装。