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方法每迭代一个样本就会更新参数和, 在梯度下降的时候有很多噪音; 但是它可以应用到在线学习上
- Mini-Batch Gradient Descent: 当数据量较大的时候可以加快收敛速度, 但是当在梯度下降的时候, 容易产生震荡(oscillate), 如图
- 其中, +表示, 在使用Mini-Batch Gradient Descent的时候, 容易在数值方向产生震荡, 我们期望的是缩小竖直方向上的震荡, 在水平方向上加快收敛的速率, 对于这个问题, 解决方案是在Update Parameters的时候, 采用Momentum, RMSProp或者Adam的方法更新参数和, 在下面就会提到
处理震荡
-
指数权重均值(Exponentially Weighted Average, 简称EMA), 后面的Momentum, RMSProp和Adam都需要EMA
- 以一年的中所有天数的温度为例, 如图
- 由上图可知, 为气温, 为天数, 总体来说中间时刻气温低一点, 两侧高一点
- 定义
- , 其中为EMA中的一个参数, 一般他的取值范围在; 表示的就是EMA; 为第天的气温; 表示的是前天的关注度, 后面的是对当前天气温的关注度, 最左侧的才是我们对当前天的EMA; EMA公式有递归的感觉
-
Momentum
- 公式
- , 其中, 是第层的梯度矩阵, 其他与EMA中的是一样的
- 返现与EMA中不同的是这里的不是, 因为我们在实现该算法的时候采用先默认赋予0值, 再在每一次迭代时累加, 下面的RMSProp和Adam也是如此
- 更新参数
- 公式
-
RMSProp
- 公式
- , 其中, 与Momentum不同的就是此处
- 更新参数
- , 其中
- 公式
-
Adam
- Adam算法是Momentum与RMSProp的结合
- 公式
- , 其中t表示深度学习算法迭代到第t次, 这一步是的修正, 在后面即使使用
- ,其中t表示深度学习算法迭代到第t次, 这一步是的修正, 在后面即使使用
- Adam结合了之前的Momentum与RMSProp算法, 同时增加了校正EMA的步骤, 因为在Momentum和RMSProp算法都有和, 所有在这里为了区分, 使用了与, 与
- 更新参数
- , 其中
使用代码实现的大致思路
- 选择Mini-Batch Gradient Descent
- Shuffle原始数据
- 选择Mini-Batch Size进行Gradient Descent
- 在迭代Update Parameters时, 先为Momentum, RMSProp或者Adam需要的, 变量赋予0值, 维度与对应的一致
- 迭代即可
学习率的衰减
- 一般来说我们只需要直接固定的值, 随后根据结果进行调整, 但是在数据量很大的时候就会比较浪费时间, 于是使用到了的衰减
- 定义
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析