畳み込みニューラルネットワークの勉強のまとめ その2

前回の二値分類に続き、今回は多クラス分類の学習について説明します。

多クラス分類

多クラス分類では、入力データが識別対象のうちのどれであるか(例えば数字画像の分類の場合、入力画像が数字の0から9の内のどれか)といった分類をします。ここではその学習を考えます。

ここで使用する訓練用データは、入力を\(n\)次元の\(\mathbf{x}=(x_1\ x_2\ \dots\ x_n)^\text{T}\)、教師ラベルを\(\mathbf{t}=(t_1\ t_2\ \dots\ t_K)^\text{T}\)とした時に、\(N\)個の組み合わせ\(\{\mathbf{x}_1, \mathbf{t}_1\}, \{\mathbf{x}_2, \mathbf{t}_2\}, \dots, \{\mathbf{x}_N, \mathbf{t}_N\}\)となります。ただしこの教師ラベル\(\mathbf{t}\)は、例えばクラス\(3\)のものであれば\(t_3\)のみ\(1\)(真)として他の\(t_k\)(\(k \ne 3\))はすべて\(0\)(偽)とします。クラス数が\(10\)個ある場合なら\(\mathbf{t}=(0\ 0\ 1\ 0\ 0\ 0\ 0\ 0\ 0\ 0)^\text{T}\)となります。

 

重みを\(\mathbf{w}=(w_1\ w_2\ \dots\ w_n)^\text{T}\)とし、入力と重みを掛け合わせたものとバイアス\(b\)の総和\(a\)を、各クラス\(k\)毎に

\[a_k = \mathbf{x}^\text{T} \mathbf{w}_k + b_k = \sum_{i=1}^n x_i w_{ik} + b_k \tag{1} \]

この\( (1)\)式に、ある活性化関数\(f(\cdot)\)を通して

\[y_k = f(a_k) \tag{2}\]

として、この出力\(y_k\)を「入力がクラス\(k\)である確率」として扱えるようにします。図にすると以下のようになります。

f:id:hshinji:20150505154301p:plain (バイアスは省略…)

前回の二値分類では活性化関数にSigmoid関数を使用していましたが、ここでは活性化関数の多クラス版として以下のSoftmax関数を使用します。

\[f(u_j) = \text{softmax}_j[u_1,u_2,\dots,u_K] = \frac{\exp(u_j)}{\sum_{l=1}^K \exp(u_l)} \tag{3}\]

\( (2)\)式とこの\( (3)\)式から、出力\(y_k\)の総和は

\[\sum_{k=1}^K y_k = 1 \tag{4}\]

が成り立ちます。

 

重み\(\mathbf{w}\)とバイアス\(b\)の学習については、前回の二値分類と同様に求めていきます。クラス毎の\(E(\mathbf{w}_k)\)は

\[ E(\mathbf{w}_k) = -\sum_{d=1}^N \{ t_{dk} \text{log}~y_{dk} + (1-t_{dk})\text{log} (1-y_{dk}) \} \tag{5} \]

となり、勾配降下法により

\[\mathbf{w}_k \leftarrow \mathbf{w}_k - \epsilon \frac{\partial E}{\partial \mathbf{w}_k} \tag{6}\]

バイアスについても同様に

\[b_k \leftarrow b_k - \epsilon \frac{\partial E}{\partial b_k} \tag{7}\]

として更新していきます。

 

活性化関数の微分は\( (2)\)式と\( (3)\)式より、

\[\begin{align} \frac{\partial y_k}{\partial a_k} &= \frac{\partial}{\partial a_k} \cdot \frac{\exp(a_k)}{\sum_{l=1}^K \exp(a_l)} \\ &= \frac{\exp(a_k)\sum_{l=1}^K \exp(a_l) - \exp(a_k)\exp(a_k)}{\{\sum_{l=1}^K \exp(a_l)\}^2} \\ &= \frac{\exp(a_k)}{\sum_{l=1}^K \exp(a_l)} \cdot \frac{\sum_{l=1}^K \exp(a_l) - \exp(a_k)}{\sum_{l=1}^K \exp(a_l)} \\ \\ &= y_k (1-y_k) \tag{8} \end{align}\]

となってSigmoid関数の微分と同じ形になります。

よって\(\frac{\partial E}{\partial \mathbf{w}_k}\)は\( (8)\)式と前回の\( (23)\)式から

\[\frac{\partial E}{\partial \mathbf{w}_k} = \sum_{d=1}^N (y_{dk} - t_{dk}) \mathbf{x}_d \tag{9}\]

\(\frac{\partial E}{\partial b_k}\)は\( (8)\)式と前回の\( (24)\)式から

\[\frac{\partial E}{\partial b_k} = \sum_{d=1}^N (y_{dk} - t_{dk}) \tag{10}\]

となります。

 

確率的勾配降下法を用いてデータひとつ毎に重みとバイアスを更新する場合は、\( (9)\)式と\( (10)\)式はそれぞれ

\[\frac{\partial E_d}{\partial \mathbf{w}_k} = (y_{dk} - t_{dk}) \mathbf{x}_d \tag{11}\]

\[\frac{\partial E_d}{\partial b_k} = y_{dk} - t_{dk} \tag{12}\]

となり、更新式はそれぞれ

\[\mathbf{w}_k \leftarrow \mathbf{w}_k - \epsilon \frac{\partial E_d}{\partial \mathbf{w}_k} = \mathbf{w}_k - \epsilon (y_{dk} - t_{dk}) \mathbf{x}_d \tag{13}\]

