李宏毅2020机器学习 【学习笔记】 P8 Optimization for Deep Learning

本文概述了5种关键的机器学习算法:SGD、SGDM(带动量的SGD)、AdaGrad、RMSprop(改进的AdaGrad)和Adam。介绍了优化的概念,区分了在线和离线学习,以及这些算法在梯度调整过程中的作用。Adam在训练效率和稳定性方面表现出色,但存在收敛问题,而SGDM则因收敛慢而需其他学习率策略改进。
摘要由CSDN通过智能技术生成

目录

接下来要讲的5个算法

一些记号 Some Notations

 What is optimization about? 优化是在做什么?

On-line & Off-line

SGD

SGDM (SGD with Momentum)

* 小情景 *

AdaGrad

RMSprop (是AdaGrad算法的一种改进)

Adam 自适应时刻估计方法 Adaptive Moment Estimation

小小的小结~

Real Application 实际应用

Adam & SGDM


感谢B站up主搬运的课程:

【李宏毅2020机器学习深度学习(完整版)国语】 https://www.bilibili.com/video/BV1JE411g7XF/?share_source=copy_web&vd_source=262e561fe1b31fc2fea4d09d310b466d


接下来要讲的5个算法

  • SGD
  • SGDM
  • AdaGrad
  • RMSProp
  • Adam

一些记号 Some Notations

 x_t :输入的特征

 \theta_t :t次迭代时参数的值

 y_t :t次迭代时的prediction(预测结果)

 \hat{y_t} :Ground Truth

 \nabla L(\theta_t) 或 g_t :t次迭代时计算的梯度

 m_{t+1} :从0步累加至t步的“动量”,用于 求 \theta_{t+1}

 What is optimization about? 优化是在做什么?

找到更好的参数 \theta ,让预测得到的 Loss 更小!

On-line & Off-line

On-line Learning:在每一个 time step 仅会看到一个样本 x_t 及其 gt \hat{y_t}

Off-line Learning:在每一个 time step 都能看到所有的样本 x_t 及其 gt \hat{y_t}

 (虽说实操中没有庞大的空间存储所有样本来算 Loss ,但这里我们假设可以方便讨论)

SGD

上一篇笔记中的Tip2中有记录,在课程P5提及

李宏毅2020机器学习 【学习笔记】 P5Gradient Descent__bh的博客-CSDN博客

就是每次Loss只随机取一个样本的特征变量来运算,不再对所有样本求和。

SGDM (SGD with Momentum)

为什么要加入动量呢?

把走Loss的梯度想象成爬坡,加入的动量就是惯性

* 小情景 *

假设最初的v设为0,\alpha 通常设为一个小数如0.9

假设我们选取了一个点,梯度是负的,那么参数就开始增加,我们的v也开始累加(一直是正数,一直加),那我们如果后续的梯度一直是负的,再加上这个越加越大的“惯性”,下坡就会下得越来越快~

就这样一直下坡,我们来到了一个“谷底”,当我们迈出这一步时,发现我们的梯度是0 / 梯度是正数,如果按照没有动量的算法,这一步我们将不再更新参数 / 往回走。

But,我们有动量啊!

梯度为0,并不会立刻停下来(有惯性刹不住啊~),依然会带着前面累加出的正数v继续向前走!

再向前走,如果梯度变回了负号,那么说明我们成功地走出了驻点~

如果梯度变成了正号,我们也不会非常迅猛地立马掉头往回冲,如果 \eta \frac{\partial L}{\partial W} 大于 \alpha v ,往回冲地速度会被减慢~;如果 \eta \frac{\partial L}{\partial W} 小于 \alpha v ,那就不会立刻掉头,还会向前再逐渐减慢地走一段距离哦(说不定这样一走就直接走出了local min~)

AdaGrad

上一篇笔记中的Tip1有记录,在课程P5提及

李宏毅2020机器学习 【学习笔记】 P5Gradient Descent__bh的博客-CSDN博客

上一节课中,李宏毅老师讲的是“强调反差的效果”

这一节课,助教的讲法更加形象些~

该算法就是在 Learning Rate \eta 下除上一个因子(过去所有梯度的和)

当你前面走的步子很大(梯度很大),说明你正在走一个很陡峭的地方(很陡峭下降很快,很可能马上有“谷底”),那么你接下来步子该放缓了,再大步走可能就要错过那个“谷底”了。

体现在式子中,当前面的梯度 g 都非常大时,都会累加在 \eta 下面的因子,如此 \eta 就会越来越小~

反之亦然(前面步子很小就得加快咯)~

RMSprop (是AdaGrad算法的一种改进)

 与 AdaGrad 的区别就是 \eta 下面的因子进行了改变

不再是像 AdaGrad 那样来一个新梯度就把他暴力加上去~

而是在上一个 time step 的因子 v_{t-1} 前面加上了一个衰减因子,在新加进来的梯度前面也加一个因子 (1-\alpha )

这样的作法被称为指数式递减加权的移动平均

像上图这样不断递推下去,会发现离当下这一 time step 越久远的梯度,其权重0.9的指数会越来越大,淡化了久远历史行动的影响~

“鉴于神经网络都是非凸条件下的,RMSProp在非凸条件下结果更好,改变梯度累积为指数衰减的移动平均以丢弃遥远的过去历史。”

上述都是理论讨论,这里助教给出了其实际意义,将过去的步骤淡化后,假如你从一开始每一步的梯度都很大, \eta 也不会永无止境地变小(导致慢到离谱),因为很前面的步骤作用正在被每一步的衰减因子削弱~

具体参考【优化算法】一文搞懂RMSProp优化算法 - 知乎 (zhihu.com)

Adam 自适应时刻估计方法 Adaptive Moment Estimation

“RMSProp 的动量版”、“RMSProp+SGDM”这样的说法都对~

  • 回头再看一眼SGDM,会发现事实上把前文公式中的 \alpha 换成 -\beta ,把 \eta 换成 (1-\beta) ,不难发现这其实是个一阶梯度版本的指数移动平均~

  • 接着采用了RMSProp中 \eta 下移动平均因子的思想~

最终Adam其实长这个样子~

 为什么不直接使用 m_t 、v_t ,而要用 \hat{m_t} 、 \hat{v_t} 呢?

是一种修正行为~

在前期,由于 \beta (\beta < 1) 的存在,会走得缓慢,直到累加一段时间后才会稳定下来,除上一个修正项则可以使前期行走得不至于太过缓慢~

该算法的作者也给出了推荐的参数: \beta_1 = 0.9 、 \beta_2 = 0.999 、 \varepsilon = 10^{-8} ~

具体参考:

如何理解Adam算法(Adaptive Moment Estimation)? - 知乎 (zhihu.com)

一文看懂各种神经网络优化算法:从梯度下降到Adam方法 - 知乎 (zhihu.com)

小小的小结~

 下面的三种算法, \eta 都有除上一个因子,所以都是 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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值