機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

ソフトマックス関数の微分

多クラスの確率的生成モデルを考えたときに出てきたソフトマックス関数の微分を計算します。

ソフトマックス関数は


\displaystyle y_k = \frac{\exp(a_k)}{\sum_{j}\exp(a_j)} \tag{1}

でした。\displaystyle \frac{\partial y_k}{\partial a_j}を考えます。

k \ne jのとき、分数の微分公式より


\begin{eqnarray*}
\displaystyle \frac{\partial y_k}{\partial a_j} &=& \frac{0-\exp(a_k) \exp(a_j)}{ (\sum_{j} \exp(a_j))^{2} } \tag{2} \\
& =& -y_k y_j \tag{3}
\end{eqnarray*}

となります。k = jのときも同様に分数の微分公式より


\begin{eqnarray*}
\displaystyle \frac{\partial y_k}{\partial a_j} &=& \frac{\exp(a_k)\sum_{j} \exp(a_j)-\exp(a_k) \exp(a_j)}{ (\sum_{j} \exp(a_j))^{2} } \tag{4} \\
\displaystyle & =& y_k \left\{ \frac{\sum_{j} \exp(a_j) - \exp(a_j)}{\sum_{j} \exp(a_j)} \right\} \tag{5} \\
& = & y_k(1-y_j) \tag{6}
\end{eqnarray*}

となります。式(3)、(6)を単位行列の要素I_{kj}k=jのときに1、k \ne jのときに0)を用いてまとめて書けば、


\displaystyle \frac{\partial y_k}{\partial a_j} = y_k(I_{kj} - y_j)\tag{7}

となります。シグモイド関数の微分とよく似た形となりました。