\[b_k \leftarrow b_k - \epsilon \frac{\partial E_d}{\partial b_k} = b_k - \epsilon (y_{dk} - t_{dk}) \tag{14}\]

となります。

 

\(K\)個のクラス分類を \( K - 1 \) 個の出力で行う方法について

\( (3)\)式のSoftmax関数を使って\(K\)個のクラス分類をする場合、出力\(y_k\)は\(K\)個必要となります。この\(K\)個の\(y_k\)は\( (4)\)から

\[ y_1 + y_2 + \dots + y_{K - 1} + y_K = 1 \tag{15} \]

となっていますが、この内の一つ\(y_K\)は、

\[ y_K = 1 - ( y_1 + y_2 + \dots + y_{K - 1} ) \tag{16} \]

と変形することが出来ます。これは、\( K - 1 \) 個の結果が分かれば残りの一つを決めることができることを示しています。例えば\(0\)から\(9\)の手書き数字の識別を行う場合、\(y_1\)から\(y_9\)でそれぞれ\(1\)から\(9\)それぞれの文字の確率とした時に、この総和を\(1\)から引いた余りが\(0\)の文字の確率となります。

この\( (16)\)式の\(y_k\)をSoftmax関数に置き換えてみます。

\[\begin{align} \frac{\exp(a_K)}{\sum_{l=1}^K \exp(a_l)} &= 1 - \left( \frac{\exp(a_1)}{\sum_{l=1}^K \exp(a_l)} + \frac{\exp(a_2)}{\sum_{l=1}^K \exp(a_l)} + \dots + \frac{\exp(a_{K - 1})}{\sum_{l=1}^K \exp(a_l)} \right) \\ \\ &= 1 - \frac{\sum_{l=1}^{K - 1} \exp(a_l)}{\sum_{l=1}^K \exp(a_l)} \tag{17} \end{align} \]

そして両辺の分母で、総和から\(\exp(a_K)\)を分けておきます。

\[\frac{\exp(a_K)}{\sum_{l=1}^{K - 1} \exp(a_l) + \exp(a_K)} = 1 - \frac{\sum_{l=1}^{K - 1} \exp(a_l)}{\sum_{l=1}^{K - 1} \exp(a_l) + \exp(a_K)} \tag{18} \]

続いて両辺の分数の分子・分母をそれぞれ\(\exp(a_K)\)で割ってしまいます。

\[\frac{1}{\sum_{l=1}^{K - 1} \exp(a_l - a_K) + 1} = 1 - \frac{\sum_{l=1}^{K - 1} \exp(a_l - a_K)}{\sum_{l=1}^{K - 1} \exp(a_l - a_K) + 1} \tag{19} \]

ここで、\(a_l^' = a_l - a_K\)と置いて右辺の分子をばらすと、

\[\frac{1}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1} = 1- \left( \frac{\exp(a_1^')}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1} + \dots + \frac{\exp(a_{K - 1}^')}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1}\right) \tag{20} \]

この\( (20)\)式は\( (16)\)式と等価なので、以下が成り立ちます。

\[\begin{align} y_K &= \frac{1}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1} \tag{21} \\ \\ y_k &= \frac{\exp(a_k^')}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1} \qquad \text{ただし} \quad {k=1, 2, \dots , K - 1} \tag{22} \end{align} \]

また\(a_k^'\)は\( (1)\)式から

\[a_k^' = a_k - a_K = \mathbf{x}^\text{T} (\mathbf{w}_k - \mathbf{w}_K) + (b_k - b_K) = \mathbf{x}^\text{T} \mathbf{w}_k^' + b_k^' \tag{23} \]

となることから、Softmax関数の代わりに\( (22)\)式を使うことで、\(K - 1\)個の出力で\(K\)個のクラスの識別ができることになります*1。これは更新する重み\(w_{ik}\)の数が\(n\)個少なくなり、バイアス\(b_k\)は一つ減ります。

\( (22)\)式が特に\(K = 2\)の場合、

\[y_1 = \frac{\exp(a_1^')}{\exp(a_1^') + 1} = \frac{1}{1 + \exp(-a_1^')} \tag{24} \]

となってSigmoid関数と一致します。

\( (22)\)式の偏微分は、

\[\begin{align} \frac{\partial y_k}{\partial a_k^'} &= \frac{\partial}{\partial a_k^'} \cdot \frac{\exp(a_k^')}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1} \\ \\ &= \frac{\exp(a_k^') \left\{ \sum_{l=1}^{K - 1} \exp(a_l^') + 1 \right\} - \exp(a_k^')\exp(a_k^')}{\left\{\sum_{l=1}^{K - 1} \exp(a_l^') + 1\right\}^2} \\ \\ &= \frac{\exp(a_k^')}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1} \cdot \frac{\sum_{l=1}^{K - 1} \exp(a_l^') + 1 - \exp(a_k^')}{\sum_{l=1}^{K - 1} \exp(a_l^') + 1} \\ \\ &= y_k (1-y_k) \tag{25} \end{align}\]

となって\( (8)\)と同じものになります。なので確率的勾配降下法による更新式は\( (13)\)式や\( (14)\)式と同じものが使えることになります。

 

 

次回は、多層のネットワークとその学習について書く予定です。

*1:この\( (22)\)式って名前があるんでしょうか?だれか知ってる人、教えてくださいm(_ _)m