Machine Learning

Stanford Univ, Coursera


Model Representation

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)}_k$ を導入する。
$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をエレガントに計算できる。


4-1 test

$100 \times 100$ ピクセルのグレースケール画像から車を認識する学習を考える。 ピクセルの輝度を特徴量とする。 $x_i x_j$ という2次項を含む logistic regression でtrainする場合、特徴量は全部で何個ある?

[自分へのメモ] ピクセル数は $100\times100 = 10^4$。 2次の項があるから $\frac{n \times (n-1)}{2}$ なので 約 $10^4 \times 10^4 / 2 = 5 \times 10^7$

4-3 test

図のニューラルネットワークを考える。 Layer 1 : $s_1 = 2$ ($x_1$, $x_2$)
Layer 2: $s_2 = 4$
Output: $s_3 = 1$
$\Theta^{(1)}$ は? (ヒント: bais unit を input unit と hidden unitに 加えよ。)

[自分へのメモ] $\Theta^{(i)}$ は Layer $(i)$ と Layer $(i+1)$ の間の行列。 $\Theta^{(1)}$ の列数は bias を考えて $s_1 + 1 = 3$。 $\Theta^{(1)}$ の行数は $s_2 = 4$。したがって、$4\times3$行列。

4-4 test

図のニューラルネットワークを考える。 Layer 1 : $s_1 = 3$,   ($x_1$, $x_2$, $x_3$)
Layer 2: $s_2 = 3$
Layer 3: $s_3 = 2$
Output: $s_4 = 1$
$a^{(i)} = x \in R^{n+1}$ がinput ($a_{0}^{(1)}=1$) を表すとする。 $a^{(2)}$ はどのように計算する?

4-5 test

$x_1$, $x_2$ は2値 (0 or 1) をとる。 下のネットワークは、どのような論理関数を計算するか? $h_{\theta}(x) = -10 + 20 x_1 + 20 x_2$

4-6 test

$x-1$, $x_2$ は2値 (0 or 1) をとる。 下のどのネットワークが、論理関数 (NOT $x_1$)AND (NOT $x_2$) を計算するか?

4-7 test

10クラスのmulti-class classification を考える。 3層のニューラルネットワークで、hidden layer は5unitある。 one-vs.-all メソッドを用いとして、$\Theta^{(2)}$ の要素数は?

[自分へのメモ] $\Theta^{(2)}$なので hidden layer を入力としてoutputを出力する行列である。 列数は hidden layer のunit数に bias を加えて $6$。 行数はoutputの10クラス分なので $10$。 したがって、要素数は $(5+1) \times 10 = 60$。


Yoshihisa Nitta

http://nw.tsuda.ac.jp/