数式に対して、NumPyを利用して実装したものを記載する。
np
とする。
import numpy as np
内積
重みパラメータ$w$(行列)と入力ベクトル$x$の内積を求める場合を示す。
このとき、$w$のサイズは$m \times n$として、$x$のサイズは$n \times 1$とすると、$u$は$m \times 1$のベクトルになる。
u = np.dot(w, x)
シグモイド関数
def sigmoid(u):
return 1 / (1 + np.exp(-u))
微分
def d_sigmoid(u):
return (1 - sigmoid(u)) * sigmoid(u)
誤差関数
def error(y, t):
return np.sum((y - p) ** 2) / 2
重みパラメータの更新式
上記の式のうち、$\delta$の内容は層によって異なる。
上記をPythonで書き表してみると... (ベクトル・行列の形状は、ここでは特に考慮せずに書く)
# Lは出力層の番号を表す
def calc_delta(l, u, t, next_layer_w, next_layer_delta):
if l == L:
o = sigmoid(u)
result = (o - t) * d_sigmoid(u)
else:
result = np.dot(next_layer_w, next_layer_delta) * d_sigmoid(u)
return result
delta = calc_delta(l, u, t, next_layer_w, next_layer_delta)
w -= rho * np.dot(delta, o)