BP反向传播网络
梯度下降法
-
本质上,在神经网络中实现的梯度下降和在线性回归和逻辑斯特回归这两件事上的梯度下降的步骤没有什么不同
-
不同的是,神经网络中,参数非常多,它的梯度可能是个上百维的一个梯度
-
反向传播是一种,为了让你计算梯度更有效率的一种衍生法
链式法则
——这是反向传播中为数不多需要掌握的数学
损失函数
L
(
θ
)
=
∑
n
=
1
N
C
n
(
θ
)
损失函数\ L(theta)=sum_{n=1}^NC^n(theta)\
损失函数L(θ)=n=1∑NCn(θ)
损失函数求导
∂
L
(
θ
)
∂
w
=
∑
n
=
1
N
∂
C
n
(
θ
)
∂
w
损失函数求导\ frac{partial L(theta)}{partial w}=sum_{n=1}^Nfrac{partial C^n(theta)}{partial w}
损失函数求导∂w∂L(θ)=n=1∑N∂w∂Cn(θ)
——下面的步骤,我们只focus在对某一个data上的偏微分
——后续的是,讲所有的训练集上的偏微分计算出来,求和,就能得到total loss对这一参数的偏微分
Cal. Example
——我们将
∂
z
/
∂
w
partial z / partial w
∂z/∂w 称为向前,对所有的参数(z是未经过激活函数的值)
——我们将
∂
C
/
∂
z
partial C / partial z
∂C/∂z称为向后,对所有的激活函数
向前
——我们会发现,
∂
z
/
∂
w
partial z/partial w
∂z/∂w的值,就是这个权值前面接的是什么
向后
Compute
∂
C
/
∂
z
partial C/partial z
∂C/∂z for all activation function inputs z
C是交叉熵
——通过假设
a
=
σ
(
z
)
a=sigma(z)
a=σ(z) 假设z通过的是逻辑回归函数
——得到
∂
C
∂
z
=
∂
a
∂
z
∂
C
∂
a
frac{partial C}{partial z}=frac{partial a}{partial z}frac{partial C}{partial a}
∂z∂C=∂z∂a∂a∂C
——a会用过下一部分的
z
′
z'
z′ 和
z
′
′
z''
z′′ 影响最后的交叉熵C
——因此得到
∂
C
∂
a
=
∂
z
′
∂
a
∂
C
∂
z
′
+
∂
z
′
′
∂
a
∂
C
∂
z
′
′
frac{partial C}{partial a}=frac{partial z'}{partial a}frac{partial C}{partial z'}+frac{partial z''}{partial a}frac{partial C}{partial z''}
∂a∂C=∂a∂z′∂z′∂C+∂a∂z′′∂z′′∂C
——而后面的两个部分又是下一层网络的偏微分
-
假设
∂
C
∂
z
′
frac{partial C}{partial z'}
∂z′∂C 和
∂
C
∂
z
′
′
frac{partial C}{partial z''}
∂z′′∂C 已知
则得
∂
C
∂
z
=
σ
′
(
z
)
[
w
3
∂
C
∂
z
′
+
w
4
∂
C
∂
z
′
′
]
frac{partial C}{partial z}=sigma'(z)[w_3 frac{partial C}{partial z'}+w_4 frac{partial C}{partial z''}]
∂z∂C=σ′(z)[w3∂z′∂C+w4∂z′′∂C]
输出层反向传输
- 我们假设,上图红点就已经是输出层
∂
C
∂
z
′
=
∂
y
1
∂
z
′
∂
C
∂
y
1
frac{partial C}{partial z'}=frac{partial y_1}{partial z'}frac{partial C}{partial y_1}
∂z′∂C=∂z′∂y1∂y1∂C
-
∂
y
1
∂
z
′
frac{partial y_1}{partial z'}
∂z′∂y1 取决于最后输出层的激活函数
-
∂
C
∂
y
1
frac{partial C}{partial y_1}
∂y1∂C 取决于你怎么定义的Loss Function——你可以用交叉熵,也可以使用mean square error
——如果你的下一层不是输出层,则继续看下一层的下一层,直到最后输出层之后
——因此,我们的计算,直接从最后往前面进行误差传播