为什么为深度学习的Adam优化器包括偏差校正项很重要?


15

我正在阅读有关深度学习的Adam优化器的内容,并在Begnio,Goodfellow和Courtville撰写的新书Deep Learning中遇到了以下句子:

亚当包括对一阶矩(动量项)和(无心)二阶矩的估计值的偏差校正,以说明它们在原点处的初始化。

似乎包含这些偏差校正项的主要原因是,它以某种方式消除了和的初始化偏差。mt=0vt=0

  • 我不是100%知道这是什么意思,但在我看来,这很可能意味着第一和第二时刻从零开始,并以某种方式从零开始倾斜,以不公平(或有用)的方式使值接近零。 ?
  • 虽然我很想知道这意味着什么,以及它如何损害学习。特别是,在优化方面,不偏向优化器有哪些优势?
  • 这如何帮助训练深度学习模型?
  • 另外,无偏见是什么意思?我很熟悉无偏标准偏差的含义,但是我不清楚在这种情况下这意味着什么。
  • 偏差校正真的很重要吗?还是亚当优化器论文过度夸大了它?

就是这样,人们知道我已经非常努力地理解原始论文,但是我从阅读和重新阅读原始论文中受益匪浅。我认为其中一些问题可能会在此处得到解答,但我似乎无法解析答案。


2
链接:arxiv.org/pdf/1412.6980v8.pdf 第1和第2矩梯度估计值通过移动平均值进行更新,并且在两个estimat4es都为零的情况下开始,因此,那些初始值的真实值不为零,将使结果产生偏差。 ,因为零的初始估算只会逐渐消失。我不明白的是为什么这些点的初始值不使用初始点的梯度,然后才更新第一个参数。这样就不会受到初始零值的污染,而必须将其撤消,因此不需要进行偏差校正。
马克·L·斯通

1
因此,看起来似乎并没有为初始迭代准备特殊的代码,而是通过引入可能存在的偏差然后消除该偏差来决定在数学上等效。这会在所有迭代中添加不必要但快速的计算。通过这样做,他们保持了在所有迭代中看起来相同的纯净代码。我本来应该从第一次梯度评估开始,而让梯度矩更新公式仅从第二次迭代开始。
马克·L·斯通

@ MarkL.Stone的作者非常强调偏差校正,以至于我觉得这是他们论文中的新颖或重要之处。因此,他们可能没有“纠正偏差”并拥有相同的算法吗?如果这是真的,我看不出亚当为什么是这么重要的优化器或有什么大不了的。我一直认为这是偏差校正。
查理·帕克

4
他们引入了偏见然后将其纠正,这对我来说没有充分的理由。就像乘以2(哦,我的结果是有偏差的),然后除以2以“校正”它。带有偏差的引入和消除的整个过程似乎都是不必要的旁注。也许不做就没有足够长的篇幅,所以他们加了些长篇大论:)亚当也许有长处,但他们这样做的方式和我建议的一样。我希望作者来这里并进行解释。也许我错过了一些细微之处或误解了一些东西。
马克·L·斯通

Answers:


17


根据论文无法纠正偏差的问题

在梯度稀疏的情况下,为了可靠地估计第二矩,需要通过选择较小的β2值来平均许多梯度。然而,正是这种小β2的情况,缺乏初始化偏差校正会导致初始步长大得多。

在此处输入图片说明

通常在实践中,设置为比更接近1 (正如作者建议的,),因此更新系数远小于。β2β1β2=0.999β1=0.91β2=0.0011β1=0.1

在训练,,如果直接使用偏差估计,则参数更新中的项可能会非常大。m1=0.1gtv1=0.001gt2m1/(v1+ϵ)

另一方面,当使用偏差校正的估算值和,字词对和变得不太敏感。m1^=g1v1^=g12mt^/(vt^+ϵ)β1β2

如何校正偏差
该算法使用移动平均线估计第一和第二时刻。有偏估计将是,我们从任意猜测,并逐渐通过更新估计。因此,很明显,在最初的几步中,我们的移动平均值严重偏向初始。m0mt=βmt1+(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

如果使用作为具有相同更新规则的初始值,则 将会在前几个步骤中偏向。g1

m2=βg1+(1β)g2
g1

偏差校正真的很重要吗?
因为它实际上只影响训练的前几个步骤,所以这似乎不是一个很大的问题,在许多流行的框架(例如kerascaffe)中,仅实施偏差估计。

根据我的经验,有偏差的估计有时会导致不希望的情况,即损失不会减少(我还没有对它进行彻底的测试,所以我不确定这是否是由于有偏差的估计或其他原因造成的),还有一个窍门我使用的是使用更大的来缓和初始步长。ϵ

更新
如果展开递归更新规则,则本质上是渐变的加权平均值, 分母可以通过几何和公式计算,因此等效于以下更新规则(不涉及偏见条件) m^t

m^t=βt1g1+βt2g2+...+gtβt1+βt2+...+1

m1g1
而不收敛时,执行 (加权和) (加权平均值)
mtβmt+gt
m^t(1β)mt1βt

因此,可以在不引入偏差项和对其进行校正的情况下完成此操作。我认为,为了便于与其他算法(例如RmsProp)进行比较,本文以偏差校正形式进行了介绍。


1
您是否同意我对这个问题的第二条评论?对我来说,这就是底线。关于乘除2的事情只是被认为是“易于理解”的类比,而不是眼前的问题所使用的数学。如果还有其他我没有看过的论文,它们是通过相同的机制引入偏差的,那么在ADAM的情况下,这似乎是完全可以避免的,但是没有纠正它,那完全是STUPID(除非以某种方式造成偏差)有助于算法的性能)。
Mark L. Stone

@ MarkL.Stone是的!其实我赞成,对不起我的英语。而且我认为无法纠正偏差的算法是rmsprop,但与Adam rmsprop不同的是,它可以很好地处理偏差。
dontloo

@dontloo,您的答案是否回答了马克·L·斯通(Mark L. Stone)关于偏倚纠正似乎多余的评论?(我认为这很重要,甚至比解释原始论文所说的还要重要)。
查理·帕克

@CharlieParker您的意思是为什么偏差校正是多余的,或者为什么作者使它看起来多余?
dontloo

@dontloo我不认为作者是多余的。我认为他们确实需要它(根据他们的特定条件)。但是,我认为没有必要考虑马克的建议。我想我现在在评论部分中的问题是,他们是否真的需要更正词。
查理·帕克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.