当前位置: 首页 > news >正文

大模型算法面试笔记——常用优化器SGD,Momentum,Adagrad,RMSProp,Adam

常用参数:ttt-步数,α\alphaα-学习率,θ\thetaθ-参数,f(θ)f(\theta)f(θ)-目标函数,gtg_tgt-梯度,β1\beta_1β1-一阶矩衰减系数,通常取0.9,β2\beta_2β2-二阶矩,mtm_tmt-均值,vtv_tvt-方差,m^t\hat{m}_tm^t-mtm_tmt偏置矫正,v^t\hat{v}_tv^t-vtv_tvt偏置矫正。

  • 梯度下降(BGD):最简单的迭代求解算法,选取开始点θ0\theta_0θ0,对t=1,...,Tt=1,...,Tt=1,...,Tθt=θt−1−ηgt−1\theta_t=\theta_{t-1}-\eta g_{t-1}θt=θt1ηgt1,其中η\etaη是学习率。

  • 随机梯度下降(SGD):由于有nnn个样本时,为了减少计算量,所以SGD在时间ttt随机选取一个样本tit_iti来近似f(x)f(x)f(x),SGD的下降方向是对真实梯度方向的无偏估计。

  • 批量梯度下降(MBGD):为了充分利用GPU多核,计算批量的梯度,也是一个无偏的近似,但降低了方差。

  • 动量法(Momentum):为增加收敛的稳定性,并缓解陷入局部最优,动量法使用平滑过的梯度对权重更新:θt=θt−1−ηvt\theta_t=\theta_{t-1}-\eta v_tθt=θt1ηvt,它用一个动量vtv_tvt累加了过去的梯度,其中gtg_tgt为当前梯度:
    vt=βvt−1+(1−β)⋅gtv_t=\beta v_{t-1}+(1-\beta)·g_tvt=βvt1+(1β)gt

  • Adagrad:对于不同的参数,有时需要更新的幅度相差较大,此时不同参数就需要不同的学习率,Adagrad采用的方法是,将历史梯度的平方和累加起来,为学习率添加一个分母项Gt+ϵ\sqrt{G_t+\epsilon}Gt+ϵ,其中Gt=Gt−1+gt2G_t = G_{t-1}+g_t^2Gt=Gt1+gt2,因此,参数更新公式就变成:
    θt=θt−1−ηGt+ϵ⋅gt\theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{G_t+\epsilon}}·g_tθt=θt1Gt+ϵηgt
    如此可见,对于梯度一直很大的参数,其对应的学习率就会变小,而如果参数的梯度很大,学习率相对就更大一点,实现了一定程度上的自动调整。此方法比较适合处理悉数数据,因为稀疏特征的参数更新少,学习率会较大,实现更快收敛,而缺点是累积梯度会随时间增大,导致学习率越来越小甚至接近0,可能导致后期收敛太慢。

  • RMSProp:和Adagrad类似,对累积平方梯度上做改进:Gt=λGt−1+(1−λ)⋅gt2G_t=\lambda G_{t-1}+(1-\lambda)·g_t^2Gt=λGt1+(1λ)gt2,参数更新公式相同。

  • Adam:结合了动量法和Adagrad,动态调整每个参数的学习率,同时利用梯度的一阶矩(动量)和二阶矩(自适应学习率,也可以理解为转动惯量)加速收敛。具体分为四步:
    计算梯度的一阶距估计:
    mt=β1⋅mt−1+(1−β1)⋅gtm_t=\beta_1·m_{t-1}+(1-\beta_1)·g_tmt=β1mt1+(1β1)gt
    计算梯度的二阶矩估计:
    vt=β2⋅vt−1+(1−β2)⋅gt2v_t=\beta_2·v_{t-1}+(1-\beta_2)·g_t^2vt=β2vt1+(1β2)gt2
    这样设计的原因是,展开式中,当t为无穷大时,历史梯度项权重系数和为1,此为数学依据:
    mt=(1−β1)(gt+β1gt−1+β12gt−2+β13gt−3+...)m_t=(1-\beta_1)(g_t+\beta_1g_{t-1}+\beta_1^2g_{t-2}+\beta_1^3g_{t-3}+...)mt=(1β1)(gt+β1gt1+β12gt2+β13gt3+...)
    ∑i=0∞β1i=11−β1\sum_{i=0}^{\infin}\beta^i_1=\frac{1}{1-\beta_1}i=0β1i=1β11
    由于初始项受初始值为0的影响较大,所以进行偏差修正,同理,这样设计的原因是有限项等比数列和公式∑i=0tβ1i=1−β1t1−β1\sum_{i=0}^{t}\beta^i_1=\frac{1-\beta_1^t}{1-\beta_1}i=0tβ1i=1β11β1t
    mt^=mt1−β1t,vt^=vt1−β2t\hat{m_t}=\frac{m_t}{1-\beta_1^t},\hat{v_t}=\frac{v_t}{1-\beta_2^t}mt^=1β1tmt,vt^=1β2tvt 例如,当t=1t=1t=1时:m^1=m11−β11=(1−β1)g11−β1=g1\hat{m}_1=\frac{m_1}{1-\beta_1^1}=\frac{(1-\beta_1)g_1}{1-\beta_1}=g_1m^1=1β11m1=1β1(1β1)g1=g1
    最后进行参数更新:
    θ=θt−1−ηv^t+ϵ⋅m^t\theta=\theta_{t-1}-\frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}·\hat{m}_tθ=θt1v^t+ϵηm^t最后贴一个论文原文算法部分:
    请添加图片描述

http://www.dtcms.com/a/300492.html

相关文章:

  • 算法思维进阶 力扣 300.最长递增子序列 暴力搜索 记忆化搜索 DFS 动态规划 C++详细算法解析 每日一题
  • 用KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学 (超级超级超级简单)
  • Torchv Unstrustured 文档解析库
  • Mac配置本地邮件
  • 【Qt开发】信号与槽(二)-> 信号和槽的使用
  • Web Worker:解锁浏览器多线程,提升前端性能与体验
  • 29.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--用户配置服务
  • 七、搭建springCloudAlibaba2021.1版本分布式微服务-skywalking9.0链路追踪
  • 重生之我在暑假学习微服务第二天《MybatisPlus-下篇》
  • MCP + LLM + Agent 8大架构:Agent能力、系统架构及技术实践
  • 2.苹果ios逆向-Windows电脑端环境搭建-Conda安装和使用(使用Conda来管理多个Python环境)
  • Canvas实现微信小程序图片裁剪组件全攻略
  • 设计模式(七)结构型:适配器模式详解
  • 可控、安全、可集成:安防RTSP|RTMP视频播放模块工程实践参考
  • 医疗AI语义潜空间分析研究:进展与应用
  • 【机器学习深度学习】LLaMAFactory评估数据与评估参数解析
  • J3160迷你小主机 性能测试 对比i3-4170 以及服务器
  • C++ 多线程 std::thread::join
  • Window 部署 coze-stdio(coze 开发平台)
  • GAN/cGAN中到底要不要注入噪声
  • InfluxDB 与 MQTT 协议集成实践(二)
  • Element表格单元格类名动态设置
  • Linux网络
  • libomxil-bellagio移植到OpenHarmony
  • Ubuntu简述及部署系统
  • MybatisPlus-19.插件功能-通用分页实体
  • JDK 11.0.16.1 Windows 安装教程 - 详细步骤+环境变量配置
  • Day44 Java数组08 冒泡排序
  • AI与区块链Web3技术融合:重塑数字经济的未来格局
  • SpringSecurity实战:核心配置技巧