はじめに
この記事はゼロから作るディープラーニング 4章ニューラルネットワークを自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。
ニューラルネットワークの構造
ニューラルネットワークは入力層・中間層・出力層の三層で出来ており、そのため三層ネットワークとも呼ばれたりします。
しかし三層とは言っても中間層は一層構造では無く、多層構造なので実際は三層です。多層パーセプトロンのように層を深くしたいときは中間層を深くします。
前回も書いた通り、ニューラルネットワークと多層パーセプトロンの違いは活性化関数の違いです。
後の構造はほとんど同じなのです。
ではコードで実装してみます。
# 3層ニューラルネットワーク実装
X = np.array([1.0,0.5,2.0])#入力層
B1 = np.array([0.1,0.2])
W1 = np.array([
[0.1,0.3],
[0.2,0.4],
[0.4,0.5]
])
A1 = np.dot(X,W1) + B1 # 各ニューロンの入力信号の総和 + 各ニューロンのバイアス
A1 #各ニューロンの入力値
# 中間層一層目
Z1 = sigmoid_function(A1)
Z1#一層目の出力信号
# 中間層二層目
W2 = np.array([
[0.1,0.4,0.6],
[0.2,0.5,0.8]
])
B2 = np.array([0.1,0.2,0.4])
A2 = np.dot(Z1,W2) + B2
Z2 = sigmoid_function(A2)
Z2#二層目の出力信号
W3 = np.array([
[0.2,0.3],
[0.3,0.4],
[0.4,0.9]
])
B3 = np.array([0.1,0.2])
A3 = np.dot(Z2,W3) + B3
# 出力層の活性化関数
def identity_function(x):
return x
identity_function(A3)
今回はまだ学習を実装する前なので重みやバイアスなどのパラメータは手動設定ですが、上のコードでニューラルネットワークの実装ができます。
上を見るとわかるのですが、ほとんどパーセプトロンの構造と同じなので説明はほとんど入りませんよね。
違う部分は活性化関数がstep関数じゃ無くシグモイド関数というところだけです。
後もう一つ出力層がニューラルネットワークにはありますのでそこの解説が必要です。
ですが上の実装だと出力層の説明が全くできていませんので、出力層の解説は次回させていただきます。