【Interview】Optimization

本文回顾了深度学习优化算法的发展历程,从SGD到Nadam,解析了各种算法如SGDM、NAG、Adagrad、AdaDelta、Adam的工作原理及优缺点。详细对比了它们在损失面等高线图和鞍点处的表现,强调了动量、二阶动量、指数移动平均等概念的重要性。

Reference

https://zhuanlan.zhihu.com/p/32626442
https://zhuanlan.zhihu.com/p/21360434?refer=intelligentunit

深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展历程

推荐的两个更新方法是SGD+Nesterov动量方法,或者Adam方法


  • 不同算法在损失面等高线图中的学习过程

    • Adagrad、Adadelta、RMSprop 从最开始就找到了正确的方向并快速收敛
    • SGD 找到了正确方向但收敛速度很慢
    • SGD-M 和 NAG 最初偏离航道,最终纠正到正确方向
      SGD-M 偏离的惯性比 NAG 更大。
  • 不同算法在鞍点处的表现

    • Adagrad、RMSprop、Adadelta 都很快找到了正确的方向并快速收敛
    • SGD、SGD-M、NAG 都受到了鞍点的严重影响
      SGD-M、NAG 最终还是逃离了鞍点
      SGD 没有逃离靶点

Gradient Descent

  • 学习率

  • 梯度
  • 根据历史梯度计算的一阶动量
  • 根据历史梯度计算的二阶动量
  • 模型参数

Vanilla SGD

朴素 SGD (Stochastic Gradient Descent) 最为简单,没有动量的概念

SGD 的缺点在于收敛速度慢,可能在鞍点处震荡,停留在一个局部最优点


SGDM (SGD with Momentum)

解决SGD遇到沟壑时陷入震荡问题,引入动量momentum

SGD 在遇到沟壑时容易陷入震荡。为此,可以为其引入动量 Momentum ,加速 SGD 在正确方向的下降并抑制震荡。

SGD-M 在原步长之上,增加了与上一时刻步长相关的 <img src="https://leanote.com/api/file/getImage?fileId=5dc0da82ab6441425d000103) ,

  • γγγ 通常取 0.9 [0.5,0.9,0.95,0.99]
    和学习率随着时间退火类似,动量随时间变化的设置有时能略微改善最优化的效果,其中动量在学习过程的后阶段会上升。一个典型的设置是刚开始将动量设为0.5而在后面的多个周期(epoch)中慢慢提升到0.99。

好处

  • 参数更新方向不仅由当前的梯度决定,也与此前累积的下降方向有关。

  • 使得参数中那些梯度方向变化不大的维度可以加速更新,并减少梯度方向变化较大的维度上的更新幅度。由此产生了加速收敛减小震荡的效果。


NAG (Nesterov Accelerated Gradient">

SGD-M 基础上改进梯度计算公式(利用未来位置计算)

算法能够在目标函数有增高趋势之前,减缓更新速率

SGD-M 的基础上进一步改进了步骤 1 中的梯度计算公式:

  • SGD-M 的步长计算了当前梯度(短蓝向量)和动量项 (长蓝向量)
  • 既然已经利用了动量项来更新 ,那不妨先计算出下一时刻 θθθ 的近似位置 (棕向量)
  • 并根据该未来位置 计算梯度(红向量)
  • 然后使用和 SGD-M 中相同的方式计算步长(绿向量)
    这种计算梯度的方式可以使算法更好的「预测未来」,提前调整更新速率。
  • 既然我们知道动量将会把我们带到绿色箭头指向的点,我们就不要在原点(红色点)那里计算梯度了
  • 使用Nesterov动量,我们就在这个“lookahead”的地方计算梯度。

好处

  • 在理论上对于凸函数它能得到更好的收敛,在实践中也确实比标准动量表现更好一些

Adagrad

改进 SGD、SGD-M 和 NAG ,使不同参数的更新频率不同,引入了二阶动量

SGD、SGD-M 和 NAG 均是以相同的学习率去更新 的各个分量

而深度学习模型中往往涉及大量的参数,不同参数的更新频率往往有所区别。

Adagrad 可以做到不同参数的更新频率不同 ,引入了二阶动量:

  • 是对角矩阵
  • 二阶动量 为 参数iii初始时刻到时刻 ttt梯度平方和

可以这样理解:

  • 学习率等效为
  • 对于此前频繁更新过的参数,其二阶动量的对应分量较大,学习率就较小
  • 这一方法在稀疏数据的场景下表现很好

缺点:

  • 二阶动量持续累积导致学习率逐渐为0的问题

Adadelta

采用指数移动平均公式计算,解決Adagrad 中二阶动量持续累积导致学习率逐渐为0的问题

不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度


RMSprop

采用指数移动平均公式计算,解決Adagrad 中二阶动量持续累积导致学习率逐渐为0的问题

在 Adagrad 中,

  • 是单调递增的
    ( 二阶动量 参数第 iii 维从初始时刻到时刻 ttt 的梯度平方和 )
  • 使得学习率逐渐递减至 0,可能导致训练过程提前结束
    (学习率等效为 )

为了改进这一缺点,可以考虑在计算二阶动量时不累积全部历史梯度,而只关注最近某一时间窗口内的下降梯度

  • 采用指数移动平均公式计算,这样即可避免二阶动量持续累积的问题

  • 和 SGD-M 中的参数类似,通常取 0.9 左右


Adam

SGD-M 和 RMSprop 的结合,把一阶动量和二阶动量都用起来(Adaptive + SGD-M) ,一阶二阶动量用指数移动平均计算,并做偏置校正

  • SGD-M

  • 和 RMSprop 对二阶动量使用指数移动平均类似,Adam 中对一阶动量也是用指数移动平均计算

优化算法里最常见的两个超参数 就都在这里了,前者控制一阶动量,后者控制二阶动量。

  • 注意到,在迭代初始阶段, 有一个向初值的偏移(过多的偏向了 0)
    因此,可以对一阶和二阶动量做偏置校正 (bias correction")

NAdam

在 Adam 之上融合了 NAG 的思想

  • NAG

核心在于,计算梯度时使用了「未来位置」

NAdam

  • 提出了一种 公式变形的思路 ,大意可以这样理解:

    • 只要能在梯度计算中考虑到「未来因素」,即能达到 Nesterov 的效果;既然如此,那么在计算梯度时,可以仍然使用原始公式
    • 但在前一次迭代计算 时,就使用了未来时刻的动量
      那么理论上所达到的效果是类似的
  • 公式修改为

    理论上

    • 下一刻的动量为

    • 在假定连续两次的梯度变化不大的情况下,即

    • 此时,即可用 近似表示未来动量加入到 的迭代式中。

  • 在 Adam 加入 的变形

    • 展开有
    • 引入
    • 参数更新
【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值