Typesetting math: 100%

Gradient Optimization

Gradient Optimization

Gradient Descent

  • Batch Gradient Descent
  • Mini-Batch Gradient Descent
  • Stochastic Gradient Descent

Mini-Batch Gradient Descent

  • 参数

    • Mini-Batch Size: 一个Batch样本所含的样本数
  • 参数效果

    • 通过设置Mini-Batch Size可以将Mini-Batch转为Stochastic Gradient Descent和Bath Gradient Descent
    • 当Mini-Batch Size == m时, Mini-Batch Gradient Descent为Batch Gradient Descent; 当Mini-Batch Size == 1时, Mini-Batch Gradient Descent为Stochastic Gradient Descent; 一般Mini-Batch Size的大小为2的幂次方, 主要考虑到与计算机内存对齐, 一般Mini-Batch Size设置在64-512
  • 特点对比

    • Batch Gradient Descent: 当数据量大的时候程序运行很慢
    • Stochastic Gradient Descent: 一般不采用此方法, 因为此Gradient Descent方法每迭代一个样本就会更新参数Wb, 在梯度下降的时候有很多噪音; 但是它可以应用到在线学习上
    • Mini-Batch Gradient Descent: 当数据量较大的时候可以加快收敛速度, 但是当在梯度下降的时候, 容易产生震荡(oscillate), 如图

    • 其中, +表示Jmin, 在使用Mini-Batch Gradient Descent的时候, 容易在数值方向产生震荡, 我们期望的是缩小竖直方向上的震荡, 在水平方向上加快收敛的速率, 对于这个问题, 解决方案是在Update Parameters的时候, 采用Momentum, RMSProp或者Adam的方法更新参数Wb, 在下面就会提到

处理震荡

  • 指数权重均值(Exponentially Weighted Average, 简称EMA), 后面的Momentum, RMSProp和Adam都需要EMA

    • 以一年的中所有天数的温度为例, 如图

    • 由上图可知, θ为气温, t为天数, 总体来说中间时刻气温低一点, 两侧高一点
    • 定义
      • vt=βvt1+(1β)θt, 其中β为EMA中的一个参数, 一般他的取值范围在0.9β0.99; vt表示的就是EMA; θt为第t天的气温; βvt表示的是前t天的关注度, 后面的(1β)θt是对当前天气温的关注度, 最左侧的vt才是我们对当前天的EMA; EMA公式有递归的感觉
  • Momentum

    • 公式
      • vdW[l]=βvdW[l]+(1β)dW[l], 其中, dW[l]是第l层的梯度矩阵, 其他与EMA中的是一样的
      • 返现与EMA中不同的是这里的βvdW[l]不是βvdW[l1], 因为我们在实现该算法的时候采用先默认赋予0值, 再在每一次迭代时累加, 下面的RMSProp和Adam也是如此
    • 更新参数
      • W[l]=W[l]αvdW[l]
  • RMSProp

    • 公式
      • sdW[l]=βvdW[l]+(1β)(dW[l])2, 其中, 与Momentum不同的就是此处(dW[l])2
    • 更新参数
      • W[l]=W[l]αdW[l]sdW[l]+ϵ, 其中ϵ108
  • Adam

    • Adam算法是Momentum与RMSProp的结合
    • 公式
      • vdW[l]=β1vdW[l]+(1β1)dW[l]
      • vdW[l]correct=vdW[l]1(β1)t, 其中t表示深度学习算法迭代到第t次, 这一步是vdW[l]的修正, 在后面即使使用vdW[l]correct
      • sdW[l]=β2vdW[l]+(1β1)(dW[l])2
      • sdW[l]correct=sdW[l]1(β2)t,其中t表示深度学习算法迭代到第t次, 这一步是sdW[l]的修正, 在后面即使使用sdW[l]correct
    • Adam结合了之前的Momentum与RMSProp算法, 同时增加了校正EMA的步骤, 因为在Momentum和RMSProp算法都有βs, 所有在这里为了区分, 使用了vs, β1β2
    • 更新参数
      • W[l]=W[l]αvdW[l][l]sdW[l]+ϵ, 其中ϵ108

使用代码实现的大致思路

  • 选择Mini-Batch Gradient Descent
  • Shuffle原始数据
  • 选择Mini-Batch Size进行Gradient Descent
  • 在迭代Update Parameters时, 先为Momentum, RMSProp或者Adam需要的v, s变量赋予0值, 维度与对应的dW一致
  • 迭代即可

学习率α的衰减

  • 一般来说我们只需要直接固定α的值, 随后根据结果进行调整, 但是在数据量很大的时候就会比较浪费时间, 于是使用到了alpha的衰减
  • 定义
    • α=11+decay_rate×epochα0
posted @   gogogo11  阅读(211)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
阅读排行:
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
点击右上角即可分享
微信分享提示