2017/03/07
0:00

ニューラルネットワーク概論①




みなさんこんにちは。

人工知能ラボの助手です。

今週は、機械学習において様々な場面で使用される、
ニューラルネットワークの大まかな内容について、
2回に分けてお話していきたいと思います。

タイトルでは「ニューラルネットワーク概論」
としていますが、今回お話しする内容は、
概論の概論」といってもいいくらいざっくり
とした内容にしたいと思います。



ニューラルネットワークは、人間の脳の機能の
一部を数式によって再現したもので、多くの
技術への応用が期待されているモデルです。

ただ、言葉で説明してもなかなか分かりづらい
かと思いますので、この記事の冒頭に掲載
した画像を見てみてください。

複数ノード同士が相互に結合しあい、
ネットワーク を構成しています。
また、各ノードにはパーセプトロン概論
でもお話ししたように、活性化関数(f)
があり、ノードへの入力が
ある一定の条件を満たすと発火するような
仕組みになっています。

これらの構造が、人間の神経細胞同士の
つながりや相互作用の仕組みを、数式に
よって再現したものになっています。

また、ニューラルネットワークの中にも、
様々なモデルが存在しますが、今回お話し
する上記のものは、前回お話しした
パーセプトロンを組み合わせた、
最もシンプルで基本的なものです。

一番左側の入力層に説明変数のデータを、
一番右の出力層に正解データ(教師データ)を入力し、
勾配降下法により、学習を行っていきます。

また、出力層のノードが一つなので、
これは回帰型です。

今回は最後に、冒頭の画像にあるネットワークを
TensorFlowで実装したコードを掲載して終わりたいと思います。
(こんなに短く、シンプルに記述できてしまいます)

コード1
#coding:utf-8

import tensorflow as tf
import math

#隠れ層のノード数
node = 30
#学習回数
training = 3000
#学習率
ln_r = 0.001

train_x = "学習用データセット(説明変数)を入れる"
train_y = "学習用データセット(目的変数)を入れる"

#データ数と説明変数の種類を取得
n, column = train_x.shape

#入力データ
x = tf.placeholder("float",shape=[None,column])
y_ = tf.placeholder("float",shape=[None,1])

#入力層から中間層への重みとバイアス
w1 = tf.Variable(tf.truncated_normal([column,node],stddev=0.1))
b1 = tf.Variable(tf.constant(1.0,shape=[node]))

#中間層の計算
h1 = tf.nn.relu(tf.matmul(x,w1) + b1)

#中間層から出力層への重みとバイアス
w2 = tf.Variable(tf.truncated_normal([node,1],stddev=0.1))
b2 = tf.Variable(tf.constant(1.0,shape=[1]))

#出力層の計算
y = tf.nn.relu(tf.matmul(h1,w2) + b2)

#2乗誤差を計算
loss = tf.reduce_sum(tf.square(y - y_))

#学習ステップ
train_step = tf.train.AdagradOptimizer(ln_r).minimize(loss)

init = tf.initialize_all_variables()

#セッション作成と変数初期化
sess = tf.Session()
sess.run(init)

#学習
for i in xrange(training):
    sess.run(train_step, feed_dict={x:train_x, y_:train_y})
    
    #学習100回ごとにデータ1件当たりの誤差値を表示
    if (i+1) % 100 == 0:
        print(math.sqrt(sess.run(loss, feed_dict={x:train_x, y:train_y}) / n))

この基本的なモデルでも、色々なこと が試せそうですよね。
いずれこのブログでも、データセットを用意し、
ニューラルネットワークにより何らかを予測を
してみたいと 思っています。

お時間があれば、ご自身でもデータセットを用意して、
色々と試してみてくださいね。

次回は、今回紹介したもの以外の、
様々なニューラルネットワークについて、
それぞれ見ていきましょう。

それでは今回はここまでにしましょう。
みなさん、お疲れ様でした!