当前位置: 首页 > news >正文

深度学习:动量梯度下降实战(Momentum Gradient Descent)

关键词解释:动量梯度下降(Momentum Gradient Descent)

💡 动量法通过引入“惯性”机制,显著提升梯度下降的收敛速度与稳定性


✅ 一、为什么需要动量?

标准梯度下降在遇到以下情况时表现不佳:

  • 损失函数存在狭窄山谷 → 参数更新左右震荡;
  • 梯度噪声大 → 路径杂乱;
  • 局部极小值/鞍点 → 容易卡住。

动量法的核心思想

让参数更新不仅依赖当前梯度,还继承历史梯度的方向,就像一辆有质量的车——转弯更稳,下坡更快。


✅ 二、数学原理

动量梯度下降使用指数加权平均来平滑梯度:

其中:

  • ( \beta \in [0, 1) ):动量系数(通常取 0.9);
  • ( \alpha ):学习率;
  • ( v ):速度(velocity),即梯度的历史加权平均。

📌 注:此处未使用偏差修正(bias correction),这是经典 Momentum 的常见做法。若需修正,可在初期除以( 1 - \beta^t )


✅ 三、代码实现详解

3.1 初始化速度字典

def initialize_velocity(parameters):L = len(parameters) // 2  # 网络层数v = {}for l in range(L):v["dW" + str(l + 1)] = np.zeros_like(parameters["W" + str(l + 1)])v["db" + str(l + 1)] = np.zeros_like(parameters["b" + str(l + 1)])return v

✅ 作用:为每一层的权重和偏置初始化速度为零向量。


3.2 动量参数更新

def update_parameters_with_momentum(parameters, grads, v, beta, learning_rate):L = len(parameters) // 2for l in range(L):# 更新速度(指数加权平均)v["dW" + str(l + 1)] = beta * v["dW" + str(l + 1)] + (1 - beta) * grads["dW" + str(l + 1)]v["db" + str(l + 1)] = beta * v["db" + str(l + 1)] + (1 - beta) * grads["db" + str(l + 1)]# 使用速度更新参数parameters["W" + str(l + 1)] -= learning_rate * v["dW" + str(l + 1)]parameters["b" + str(l + 1)] -= learning_rate * v["db" + str(l + 1)]return parameters, v

✅ 关键点:

  • 先更新速度 v
  • 再用 v 更新参数;
  • W 对应 dWb 对应 db —— 一一对应,不可混淆

✅ 四、测试与验证

parameters, grads, v = update_parameters_with_momentum_test_case()
parameters, v = update_parameters_with_momentum(parameters, grads, v, beta=0.9, learning_rate=0.01
)print("W1 =", parameters["W1"])
print("b1 =", parameters["b1"])
print("W2 =", parameters["W2"])
print("b2 =", parameters["b2"])
print("v['dW1'] =", v["dW1"])
print("v['db1'] =", v["db1"])
print("v['dW2'] =", v["dW2"])
print("v['db2'] =", v["db2"])

预期行为

  • W1 是矩阵(如 (2, 2));
  • b1 是向量(如 (1, 2));
  • v["dW1"]grads["dW1"] 同维;
  • 所有值均为合理浮点数,无 nan 或异常。

✅ 五、超参数建议

超参数推荐值说明
β(beta)0.9表示保留 90% 的历史梯度方向
学习率 α0.001 ~ 0.01可配合学习率衰减使用
是否用偏差修正否(经典 Momentum)Adam 才常用修正

💡 经验法则
若训练初期 loss 下降缓慢,可尝试增大 β(如 0.95);
若震荡严重,可减小 β(如 0.8)。


✅ 六、动量 vs 标准 GD 对比

特性标准梯度下降动量梯度下降
收敛速度
路径稳定性震荡大平滑
抗噪声能力
实现复杂度简单略高(需维护 v)

🌟 适用场景
几乎所有现代深度学习任务都推荐使用动量或其变体(如 Adam)。


✅ 七、总结

动量梯度下降 = 历史智慧 + 当前信息
它让优化过程不再“盲目跳跃”,而是“带着记忆前行”。

http://www.dtcms.com/a/614542.html

相关文章:

  • 电脑做服务器建网站app试玩网站制作
  • 【Janet】数据结构
  • Tensor与NumPy转换
  • 06-文件操作-教程
  • 【ros2】ROS2 C++服务端与客户端开发指南
  • 网站开发成本主要有哪些网络广告发布
  • 【035】Dubbo3从0到1系列之dubbo-remoting核心接口Endpoint
  • 用备份的网站代码做网站步骤小程序模板怎么导入
  • 利用帝国cms网站建设网页源代码怎么搜索关键词
  • 【愚公系列】《腾讯元宝从入门到精通》002-提示词设计与优化
  • C++哈希(包含unordered_set和unordered_map的封装)
  • 编译类语言 | 深入了解编译原理及应用
  • 西安建设银行网站专业公司网站 南通
  • 禁止同ip网站查询抖音小程序注册
  • Chaos-nano:Arduino Pro Mini 轻量级操作系统解析与实战应用
  • 从 0 到 1 学爬虫:Python 基础语法在爬虫中的实战运用用这个标题写一篇文章,在当前对话窗口输出
  • 网页设计网站排行榜中国发达国家还有多远
  • Podman和Docker
  • 自己架设服务器做网站一同看网页打不开
  • 手写LRU 缓存
  • 23-MD5+DES+Webpack:考试宝
  • 前端构建工具环境变量,安全管理
  • 个人网站名称举例网站建设需要的硬件
  • 数据分析笔记09:Python条件语循环
  • 可在哪些网站做链接赣州网络招聘
  • 高端网站制作网站背景自动切换
  • 代码生成工具GitHub Copilot介绍
  • RDMA基本操作类型---send/recv,write/read
  • 2.37基于Multisim的数字电子钟准点报时,时间可调,Multisim时钟,Multisim电子时钟。含3000字报告。功能:带准点报时,时间可调
  • 建筑模板有哪些seo优化按天扣费