機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

ニューラルネットワークの概要

ニューラルネットワークの概要

図.1


ちょっと下手くそな絵なんですけど、式(1)~(3)のような関係を上図のように表します。


\begin{eqnarray*}
y &=& h(a) \tag{1}\\
&=& h(\mathbf{w}^{T}\mathbf{x}) \tag{2} \\
&=& h(w_0 x_0 + \cdots + w_M x_M) \tag{3}
\end{eqnarray*}

入力がxで、それぞれに重みwがかかっています。そしてその和がaで、これは出力ユニット活性と呼ばれます。そして活性化関数と呼ばれる何らかの関数hを通って出力yとなっています。これを複数接続したモデルをニューラルネットワークと呼びます。また図中の1つの丸を素子と呼びます。で、このモデルに学習データを投入して回帰や識別の問題を解こうということですね。

線形回帰や線形識別もニューラルネットワークのモデルで表現できる

じつは線形回帰や線形識別もこのモデルを使って表すことができます。hを恒等関数(y=a)とし、\phi_M(x)=x^{M}の基底変換したものを入力とすれば図.1は線形回帰を最小二乗法で解くのモデル、つまりy = \mathbf{w}^{T}\mathbf{x}です。

また、活性化関数を


h(a) = \begin{cases}
    1 & (a \ge 0) \\
    -1 & (a \lt 0)
  \end{cases} \tag{4}

とすれば、パーセプトロンです。ロジスティック回帰も活性化関数hをシグモイド関数とすれば図.1のモデルとなります。

ニューラルネットワークは何がすごいのか

次に複数接続した図.2のモデルを考えます。

図.2

このモデルの出力y_kを数式で表せば、


\displaystyle y_k(\mathbf{x}, \mathbf{w}) = h_2\left( \sum_{j=0}^{L} w_{kj}^{(2)} h_1\left( \sum_{i=0}^{M} w^{(1)}_{ji} x_i \right)\right) \tag{5}

です。なお1層目の素子の数をL個とし、x_iから1層目のj番目の素子への重みをw_{ji}^{(1)}j番目の素子から2層目のk番目の素子への重みをw_{kj}^{(2)}としています。文章で書くとなんかわかりづらいですが、以下の図の青線の部分の重みを指しています。

図.3

1層目の出力\displaystyle h_1\left( \sum_{i=0}^{M} w^{(1)}_{ji} x_i \right)は、活性化関数h_{1}を非線形関数とすると、これは基底変換に相当すると考えることができます。例えば図.2の入力を2つ、出力を1つとし、h_{1}を非線形関数、h_{2}をシグモイド関数にすれば、入力を非線形変換したロジスティック回帰y=\sigma(\mathbf{w}^{T}\mathbf{\phi(\mathbf{x})}) と同じようなモデルとなります。1層目の活性化関数h_1が基底関数\phiに相当するということです。しかしよく見ればニューラルネットワークでは非線形関数h_{1}の中にパラメータw^{(1)}が入っていますので、訓練データによってこの出力も最適化することができます。つまり、これまではガウス基底など何らかの固定した変換を用いていたのに対し、ニューラルネットワークでは基底関数すらも学習の対象となっているということになります。

以上、今回は概要だけ。具体的なニューラルネットワークの学習アルゴリズムである誤差逆伝播法は以下です。

www.iwanttobeacat.com