こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はニューラルネットワークという新語が出てきます。パーセプトロンとどう違うのか、また活性化関数とは何かを見てみましょう。
**********
さて、前回まで見てきたパーセプトロンから、ニューラルネットワークへと進化していくわけですが、その前にパーセプトロンをもう一度図示してみましょう。
バイアスが付いた版です。(味のある手描き風)
この時のyの中を数式で見てみましょう。
a = x1*w1 + x2*w2 + b
y = h(a)
aがない方がわかりやすいかもです。
y = h(x1*w1 + x2*w2 + b)
x1とx2から入力値が入り、それぞれの重みであるw1とw2を掛けて総和を取り、バイアスであるbを足す。
その値をh( )という関数で処理をする。
そんな感じの数式になっています。
要は計算した結果をh関数に入れるわけですが、この関数を通過させることで、情報を次のノードに伝えるかどうかを判断させてるわけですね。
するとこのh関数は何かってことですが、
ここで活性化関数と呼ばれるものが登場します。
ここでは代表的な活性化関数であるシグモイド関数を見てみましょう。
まず数式です。
h(x) = 1 / (1 + exp(-x))
上記のexpとはネイピア数のeのことで、2.7182…のアレです。
このシグモイド関数にxから値を入力すると、ある値が出力されます。
どんな値を返すのか、ちょっと見て見ましょう。
まず、このシグモイド関数をpythonで実装してみます。
1 2 |
def sigmoid(x): return 1 / (1 + np.exp(-x)) |
pythonのインタプリタで実際に動かしてみましょう。
1 2 3 4 5 6 7 8 |
>>> import numpy as np >>> def sigmoid(x): ... return 1 / (1 + np.exp(-x)) ... >>> >>> x = np.array([-2.0, -1.0 ,1.0, 2.0]) >>> sigmoid(x) array([ 0.11920292, 0.26894142, 0.73105858, 0.88079708]) |
上記のように、ある値を入れると1以下の小数点で返してくれます。
配列で入れれば、配列で返してくれる優れものです。
続いてグラフに表してみましょう。
1 2 3 4 5 6 |
>>> from matplotlib import pyplot >>> x = np.arange(-5.0 ,5.0, 0.1) >>> y = sigmoid(x) >>> plt.plot(x,y) >>> plt.ylim(0,1.0) >>> plt.show() |
どうでしょうか。
滑らかな右上がりのグラフが出てきました。
この関数を通すことで、ある閾値よりも上なら1を出力、下なら0を出力させて、次のノードへの情報伝達をコントロールできるんですね。
活性化関数、シグモイド関数は、人工知能・AIをやっていると
必ずでてくるワードなので、しかっりと自分のものにしていきましょう。