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

最速下降法和梯度下降法的异同

一、概念与原理

特性最速下降法 (Steepest Descent)梯度下降法 (Gradient Descent)
方向定义在给定范数下,沿负梯度方向是“最快减少方向”通常默认欧氏范数,也沿负梯度方向
目标每步都在当前点寻找使目标函数沿负梯度方向的最优步长固定或简单规则选步长,保证总体下降
本质区别强调“局部一维最优化”——每次都要精确或近似最优的线搜索强调“易实现、低开销”,往往采用固定或预定的学习率
  • 在二次凸函数上,最速下降法每一步都做一次精确(或足够精确)的 线搜索,确保当前方向上的最优下降;

  • 梯度下降法则可视为最速下降法在“步长为常数”或“步长按预设衰减”两种策略下的特例,不一定每步都做线搜索。

二、算法步骤与伪代码

1. 最速下降法(含线搜索)

输入:初始点 x⁰,精度 ε
k ← 0
repeat1. 计算梯度 gᵏ = ∇f(xᵏ)2. 若 ‖gᵏ‖ ≤ ε,则停止,x* = xᵏ3. 选取步长 αᵏ = argmin_{α>0} f(xᵏ − α gᵏ)   // 一维线搜索4. 更新 xᵏ⁺¹ = xᵏ − αᵏ gᵏ5. k ← k + 1
until 收敛

  • 线搜索可以用精确搜索(解析解,仅对二次函数可行)或常见的 Armijo、Wolfe 条件等 线搜索(简化一维最优化)。

2. 梯度下降法(固定步长/衰减步长)

输入:初始点 x⁰,学习率序列 {αᵏ},精度 ε
k ← 0
repeat1. 计算梯度 gᵏ = ∇f(xᵏ)2. 若 ‖gᵏ‖ ≤ ε,则停止,x* = xᵏ3. 选取步长 αᵏ (如常数 α, 或 αᵏ = α₀/(1 + βk))4. 更新 xᵏ⁺¹ = xᵏ − αᵏ gᵏ5. k ← k + 1
until 收敛

  • 步长 αᵏ 通常预先设定,不做每步一维最优化。

三、步长选择

方法最速下降法梯度下降法
精确线搜索每步解 ,最优但昂贵不常用
弱线搜索Armijo / Wolfe 等条件,保证充分下降有时也可用于自适应学习率,但多为简化版本
固定步长不推荐;可能失去“最速”特性最常用;需满足 0<α<2/L(L是 Lipschitz 常数)
衰减步长可用,但本质已偏离“最速”常用,如 \alpha_k=\alpha_0/(1+\beta k)

四、收敛性与复杂度

指标最速下降法梯度下降法
收敛速率(二次凸)线搜索后,理论上f(x^k)-f(x^*) = O\bigl((\tfrac{\lambda _{\max}-\lambda_{\min}}{\lambda_{\max}+\lambda_{\min}})^{2k}\bigr)固定步长下,O(\rho ^k)速率,ρ 取决于 1-\alpha\lambda_{\min}
每步开销需做一维最优化(若解析线搜索则是 O(1),否则 O(n)~O(nlogn))仅梯度计算 O(n)
迭代次数最少(在同样精度下通常比固定步长少)更多;尤其当条件数大时,需小步长才稳定
整体时间迭代少但每步贵;适中问题优迭代多但每步便宜;高维大数据常用
  • 对于二次凸二次型 ,最速下降法在每一步都可获得最大可能的下降量;梯度下降法固定步长则无法针对矩阵谱分布做最优调整,收敛受条件数影响更大。

五、优缺点比较

方面最速下降法梯度下降法
实现难度中等(需要线搜索子模块)简单(只需固定或衰减步长)
参数依赖主要依赖线搜索准则严重依赖学习率(不当会震荡或收敛缓慢)
适用场景维度中等、追求快速收敛的光滑优化高维、大规模、在线学习、深度学习
鲁棒性对目标函数信息更多(线搜索),更稳定对学习率敏感,需要经验或调参
扩展性可推广到共轭梯度、BFGS 等更高级方法可轻松并行、分布式,也可与动量、自适应结合

六、总结

  • 最速下降法 是梯度下降的一种“最优方向+最优步长”实现,更接近理想的每步最大下降,但线搜索开销不容忽视;

  • 梯度下降法 则牺牲每步最优,换取更简单、更高效的迭代,尤其在大规模或在线场景中更为实用。

http://www.xdnf.cn/news/382843.html

相关文章:

  • python基础(十一)-逻辑运算符
  • nextjs 部署失败:cause: Error: unable to verify the first certificate
  • C语言加餐--一些关键字
  • 数字信号处理|| 离散系统的冲激响应和阶跃响应
  • 【Python训练营打卡】day21 @浙大疏锦行
  • 101alpha第九
  • 一、ArkTS语法学习
  • Qt 界面优化(QSS)
  • 【数据结构与算法】——图(二)
  • 《AI大模型应知应会100篇》第54篇:国产大模型API对比与使用指南
  • 【Redis】基础命令数据结构
  • Spring框架核心知识全解析:从基础到实战
  • [面试]SoC验证工程师面试常见问题(六)高速接口篇
  • 含锡电镀废水深度净化技术体系解析化利用的全流程优化
  • pytest自动化测试执行环境切换的两种解决方案
  • 树莓派OS系统详解
  • 动态规划法:爬楼梯
  • C++模板梳理
  • JAVA练习题(3) 开发验证码
  • 如何避免软件腐朽
  • jflash下载时出现 Could not read unit serial number! 的解决方法
  • 数据结构—(概述)
  • 【typenum】 1 说明文件(README.md)
  • 【AI论文】迈向多模态通才之路:通用层级与通用基准
  • 一文讲透MCP的原理及实践
  • Kubernetes生产实战(十二):无工具容器网络连接数暴增指南
  • 【Day 24】HarmonyOS端云一体化开发:云函数
  • C PRIMER PLUS——第8节:字符串和字符串函数
  • 初等数论--欧拉定理及证明
  • 计算最短路径的数量模板(最短路)