LoginSignup
18
17

More than 5 years have passed since last update.

Coursera Machine Learning -Week4- のまとめ(ニューラルネットワークの表現)

Last updated at Posted at 2015-09-17

week4で学習すること

  • ニューラルネットワークのモデル化
  • ニューラルネットワークによる多クラス分類

ニューラルネットワーク

ニューラルネットワークとは?

脳を模倣しようとしたデータ構造とアルゴリズム。
ニューラルネットワークは脳のニューロンのネットワークをシミュレーションすることで発展した。
そこで、まずはニューロンについて説明を行う。

ニューロンのモデル化

ニューロンは、たくさんの入力を受け取り、なんらかの計算を行い、その出力を別のニューロンに送る計算ユニット。以下の図のようにモデル化できる。
neuron.png

ここでは、ニューロンをロジスティック回帰としてモデル化している。$h_\theta(x)$は以下のとおり。

h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}}

ここで$\theta$と$x$は以下のとおり。

\theta = \begin{pmatrix}
\theta_0\\
\theta_1\\
\theta_2\\
\theta_3
\end{pmatrix}
,
\hspace{10px}
x = \begin{pmatrix}
x_0\\
x_1\\
x_2\\
x_3
\end{pmatrix}

$x_0$はバイアス項で常に$x_0=1$。そのため$x_0$は図には書かないことがある。
また、$\theta$はパラメータベクトルで、重みと呼ばれることもある。ここで$\theta_0$はバイアス項にかかる重みを表す。

ニューラルネットワークのモデル化

ニューラルネットワークは、ニューロンがいくつか集まったグループのこと。以下の図のように表すことができる。

neural_network.png

記法の説明

a_i^{(j)} = j層のi番目のユニットの出力\\
\Theta^{(j)} = j層からj+1層への重みを表す行列

$j$層に$s_j$個のユニット、$j+1$層に$s_{j+1}$個のユニットがあるとき、$\Theta^{(j)}$の次元は$s_{j+1} \times (s_j+1)$となる。
これらを用いて、出力$h_\Theta(x)$は以下のように計算できる。

a_1^{(2)} = g(\Theta_{10}^{(1)}x_0 + \Theta_{11}^{(1)}x_1 + \Theta_{12}^{(1)}x_2 + \Theta_{13}^{(1)}x_3)\\
a_2^{(2)} = g(\Theta_{20}^{(1)}x_0 + \Theta_{21}^{(1)}x_1 + \Theta_{22}^{(1)}x_2 + \Theta_{23}^{(1)}x_3)\\
a_3^{(2)} = g(\Theta_{30}^{(1)}x_0 + \Theta_{31}^{(1)}x_1 + \Theta_{32}^{(1)}x_2 + \Theta_{33}^{(1)}x_3)\\
h_{\Theta}(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{(2)} + \Theta_{12}^{(2)}a_2^{(2)} + \Theta_{13}^{(2)}a_3^{(2)})

ここで$g$はロジスティック関数とする。

多クラス分類

以下の図のように、出力層のユニットを複数用意することで、多クラス分類も行える。

multi_classification.png

このとき出力を以下のようにベクトルの一要素だけ1になるようにする。

h_\Theta(x) \approx \begin{pmatrix}
1\\
0\\
0\\
0
\end{pmatrix}
,
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
1\\
0\\
0
\end{pmatrix}
,
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
0\\
1\\
0
\end{pmatrix}
,
\hspace{10px}
\hspace{10px}
h_\Theta(x) \approx \begin{pmatrix}
0\\
0\\
0\\
1
\end{pmatrix}

手書き数字認識のようなタスクを考えた時に、

h_\Theta(x) \approx \begin{pmatrix}
1\\
0\\
0\\
0
\end{pmatrix}

の場合は「数字の0」のように各ベクトルに対してラベルを割り当てることで、多クラス分類を行うことができる。

手書き数字分類

以下の図のような0~9までの手書き数字をロジスティック回帰とニューラルネットワークを用いて分類する場合を考える。
digits.png

今回、分類に使うニューラルネットワークは入力層、隠れ層、出力層それぞれ一つずつの3層から構成されている。
入力層には20px$\times$20pxの画像をベクトル化した400個の数値が入力される。バイアス項が存在するので、入力層のユニット数は401となる。出力層のユニット数は0〜9までの数字を認識するために10個ある。また、隠れ層のユニット数はバイアス項を含めて26個である。

ロジスティック回帰を用いた場合の精度は94.6%であったのに対し、ニューラルネットワークを用いた場合は97.5%であった。

ソースコード

演習のコードをPythonで書いたので、読みたい人はどうぞ。

参考資料

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17