代价函数
我们希望有一个算法,能够找到合适的权重和偏置,以至于网络的输出
y
(
x
)
y(x)
y(x)能够完全的拟合所有得输入
x
x
x。为了量化我们如何实现这个目标,我们定义一个代价函数(以均方误差为例,即MSE):
C
(
w
,
b
)
=
1
2
n
∑
x
∥
y
(
x
)
−
y
t
r
u
e
∥
2
C(w,b) = \frac{1}{2n} \sum_{x}\|y(x) - y_{true} \| ^2
C(w,b)=2n1x∑∥y(x)−ytrue∥2
其中,
w
w
w是所有的权重集合表示,
b
b
b是偏置的结合表示,
n
n
n是样本个数。
y
(
x
)
y(x)
y(x)表示网络根据给定的权重和偏置得到的输出,
y
t
r
u
e
y_{true}
ytrue表示输入
x
x
x时的真实输出。换句话说,我们应该求得一个权重和偏置组合,使得所有样本的网络输出值与真实值的差值的平方总和最小。从公式来看,代价函数
C
C
C是
w
w
w和
b
b
b的的函数,即一个多元函数,问题转化为多元函数求最小值的问题,不是极小值。
梯度下降算法
我们把
C
(
w
,
b
)
C(w,b)
C(w,b)想象成一个多维曲面(参考三维曲面)曲面上有一个小球(初始位置),我们可以控制这个小球往哪个方向移动(方向),每次移动多少距离(学习率:
η
\eta
η)。
参考高中一道运动学物理题:飞机以恒定的速度
v
v
v于2000米高空飞行,在
t
0
t_0
t0时刻投下炸弹,不考虑空气阻力。求
t
t
t时刻炸弹的速度与位置。我们的解法是:将速度分解成水平方向和竖直方向,水平方向匀速运动,竖直方向是初速度为0,加速度为g的匀加速运动,则
t
t
t时刻的速度方向为:
(
v
,
g
t
)
(v,gt)
(v,gt)
理解梯度下降求法的关键就在于:分解。代价函数
C
C
C是关于
w
w
w和
b
b
b的多元函数,小球沿着
C
C
C在
w
w
w方向的偏导数负方向,和
b
b
b的偏导数负方向移动,可以使得小球下降的最快,这个方向叫做负梯度方向,小球沿着
w
w
w的梯度方向移动
Δ
w
\Delta w
Δw,沿着
b
b
b的梯度方向移动
Δ
b
\Delta b
Δb之后,C的变化量为:
Δ
C
≈
∂
C
∂
w
∗
Δ
w
+
∂
C
∂
b
∗
Δ
b
\Delta C \approx \frac{\partial C}{\partial w}*\Delta w+\frac{\partial C}{\partial b}*\Delta b
ΔC≈∂w∂C∗Δw+∂b∂C∗Δb
我们用
∇
C
\nabla C
∇C来表示梯度方向:
∇
C
=
(
∂
C
∂
w
,
∂
C
∂
b
)
T
\nabla C = ( \frac{\partial C}{\partial w},\frac{\partial C}{\partial b})^T
∇C=(∂w∂C,∂b∂C)T来表示小球移动的方向,即梯度方向。
用
Δ
v
=
(
Δ
w
,
Δ
b
)
T
\Delta v = (\Delta w,\Delta b)^T
Δv=(Δw,Δb)T
来表示小球的移动量。
则
Δ
C
≈
∇
C
⋅
Δ
v
\Delta C \approx \nabla C \cdot \Delta v
ΔC≈∇C⋅Δv
取
Δ
v
=
−
η
∇
C
\Delta v = -\eta \nabla C
Δv=−η∇C则
Δ
C
\Delta C
ΔC必定为负,即可保证每次移动小球都可使得代价函数减小。
但这种方法也不是没有缺点,我们每次移动小球都是基于当前的位置考虑,选择下降最快的,在代价函数为非凸的情形下,很容易陷入局部最小值。
- 为避免陷入局部最小值,可以多次随机取小球的位置:随机。
- 由于代价函数为每个样本代价的总和,当样本量很大的时候,每次更新权重和偏置都要计算全体样本的代价,这开销很大,可以将总体样本分成 n n n个使用小批次,以小批次代价来代替总体,以完成一次更新权重和偏置:小批量。
随机梯度下降
我们随机选取
m
m
m个样本,称为小批量,我们期望小批量梯度的平均值大致等于总体的梯度。即
∑
j
m
∇
C
j
m
≈
∑
i
x
∇
C
i
n
=
∇
C
\frac { \sum_j ^m \nabla C_j}{m} \approx \frac { \sum_i ^x \nabla C_i}{n} = \nabla C
m∑jm∇Cj≈n∑ix∇Ci=∇C
则,对于任意一个参数
w
k
w_k
wk,沿着梯度负方向移动
η
\eta
η后,即:
Δ
w
k
=
−
η
∇
C
\Delta w_k= -\eta\nabla C
Δwk=−η∇C
带入得:
w
k
→
w
k
,
=
w
k
+
Δ
w
=
w
k
−
η
m
∑
j
m
∂
C
j
∂
w
k
w_k \to w_k^, = w_k + \Delta w = w_k - \frac {\eta}{m} \sum_j ^m \frac{\partial C_j}{\partial w_k}
wk→wk,=wk+Δw=wk−mηj∑m∂wk∂Cj
不停地依照上述公式更新参数,直到收敛。