hypothesis function を Neural Network を使って表現する方法を考える。
hidden layer のノード $a_0^{(2)}, a_1^{(2)}, \cdots, a_n^{(2)}$ |
$\displaystyle \begin{eqnarray} a_i^{(j)} & = & \mbox{レイヤー} j \mbox{のユニット} i \mbox{の"activation"} \\ {\Theta}^{(j)} & = & \mbox{レイヤー} j \mbox{からレイヤー} (j+1) \mbox{へのfunction mappingを制御する重み行列} \\ \end{eqnarray} $ |
hiden layer が1層の場合は次のように表現できる。
hidden layer が1層の場合 |
$\displaystyle \begin{pmatrix} x_0 \\ x_1 \\ x_2 \\ x3 \end{pmatrix} \longrightarrow \begin{pmatrix} a_0^{(2)} \\ a_1^{(2)} \\ a_2^{(2)} \\ \end{pmatrix} \longrightarrow \boldsymbol{h}_{\theta}(\boldsymbol{x}) $ |
各 activation ノードの計算方法 |
$\displaystyle \begin{eqnarray} a_1^{(2)} & = & g( {\Theta}^{(1)}_{10} x_0 + {\Theta}^{(1)}_{21} x_1 + {\Theta}^{(1)}_{22} x_2 + {\Theta}^{(1)}_{33} x_3) \\ a_2^{(2)} & = & g( {\Theta}^{(1)}_{20} x_0 + {\Theta}^{(1)}_{21} x_1 + {\Theta}^{(1)}_{22} x_2 + {\Theta}^{(1)}_{33} x_3) \\ a_3^{(2)} & = & g( {\Theta}^{(1)}_{30} x_0 + {\Theta}^{(1)}_{31} x_1 + {\Theta}^{(1)}_{22} x_2 + {\Theta}^{(1)}_{33} x_3) \\ \boldsymbol{h}_{\Theta} (\boldsymbol{x}) & = & a_1^{(3)} = g( {\Theta}^{(2)}_{10} a^{(2)}_0 + {\Theta}^{(2)}_{21} a^{(2)}_1 + {\Theta}^{(2)}_{22} a^{(2)}_2 + {\Theta}^{(2)}_{33} a^{(2)}_3 \\ \end{eqnarray} $ |
${\Theta^{(1)}}$ は activation ノードを計算するための 3x4行列である。 ${\Theta^{(1)}}$ は 2 番目のレイヤーのノードの重みを計算するための n $\times$ 1 の行列で、すなわちベクトルである。
ネットワークが第 $J$ レイヤーに $s_j$ 個のユニットあり、第 $(j+1)$ レイヤーに $s_{j+1}$ 個のノードがあるならば、 ${\Theta}^{(j)}$ は $s_{j+1} \times (s_j + 1)$ 行列となる。
${\Theta}^{(j)}$ の列の次元が +1 されているのは、バイアス・ノード $x_0 ~ (=~1)$ と ${\Theta}^{(j)}_0$ によるものである。
$g()$関数の引数$z^{(j)}$ |
$\displaystyle
\begin{eqnarray}
a_1^{(2)} & = & g( z^{(2)}_1 ) \\
a_2^{(2)} & = & g( z^{(2)}_2 ) \\
a_3^{(2)} & = & g( z^{(2)}_3 ) \\
\end{eqnarray}
$
$\displaystyle \begin{eqnarray} z^{(2)}_1 & = &{\Theta}^{(1)}_{1,0} x_0 + {\Theta}^{(1)}_{2,1} x_1 + {\Theta}^{(1)}_{2,2} x_2 + {\Theta}^{(1)}_{3,3} x_3 \\ z^{(2)}_2 & = & {\Theta}^{(1)}_{2,0} x_0 + {\Theta}^{(1)}_{2,1} x_1 + {\Theta}^{(1)}_{2,2} x_2 + {\Theta}^{(1)}_{3,3} x_3 \\ z^{(2)}_3 & = & {\Theta}^{(1)}_{3,0} x_0 + {\Theta}^{(1)}_{3,1} x_1 + {\Theta}^{(1)}_{2,2} x_2 + {\Theta}^{(1)}_{3,3} x_3 \\ \end{eqnarray} $ $\displaystyle \boldsymbol{x} = \begin{pmatrix} x_0 \\ x_1 \\ \vdots \\ x_n \end{pmatrix} \quad\quad\quad\quad \boldsymbol{z}^{(j)} = \begin{pmatrix} z^{(j)}_1 \\ z^{(j)}_2 \\ \vdots \\ z^{(j)}_n \\ \end{pmatrix} $ |
$\boldsymbol{x} = \boldsymbol{a^{(1)}}$ とおくと、上記の式は次の式でまとめて表現できる。
$\boldsymbol{x} = \boldsymbol{a^{(1)}}$ とおいた場合 |
$\displaystyle \begin{eqnarray} \boldsymbol{z}^{(j)} & = & {\Theta}^{(j-1)} \boldsymbol{a}^{(j-1)} \end{eqnarray} $ |
$s_j \times (n+1)$ 次元の行列 ${\Theta}^{(j-1}$ と、$(n+1) \times 1$ 次元ベクタ $a^{(j-1)}$ の 乗算を計算すると、$ s_j \times 1$次元のベクトル $z^{(j)}$ が得られる。 $a^{(j)} = g(z^{(j)})$ を計算して、レイヤ $j$におけるアクティベーション・ノードのベクタを得ることができる。 ベクタ $z^{(j)}$ の各要素ごとに関数 $g$ が適用される。
すべてのレイヤー $j$ において $a^{(j)}$ を計算した後で、 バイアス要素 $a^{(j)}_0 ~ (=~1)$ を追加する。
最終的な hypothesis を計算するためには、 $z^{(j+1)} = {\Theta}^{(j)} a^{(j)}$ を計算する。
最終的な $z$ ベクタは、 最後のtheta行列 ${\Theta}^{(j)}$ は1列行列と、1行行列 $a^{(j)}$ を乗算して求めるため、 スカラー値となる。最終結果は次の式で得られる。
$h_{\Theta}(x) = a^{(j+1)} = g(z^{(j+1)})$[注意] レイヤ $j$ とレイヤ $j+1$ の間に行われるこの最後のステップでは、 かつてロジスティック関数を計算したのと同じことである。 ニューラルネットワークに中間層を追加することで、 より興味深い、より複雑な非線形hypothesesをエレガントに計算できる。
[自分へのメモ] ピクセル数は $100\times100 = 10^4$。 2次の項があるから $\frac{n \times (n-1)}{2}$ なので 約 $10^4 \times 10^4 / 2 = 5 \times 10^7$
[自分へのメモ] $\Theta^{(i)}$ は Layer $(i)$ と Layer $(i+1)$ の間の行列。 $\Theta^{(1)}$ の列数は bias を考えて $s_1 + 1 = 3$。 $\Theta^{(1)}$ の行数は $s_2 = 4$。したがって、$4\times3$行列。
[自分へのメモ] $\Theta^{(2)}$なので hidden layer を入力としてoutputを出力する行列である。 列数は hidden layer のunit数に bias を加えて $6$。 行数はoutputの10クラス分なので $10$。 したがって、要素数は $(5+1) \times 10 = 60$。