1 full-batch梯度下降 随机梯度下降(SGD)mini-batch梯度下降
full-batch梯度下降:每次计算梯度的时候把所有训练数据都考虑进去,假设一共有N个样本,计算损失函数的时候,对所有的N个样本都求一遍损失函数的值,然后求平均。存在的问题是当数据量太大,则很难进行计算。
SGD:每次从训练样本中随机抽取一个样本用来计算损失函数,将相应计算出的梯度作为当前一步梯度下降的依据。这种方法具有随机性,由于深度学习是非凸优化问题,可以使梯度避免陷入极值,在很多实际应用中,尤其是类别很多的分类中,随机性会导致算法不收敛
mini-batch梯度下降:前面两种方法的折中。将包含所有样本的训练集分割为小一点的子集进行训练,这种子集叫做mini-batch,对每一个子集进行梯度下降求解。
比较:使用full-batch梯度下降,一次遍历训练集正让你做一个梯度下降,mini-batch梯度下降法,一次遍历训练集,可以做多个梯度下降。使用SGD如果只处理一个样本,这种方法可以通过减小学习率,改善噪声,但是同时会失去所有向量化带给你的加速。
如何选取合适的mini-batch数目
训练集较小(<2000),可以直接使用full-batch梯度下降;若样本数量较大,mini-batch的大小为64~512,具体的选择要参考电脑内存设置和使用方式。
2.指数加权平均数
关键方程:
vt=βvt−1+(1−β)θt
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
作用:占用内存少,可以有效计算平均数。
3.指数加权平均数的偏差修正
对于指数加权平均数在估测初期,估测不准选择,用
vt1−βt
v
t
1
−
β
t
,这个叫做偏差修正。
4.动量梯度下降
基本想法:计算梯度的指数加权平均数,并利用该梯度更显权重。
原因:相比于标准的梯度下降,动量梯度下降会减少在纵轴上的摆动,而加快在横轴上的学习。
具体操作:在每次迭代中,利用mini-batch计算dW,db,然后计算加权指数平均数,
vdw=βvdw+(1−β)dW
v
d
w
=
β
v
d
w
+
(
1
−
β
)
d
W
,同样计算
vdb
v
d
b
,然后重新赋值权重
W:W−avdW;b:b−avdb
W
:
W
−
a
v
d
W
;
b
:
b
−
a
v
d
b
,这样可以实现减缓梯度下降的幅度。其中存在两个参数,学习率a,β控制指数加权平均数,β的常用值为0.9
5.RMSprop(root mean square prop)
梯度下降中,用参数b表示纵轴,参数W表示为横轴。想要减缓纵轴的学习,同时加快横轴方向的学习。
具体操作为:计算当下mini-batch的微分dW,db,然后求解微分平方的加权平均数,
SdW=βSdW+(1−β)dW2
S
d
W
=
β
S
d
W
+
(
1
−
β
)
d
W
2
,同理还要求
Sdb
S
d
b
,然后更新参数值,
W:=W−adWSdW√
W
:=
W
−
a
d
W
S
d
W
,同样更新b.
6.Adam优化算法
基本思想:将动量梯度下降和RMSprop结合一下。
基本步骤:
(1)初始化:
vdw=0,Sdw=0,vdb=0,Sdb=0
v
d
w
=
0
,
S
d
w
=
0
,
v
d
b
=
0
,
S
d
b
=
0
(2)计算微分dW,db
(3)计算动量指数加权平均数
(4)RMSprop更新,需要计算修正偏差。
7.学习率衰减
为什么计算学习率衰减?
在迭代过程中存在噪声,梯度下降进行最小值求解,不会精确的收敛。
学习率的设置:
a=11+decayrate+epoch−numa0
a
=
1
1
+
d
e
c
a
y
r
a
t
e
+
e
p
o
c
h
−
n
u
m
a
0
deeplearning.ai -深度神经网络优化方法
最新推荐文章于 2022-11-27 17:00:20 发布