码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Adam优化器(通俗理解)


    网上关于Adam优化器的讲解有很多,但总是卡在某些部分,在此,我将部分难点解释进行了汇总。理解有误的地方还请指出。

    Adam,名字来自:Adaptive Moment Estimation,自适应矩估计。是2014年提出的一种万金油式的优化器,使用起来非常方便,梯度下降速度快,但是容易在最优值附近震荡。竞赛中性能会略逊于SGD,毕竟最简单的才是最有效的。但是超强的易用性使得Adam被广泛使用。

    Adam的推导公式:

    解释:

    第一项梯度g_{t}就是损失函数\hat{L}对\theta_{t}求偏导。

    第二项m_{t}为t时刻,梯度在动量形式下的一阶矩估计。

    第三项v_{t}为梯度在动量形式下的二阶矩估计。

    第四项\hat{m_{t}}为偏差纠正后的一阶矩估计。其中:\beta_{1}^{t}是贝塔1的t次方,下面同理。

    第五项\hat{v_{t}}为偏差纠正后的二阶矩估计。

    最后一项是更新公式,可以参考RMSProp以及之前的算法。

    问题:

    1. 梯度下降:不懂梯度下降建议先搞懂SGD优化器。

    2. 动量:在之前的SGDM优化器中就被应用了。

    3. 矩估计:不懂请看大学里面的《概率论与数理统计》。

    4. 为什么需要偏差纠正:

    这里只是讲讲我的理解。拿二阶矩估计v_{t}来举例,各个v_{t}的公式如下:

    \begin{align*} v_{1}&=(1-\beta_{2})g_{1}^2\\ v_{2}&=\beta_{2}v_{1}+(1-\beta_{2})g_{2}^2\\ &=\beta_{2}(1-\beta_{2})g_{1}^2+(1-\beta_{2})g_{2}^2\\ &=(1-\beta_{2})(\beta_{2}g_{1}^2+g_{2}^2)\\ &=(1-\beta_{2})(\beta_{2}^{2-1}g_{1}^2+\beta_{2}^{2-2}g_{2}^2)\\ &=(1-\beta_{2}){\textstyle \sum_{i=1}^{2}\beta_{2}^{2-i}g_{i}^2}\\ v_{t}&=(1-\beta_{2}){\textstyle \sum_{i=1}^{t}\beta_{2}^{t-i}g_{i}^2} \end{align*}

    而我们实际上需要的是梯度的二阶矩估计,也就是E(g_{i}^{2})。因此使用动量求出来的二阶矩估计是有偏的,需要纠正。我们对动量二阶矩估计v_{t}求期望E(v_{t}),可以通过等比数列公式得到E(v_{t})与E(g_{i}^{2})的关系: 

    \begin{align*} E(v_{t})&=(1-\beta_{2})E({\textstyle \sum_{i=1}^{t}\beta_{2}^{t-i}g_{i}^2})+\xi \\ &=(1-\beta_{2})(1+\beta_{2}^{1}+\beta_{2}^{2}+...+\beta_{2}^{t-1})E(g_{i}^2)+\xi \\ &=(1-\beta_{2})(\frac{1-(\beta_{2})^{t}}{1-\beta_{2}})E(g_{i}^2)+\xi \\ &=(1-\beta_{2}^{t})E(g_{i}^2)+\xi \end{align*}

    因此,要得到E(g_{i}^{2}),就需要除掉前面的系数((1-\beta_{2}^{t})是一个常数,\beta_{2}^{t}是贝塔2的t次方,t:t时刻)。

    主要问题就是这些,其他的可以多看Adam之前一些优化器的资料,很多是一脉相承的。

  • 相关阅读:
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java扶贫产品和扶贫物资捐赠系统r32rk
    【Windows】安装win10虚拟机
    【atoi函数的介绍以及模拟实现】
    python+requests+unittest执行自动化接口测试!
    B站短视频竟涨900w播放,B站UP主不可忽视的流量蓝海!
    【2021集创赛】Arm杯三等奖:基于FPGA的人脸检测SoC设计
    mackdown语法
    【图论中貌似要二分的题,有可能是假二分,直接用kruskal】【最小生成树-独立的联通块】【最小生成森林-多个独立的联通块】【如何判定最小生成森林】
    CSS 斜条纹进度条
    包gopkg.in/ini.v1在 Go 中提供 INI 文件读取和写入功能
  • 原文地址:https://blog.csdn.net/BeiErGeLaiDe/article/details/126059488
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号