名称: 梯度方法 描述: “优化中梯度方法的问题解决策略” 允许工具: [Bash, Read]
梯度方法
何时使用
在优化中处理梯度方法问题时使用此技能。
决策树
-
基本梯度下降
- 更新: x_{k+1} = x_k - alpha * grad f(x_k)
- 步长 alpha: 固定、递减或线搜索
- 收敛: O(1/k) 对于凸函数,线性对于强凸函数
-
步长选择
方法 方法 固定 alpha 常数(需要调优) 回溯 Armijo 条件: f(x - alphagrad) <= f(x) - calpha* 精确线搜索 在 alpha 上最小化 f(x - alpha*grad) 自适应 Adam, RMSprop(机器学习应用) -
加速方法
- 动量: 添加速度项
- Nesterov: 前瞻梯度
- 共轭梯度: 用于二次函数
scipy.optimize.minimize(f, x0, method='CG')- 共轭梯度
-
牛顿法
- 更新: x_{k+1} = x_k - H^{-1} * grad f
- 需要海森矩阵(昂贵但二次收敛)
- 准牛顿法 (BFGS): 近似海森矩阵
scipy.optimize.minimize(f, x0, method='BFGS')
-
收敛诊断
- 监控 ||grad f|| < 容差
- 检查函数值下降
- 注意振荡(步长太大)
sympy_compute.py diff "f" --var x用于梯度
工具命令
Scipy_Bfgs
uv run python -c "from scipy.optimize import minimize; res = minimize(lambda x: (x[0]-1)**2 + 100*(x[1]-x[0]**2)**2, [0, 0], method='BFGS'); print('Rosenbrock min at', res.x)"
Scipy_Cg
uv run python -c "from scipy.optimize import minimize; res = minimize(lambda x: x[0]**2 + x[1]**2, [1, 1], method='CG'); print('Min at', res.x)"
Sympy_Gradient
uv run python -m runtime.harness scripts/sympy_compute.py diff "x**2 + y**2" --var "[x, y]"
关键技术
来自索引教材:
- [非线性编程_tif] 梯度方法** - 这些方法使用梯度信息迭代接近最优解。收敛** - 处理收敛性质。下降方向和步长规则:** 关注如何选择下降方向和适当的步长。
- [非线性编程_tif] 梯度方法在无约束最优控制问题中的应用原则上很简单。例如,最速下降法采用形式 W = b oMV H, (kb ph,y), i=0,. Pl = 因此,给定 u¥,通过系统方程的前向传播计算 zF,然后通过伴随方程的后向传播计算 p*¥。
- [非线性编程_tif] 页脚或尾行**: - 有一个空的结束元素,由单个 “.” 表示。总体而言,此表作为文档中章节或部分的索引,特别强调优化方法和相关数学策略,如列出的梯度、牛顿和其他导数技术。散落的字母和空槽可能表示一种风格或格式选择,而不是此上下文中的有意义的內容。
- [非线性编程_tif] Zoutendijk 方法使用 tw ) oscalatse)Oand’ye 0,1), a i ! P, 其中 ¢ — Y™k € 和 my 是第一个非负 k ok 28 %, ) it T #(z*,7"e) < -y (a) 显示 (b) 证明 {d*} 是梯度相关的,从而建立稳定性。 2. Min-H 方法用于最优控制) 考虑寻找序列 u = (z1,22,. 的问题。
- [非线性编程_tif] 练习 1 的函数 f 的图示。稳定性) (www) 我们经常感兴趣的是当问题数据轻微扰动时,最优解是否发生根本性变化。这个问题通过稳定性分析解决,与灵敏度分析对比,后者处理问题数据变化时最优解的变化量。
认知工具参考
参见 .claude/skills/math-mode/SKILL.md 获取完整工具文档。