神经网络之梯度优化算法
一、批量梯度下降(BGD)
批量梯度下降(Batch Gradient Descent)是:最原始的形式,他在每次迭代的过程中都是使用所有的训练集样本进行梯度下降。如果对于训练集样本数量较大的话,需要很长的时间,并且每迭代一次都需要对训练集样本进行训练。他能够很好的代表训练集样本总体数据,从而能更准确的向极值所在的方向下降。如果目标函数为凸函数,
B
G
D
BGD
BGD则一定能得到全局极值点。
S
G
D
SGD
SGD的最优化更新路径为蓝色曲线。
使用数学式可以将
B
G
D
BGD
BGD写出如下形式:
(1) { W : = W − α ∂ L ∂ W L = 1 2 m ∑ i = 1 m ( Y − y ) 2 \color{red} \begin{cases} W:=W-{\alpha}\frac{\partial{L}}{\partial {W}}\\\\ L=\frac{1}{2m}\sum\limits_{i=1}^{m}(Y-y)^2 \end{cases}\tag{1} ⎩⎪⎪⎨⎪⎪⎧W:=W−α∂W∂LL=2m1i=1∑m(Y−y)2(1)
其中 :
W
W
W为需要更新的参数权重,
∂
L
∂
W
\frac{\partial{L}}{\partial {W}}
∂W∂L为损失函数
L
L
L关于
W
W
W的梯度,
α
{\alpha}
α为学习率,
L
L
L为损失函数(带有
∑
\sum
∑求和符号),
Y
Y
Y为模型的输出值(训练集的预测值),
y
y
y为训练集的真实值。
![](https://i-blog.csdnimg.cn/blog_migrate/26d75c49e5f822ca4a98f454b420d907.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fb48d12decf62cb1eee15827f62b9935.png)
二、随机梯度下降(SGD)
随机梯度下降(Stochastic Gradient Descent)是:在每次迭代的过程中都是随机抽取训练集样本中的一个样本进行梯度下降,每次训练完一个样本后,就按梯度更新一次参数,更新完后再次抽取一个样本进行梯度下降,又按这次的梯度进行更新参数,也就是说,每训练一个样本,参数就会被更新一次。在训练集大的时候,这样很可能还没训练完整个训练集,得到的损失值就在一个范围变化内。(随机梯度下降算法不能直接到达极值,而是在极值周围变化)不过每次迭代都会更新一次参数,这样使得每一次参数更新的速度得到的大大的提高,但是可能会收敛于局部最小值,并不能代表整个训练集。
B
G
D
BGD
BGD的最优化更新路径为紫色曲线,呈现“之”字形朝最小值移动,效率低。
使用数学式可以将
B
G
D
BGD
BGD写出如下形式(数学式是一样的,但是每次迭代的的样本数目不同):
(2)
{
W
:
=
W
−
α
∂
L
∂
W
L
=
1
2
(
Y
−
y
)
2
\color{red} \begin{cases} W:=W-{\alpha}\frac{\partial{L}}{\partial {W}}\\\\ L=\frac{1}{2}(Y-y)^2\tag{2} \end{cases}
⎩⎪⎨⎪⎧W:=W−α∂W∂LL=21(Y−y)2(2)
其中 :
W
W
W为需要更新的参数权重,
∂
L
∂
W
\frac{\partial{L}}{\partial {W}}
∂W∂L为损失函数
L
L
L关于
W
W
W的梯度,
α
{\alpha}
α为学习率,
L
L
L为损失函数(不带有
∑
\sum
∑求和符号,为单个样本的损失函数),
Y
Y
Y为模型的输出值(训练集的预测值),
y
y
y为训练集的真实值。
![](https://i-blog.csdnimg.cn/blog_migrate/26d75c49e5f822ca4a98f454b420d907.png)
三、Mini-batch梯度下降
Mini-batch梯度下降是: 将整个大训练集分成 m m m个小训练集进行计算,然后再对这 m m m个小训练集进行向量化(提高运行的速度),最后进行梯度下降算法。这里的 m m m不能太大,如果 m m m太大的话,处理速度仍然缓慢。此时只需要一个 f o r for for循环,迭代 I t e r a t i o n Iteration Iteration次。 I t e r a t i o n Iteration Iteration为 M i n i − b a t c h Mini-batch Mini−batch的大小。
大训练集为: X = [ x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . . . . , x ( m ) ] , Y [ y ( 1 ) , y ( 2 ) , y ( 3 ) , . . . . . . , y ( m ) ] X=[x^{(1)}, x^{(2)},x^{(3)},......,x^{(m)}], Y[y^{(1)}, y^{(2)},y^{(3)},......,y^{(m)}] X=[x(1),x(2),x(3),......,x(m)],Y[y(1),y(2),y(3),......,y(m)]
其中 X X X的维度为 ( n x , m ) , Y (n_x, m),Y (nx,m),Y的维度为 ( 1 , m ) (1, m) (1,m), x ( t ) x^{(t)} x(t)表示划分的每个小训练集。
一般地:
I
t
e
r
a
t
i
o
n
>
1
Iteration>1
Iteration>1,如果
I
t
e
r
a
t
i
o
n
=
1
Iteration=1
Iteration=1。则为随机梯度下降
(
S
G
D
)
(SGD)
(SGD);如果
I
t
e
r
a
t
i
o
n
=
m
Iteration=m
Iteration=m,则为批量梯度下降
(
B
G
D
)
(BGD)
(BGD)。使用
M
i
n
i
−
b
a
t
c
h
Mini-batch
Mini−batch梯度下降法时,成本函数并不是每次迭代都是下降的,会产生噪声。因为每次迭代都是在训练不同的训练集进行训练。迭代次数
I
t
e
r
a
t
i
o
n
Iteration
Iteration介于
1
1
1到
m
m
m之间,迭代次数
I
t
e
r
a
t
i
o
n
Iteration
Iteration一般为
64
64
64到
512
512
512,即
2
2
2的
n
n
n次方,也有
M
i
n
i
−
b
a
t
c
h
Mini-batch
Mini−batch的大小为1024的,但是比较少见。
M
i
n
i
−
b
a
t
c
h
Mini-batch
Mini−batch梯度下降的最优化更新路径为绿色曲线。
使用数学式可以将
B
G
D
BGD
BGD写出如下形式:
(3) { W : = W − α ∂ L ∂ W L = 1 2 m ∑ i = 1 m ( Y − y ) 2 \color{red} \begin{cases} W:=W-{\alpha}\frac{\partial{L}}{\partial {W}}\\\\ L=\frac{1}{2m}\sum\limits_{i=1}^{m}(Y-y)^2\tag{3} \end{cases} ⎩⎪⎪⎨⎪⎪⎧W:=W−α∂W∂LL=2m1i=1∑m(Y−y)2(3)
其中 :
W
W
W为需要更新的参数权重,
∂
L
∂
W
\frac{\partial{L}}{\partial {W}}
∂W∂L为损失函数
L
L
L关于
W
W
W的梯度,
α
{\alpha}
α为学习率,
L
L
L为损失函数(带有
∑
\sum
∑求和符号,这里的m是划分的出来的单个小训练集),
Y
Y
Y为模型的输出值(每个小训练集的预测值),
y
y
y为每个小训练集的真实值。
![](https://i-blog.csdnimg.cn/blog_migrate/26d75c49e5f822ca4a98f454b420d907.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6ba825c81bd9b01b247bd3a89ed6115a.png)
四、Momentum梯度下降
Momentum是“动量”的意思,也叫冲量算法。Momentum梯度下降算法是利用了一个作用力,在该力的作用下,物体的速度增加的这一物理法则,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/2d3d9b4c4ae10c9a3dab0da4a779e74b.png)
(4) { v : = β v − α ∂ L ∂ W W : = W + v \color{red} \begin{cases} v:={\beta}v-{\alpha}\frac{\partial{L}}{\partial {W}}\\\\ W:=W+v\tag{4} \end{cases} ⎩⎪⎨⎪⎧v:=βv−α∂W∂LW:=W+v(4)
或者
(4)
{
v
:
=
β
v
+
(
1
−
β
)
∂
L
∂
W
W
:
=
W
−
α
v
\color{red} \begin{cases} v:={\beta}v+({1-\beta})\frac{\partial{L}}{\partial {W}}\\\\ W:=W-{\alpha}v\tag{4} \end{cases}
⎩⎪⎨⎪⎧v:=βv+(1−β)∂W∂LW:=W−αv(4)
其中: 第二种为指数加权平均数的形式
W
,
∂
L
∂
W
,
α
W,\frac{\partial{L}}{\partial {W}},{\alpha}
W,∂W∂L,α和前面三个梯度下降算法一样,分别代表参数,梯度和学习率,
v
v
v为一个变量,对应物理上的速度,式
(
7
)
(7)
(7)表示了物体在梯度方向上的受力。
β
v
{\beta}v
βv这一项,是在物体不受力(也就是梯度为零时),该项承担使物体逐渐减速的任务(一般
β
=
0.9
{\beta}=0.9
β=0.9之类 )。
下图为
M
o
m
e
n
t
u
m
Momentum
Momentum梯度下降的最优化更新路径图,更新路径就像一个小球在碗中滚动一样,和
S
G
D
SGD
SGD相比,路径图中的“之”字形的“程度”减轻了,可以更快地朝极值点靠近,减弱了“之”字形的变动程度。
![](https://i-blog.csdnimg.cn/blog_migrate/77a4b1fa36fc8dc495762dcffa3039ea.png)
五、RMSProp(Root Mean Square Prop)梯度下降
RMSProp梯度下降算法是在Momentum上加以改进的,这两个算法都可以加速梯度下降的速度,而BMSPro算法可以减少Momentum算上“之”字形的摆动程度。
用数学式表示如下:
(5)
{
s
:
=
β
s
+
(
1
−
β
)
∂
L
∂
W
∗
∂
L
∂
W
W
:
=
W
−
α
1
s
+
ϵ
∂
L
∂
W
\color{red} \begin{cases} s:={\beta}s+(1-{\beta})\frac{\partial{L}}{\partial {W}} *\frac{\partial{L}}{\partial {W}}\\\\ W:=W-{\alpha}\frac{1}{\sqrt{s+{\epsilon}}}\frac{\partial{L}}{\partial {W}}\tag{5} \end{cases}
⎩⎪⎨⎪⎧s:=βs+(1−β)∂W∂L∗∂W∂LW:=W−αs+ϵ1∂W∂L(5)
其中:
W
,
∂
L
∂
W
,
α
W,\frac{\partial{L}}{\partial {W}},{\alpha}
W,∂W∂L,α和前面三个梯度下降算法一样,分别代表参数,梯度和学习率,
s
s
s为一个变量,保存了所有梯度值的指数加权平方和(式
(
5
)
(5)
(5)中的 * 表示 对于矩阵元素的乘法);
β
{\beta}
β为指数加权平均数,一般的
β
=
0.9
,
ϵ
=
1
0
−
8
{\beta=0.9,{\epsilon}=10^{-8}}
β=0.9,ϵ=10−8。
从式(
5
5
5)可以看出,该算法首先对梯度的平方进行了一次平滑,再对平滑后的梯度进行了归一化处理,这样可以在不同维度上进行调整步长,从而减小梯度的震荡。
下图为 A d a G r a d AdaGrad AdaGrad梯度下降的最优化更新路径图(绿色曲线),蓝色曲线为Momentum梯度下降算法,而绿色曲线为RMSProp梯度下降算法,从图中可以看出,RMSProp梯度下降算法中损失值的摆动程度相比Momentum减少了很多。通过RMSProp能够很好的调整不同维度上的步长,加快收敛速度。
![](https://i-blog.csdnimg.cn/blog_migrate/684708c05e15dd754c9e575705bb05b0.png)
A d a G r a d AdaGrad AdaGrad梯度下降算法会为参数的每个元素适当地调整学习率 α {\alpha} α。
用数学式表示如下:
(6)
{
h
:
=
h
+
∂
L
∂
W
∗
∂
L
∂
W
W
:
=
W
−
α
1
h
∂
L
∂
W
\color{red} \begin{cases} h:=h+\frac{\partial{L}}{\partial {W}} *\frac{\partial{L}}{\partial {W}}\\\\ W:=W-{\alpha}\frac{1}{\sqrt{h}}\frac{\partial{L}}{\partial {W}}\tag{6} \end{cases}
⎩⎪⎨⎪⎧h:=h+∂W∂L∗∂W∂LW:=W−αh1∂W∂L(6)
其中:
W
,
∂
L
∂
W
,
α
W,\frac{\partial{L}}{\partial {W}},{\alpha}
W,∂W∂L,α和前面三个梯度下降算法一样,分别代表参数,梯度和学习率,
h
h
h为一个变量,保存了所有梯度值的平方和(式
(
6
)
(6)
(6)中的 * 表示 对于矩阵元素的乘法)。
A
d
a
G
r
a
d
AdaGrad
AdaGrad梯度下降算法在更新参数时,通过乘以
1
h
\frac{1}{\sqrt{h}}
h1,就可以调整学习的尺度,这意味着,参数的元素中变动较大(被大幅度更新)的元素的学习率将变小。也就是说,可以按照参数的元素进行学习率衰减,使变动大的参数的学习率逐渐件减小。
下图为
A
d
a
G
r
a
d
AdaGrad
AdaGrad梯度下降的最优化更新路径图,从图中可以看出,刚开始变动较大,但是后面会根据这个较大的变动按比例进行调整,减小更新的步伐。相比Momentum梯度下降算法来说,“之”字形的变动程度有所衰减。
![](https://i-blog.csdnimg.cn/blog_migrate/d58534c9557c9ac422e2c196b32bbb33.png)
七、Adam(Adaptive Moment Estimation)梯度下降
上诉介绍的两个梯度下降算法中,RMSProp参照小球在碗中滚动的物理规则进行移动,AdaGrad则为参数的每个元素适当地调整更新步伐。那么如果将这两个方法融合在一起,就成了Adam梯度下降算法。
用数学式表示如下:
(7) { v : = β 1 v + ( 1 − β 1 ) ∂ L ∂ W s : = β 2 s + ( 1 − β 2 ) ∂ L ∂ W ∗ ∂ L ∂ W W : = W − α v s + ϵ \color{red} \begin{cases} \color{red}v:={\beta_1}v+(1-{\beta_1})\frac{\partial{L}}{\partial {W}}\\\\ \color{red}s:={\beta_2}s+(1-{\beta_2})\frac{\partial{L}}{\partial {W}}*\frac{\partial{L}}{\partial {W}}\\\\ \color{red}W:=W-{\alpha}\frac{v}{\sqrt{s+{\epsilon}}}\tag{7} \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧v:=β1v+(1−β1)∂W∂Ls:=β2s+(1−β2)∂W∂L∗∂W∂LW:=W−αs+ϵv(7)
其中:
W
,
∂
L
∂
W
,
α
W,\frac{\partial{L}}{\partial {W}},{\alpha}
W,∂W∂L,α和前面梯度下降算法一样,分别代表参数,梯度和学习率,
β
1
=
0.9
,
β
2
=
0.999
,
ϵ
=
1
0
−
8
{\beta_1}=0.9,{\beta_2}=0.999,{\epsilon}=10^{-8}
β1=0.9,β2=0.999,ϵ=10−8。Adam算法相当于先把原始梯度做一个指数加权平均,再做一次归一化处理,然后再更新梯度值。
下图为
A
d
a
m
Adam
Adam梯度下降的最优化更新路径图,从图中可以看出,相比前面的梯度下降算法来说,Adam的小球左右摇晃程度有所减轻。这得有益于学习的更新程度被适当地调整了。
![](https://i-blog.csdnimg.cn/blog_migrate/9271ae80fb3370a4442c97b78b117010.png)