深層学習DAY1確認テスト

Section1:入力層〜中間層

確認テスト:動物分類の実例を入れてみよう。

f:id:ishishi11:20210628223228p:plain

確認テスト:この数式をPythonでかけ。

f:id:ishishi11:20210628223554p:plain

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

Section2 活性化関数

確認テスト:線形と非線形の違いを図に書いて簡易に説明せよ。

f:id:ishishi11:20210629223256p:plain

左図が線形、右図が非線形関数である。
一般に
f(x+y) = f(x) + f(y)
f(kx) = kf(x)
が成り立つものを線形関数という。

確認テスト

f:id:ishishi11:20210629223720p:plain

z1 = function.relu(u1)
z2 = function.relu(u2)

Section3 出力層確認テスト

f:id:ishishi11:20210629224112p:plain・引き算だと予測値が負の値を取ると、正確な値が測れないため。

・二乗誤差を微分した時に、係数をキャンセルするため。

 

f:id:ishishi11:20210629224536p:plain

y = np.exp(x)/np.(np.exp(x),axis = 0)

xは行ベクトルであるので、Axis=0で行方向の和をとっている。

 

f:id:ishishi11:20210629224955p:plain

-np.sum(np.log(y[np.arange(batch_size),d] +1e-7))/batch_size

対数関数は入力が0の時に–∞に発散してしまうので、それを避けるために微小な値を足している。

 

Section4 勾配降下法

f:id:ishishi11:20210629225344p:plain

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行でまとめなさい
オンライン学習はデータが入ってくる都度、学習を行いパラメータを更新する方法。

f:id:ishishi11:20210629225726p:plain

確率的勾配降下法の大雑把な意味 - 具体例で学ぶ数学
各点の勾配を算出し、パラメータの値を勾配の値を更新する手法

Section5:誤差逆伝播

f:id:ishishi11:20210629225953p:plain

# 出力層でのデルタ
delta2 = functions.d_mean_squared_error(d, y)


f:id:ishishi11:20210629230318p:plain




delta1 = np.dot(delta2, W2.T) * functions.d_sigmoid(z1)

grad['W1'] = np.dot(x.T, delta1)