深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战

前一篇文章,使用线性回归模型逼近目标模型 | PyTorch 深度学习实战

本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started

本篇文章内容来自于 强化学习必修课:引领人工智能新时代【梗直哥瞿炜】

深度学习里面的而优化函数

发展历史

机器学习,就是随机初始化参数,然后根据损失函数,不断的使用梯度更新参数。 因此,如何精确的调整参数,十分重要,这个参数更新的算法就是梯度下降,梯度下降算法出现后,不断的演进。

梯度下降变种算法提出时间轴:

  • 1847 年 梯度下降算法
  • 1957 年 随机梯度下降算法 SGD
  • 1993 年 动量法
  • 1994 年 小批量随机梯度动量法
  • 2011 年 AdaGrad 算法
  • 2011 年 AdaDelta 算法
  • 2012 年 RMSProp/AdaDelta 算法
  • 2014 年 Adam 算法

不同梯度下降算法的原理概述

不同算法的区别,主要体现在 2,3 步。对于1、4 步,是通用的。

核心差异

通过可视化比较,不同算法在梯度上,选择下降的方向是不同的,论文 《An empirical analysis of the optimization of deep network loss surfaces》

比如,RMSProp 和 AdaDelta 算法

最佳策略的讨论

不能一下子确定哪个最好,要根据数据、问题进行尝试,通常的经验如下:

  • 不想做精细的调优,那么就用 Adam;类似于开车上的自动挡
  • 更加自如地控制优化迭代的各类参数,那么 SGD,选择性的添加动量等,相当于开车上的手动挡
  • 先用 Adam 快速下降,再用 SGD 调优
  • 还是熟悉自己的数据,如果数据是稀疏的,那么就是选择学习率自适应的算法
  • 使用一个小规模的验证集,进行控制变量法的对比,看哪个算法能快速的收敛

Momentum 动量法

物理学中的动量

动量守恒定律:一个物质系统不受外力或所受外力之和为零,(即 F 合外力 = 0 F_{合外力}=0 F合外力=0 ),那么它的动量必定守恒 。这个定律用数学表达式记作:

因为动量是矢量,所以动量守恒定律的等式是一个矢量方程。若物体的运动是一维的,那么可以通过规定正方向将这个方程标量化,其中"+"表示物体运动方向与正方向相同,"-"表示物体运动方向与正方向相反。若物体的运动是二维甚至更高维度,则求和符合矢量相加减的原则。

动量守恒定律不仅适用于二体体系,也适用于多体体系:不仅适用于惯性系,也适用于非惯性系。动量守恒定律的适用范围比牛顿运动定律广。

深度学习中的动量

优化梯度下降的算法:动量有加速收敛的效果。

梯度更新

动量随机梯度下降。

将当前的梯度与上一步的梯度加权平均来减少梯度的震荡。

运动轨迹

直观的观察到,为什么动量可以优化学习过程

优缺点

AdaGrad 算法

AdaGrad 是二阶随机梯度下降动量法的改进版本。二阶动量的出现,意味着自适应学习率优化算法时代的到来。(优化学习率的调整)

基本思想

对更新的很频繁的参数,更新的慢一点;对更新的不频繁的参数,当更新发生的时候,更新的大一点。更新过程:

  • 计算一阶动量 g τ g_{\tau} gτ
  • 根据一阶动量计算二阶动量 V t V_{t} Vt
  • 根据二阶动量、一阶动量和学习率,计算 η t \eta_{t} ηt
  • 根据 η t \eta_{t} ηt 更新参数 w w w

原理:参数更新越频繁, V t V_{t} Vt 越大,因为其出现在分母上,导致最终本次参数更新越小;与之相反,如果在更新过程历史中,参数更新越少,则 V t V_{t} Vt 越小,导致最终参数更新越大。

稀疏特征

当样本空间是稀疏特征矩阵的时候,AdaGrad 算法特别有效果。

优缺点

AdaGrad 算法优缺点

左图是 标准的 SGD,右侧是 AdaGrad.

AdaDelta 算法

避免使用手动调整学习率的方法,来控制训练过程。自动调整学习率,使得训练过程更加顺畅。

基本原理

  • 左侧是 RMSProp 算法,右侧是 AdaDelta 算法
  • ϵ \epsilon ϵ 是一个正数,防止分母为零
  • E 是对当前梯度 g 或 Δ w \Delta w Δw 求期望

优缺点

RMSProp 算法

AdaGrad 存在学习率过小,学习收敛慢的问题。RMSProp 算法是对 AdaGrad 的问题的改进。

基本原理

基本原理是:改变二阶动量计算方法的策略,不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度。

优缺点

缺点:增加了超参数,对稀疏特征矩阵的学习效果变差。

Adam 算法

目前最流行的梯度算法改进。

基本思想

把一阶动量和二阶动量都用起来。自适应动量估计。

  • 快速收敛
  • 引入两个因子 β 1 \beta_{1} β1 控制一阶动量,通常使用 0.9; β 2 \beta_{2} β2 控制二阶动量,通常设置为 0.999
  • m ^ t \widehat m_{t} m t 和 v ^ t \widehat v_{t} v t 分别是对一阶动量和二阶动量的偏差矫正
相关推荐
文心快码BaiduComate15 分钟前
百度云与光本位签署战略合作:用AI Agent 重构芯片研发流程
前端·人工智能·架构
风象南1 小时前
Claude Code这个隐藏技能,让我告别PPT焦虑
人工智能·后端
Mintopia2 小时前
OpenClaw 对软件行业产生的影响
人工智能
陈广亮2 小时前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬2 小时前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia3 小时前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区3 小时前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两6 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
前端付豪6 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain