第 8 章 深層学習の基礎のキソ 76
8.2 順伝播型ネットワーク
if t> 0:
return1 else:
return0 defNAND(x1,x2):
w1, w2,b = -0.5, -0.5, 0.7 t= w1 *x1 +w2 *x2 + b if t> 0:
return1 else:
return0 defOR(x1, x2):
w1, w2,b = 0.5, 0.5, -0.2 t= w1 *x1 +w2 *x2 + b if t> 0:
return1 else:
return0 defXOR(x1,x2):
t1 =NAND(x1,x2) t2 =OR(x1,x2) out =AND(t1,t2) return out print(XOR(m,n))
XORゲートを通して、多層にすることの「良さ」を述べてきました。パーセプトロンは深層学習の本当に基礎なのでしっかり押 さえておきましょう。
余談
ぶっちゃけXORゲートは3行で実装できます。
List 8.3: _XOR.py
n, m=list(map(int,input().split())) if (n or m) and not(nand m): print(1) else: print(0)
8.2 順伝播型ネットワーク
本節では順伝播型ネットワークについて解説します。順伝播型ネットワークは層状に並べられたユニットが、隣り合った層のユ ニットと結合し1方向に情報を伝播させていくネットワークで、ニューラルネットワークの中でもっとも基本的なものです。
上の図において、一番左の層を入力層、真ん中の層を中間層、右の層を出力層と呼びます。
第8章 深層学習の基礎のキソ 8.2順伝播型ネットワーク
ユニットの構造
ネットワークを構成するユニットは複数の入力を受け取り1つの値を出力します。次の図のようにx1 x4 までの4つの入力があ る場合、ユニットが受け取る総入力uは
u=w1x1+w2x2+w3x3+w4x4+b
となります。図ではバイアスを省略しています。ユニットの出力 z は活性化関数と呼ばれる関数 f のuに対する出力となり ます。
z=f(u)
順伝播型ネットワークはこのユニットを並べた層同士が次の図のように結合し情報を受け渡していきます。
一層目のユニット数をI 、二層目(zj を出力している層)のユニット数をJ とすると、各ユニットの入力と出力を一般化すると 以下のようになります。(i= 1,2, . . . I, j = 1,2, . . . J)
uj=
∑I i
wjixi+bj
z =f(u )
第8章 深層学習の基礎のキソ 8.2順伝播型ネットワーク
ここでは i番目のユニットと j 番目のユニットの間の結合における重みを wji としています。これを行列で表すと以下の通り です。
u=Wx+b z=f(u)
ただし、各行列・ベクトルを次のように定義しています。
u=
u1 u2 ... uJ
,W=
w11 w12 . . . w1I w21 w22 . . . w2I ... ... . .. ... wJ1 wJ2 . . . wJ I
, x=
x1 x2 ... xI
,
b=
b1
b2
... bJ
, z=
z1
z2
... zJ
,f(u) =
f(u1) f(u2)
... f(uJ)
活性化関数の種類
先ほど登場した活性化関数の中で代表的なものとその実装を紹介します。
Sigmoid関数
Logistic関数とも呼ばれます。定義は次の通り。
f(x) = 1 1 + e−x
この関数は入力の絶対値が大きな値であると出力は一定の値に近づき、この関数の値域は(0,1)です。また全ての実数xで微分 可能であることが特徴です。pythonで実装すると次のようになります。
List 8.4: Sigmoid.py
defsigmoid(x):
return 1 / (1 + np.exp(-x))
入出力は省略しました。これを実行すると、例えば、入力 1 に対しては 0.7310585786300049 を出力し、入力 5 に対しては 0.9933071490757153を出力します。
双曲線正接関数
f(x) = tanh(x)
で定義される関数です。双曲線関数の様々な性質にはここでは触れませんが、この関数は値域が (−1,1)でシグモイド関数と似 た性質を持っています。numpyの関数に存在しているので実装は省略します。
ReLU関数(正規化線形関数)
f(x) = max(x,0)
で定義される関数で、非常に単純なのでpythonでの実装は省略します。この関数はその単純さゆえに計算量が非常に少なく、ま た学習がとても早く進むため、とてもよく使われる活性化関数です。
恒等関数
f(x) =x
で定義される関数。ここで紹介する活性化関数の中で唯一の線形関数です。出力層で使われることがあります。