目录
What is optimization about? 优化是在做什么?
Adam 自适应时刻估计方法 Adaptive Moment Estimation
感谢B站up主搬运的课程:
【李宏毅2020机器学习深度学习(完整版)国语】 https://www.bilibili.com/video/BV1JE411g7XF/?share_source=copy_web&vd_source=262e561fe1b31fc2fea4d09d310b466d
接下来要讲的5个算法
- SGD
- SGDM
- AdaGrad
- RMSProp
- Adam
一些记号 Some Notations
:输入的特征
:
次迭代时参数的值
:
次迭代时的prediction(预测结果)
:Ground Truth
或
:
次迭代时计算的梯度
:从0步累加至
步的“动量”,用于 求
What is optimization about? 优化是在做什么?
找到更好的参数 ,让预测得到的 Loss 更小!
On-line & Off-line
On-line Learning:在每一个 time step 仅会看到一个样本 及其 gt
Off-line Learning:在每一个 time step 都能看到所有的样本 及其 gt
(虽说实操中没有庞大的空间存储所有样本来算 Loss ,但这里我们假设可以方便讨论)
SGD
上一篇笔记中的Tip2中有记录,在课程P5提及
就是每次Loss只随机取一个样本的特征变量来运算,不再对所有样本求和。
SGDM (SGD with Momentum)
为什么要加入动量呢?
把走Loss的梯度想象成爬坡,加入的动量就是惯性
* 小情景 *
假设最初的v设为0, 通常设为一个小数如0.9
假设我们选取了一个点,梯度是负的,那么参数就开始增加,我们的v也开始累加(一直是正数,一直加),那我们如果后续的梯度一直是负的,再加上这个越加越大的“惯性”,下坡就会下得越来越快~
就这样一直下坡,我们来到了一个“谷底”,当我们迈出这一步时,发现我们的梯度是0 / 梯度是正数,如果按照没有动量的算法,这一步我们将不再更新参数 / 往回走。
But,我们有动量啊!
梯度为0,并不会立刻停下来(有惯性刹不住啊~),依然会带着前面累加出的正数v继续向前走!
再向前走,如果梯度变回了负号,那么说明我们成功地走出了驻点~
如果梯度变成了正号,我们也不会非常迅猛地立马掉头往回冲,如果 大于
,往回冲地速度会被减慢~;如果
小于
,那就不会立刻掉头,还会向前再逐渐减慢地走一段距离哦(说不定这样一走就直接走出了local min~)
AdaGrad
上一篇笔记中的Tip1有记录,在课程P5提及
上一节课中,李宏毅老师讲的是“强调反差的效果”
这一节课,助教的讲法更加形象些~
该算法就是在 Learning Rate 下除上一个因子(过去所有梯度的和)
当你前面走的步子很大(梯度很大),说明你正在走一个很陡峭的地方(很陡峭下降很快,很可能马上有“谷底”),那么你接下来步子该放缓了,再大步走可能就要错过那个“谷底”了。
体现在式子中,当前面的梯度 都非常大时,都会累加在
下面的因子,如此
就会越来越小~
反之亦然(前面步子很小就得加快咯)~
RMSprop (是AdaGrad算法的一种改进)
与 AdaGrad 的区别就是 下面的因子进行了改变
不再是像 AdaGrad 那样来一个新梯度就把他暴力加上去~
而是在上一个 time step 的因子 前面加上了一个衰减因子,在新加进来的梯度前面也加一个因子
。
这样的作法被称为以指数式递减加权的移动平均
像上图这样不断递推下去,会发现离当下这一 time step 越久远的梯度,其权重0.9的指数会越来越大,淡化了久远历史行动的影响~
“鉴于神经网络都是非凸条件下的,RMSProp在非凸条件下结果更好,改变梯度累积为指数衰减的移动平均以丢弃遥远的过去历史。”
上述都是理论讨论,这里助教给出了其实际意义,将过去的步骤淡化后,假如你从一开始每一步的梯度都很大, 也不会永无止境地变小(导致慢到离谱),因为很前面的步骤作用正在被每一步的衰减因子削弱~
Adam 自适应时刻估计方法 Adaptive Moment Estimation
“RMSProp 的动量版”、“RMSProp+SGDM”这样的说法都对~
- 回头再看一眼SGDM,会发现事实上把前文公式中的
换成
,把
换成
,不难发现这其实是个一阶梯度版本的指数移动平均~
- 接着采用了RMSProp中
下移动平均因子的思想~
最终Adam其实长这个样子~
为什么不直接使用 、
,而要用
、
呢?
是一种修正行为~
在前期,由于
的存在,会走得缓慢,直到累加一段时间后才会稳定下来,除上一个修正项则可以使前期行走得不至于太过缓慢~
该算法的作者也给出了推荐的参数: 、
、
~
具体参考:
小小的小结~
下面的三种算法,
都有除上一个因子,所以都是 Ada Learning Rate ~
Real Application 实际应用
Adam训练的 : BERT、Transformers 、 Tacotron 、 Big-GAN 、MAML
SGDM训练的 : YOLO(CV) 、 Mask R-CNN 、 ResNet
Adam & SGDM
Adam :训练更快,泛化时落差大,不稳定
SGDM :稳定,泛化时落差小,更好地收敛
generalization gap 泛化落差
图示为“泛化落差”带来的影响,训练样本与测试样本的 function 有偏移(正常的),Flat Minimum 偏移后相差不大;Sharp Minimum 偏移后成为了极大值,所以 gap 越小越好~
Adam 的问题就是收敛的不够好,不够稳:
如果一直小梯度,突然来一个大梯度的点(一个重要的信息点),反而移动的不够多~
AMSGrad
AdaBound
SGDM 的问题就是收敛慢:
需要一个更好的 Learning Rate ~
LR range test 、 Cyclical LR 、 SGDR 、 One-cycle LR