深度学习笔记:优化算法

时间:2022-05-15 14:16:39

1、mini batch梯度下降

传统的batch梯度下降是把所有样本向量化成一个矩阵,每一次iteration遍历所有样本,进行一次参数更新,这样做每一次迭代的计算量大,要计算所有样本,速度慢,但是收敛可以比较直接地收敛到cost function的最小值。
随机梯度下降(stochastic gradient descent)是每次迭代以一个样本为输入,这种方法每次迭代更新参数时,参数不一定是朝着cost function最小化的方向发展的,就是说cost function不一定是“下降”的,而是朝着更随机的方向演化的,所以称随机梯度下降。这种方法速度快,但收敛性不好。
综合以上两种方法的优缺点,提出minibatch方法,把样本按64、128、256、512等数目分批,每次iteration处理一批,用这一批样本来进行梯度下降,一批样本共同决定本次梯度下降的方向,不容易跑偏,减小了随机性。另外,每一次迭代用一批样本,比总体样本数小很多,加快了迭代速度。
如何理解batch和minibatch:http://hp.stuhome.net/index.php/2016/09/20/tensorflow_batch_minibatch/

2、指数加权平均(exponential weighted average):

v0=0

v1=βv0+(1β)w1

v2=βv1+(1β)w2

........

vt=βvt1+(1β)wt

这样,每个参数 wt 都会和 wt1 w1 有关联,离 wt 越近的参数,对 wt 的影响越大。
该方法应用到一组数据上之后 ,根据 β 的大小,会对 vt 的曲线的平坦程度有影响, β 选的越大, wt vt 的影响越小, wt1 w1 vt 影响越大,曲线就越平坦,反之, β 越小, vt 的曲线越不平坦,越接近原数据即 wt 的曲线。用该方法处理数据后,可以把 vt 的曲线看做是对wt曲线过去 1/(1β) 天的数据的一种 ”平均“ 。
网友的视频学习笔记: https://www.cnblogs.com/cloud-ken/p/7723755.html

指数加权移动平均在动量梯度下降中的应用:

动量梯度下降就是把普通梯度下降中的梯度,即全部的 dw ,用EWA的方法处理,这样,每个 dw 都会受它前面的dw的影响。在没用EWA处理之前,每次更新权重时,

w=wαdw
这样, dw 的方向就比较随机,虽然总趋势是向 cost 最小方向的。
而用EWA处理之后,第 t 次迭代时,我们对求出的 dw 做这样的处理,让它成为 vt 的函数:
v0=0

v1=βv0+(1β)dw1

v2=βv1+(1β)dw2

........

vt=βvt1+(1β)dwt

,朝 cost 最小方向的总趋势不变,因为每个 dw 都有朝这个方向,但是 dw 们向其他随机方向的趋势就会被平均掉,这样我们就可以加大梯度下降的步长,从从而加快梯度下降的优化速度。
如图:蓝色线是普通梯度下降中,各梯度的方向。红色线是动量梯度下降中,各梯度的方向。可以看出,向cost最小方向的趋势和速度不变,但是向其他无关方向的趋势被平均掉了。

深度学习笔记:优化算法

3. RMSprop

深度学习笔记:优化算法
RMSprop与exponential weighted average有异曲同工之妙:在每次迭代中,假设是计算一个mini-batch的梯度,
On iteration t:
compute dw, db on mini-batch
Sdw=βSdw+(1β)dw2
Sdb=βSdw+(1β)db2
以上迭代中, w b 指不同方向的梯度, w 是我们的目标方向, b 不是,我们要消除在 b 方向上的抖动,因此,在更新参数时,要:
w=wαdwSdw+ϵ
b=bαdbSdb+ϵ

4. Adam优化

结合了RMSprop和EWA
On iteration t:
compute dw,db on mini-batch

vdw=β1vdw+(1β1)dw

vdb=β1vdb+(1β1)db

Sdw=β2Sdw+(1β2)dw2

Sdb=β2Sdb+(1β2)db2

Vcorrectdw=vdw1βt1

Vcorrectdb=vdb1βt1

Scorrectdw=Sdw1βt2

Scorrectdb=Sdb1βt2

w=wαVcorrectdwScorrectdw+ϵ

b=bαVcorrectdbScorrectdb+ϵ