深層学習DAY1確認テスト
Section1:入力層〜中間層
確認テスト:動物分類の実例を入れてみよう。
確認テスト:この数式をPythonでかけ。
u1 = np.dot(x,W1) + b
確認テスト:1−1のがいるから中間層の出力を定義しているソースを抜き出せ。
# 2層の総入力
u2 = np.dot(z1, W2) + b2
# 2層の総出力
z2 = functions.relu(u2)
u1 = np.dot(x,W1) + b
u1 = np.dot(x,W1) + b
Section2 活性化関数
確認テスト:線形と非線形の違いを図に書いて簡易に説明せよ。
左図が線形、右図が非線形関数である。
一般に
f(x+y) = f(x) + f(y)
f(kx) = kf(x)
が成り立つものを線形関数という。
確認テスト
z1 = function.relu(u1)
z2 = function.relu(u2)
Section3 出力層確認テスト
・引き算だと予測値が負の値を取ると、正確な値が測れないため。
・二乗誤差を微分した時に、係数をキャンセルするため。
y = np.exp(x)/np.(np.exp(x),axis = 0)
xは行ベクトルであるので、Axis=0で行方向の和をとっている。
-np.sum(np.log(y[np.arange(batch_size),d] +1e-7))/batch_size
対数関数は入力が0の時に–∞に発散してしまうので、それを避けるために微小な値を足している。
Section4 勾配降下法
network[key] -= learning_rate * grad[key]
grad = backward(x, d, z1, y)
# 勾配降下の繰り返し for dataset in random_datasets: x, d = dataset['x'], dataset['d'] z1, y = forward(network, x) grad = backward(x, d, z1, y) # パラメータに勾配適用 for key in ('W1', 'W2', 'b1', 'b2'): network[key] -= learning_rate * grad[key] # 誤差 loss = functions.mean_squared_error(d, y) losses.append(loss) print("##### 結果表示 #####") lists = range(epoch)
確認テスト:オンライン学習について2行でまとめなさい
オンライン学習はデータが入ってくる都度、学習を行いパラメータを更新する方法。
各点の勾配を算出し、パラメータの値を勾配の値を更新する手法
Section5:誤差逆伝播法
# 出力層でのデルタ delta2 = functions.d_mean_squared_error(d, y)
上delta1 = np.dot(delta2, W2.T) * functions.d_sigmoid(z1)
下grad['W1'] = np.dot(x.T, delta1)