Adam算法学习笔记

2021-11-29  本文已影响0人  扎哈_

吴恩达老师的Adam算法学习笔记,记录一下理解过程

优化

Mini-Batch 梯度下降

将训练集排序打乱,然后分割成固定大小的子集n个(最后一个除外),然后遍历子集使用梯度下降更新参数。(这种方法主要运用在特别大的数据集中)
在固定学习率𝛼的情况下:

指数加权平均

由于Mini-Batch梯度下降的不稳定,我们可以利用指数加权平均来平衡下降方向

Momentum梯度下降法

在Mini-Batch梯度下降中加入指数加权平均得到的就是可以减少损失振荡的梯度,使用这个值带入参数更新中:
W=W-𝛼v_{dW} \\ b=b-𝛼v_{db}
这种梯度下降法就叫做Momentum梯度下降法

RMSprop算法 (全称:root menu square prop)

S_{dW}=𝛽S_{dW}+(1-𝛽)(dW)^2 \\ S_{db}=𝛽S_{db}+(1-𝛽)(db)^2
更新参数时使用:
W=W-𝛼\frac {dW}{\sqrt {S_{dW}}} \\ b=b-𝛼\frac {db}{\sqrt {S_{db}}}
(以后想到更好的描述方式再更新这部分内容)
我在数学上的感觉告诉我,相比指数加权平均,在得到S_{dW}值的计算过程中,加重了本次dW所占的比例,\sqrt {S_{dW}} 可以将大数压缩成一个很小的数,如果是一个小数,则可以得到一个较大的小数。如果dW是一个较大的梯度值,那么除以小值后得到的是稍小一些的数,使用这个数进行参数更新可以减小震荡。如果dW是小数,除以\sqrt {S_{dW}}则等于乘以一个>1的较小的数,综合来讲:
\frac { dW} {\sqrt {S_{dW}}}
相比原始的更新方法,总能让dW较大时,变为一个较小的数,dW太小时,对其进行放大,如果dW不大不小,得到的值与它很接近。
使用RMSProp算法可以设置一个较大的𝛼来进行快速迭代而不用担心错过最小点

Adam算法

Adam算法结合了Momentum与RMSprop:
初始化V_{dW}=0, S_{dW}=0
在Mini-batch迭代中:
V_{dW} = 𝛽_1V_{dW} + (1-𝛽_1)dW \\ S_{dW} = 𝛽_2S_{dW} + (1-𝛽_2)(dW)^2
然后使用偏差修正:(其中t=i+1,i指当前子集的下标)
V_{dW}^{current} = \frac {V_{dW}}{1- 𝛽_1^t} \\ S_{dW}^{current} = \frac {S_{dW}}{1- 𝛽_2^t}
然后更新参数:
W=W-𝛼\frac { V_{dW}^{current}}{\sqrt {S_{dW}}+ξ}

上一篇 下一篇

猜你喜欢

热点阅读