根据论文无法纠正偏差的问题
在梯度稀疏的情况下,为了可靠地估计第二矩,需要通过选择较小的β2值来平均许多梯度。然而,正是这种小β2的情况,缺乏初始化偏差校正会导致初始步长大得多。
通常在实践中,设置为比更接近1 (正如作者建议的,),因此更新系数远小于。β2β1β2=0.999β1=0.91−β2=0.0011−β1=0.1
在训练,,如果直接使用偏差估计,则参数更新中的项可能会非常大。m1=0.1gtv1=0.001g2tm1/(v1−−√+ϵ)
另一方面,当使用偏差校正的估算值和,字词对和变得不太敏感。m1^=g1v1^=g21mt^/(vt^−−√+ϵ)β1β2
如何校正偏差
该算法使用移动平均线估计第一和第二时刻。有偏估计将是,我们从任意猜测,并逐渐通过更新估计。因此,很明显,在最初的几步中,我们的移动平均值严重偏向初始。m0mt=βmt−1+(1−β)gtm0
为了解决这个问题,我们可以从移动平均线中消除初始猜测(偏差)的影响。例如,在时间1,,我们从取出项,然后将其除以,得到。当,。完整的证明在本文的第3节中给出。m1=βm0+(1−β)gtβm0m1(1−β)m1^=(m1−βm0)/(1−β)m0=0mt^=mt/(1−βt)
正如Mark L. Stone所说的那样
就像乘以2(哦,我的结果是有偏差的),然后除以2以“校正”它。
以某种方式这并不完全等同于
初始点的梯度用于这些事物的初始值,然后更新第一个参数
(当然,可以通过更改更新规则将其转换为相同的形式(请参见答案的更新),我相信这条线主要旨在表明没有必要引入偏见,但也许值得一提)
例如,时间2的更正的第一时刻
m2^=β(1−β)g1+(1−β)g21−β2=βg1+g2β+1
如果使用作为具有相同更新规则的初始值,则
将会在前几个步骤中偏向。g1m2=βg1+(1−β)g2
g1
偏差校正真的很重要吗?
因为它实际上只影响训练的前几个步骤,所以这似乎不是一个很大的问题,在许多流行的框架(例如keras,caffe)中,仅实施偏差估计。
根据我的经验,有偏差的估计有时会导致不希望的情况,即损失不会减少(我还没有对它进行彻底的测试,所以我不确定这是否是由于有偏差的估计或其他原因造成的),还有一个窍门我使用的是使用更大的来缓和初始步长。ϵ
更新
如果展开递归更新规则,则本质上是渐变的加权平均值,
分母可以通过几何和公式计算,因此等效于以下更新规则(不涉及偏见条件) m^t
m^t=βt−1g1+βt−2g2+...+gtβt−1+βt−2+...+1
m1←g1
而不收敛时,执行 (加权和) (加权平均值)
mt←βmt+gt
m^t←(1−β)mt1−βt
因此,可以在不引入偏差项和对其进行校正的情况下完成此操作。我认为,为了便于与其他算法(例如RmsProp)进行比较,本文以偏差校正形式进行了介绍。