6.2

最速下降法仅利用函数的一阶导数信息,追求局部最快下降方向,而 Newton 法引入了二阶导数(Hesse 矩阵),不仅考虑了函数值下降的方向,还考虑了梯度本身的变化率,能够更准确地预测函数的整体形态。通过实验我认识到,Newton 法本质上是用二次函数在当前点对目标函数进行泰勒展开,然后直接求解这个二次函数的极小点作为下一个迭代点。这种 "一步到位" 的思路使得 Newton 法在接近最优解时具有二次收敛速度,这是仅具有线性收敛速度的最速下降法无法比拟的。
实验中使用的四维病态目标函数极具代表性,它包含了二次项和四次项,条件数很大。在这种情况下,最速下降法的 "锯齿现象" 被无限放大,即使迭代了 10001 次,梯度范数仍然停留在 10⁻⁴量级,无法达到 10⁻⁶的终止精度;而 Newton 法仅用 16-18 次迭代就精准收敛到了最优解附近,梯度范数达到了 10⁻⁷量级,函数值更是达到了 10⁻¹⁰的精度。这种数量级的性能差异,让我直观地感受到了二阶信息在优化问题中的巨大价值。
在编写 Newton 法代码的过程中,我遇到了两个核心问题,通过查阅资料和反复调试,最终找到了有效的解决方案,这也让我深刻体会到了理论算法与工程实现之间的差距。
第一个问题是Hesse 矩阵的奇异性。在某些迭代点,Hesse 矩阵可能是奇异的或者接近奇异的,此时直接求逆会导致数值不稳定甚至程序崩溃。为了解决这个问题,我采用了正则化 Newton 法,在 Hesse 矩阵上加上一个小的单位矩阵项(reg=1e-6),保证矩阵始终是正定可逆的。同时,我使用了np.linalg.solve函数来求解线性方程组H*d=-g,而不是直接计算 Hesse 矩阵的逆,这不仅提高了计算效率,还显著增强了数值稳定性。
第二个问题是代码的复用性与对比性。为了公平对比 Newton 法与最速下降法的性能,我复用了实验二中实现的黄金分割法作为最速下降法的一维搜索器,并将两种算法的输出格式统一,方便后续生成对比表格和可视化图表。通过将算法封装成函数并返回结构化的结果字典,我能够方便地提取迭代次数、最优解、梯度范数等关键信息,大大提高了实验分析的效率。

posted @ 2026-06-02 14:00  姜乐融  阅读(14)  评论(0)    收藏  举报