じんべえざめのノート

仮想生物と強化学習と深層学習に興味がある大学院生のブログ。

ニューラルネットワーク入門➀

 \displaystyle

深層学習は、データから分類や予測に必要な特徴を発見する表現学習が可能な機械学習手法です。特に、画像などの高次元の複雑なデータに関しても表現学習が可能な点は、深層学習の大きな特徴の1つです。ニューラルネットワーク入門シリーズでは、深層学習で用いられるニューラルネットワークの基礎をまとめていきます。

このシリーズはニューラルネットワークの初学者の方を対象にしており、大学1~2年生程度の数学の知識があれば理解が出来る内容になっています。出来るだけ簡潔な説明にするために理論の詳細の部分についてはカバーしていませんが、このシリーズを読み終える頃には、ニューラルネットワークとはどのようなものか」「他の機械学習手法と比較してどのような特徴があるか」「どのように学習を行うのか」が分かるようになっており、説明もその順番で行われています。

ニューラルネットワークは、形式ニューロンを組み合わせることで作られています。そのため、今回は形式ニューロンについて説明します。

形式ニューロン

f:id:jinbeizame007:20180815232320p:plain:w500

形式ニューロンは、上図のイメージのような実際のニューロン(神経)の活動をモデル化したもので、1943年にW. マカロックとW. ピッツによって考案されました。形式ニューロンはn個の入力に対して1つの出力を行います。入力に対してニューロンの状態がある閾値を超えると1、超えないと0を出力します。また、この閾値を超えることを発火すると言います。これをモデル化すると次のようになります。

f:id:jinbeizame007:20180803203547p:plain:w500

上図は形式ニューロンの概要です。また、図中の〇はユニットやノードと呼ばれています。xは入力、yは出力、wは重み、bはバイアスです。

f:id:jinbeizame007:20180813103404p:plain

形式ニューロンはxを入力することで、yを出力します。その出力する値が重みwとバイアスbによって決まるため、これらをパラメータと呼びます。ユニットへの入力uは、入力xに重みwを掛けたものの和にバイアスを足した値となります。重みは入力との結合の強さを表していて、バイアスはニューロンの発火のしやすさを表しています。式で表すと以下のようになります。

\begin{align} u &= \displaystyle \sum_{i} x_iw_i + b \\ &= x_1w_1 + x_2w_2 + b \end{align}

ユニットの出力yは、ユニットへの入力uに活性化関数fを適用したものになります。一般に活性化関数には階段関数、シグモイド関数、正規化線形関数など様々な関数がありますが、形式ニューロンの場合は階段関数を用います。

\begin{align} y &= f(u) \\ &= f(\displaystyle \sum_{i} x_iw_i + b) \end{align}

形式ニューロンによる論理回路

ここからは実際に形式ニューロンを使っていきます。形式ニューロンを用いることで、ANDゲートやORゲートなどの論理回路を表現することが出来ます。活性化関数には、以下の階段関数を用います。

\begin{align} f(u) = \begin{cases} 1 \ (u > 0) \\ 0 \ (u \leq 0) \end{cases} \end{align}

f:id:jinbeizame007:20180806182434p:plain:w500

ANDゲートは重みとバイアスを以下のように設定することで実現できます。 \begin{align} \begin{cases} w_1 = 0.5 \\ w_2 = 0.5 \\ b = -0.7 \end{cases} \end{align}

\begin{align} u = 0.5x_1 + 0.5x_2 - 0.7 \end{align}

x_1 x_2 u y
0 0 -0.7 0
0 1 -0.2 0
1 0 -0.2 0
1 1 0.3 1

ORゲートは重みとバイアスを以下のように設定することで実現できます。 \begin{align} \begin{cases} w_1 = 0.5 \\ w_2 = 0.5 \\ b = -0.2 \end{cases} \end{align}

\begin{align} u = 0.5x_1 + 0.5x_2 - 0.2 \end{align}

x_1 x_2 u y
0 0 -0.2 0
0 1 0.3 1
1 0 0.3 1
1 1 0.8 1

このように、形式ニューロンを用いることでANDやORなどの論理回路を表現することが出来ます。

線形と非線形

ここまでは、形式ニューロンを用いて論理回路を表現してきました。この論理回路をグラフで表すと、それぞれ以下のようになります。

ANDは以下のような関数で表現されていました。

\begin{align} y = \begin{cases} 1 \ ( 0.5x_1 + 0.5x_2 -0.7 > 0) \\ 0 \ (0.5x_1 + 0.5x_2 - 0.7 \leq 0) \end{cases} \end{align}

変形すると、

\begin{align} y = \begin{cases} 1 \ ( x_2 > x_1 +1.4) \\ 0 \ (x_2 \leq x_1 + 1.4) \end{cases} \end{align}

f:id:jinbeizame007:20180804161204p:plain:w500

ORは以下のような関数で表現されていました。

\begin{align} y = \begin{cases} 1 \ ( 0.5x_1 + 0.5x_2 -0.2 > 0) \\ 0 \ (0.5x_1 + 0.5x_2 - 0.2 \leq 0) \end{cases} \end{align}

変形すると、

\begin{align} y = \begin{cases} 1 \ ( x_2 > x_1 +0.4) \\ 0 \ (x_2 \leq x_1 + 0.4) \end{cases} \end{align}

f:id:jinbeizame007:20180804161505p:plain:w500

このように、ANDやORは1本の直線で分離することが出来ます。この、1本の直線で分離することを線形分離といいます(正確には、N次元空間上でN-1次元の超平面で分離すること)。形式ニューロンは、このような線形分離が出来るモデルを表現することが出来ます。

逆に、形式ニューロンは線形分離が出来ないモデルは表現できません。線形分離が出来ない論理回路の例にXORがあります。XORは片方のみ1の場合に1、それ以外が0となる論理回路です。表にすると以下のようになります。

x_1 x_2 y
0 0 0
0 1 1
1 0 1
1 1 0

ORからANDの場合を引いたようなものになっています。 グラフにするとこのようになります。

f:id:jinbeizame007:20180804180354p:plain:w500

このグラフの黒い点と青い点を一本の線で分けることは不可能です。このような線形分離が出来ないモデルは形式ニューロンでは表現出来ません。しかし、形式ニューロンを組み合わせてニューラルネットワークを用いることで以下のように分離することが出来ます。

f:id:jinbeizame007:20180804181626p:plain:w500

このように、複数の直線や曲線などで分離することを非線形分離といいます。次の記事では、このような非線形分離が可能なニューラルネットワークについて説明します。