6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アルス・ウェアーAdvent Calendar 2018

Day 14

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

Last updated at Posted at 2018-12-13

はじめに

機械学習で,回帰や分類,SVMなどの予測値は,「XXX以上とそれ以下」や「YYYの範囲の中と外」というように比較的単純なもので,XOR回路のような判定をさせようとすると難しくなってくる.

人工ニューラルネットワーク

機械学習におけるニューラルネットワークと呼ばれるものは厳密には,人口ニューラルネットワーク(Artificial Neural Network: ANN)という.ANNは,複数の入力値に対して出力値を算出するモデルの一種で,脳細胞を模したニューロンモデルを用いて,層状に連結させたものを指す.この層の数が少ないものを単なるニューラルネットワーク(Shallow-layer Neural Network)と,多いものを深層ニューラルネットワーク(Deep-layer Neural Network: DNN)と名前を付け呼び分けていたりする.

ニューロンモデル

ニューロンモデル.png
上図では3つの入力値に対して1つの出力値を求めるニューロンモデルである.$x_0$はバイアス項となっていて,入力値は常に1となっている.
真ん中の円がそれに当たる.この時の計算方法は,

\begin{align}
z &= \sum_{i=0}^{3}\theta_ix_i \\
h_{\Theta}(x) &= g(z) \\
\end{align}

というようになる.$z$はニューロンに対する入力値の重みつき総和になっている.そして,出力値は活性化関数と呼ばれるものを通過させる.
今回の式でいうところの$g(\cdot)$である.活性化関数は,ReLU(Rectified Linear Unit)やSigmoid関数,tanh関数などを用いる.
演算量が多いDNNでは,収束速度の速いReLUを用いることが多い.また,DNNでは,1つの円をグラフ理論などでよく使われるノード(Node)と呼ぶ.

3層ANNモデル_Kクラス.png

この図は,3層構造のANNとなっている.
入力層と出力層の間にある層を隠れ層と呼び,外部から見えないような感じになる.
このモデルでは,出力値は3つになるため,分類モデルとなっている.

計算方法

3層ANNの計算についてみていくことにする.
隠れ層の1つ目の計算をしてみる.

\begin{align}
z_{1}^{(2)} &= \sum_{i=0}^{3}\theta_ix_i \\
a_{1}^{(2)} &= g(z_{1}^{(2)}) \\
\end{align}

この計算を$a_{2}{(2)}$と$a_{3}{(2)}$も同じようにできる.
これをベクトル化させて一気に計算してみる.まず,

\begin{align}
a^{(1)} &= \left(
\begin{matrix}
1\\
x_1\\
x_2\\
x_3\\
\end{matrix}
\right)\\
\\
\Theta^{(1)} &= \left(
\begin{matrix}
\theta_{01} & \theta_{11} & \theta_{21} & \theta_{31} \\
\theta_{02} & \theta_{12} & \theta_{22} & \theta_{32} \\
\theta_{03} & \theta_{13} & \theta_{23} & \theta_{33} \\
\end{matrix}\right)
\end{align}

と入力値のベクトル$a^{(1)}$とパラメータの行列$\Theta^{(1)}$を用意する.これらを使って,

\begin{align}
z^{(2)} &= \Theta^{(1)}a^{(1)} \\
a^{(2)} &= g(z^{(2)}) \\
\end{align}

というように整理することが出来る.ここでバイアス項を考慮させて,以下のように$a^{(2)}$を加工しておく.

a^{(2)} := \left(
\begin{matrix}
1 \\
a_1^{(2)} \\
a_2^{(2)} \\
a_3^{(2)} \\
\end{matrix}
\right)

そして,出力層の計算は以下のようになる.

\begin{align}
z^{(3)} &= \Theta^{(2)}a^{(2)} \\
a^{(3)} &= g(z^{(3)}) \\
h_{\Theta}(x) &= a^{(3)} \\
\end{align}

$h_{\Theta}(x)$は,3つのノードの出力値を集めたものなので,3次のベクトルとなってる.

学習方法

上記で,入力値$x$から出力値$h_{\Theta}(x)$を求めることが出来た.
これを次のように組み立てる.

\begin{align}
J(\Theta)=&-\frac{1}{m}\left[
\sum_{i=1}^m\sum_{k=1}^K y_k^{(i)} \log{h_{\theta}(x^{(i)})_k + (1-y_k^{(i)})\log(1-h_{\theta}(x^{(i)})_k)}
\right] \\
&+ \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}(\Theta_{ji}^{(l)})^2
\end{align}

この大きな式がANNにおけるコスト関数となる.$J(\Theta)$の値が最小値になるような$\Theta$を探すことになる.
ここで,$m$は学習データ数,$K$は出力値の次元数(例のモデルだと3),$L$は層数,$s_l$は$l$層のノード数となっている.第1項の$\sum$の内側にある式は,分類の際に使用するロジスティック回帰である.そして,第2項は正則化項で,過学習(Over-fitting)を抑制し,バランスの良いパラメータを手に入れる効果がある.
ANNでも,勾配降下法による最適化問題を解くことになるが,$\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)$を手に入れる必要がある.
この値を手に入れるのに,バックプロパゲーション法(Back Propagation Algorithm)を用いる.
ちなみに,上記で計算していたものを,その対としてForward Propagationと呼ぶこともある.

まとめ

今回は,ニューラルネットワークの計算方法についてまとめました.
通常の回帰モデルから一気に変数や添え字が増えるため,訳が分からないことがあります.
その時は,1つづつ砕いてゆっくりと進めていけば,問題ないでしょう.
Back Propagation Algorithmについては,別の機会に記事にしようと思います.

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?