上一篇博客介绍了深度学习的历史和思想,本篇博客将介绍在神经网络计算中常用的反向传播算法。
目录
复习
Gradient Descent
在学习反向传播算法之前重新回归一下梯度下降算法,在神经网络求解最优化Loss function所使用的方法就是梯度下降算法,反向传播算法能够在神经网络计算中更高效地计算。
链式求导法则
在神经网络中,因为有着多个隐藏层,所以在计算偏导数的过程中要使用到链式求导法则。
Backpropagation
反向传播算法介绍
Backpropagation的目的是极小化Loss function
L(θ)
L
(
θ
)
,即是每一笔data的loss function
C(θ)
C
(
θ
)
之和,因此计算
L(θ)
L
(
θ
)
的偏微分等价于计算每一笔
C(θ)
C
(
θ
)
的偏微分,再将之加总。现在对一个观测拿出红色三角区域部分进行分析。
根据链式求导法则
∂C∂w=∂C∂z∂z∂w
∂
C
∂
w
=
∂
C
∂
z
∂
z
∂
w
,其中
z=x1w1+x2w2+b
z
=
x
1
w
1
+
x
2
w
2
+
b
,因此
∂z∂w
∂
z
∂
w
可以很轻松计求解。
接下来我们开始计算
∂C∂z
∂
C
∂
z
部分,如下图所示,
∂C∂z=∂a∂z∂C∂a=σ′(z)(∂z′∂a∂C∂z′+∂z″∂a∂C∂z″)=σ′(z)[w3∂C∂z′+w4∂C∂z″]
∂
C
∂
z
=
∂
a
∂
z
∂
C
∂
a
=
σ
′
(
z
)
(
∂
z
′
∂
a
∂
C
∂
z
′
+
∂
z
″
∂
a
∂
C
∂
z
″
)
=
σ
′
(
z
)
[
w
3
∂
C
∂
z
′
+
w
4
∂
C
∂
z
″
]
现在开始计算 ∂C∂z′ ∂ C ∂ z ′ 和 ∂C∂z″ ∂ C ∂ z ″ ——
- 如果
z′,z″
z
′
,
z
″
是最后一个神经元的input
∂C∂z′=∂y1∂z′∂C∂y1,∂C∂z″=∂y2∂z″∂C∂y2 ∂ C ∂ z ′ = ∂ y 1 ∂ z ′ ∂ C ∂ y 1 , ∂ C ∂ z ″ = ∂ y 2 ∂ z ″ ∂ C ∂ y 2
- 如果
z′,z″
z
′
,
z
″
不是最后一个神经元的input
从后面逆向算,先算
∂C∂z5,∂C∂z6
∂
C
∂
z
5
,
∂
C
∂
z
6
,此时
∂C∂z3=σ′(z3)[w′5∂C∂z5+w″5∂C∂z6]
∂
C
∂
z
3
=
σ
′
(
z
3
)
[
w
5
′
∂
C
∂
z
5
+
w
5
″
∂
C
∂
z
6
]
,依此类推可以一直算到第一层。