らんだむな記憶

blogというものを体験してみようか!的なー

ニューラルネットワーク (3)

次に、多層ニューラルネットワークでの多値分類を考える。

ネットワークの層の数を$L$として出力層のユニット数を$K$とする。
第$j$層でのユニット数を$s_j$とする。特に$s_L = K$である。
第$j$層での重みを$\Theta^j$とする。
出力層の第$k$ユニットからの出力を$h_\Theta(\cdot)_k$とする。

二値分類における典型的なCost関数
\begin{equation}
\mathrm{Cost}(x,\ y) = -y \log(x) - (1 - y)\log(1 - x) \hspace{5em} (1)
\end{equation}
を基本として考える。
$y = 0$の場合$x \fallingdotseq 0$で、$y = 1$の場合$x \fallingdotseq 1$でCost関数は小さくなり、$y = 0$の場合$x \fallingdotseq 1$で、$y = 1$の場合$x \fallingdotseq 0$でCost関数は無限大に発散するようにペナルティが課せられている。
これをもとにニューラルネットワークの損失関数(前のメモでコスト関数と書いてたけど、Cost関数と区別が難しいので名称を変えておく)を考える。
出力層の第$k$ユニットでのhypothesis関数を$h_\Theta(\cdot)_k$とし、Cost関数を通した第$k$ユニットでの損失として
\begin{equation}
\mathrm{Cost}(h_\Theta(x)_k,\ y_k) = -y_k \log(h_\Theta(x)_k) - (1 - y_k)\log(1 - h_\Theta(x)_k),\ 1 \le k \le K
\end{equation}
を考える。ネットワーク全体ではこれを出力層全体にわたって足し合わせた
\begin{equation}
\sum_{k = 1}^K \mathrm{Cost}(h_\Theta(x)_k,\ y_k) \hspace{5em} (2)
\end{equation}
を考えることになる。
訓練データを$(x^1, y^1), \cdots, (x^m, y^m)$とすると(ここで、各$(x^i, y^i) \in \mathbb{R}^{s_1} \times \{0,\ 1\}^K$に注意)、求める損失関数$J(\Theta) \in \mathbb{R}$は素朴には以下のものとなる:
\begin{equation}
J(\Theta) = \frac{1}{m} \sum_{i = 1}^m \sum_{k = 1}^K \mathrm{Cost}(h_\Theta(x^i)_k,\ y^i_k) \hspace{5em} (3)
\end{equation}
一応中身をインライン展開すると、
\begin{equation}
J(\Theta) = - \frac{1}{m} \sum_{i = 1}^m \sum_{k = 1}^K \left[ y_k^i \log(h_\Theta(x^i)_k) + (1 - y_k^i)\log(1 - h_\Theta(x^i)_k) \right]
\end{equation}
となる。まったくもって順調にカオスである。
このまま、gradient discentなどで最適化すると、場合によっては過適合(over-fitting)するかもしれないので塩をかけておく。
重みが無暗に大きくならないような制約をもうける正則化(regularization)として、
\begin{equation}
{}^{''}\ \frac{\lambda}{2 m}|\Theta|^2\ {}^{''} \hspace{5em} (4)
\end{equation}
を付け加える。Cost関数の本体が過適合で小さくなっても、その場合、$\Theta$が複雑怪奇になっていることから、正則化の項が大き目で残ってしまい、トータルの損失関数がいまいち小さくなりきれないというテクニックのようだ。なので、Cost関数の本体を小さくしつつ、正則化項を小さくする($\Theta$が小さ目の成分からなる)ような場合に最適化がなされるようにしているようだ。

さて、残念ながら、ここでは重みの中にバイアスへの重みも含んでいるのだが、バイアスの重みは抑制したくないというものらしく、それを取り除く必要がある。すると、regularizationの項は各層での重み行列の最初の列を除くことになる。
第$\ell$層での重み行列は$s_{\ell+1} \times s_\ell$になることに注意しよう。すると、
\begin{equation}
R(\Theta) = \frac{\lambda}{2 m} \sum_{\ell = 1}^{L - 1} \sum_{j = 1}^{s_{\ell}} \sum_{i = 1}^{s_{\ell+1}} (\theta_{ij}^{\ell})^2
\end{equation}
が、バイアスにかかりこむ$\Theta_{i0}^\ell$の寄与を除いてすべての層について重みを組み込んだregularizationの項になる。

すると、結局、本当に最適化すべき損失関数は以下ということになる:
\begin{equation}
J(\Theta) = \frac{1}{m} \sum_{i = 1}^m \sum_{k = 1}^K \mathrm{Cost}(h_\Theta(x^i)_k,\ y^i_k) + R(\Theta) \hspace{5em} (5)
\end{equation}
残念ながら、非数学の本ではインライン展開した姿などが好きのようで、インライン展開した醜悪な姿を書くと以下になる:
\begin{equation}
J(\Theta) = - \frac{1}{m} \sum_{i = 1}^m \sum_{k = 1}^K \left[ y_k^i \log(h_\Theta(x^i)_k) + (1 - y_k^i)\log(1 - h_\Theta(x^i)_k) \right] + \frac{\lambda}{2 m} \sum_{\ell = 1}^{L - 1} \sum_{j = 1}^{s_{\ell}} \sum_{i = 1}^{s_{\ell+1}} (\theta_{ij}^{\ell})^2
\end{equation}
なんと震え上がるような姿であろうか...。
まぁ、一応これを踏まえつつ、式(1)~(5)だけを眺めたら、全貌は素朴であることは分かる。

―――・・・

Cost関数は数学的な意味では集合$[0,\ 1]$上の距離函数にはなっていないのだが($x = y = \frac{1}{2}$で消えない)、まぁ、距離のような気持ちで手を滑らせてdistなんて書くと、
\begin{equation}
J(\Theta) = \frac{1}{m} \sum_{i = 1}^m \sum_{k = 1}^K \mathrm{dist}(h_\Theta(x^i)_k,\ y^i_k) + R(\Theta) \hspace{5em} (5')
\end{equation}
などとなってしまい、これって、ユークリッド距離のことだっけ?などと勘違いをすると、
\begin{equation}
J(\Theta) = \frac{1}{m} \sum_{i = 1}^m \sum_{k = 1}^K |h_\Theta(x^i)_k - y^i_k| + R(\Theta) \hspace{5em} (5'')
\end{equation}
となるのだが、更に、大小見るだけなら2乗でみたほうが楽だよねということで、
\begin{equation}
J(\Theta) = \frac{1}{2m} \sum_{i = 1}^m \sum_{k = 1}^K \left( h_\Theta(x^i)_k - y^i_k \right)^2 + R(\Theta) \hspace{5em} (5''')
\end{equation}
となってくる。そもそもhypothesis関数って多項式回帰じゃないっけ?とか意識を混濁させると、
\begin{equation}
J(\Theta) = \frac{1}{2m} \sum_{i = 1}^m \sum_{k = 1}^K \left( (\Theta_{\cdot} \cdot x^i)_k - y^i_k \right)^2 + R(\Theta) \hspace{5em} (5'''')
\end{equation}
という形までなってしまい、なんだか polynomial fitting における過適合抑制の式の仲間なんだなということになってしまう。