• 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两步进行偏差修正。

  • 相关阅读:
    Spark 连接 Mongodb 批量读取数据
    使用 🧨 Diffusers 实现 ControlNet 高速推理
    算法基础:动态规划
    opencv-python之图像的加法与按位运算
    Django(18):中间件原理和使用
    ROS2系列知识(4): 理解【服务】的概念
    苹果Ios系统app应用程序开发者如何获取IPA文件签名证书时需要注意什么?
    如何使用程序通过OCR识别解析PDF中的表格
    Django-(3)
    CMU15445 (Fall 2019) 之 Project#3 - Query Execution 详解
  • 原文地址:https://blog.csdn.net/zhongzhehua/article/details/126407489