• torch.optim.Adam


    Adam在PyTorch的官方文档中有详细介绍,摘录如下:
    Adam介绍
    在此有几处知识点做些详细说明。
    上图的算法排除IF后(一般情况),按如下执行:

    1. 计算梯度: g t ← ∇ θ f t ( θ t − 1 ) g_{t} \leftarrow \nabla_{\theta} f_{t}\left(\theta_{t-1}\right) gtθft(θt1)
    2. 累计梯度: m t ← β 1 m t − 1 + ( 1 − β 1 ) g t m_{t} \leftarrow \beta_{1} m_{t-1}+\left(1-\beta_{1}\right) g_{t} mtβ1mt1+(1β1)gt
    3. 累计梯度的平方: v t ← β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_{t} \leftarrow \beta_{2} v_{t-1}+\left(1-\beta_{2}\right) g_{t}^{2} vtβ2vt1+(1β2)gt2
    4. 偏差修正: m t ^ ← m t / ( 1 − ( β 1 ) t ) \widehat{m_{t}} \leftarrow m_{t} /\left(1-(\beta_{1})^{t}\right) mt mt/(1(β1)t)
    5. 偏差修正: v t ^ ← v t / ( 1 − ( β 2 ) t ) \widehat{v_{t}} \leftarrow v_{t} /\left(1-(\beta_{2})^{t}\right) vt vt/(1(β2)t)
    6. 更新参数: θ t ← θ t − 1 − γ m t ^ / ( v t ^ + ϵ ) \theta_{t} \leftarrow \theta_{t-1}-\gamma \widehat{m_{t}} /\left(\sqrt{\widehat{v_{t}}}+\epsilon\right) θtθt1γmt /(vt +ϵ)

    其中累计梯度和梯度的平方均用指数加权平均(exponentially weighted averges)的方法来实现,如果学习过吴恩达老师的deepLearning课程应该不陌生,这个方法的通式为:
    v t = β ∗ v t − 1 + ( 1 − β ) ∗ θ t v_{t}=\beta * v_{t-1}+(1-\beta) * \theta_{t} vt=βvt1+(1β)θt
    其中 θ t \theta_{t} θt为本次迭代的数值, v t − 1 v_{t-1} vt1为上一次累计的数值, β \beta β为权重。一般将权重下降到峰值权重的 1 / e 1/e 1/e时,就说他平均了 1 / ( 1 − β ) 1/(1-\beta) 1/(1β)个数据。例如 β = 0.9 \beta=0.9 β=0.9时,基本认为其平均此前的10次数据。但该方法会导致前期的指数加权平均存在较大误差,因此需要进行偏差修正。而Adam优化器中,就引入了修正方法:
    v t = v t 1 − β t v_{t}=\frac{v_{t}}{1-\beta^{t}} vt=1βtvt
    所以在上述Adam优化器的过程中,有4,5两步进行偏差修正。

  • 相关阅读:
    Linux论坛搭建
    FestDFS
    华为云云耀云服务器L实例评测 | 实例场景体验之搭建个人博客:通过华为云云耀云服务器构建个人博客
    NPDP考生!7月31号考试要求在这里看!
    SpringBoot系列之动态生成cron表达式执行定时程序
    Linux文件权限
    工厂方法模式Factory Method
    C语言char与short取反以及符号判断问题
    Python实现支持向量机SVM分类模型(SVC算法)并应用网格搜索算法调优项目实战
    py2neo 查询语句
  • 原文地址:https://blog.csdn.net/zhongzhehua/article/details/126407489