いものやま。

雑多な知識の寄せ集め

ニューラルネットワークについて学んでみた。(その1)

ゲームのAIを強くするために、強化学習関数近似で、深層学習(Deep Learning)を使えるようになりたいと思ってる。
なので、深層学習について、以下の本で勉強中。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

とりあえず、まずは基本となるニューラルネットワークについて学んでみた。

なお、強化学習については、以下の記事を参照。

ニューラルネットワークの構成

ユニットの出力

ニューラルネットワークでは、ユニット(あるいはニューロン)と呼ばれる部品を互いに接続することで、ネットワークを構成する。

各ユニットは、入力  \boldsymbol{x} \in \mathbb{R}^{I} Iは入力の次元)を受け取り、出力  y \in \mathbb{R} を返す。

f:id:yamaimo0625:20160203132149p:plain

各ユニットには、バイアス  b \in \mathbb{R}と、入力に対する重み  \boldsymbol{w} \in \mathbb{R}^{I} 、そして活性化関数  f : \mathbb{R} \rightarrow \mathbb{R} があり、次のように出力を得る。(活性化関数については明日)

 {\displaystyle
y = f ( \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x} + b )
}

図にすると、以下のとおり。

f:id:yamaimo0625:20160203132955p:plain

多層ネットワーク

ニューラルネットワークのユニットの結合には、いろんな方法が考えられる。
よく使われるのは、ユニットのいくつかを1つの層にまとめて、複数の層を順番に並べ、一つ前の層の出力を次の層の入力にする構成。
一番最初の層を入力層、一番最後の層を出力層、途中の層を中間層(もしくは隠れ層)と呼び、 l層目  (l = 1, 2, \cdots , L) のユニットの数を  J_l 、出力を  \boldsymbol{z}^{(l)} \in \mathbb{R}^{J_l} で表すことにすると、次のようになる。

f:id:yamaimo0625:20160203143527p:plain

そして、入力層の出力  \boldsymbol{z}^{(1)} \in \mathbb{R}^{J_1}ニューラルネットワークそのものに対する入力  \boldsymbol{x} \in \mathbb{R}^{J_1} として、出力層の出力  \boldsymbol{z}^{(L)} \in \mathbb{R}^{J_L}ニューラルネットワークそのものによる出力  \boldsymbol{y} \in \mathbb{R}^{J_L} とする。

f:id:yamaimo0625:20160203143537p:plain

また、 l層目  (l = 2, \cdots, L) j 番目のユニット  (j = 1, 2, \cdots, J_l) の重みを  \boldsymbol{w}_j^{(l)} \in \mathbb{R}^{J_{l-1}}、バイアスを  b_j^{(l)} \in \mathbb{R}、活性化関数を  f^{(l)} : \mathbb{R} \rightarrow \mathbb{R} とすると、各層の出力  \boldsymbol{z}^{(l)} \in \mathbb{R}^{J_l} は、次のようになる:

 {\displaystyle
z_j^{(l)} = f^{(l)} \left( \boldsymbol{w}_j^{(l)} {}^{\mathrm{T}} \boldsymbol{z}^{(l - 1)} + b_j^{(l)} \right) \qquad (j = 1, 2, \cdots , J_l)
}

図にすると、次のような感じ。

f:id:yamaimo0625:20160203151414p:plain

今日はここまで!

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)