Mais conteúdo relacionado
Semelhante a 深層学習入門 スライド (20)
深層学習入門 スライド
- 5. X1
x2
x3
x4
u1,z1
u2z2
u3 z3
z1
z2
z3
入力
𝑢1 = 𝑤11 𝑥1 + 𝑤12 𝑥2 + 𝑤13 𝑥3 + 𝑤14 𝑥4 + 𝑏1
𝑢2 = 𝑤21 𝑥1 + 𝑤22 𝑥2 + 𝑤23 𝑥3 + 𝑤24 𝑥4 + 𝑏2
𝑢3 = 𝑤31 𝑥1 + 𝑤32 𝑥2 + 𝑤33 𝑥3 + 𝑤34 𝑥4 + 𝑏3
𝑢4 = 𝑤41 𝑥1 + 𝑤42 𝑥2 + 𝑤43 𝑥3 + 𝑤44 𝑥4 + 𝑏4
↓
𝑢𝑗 = 𝑖=1
𝐼
𝑤𝑗𝑖 𝑥𝑖 + 𝑏𝑗
出力 𝑧𝑗 = 𝑓(𝑢𝑗)
→ ベクトルと行列を用いて 𝑢 = 𝑊𝑥 + 𝑏
𝑧 = 𝑓(𝑢)
- 6. # coding:Shift-JIS
import numpy as np
# 重みWを設定する(出力素子が3つの場合)
W = np.array([[0.5,0.3,0.6,0.7],[0.9,0.2,0.8,0.4],[0.1,0.2,0.9,0.4]])
# 与えるデータxを設定する
x = np.array([0.2,0.6,0.8,0.7])
# バイアスbを設定する
b = np.array([1,2,3])
# ユニットが受け取る総入力uを定義
# メモ np.dotで、行列の掛け算の計算ができる!
u = np.dot(W,x) + b
print(u)
> [ 2.25 3.22 4.14]
- 8. 正規化線形関数 線形写像(恒等写像)
𝑓 𝑢 = max 𝑢, 0 𝑓 𝑢 = 𝑢
−1 (𝑢 < −1)
𝑓 𝑢 = 𝑢 −1 ≤ 𝑢 < 1
1 (𝑢 ≥ 1)
http://mathtrain.jp/rampfunction
- 9. # さっきの続き
# 活性化関数を定義(ロジスティックシグモイド関数)
def sigmoid(u):
return 1 / (1 + np.exp(-1 * u))
# vfをロジスティックシグモイド関数でベクトル的に定義
vf = np.vectorize(sigmoid)
# vf(u)を出力
print("ロジスティックシグモイド関数")
print(vf(u))
# 双曲線正接関数はnumpyに定義されているからそのまま使う
# 双曲線正接関数の結果を出力
print("双曲線正接関数")
print(np.tanh(u))
- 10. # 活性化関数を定義(正規化線形関数)
def rectified(u):
return max(u,0)
# vfを正規化線形関数でベクトル的に定義
vf = np.vectorize(rectified)
# vf(u)を出力
print("正規化線形関数")
print(vf(u))
>ロジスティックシグモイド関数
[ 0.90465054 0.96158001 0.98432671]
双曲線正接関数
[ 0.97802611 0.99681228 0.99949305]
正規化線形関数
[ 2.25 3.22 4.14]
- 11. 多層ネットワーク
入力層(𝑙 = 1) データxを入力
中間層 𝑙 = 2
𝑢(2)
= 𝑊(2)
𝑥 + 𝑏(2)
, 𝑧(2)
= 𝑓(𝑢 2
)
出力層 𝑙 = 3
𝑢(3) = 𝑊(3) 𝑥(2) + 𝑏(3) , 𝑧(3) = 𝑓(𝑢 3 )
一般化すると・・・
𝑢(𝑙+1)
= 𝑊(𝑙+1)
𝑥(𝑙)
+ 𝑏(𝑙+1)
, 𝑧(𝑙+1)
= 𝑓 𝑢 𝐿+1
最終的な出力
𝑦 ≡ 𝑧(𝑙)
x
𝑙 = 1 𝑙 = 2 𝑙 = 3
𝑧(1)
𝑧(2)
𝑧(3)
𝑦 = 𝑧(3)
- 20. 誤差関数に二乗誤差
𝐸 𝑤 =
1
2 𝑗(𝑦𝑗 𝑥 − 𝑑𝑗) をとるとすると
重みでの微分
𝜕𝐸 𝑁
𝜕𝑤 𝑗𝑖
(3) と
𝜕𝐸 𝑁
𝜕𝑤 𝑗𝑖
(2) を計算しよう!
前提として、
これらは、 𝜕𝑤𝑗𝑖
(3)
には関係しない