赞
踩
反向传播算法,分为两个部分:Forward pass和Backward pass
设 L ( w 1 , w 2 , w 3 , . . . , w n ) L(w_1,w_2,w_3,...,w_n) L(w1,w2,w3,...,wn)为Loss函数, z = x 1 w 1 + x 2 w 2 + b z = x_1w_1+x_2w_2+b z=x1w1+x2w2+b为前向传播(Forwardpropagation)公式, a = σ ( z ) a = σ(z) a=σ(z)为激活函数,代表下一个神经元的值。
由以上假设,根据梯度下降法,需计算出每个权重 w i w_i wi对于损失函数 L L L的偏导,然后进行参数更新,即 ∂ L ∂ w i \frac{∂L}{∂w_i} ∂wi∂L这种方式在参数量较少,网络结构不复杂的情况下很容易便可求得。但在复杂网络如神经网络中,损失函数 L L L是一个包含千百万数量级参数的一个复合函数,想要直接对某个 w i w_i wi求得偏导比较困难。所以,反向传播简化了这一直接求偏导的过程,利用链式法则间接反向逐步求得每个参数 w i w_i wi的偏导,实现梯度传播以及参数更新。
Forward pass:
根据链式法则简化上述求导公式:
∂
L
∂
w
1
=
∂
L
∂
z
∂
z
∂
w
1
\frac{∂L}{∂w_1} = \frac{∂L}{∂z}\frac{∂z}{∂w_1}
∂w1∂L=∂z∂L∂w1∂z公式右边后半部分可以直接求得:
∂
z
∂
w
1
=
x
1
\frac{∂z}{∂w_1} = x_1
∂w1∂z=x1所以,原式可简化为:
∂
L
∂
w
1
=
x
1
∂
L
∂
z
\frac{∂L}{∂w_1} = x_1\frac{∂L}{∂z}
∂w1∂L=x1∂z∂L
Backward pass:
对
∂
L
∂
z
\frac{∂L}{∂z}
∂z∂L进一步分解得到:
∂
L
∂
z
=
∂
L
∂
a
∂
a
∂
z
\frac{∂L}{∂z} = \frac{∂L}{∂a}\frac{∂a}{∂z}
∂z∂L=∂a∂L∂z∂a该式右边后半部分
∂
a
∂
z
=
σ
′
(
z
)
\frac{∂a}{∂z} = σ'(z)
∂z∂a=σ′(z)由于激活函数都是已知的,所以该项也可以很容易算出。所以原式变为:
∂
L
∂
z
=
σ
′
(
z
)
∂
L
∂
a
\frac{∂L}{∂z} = σ'(z)\frac{∂L}{∂a}
∂z∂L=σ′(z)∂a∂L假设该节点后继续通过两个分支连着一个神经元(如图),则可进一步得到:
∂
L
∂
z
=
σ
′
(
z
)
[
∂
L
∂
z
′
∂
z
′
∂
a
+
∂
L
∂
z
′
′
∂
z
′
′
∂
a
]
\frac{∂L}{∂z} = σ'(z)[\frac{∂L}{∂z'}\frac{∂z'}{∂a}+\frac{∂L}{∂z''}\frac{∂z''}{∂a}]
∂z∂L=σ′(z)[∂z′∂L∂a∂z′+∂z′′∂L∂a∂z′′]由于此时
z
′
=
a
w
3
+
b
′
z' = aw_3+b'
z′=aw3+b′
z
′
′
=
a
w
4
+
b
′
′
z'' = aw_4+b''
z′′=aw4+b′′所以,原式可简化为:
∂
L
∂
z
=
σ
′
(
z
)
[
w
3
∂
L
∂
z
′
+
w
4
∂
L
∂
z
′
′
]
\frac{∂L}{∂z} = σ'(z)[w_3\frac{∂L}{∂z'}+w_4\frac{∂L}{∂z''}]
∂z∂L=σ′(z)[w3∂z′∂L+w4∂z′′∂L]从而有:
∂
L
∂
w
1
=
x
1
∂
L
∂
z
=
x
1
σ
′
(
z
)
[
w
3
∂
L
∂
z
′
+
w
4
∂
L
∂
z
′
′
]
\frac{∂L}{∂w_1} = x_1\frac{∂L}{∂z} = x_1σ'(z)[w_3\frac{∂L}{∂z'}+w_4\frac{∂L}{∂z''}]
∂w1∂L=x1∂z∂L=x1σ′(z)[w3∂z′∂L+w4∂z′′∂L]
该式为反向传播算法核心公式,其表明了当前神经元上参数的梯度可由后一个神经元上参数的梯度求得。所以,只要从输出层算起,就可以一步步反向推出前面各层的参数梯度。
人工计算麻烦,框架内自带自动求导
Numerical Differentiation
用数值方法来计算函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。