news 2026/6/22 14:44:27

机器学习算法之动量法:优化梯度下降的“惯性”策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习算法之动量法:优化梯度下降的“惯性”策略

目录

动量法:优化梯度下降的“惯性”策略

核心原理

与SGD的直观对比

关键推导

简洁案例

Python实现对比

算法优劣

核心总结


动量法:优化梯度下降的“惯性”策略

梯度下降是优化模型参数的核心方法,但其基础版本在训练中常面临收敛慢、震荡大的问题。

动量法通过引入物理中的“惯性”概念,有效提升了优化效率与稳定性。

核心原理

动量法在更新参数时,不仅考虑当前梯度,还累积历史梯度的指数加权平均作为“动量”,使更新方向更平滑、更一致。

更新公式

  • vt:当前时刻的动量(速度)

  • β:动量系数(通常0.9),控制历史信息的保留程度

  • η:学习率

  • ∇θL(θt):当前梯度

与SGD的直观对比

普通SGD:每次更新只依赖当前梯度,路径曲折,易震荡。
动量法:更新受历史动量引导,在稳定方向加速,在震荡方向减速,路径更平滑直接。

关键推导

动量更新可视为历史梯度的指数加权和:

当损失函数在某方向持续下降时,同向梯度不断累积,实现加速;当梯度方向频繁变化时,正负梯度相互抵消,抑制震荡。

简洁案例

优化目标:最小化 L(w)=(w−4)2,最优值 w∗=4。

SGD更新(η=0.1):

wt+1=wt−0.1×2(wt−4)

动量法更新(η=0.1,β=0.9):

vt=0.9vt−1+0.1×2(wt−4)

wt+1​=wt​−vt​

初始化 w0=0,v0=0:

  • 第一步:梯度=-8,SGD更新至0.8;动量法 v1=−0.8,更新至0.8

  • 第二步:梯度=-6.4,SGD更新至1.44;动量法 v2=0.9×(−0.8)+0.1×(−6.4)=−1.36,更新至2.16

可见,动量法因累积了之前的梯度,第二步更新幅度更大,加速接近最优值。

Python实现对比

import numpy as np import matplotlib.pyplot as plt # 定义目标函数及其梯度 def loss(w): return (w - 4)**2 def grad(w): return 2 * (w - 4) # 优化器 def sgd_update(w, lr): return w - lr * grad(w) def momentum_update(w, v, lr, beta): v = beta * v + lr * grad(w) return w - v, v # 参数设置 lr = 0.1 beta = 0.9 iterations = 20 # 初始化 w_sgd = 0 w_mom = 0 v = 0 # 记录路径 path_sgd = [w_sgd] path_mom = [w_mom] # 迭代优化 for i in range(iterations): w_sgd = sgd_update(w_sgd, lr) w_mom, v = momentum_update(w_mom, v, lr, beta) path_sgd.append(w_sgd) path_mom.append(w_mom) # 可视化 plt.figure(figsize=(10, 4)) plt.subplot(1, 2, 1) w_range = np.linspace(-1, 5, 100) plt.plot(w_range, loss(w_range), 'k-', alpha=0.3, label='Loss') plt.plot(path_sgd, loss(np.array(path_sgd)), 'o-', label='SGD', markersize=4) plt.plot(path_mom, loss(np.array(path_mom)), 's-', label='Momentum', markersize=4) plt.xlabel('Parameter w') plt.ylabel('Loss') plt.title('Optimization Trajectory') plt.legend() plt.grid(True, alpha=0.3) plt.subplot(1, 2, 2) plt.plot(range(len(path_sgd)), loss(np.array(path_sgd)), label='SGD') plt.plot(range(len(path_mom)), loss(np.array(path_mom)), label='Momentum') plt.xlabel('Iteration') plt.ylabel('Loss') plt.title('Loss Convergence') plt.legend() plt.grid(True, alpha=0.3) plt.tight_layout() plt.show()

算法优劣

优点

  1. 加速收敛:在平缓或方向一致的区域快速前进

  2. 抑制震荡:平滑优化路径,提升训练稳定性

  3. 帮助逃离局部极小:惯性可能冲过窄小局部最优点

缺点

  1. 增加超参数:需调整动量系数β

  2. 可能超调:动量过大时在最优值附近震荡

适用场景

  • 高维非凸优化(如深度学习)

  • 梯度存在噪声或方向不一致时

  • 需要更快收敛速度的场景

核心总结

动量法通过累积历史梯度信息,为参数更新增加“惯性”,在保持随机梯度下降计算效率的同时,显著改善了优化过程的收敛速度与稳定性。其核心思想简单而有效,已成为现代深度学习优化器的基础组件之一。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 10:01:05

计算机网络基础

网络定义 多台设备通过连接介质,能互相传数据,共享资源的集合 协议:设备之间的沟通规则 拓扑结构 网络设备的物理连接方式 星型:就是有一个中间的设备转一下 总线型:学校机房那种所有设备连着一台设备 环型&#xff1a…

作者头像 李华
网站建设 2026/6/22 5:59:22

AI智能体(Agent)开发全攻略:概念、设计到安全运行,程序员必学

本文详解AI智能体的本质区别、三大核心特征及落地路径,涵盖模型选型、工具定义、指令配置等关键组件,解析单智能体与多智能体编排模式,并强调安全护栏体系的重要性,为开发者提供从0到1构建智能体的完整路线图,助力抢占…

作者头像 李华
网站建设 2026/6/22 17:22:03

LLM RAG开发进阶:多查询检索技术详解与实战代码

本文详细介绍了LLM应用中RAG开发的三个关键步骤和六个优化阶段,重点阐述了多查询检索策略如何提升检索准确性。通过生成多个角度的子问题进行检索并合并结果,有效克服传统相似性搜索的局限。文章提供了LangChain中MultiQueryRetriever的具体实现代码和优…

作者头像 李华
网站建设 2026/6/22 11:17:35

广东省考备考三要素(喻明公考)

材料结构化面试备考要注意的方面有很多,但是抓住关键才能有效备考。在实际的学习中,喻明公考提醒各位考生有三个备考的关键要素需要深入把握。一、学好普通结构化材料结构化归根到底还是在普通结构化的基础上进行的创新,背景材料对作答有指导…

作者头像 李华
网站建设 2026/6/21 15:47:04

好写作AI|学术萌新救星:你的“论文私教”如何把知识喂到嘴边

写论文像在迷宫里裸奔?别慌!你的“学术导航仪”已上线各位刚踏入学术圈的萌新们,是不是觉得论文写作就像突然被扔进深海却没人教游泳?面对“文献综述”、“研究方法”这些专业术语一脸懵?别怕!今天给你们安…

作者头像 李华
网站建设 2026/6/22 12:26:42

【紧急预警】环境指标悄然变化!用R语言快速识别趋势拐点的方法

第一章:环境监测的 R 语言趋势检验在环境科学领域,长期监测数据的趋势分析对于评估气候变化、污染水平演变及生态响应至关重要。R 语言凭借其强大的统计建模与可视化能力,成为执行环境趋势检验的首选工具。常用方法包括Mann-Kendall非参数趋势…

作者头像 李华