这一章的代码解读的难点是:
涉及到两个函数的求导问题。
①sigmoid函数的求导:
∂ y j ∂ x j = y j ( 1 − y j ) \frac{\partial y_j}{\partial x_j}=y_j(1-y_j)
∂
x
j
∂
y
j
=
y
j
(
1
−
y
j
)
出处是[2]
②softmax函数的求导:
∂ E ∂ z i = a i − y i \frac{\partial E}{\partial z_i}=a_i-y_i
∂
z
i
∂
E
=
a
i
−
y
i
出处是[1]
、------------------------------------------
第四章的整个神经网络的结构是:
输入层:784个节点(无激活函数)
隐藏层:50个节点(激活函数:sigmoid)
输出层:10个节点(激活函数:softmax)
下面的维度检查中的100,是因为一个batch_size=100
、------------------------------------------
代码变量与神经网络结构之间的具体对应关系:
输入x,
第一层输入a1,输出z1
第二层输入a2,输出y
、------------------------------------------
理论与神经网络结构之间的具体对应关系是:
输入x,
第一层输入x1,输出y1
第二层输入x2,输出y2
、------------------------------------------
According to [2]:
△w
= - ε ∂ E ∂ w =-\varepsilon\frac{\partial E}{\partial w}
=
-
ε
∂
w
∂
E
(8)
= - ε ∂ E ∂ w j i =-\varepsilon\frac{\partial E}{\partial w_{ji}} = - ε ∂ w j i ∂ E (6)
= - ε ∂ E ∂ x j ⋅ y i =-\varepsilon\frac{\partial E}{\partial x_j}·y_i
=
-
ε
∂
x
j
∂
E
⋅
y
i
≈ - ε y − t b a t c h _ n u m ⋅ z 1. T \approx -\varepsilon \frac{y-t}{batch\_num}·z1.T
≈
-
ε
b
a
t
c
h
_
n
u
m
y
−
t
⋅
z
1
.
T
(代码中的变量)
= - ε ⋅ g r a d s [ ′ W 2 ′ ] =-\varepsilon·grads['W2']
=
-
ε
⋅
g
r
a
d
s
[
′
W
2
′
]
(代码中的变量)
变量名称 | 对应的理论名称 | 变量维度 |
---|---|---|
a 1 a1 a 1 | x 1 ( 隐 藏 层 输 入 ) x_1(隐藏层输入) x 1 ( 隐 藏 层 输 入 ) | (100,50) |
z 1 z1 z 1 | y 1 ( 隐 藏 层 输 出 ) y_1(隐藏层输出) y 1 ( 隐 藏 层 输 出 ) | (100,50) |
a 2 a2 a 2 | x 2 ( 输 出 层 输 入 ) x_2(输出层输入) x 2 ( 输 出 层 输 入 ) | (100,10) |
y y y | y 2 ( 输 出 层 输 出 ) y_2(输出层输出) y 2 ( 输 出 层 输 出 ) | (100,10) |
d a 1 da1 d a 1 | ∂ E ∂ x 2 ⋅ w 21 \frac{\partial E}{\partial x_2}·w_{21} ∂ x 2 ∂ E ⋅ w 2 1 | (100,50) |
d z 1 dz1 d z 1 | ∂ E ∂ x 2 ⋅ ∂ x 2 ∂ y 1 ⋅ ∂ y 1 ∂ x 1 \frac{\partial E}{\partial x_2}·\frac{\partial x_2}{\partial y_1}·\frac{\partial y_1}{\partial x_1} ∂ x 2 ∂ E ⋅ ∂ y 1 ∂ x 2 ⋅ ∂ x 1 ∂ y 1 = ∂ E ∂ x 2 ⋅ w 21 ⋅ [ y 1 ⋅ ( 1 − y 1 ) ] \frac{\partial E}{\partial x_2}·w_{21}·[y_1·(1-y_1)] ∂ x 2 ∂ E ⋅ w 2 1 ⋅ [ y 1 ⋅ ( 1 − y 1 ) ] | (100,50) |
d y = y − t b a t c h _ n u m dy=\frac{y-t}{batch\_num} d y = b a t c h _ n u m y − t | ∂ E ∂ x 2 \frac{\partial E}{\partial x_2} ∂ x 2 ∂ E (这里的 x 2 x_2 x 2 是一个矢量,整体表示100条数据对各个输出节点的误差贡献) | (100, 10) |
z 1. T z1.T z 1 . T | y i y_i y i | (50, 100) |
g r a d s [ ′ b 2 ′ ] grads['b2'] g r a d s [ ′ b 2 ′ ] | ∂ E ∂ x 2 \frac{\partial E}{\partial x_2} ∂ x 2 ∂ E | (10,) |
g r a d s [ ′ W 2 ′ ] grads['W2'] g r a d s [ ′ W 2 ′ ] | ∂ E ∂ w 21 \frac{\partial E}{\partial w_{21}} ∂ w 2 1 ∂ E | (50,10) |
g r a d s [ ′ W 1 ′ ] grads['W1'] g r a d s [ ′ W 1 ′ ] | ∂ E ∂ x 2 ⋅ ∂ x 2 ∂ y 1 ⋅ ∂ y 1 ∂ x 1 ⋅ ∂ x 1 ∂ w 10 = ∂ E ∂ x 2 ⋅ w 21 ⋅ [ y 1 ⋅ ( 1 − y 1 ) ] ⋅ x \frac{\partial E}{\partial x_2}·\frac{\partial x_2}{\partial y_1}·\frac{\partial y_1}{\partial x_1}·\frac{\partial x_1}{\partial w_{10}}=\frac{\partial E}{\partial x_2}·w_{21}·[y_1·(1-y_1)]·x ∂ x 2 ∂ E ⋅ ∂ y 1 ∂ x 2 ⋅ ∂ x 1 ∂ y 1 ⋅ ∂ w 1 0 ∂ x 1 = ∂ x 2 ∂ E ⋅ w 2 1 ⋅ [ y 1 ⋅ ( 1 − y 1 ) ] ⋅ x | (784,50) |
g r a d s [ ′ b 1 ′ ] grads['b1'] g r a d s [ ′ b 1 ′ ] | ∂ E ∂ x 1 \frac{\partial E}{\partial x_1} ∂ x 1 ∂ E | (50,) |
关于上述表格中的 “ y − t ” “y-t” “ y − t ” 的出处,可以参考[1]:
这里的
g r a d s [ ′ b 2 ′ ] grads['b2']
g
r
a
d
s
[
′
b
2
′
]
推导如下:
∂ E ∂ b 2 = ∂ E ∂ x 2 ∂ x 2 ∂ b 2 = ∂ E ∂ x 2 ∂ ( w 21 ⋅ y 1 + b 2 ) ∂ b 2 = ∂ E ∂ x 2 \frac{\partial E}{\partial b_2}=\frac{\partial E}{\partial x_2}\frac{\partial x_2}{\partial b_2}=\frac{\partial E}{\partial x_2}\frac{\partial(w_{21}·y_1+b2)}{\partial b_2}=\frac{\partial E}{\partial x_2}
∂
b
2
∂
E
=
∂
x
2
∂
E
∂
b
2
∂
x
2
=
∂
x
2
∂
E
∂
b
2
∂
(
w
2
1
⋅
y
1
+
b
2
)
=
∂
x
2
∂
E
g r a d s [ ′ b 1 ′ ] grads['b1']
g
r
a
d
s
[
′
b
1
′
]
推导推导同理。
--------------------------------------------
为什么在计算
g r a d s [ ′ b 1 ′ ] grads['b1']
g
r
a
d
s
[
′
b
1
′
]
和
g r a d s [ ′ b 2 ′ ] grads['b2']
g
r
a
d
s
[
′
b
2
′
]
时进行求和?
与后面的batch_num进行配套使用,获取该轮batch训练得到的
b j bj
b
j
的平均值作为最终的模型参数
--------------------------------------------
关于这里batch_num出现在dy中不太好理解,其实我们可以看到batch_num最终进入了 g r a d s [ ′ b 2 ′ ] 中 , 所 以 其 含 义 是 对 100 条 数 据 产 生 的 b j 的 和 取 了 一 个 平 均 , 作 为 这 轮 b a t c h 训 练 后 的 得 到 的 偏 置 b j grads['b2']中,所以其含义是对100条数据产生的b_j的和取了一个平均, 作为这轮batch训练后的得到的偏置b_j g r a d s [ ′ b 2 ′ ] 中 , 所 以 其 含 义 是 对 1 0 0 条 数 据 产 生 的 b j 的 和 取 了 一 个 平 均 , 作 为 这 轮 b a t c h 训 练 后 的 得 到 的 偏 置 b j
--------------------------------------------
注意:
softmax以及sigmoid的求导结果是不一样的.
参考:
[1]softmax with cross-entropy loss求导(转载+细节整理)
[2]《learning representations by back-propagating errors》