摘要
利用Logistic Regression做Feature Transformation,并适当叠加层数来构建神经网络。本文介绍Backpropagation这一常见的方法,构建一个反向神经网络,可以高效计算。
1 深度学习理解
- 深度学习第一步:定义函数集,也就是确定神经网络的结构;第二步:定义损失函数;第三步:选出最佳函数。
- 含输入输出的一个激活函数看作一个neuron,我们的工作是手动设计neuron的连接方式,即确定structure
- 最常见的连接方式Fully Connect Feedforward Network
- 一个给定结构的Neuron Network就决定一个function set,如果 θ \theta θ已经全部设定,则为一个function
- 神经网络的计算可以写成做矩阵运算,可以使用GPU加速矩阵运算
2 Backpropagation
2.1 定义
Backpropagation是一个高效地计算梯度下降法中百万级数量的参数的偏微分的方法。
2.2 计算推导
第二步需要计算 L ( θ ) = ∑ n = 1 N C n ( θ ) L(\theta)=\displaystyle\sum_{n=1}^N C^n(\theta) L(θ)=n=1∑NCn(θ),第三步需要计算total lost对某一个参数的偏微分 ∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ C n ( θ ) ∂ w \dfrac{\partial L(\theta)}{\partial w}=\displaystyle\sum_{n=1}^N \dfrac{\partial C^n(\theta)}{\partial w} ∂w∂L(θ)=n=1∑N∂w∂Cn(θ),将问题转化为算出一笔data的 ∂ C n ( θ ) ∂ w \dfrac{\partial C^n(\theta)}{\partial w} ∂w∂Cn(θ)再求和。
根据链式法则
∂
C
∂
w
=
∂
C
∂
z
⋅
∂
z
∂
w
\dfrac{\partial C}{\partial w}=\dfrac{\partial C}{\partial z} \cdot \dfrac{\partial z}{\partial w}
∂w∂C=∂z∂C⋅∂w∂z,由于
z
=
x
1
⋅
w
1
+
x
2
⋅
w
2
+
b
z=x_1\cdot w_1+x_2\cdot w_2+b
z=x1⋅w1+x2⋅w2+b,所以Forward pass
=
∂
z
∂
w
=
x
=\dfrac{\partial z}{\partial w}=x
=∂w∂z=x,只需找到该参数的输入数据。Backward pass相对复杂,示意图如图1所示。
利用链式法则计算
∂
C
∂
z
\dfrac{\partial C}{\partial z}
∂z∂C。
设a为一个neuron的输出,且a同时为下一层neuron的输入,计算
∂
C
∂
a
\dfrac{\partial C}{\partial a}
∂a∂C,如图2所示。
得到
∂
C
∂
z
=
σ
′
(
z
)
[
w
3
∂
C
∂
z
′
+
w
4
∂
C
∂
z
′
′
]
\dfrac{\partial C}{\partial z}=\sigma'(z)[w_3\dfrac{\partial C}{\partial z'}+w_4\dfrac{\partial C}{\partial z''}]
∂z∂C=σ′(z)[w3∂z′∂C+w4∂z′′∂C]
求
∂
C
∂
z
′
\dfrac{\partial C}{\partial z'}
∂z′∂C和
∂
C
∂
z
′
′
\dfrac{\partial C}{\partial z''}
∂z′′∂C:
情况1:
z
′
z'
z′与
z
′
′
z''
z′′是输出层激活函数的输入,如图3所示。
∂
C
\partial C
∂C容易计算
情况2:不是输出层,如图4所示。
类似递归,利用
∂
C
∂
z
=
σ
′
(
z
)
[
w
3
∂
C
∂
z
′
+
w
4
∂
C
∂
z
′
′
]
\dfrac{\partial C}{\partial z}=\sigma'(z)[w_3\dfrac{\partial C}{\partial z'}+w_4\dfrac{\partial C}{\partial z''}]
∂z∂C=σ′(z)[w3∂z′∂C+w4∂z′′∂C]公式的原理,一直推导到输出层,求得
∂
C
\partial C
∂C再代入。
2.3 利用Backpropagation计算
先计算输出层偏微分,再利用公式
∂
C
∂
z
=
σ
′
(
z
)
[
w
3
∂
C
∂
z
′
+
w
4
∂
C
∂
z
′
′
]
\dfrac{\partial C}{\partial z}=\sigma'(z)[w_3\dfrac{\partial C}{\partial z'}+w_4\dfrac{\partial C}{\partial z''}]
∂z∂C=σ′(z)[w3∂z′∂C+w4∂z′′∂C]向前计算,如图5所示。
总结:相当于建立一个反向同结构的神经网络
3 总结与展望
文章介绍了Backpropagation这一常见的方法,构建一个反向神经网络,可以高效计算。接下来将对DNN的训练提出一些优化方法,并且进入CNN的学习。