3. 局部优化算法:阻尼最小二乘法(DLS)、自适应最小二乘法、算法收敛性分析

局部优化,说白了就是“在附近找个更好的点”。你给一个初始结构,算法就在它周围小范围搜索,直到找到局部最优解。这跟全局优化不一样——全局是满世界找,局部是盯着眼前。

我刚开始做光学设计时,总觉得局部优化不够“高级”。后来被现实教育了:全局优化跑出来的结构,最后都得靠局部优化精修。没有局部优化,你连像样的镜头都磨不出来。

3.1 最小二乘法的基本思想

光学系统优化的本质是什么?是让实际像差尽量接近目标值。我们定义一组评价函数:

f₁(x) = 实际像差₁ - 目标值₁
f₂(x) = 实际像差₂ - 目标值₂
...
fₘ(x) = 实际像差ₘ - 目标值ₘ

优化的目标就是让这些 f(x) 的平方和最小。写成数学形式:

Φ(x) = Σ fᵢ²(x) → min

这就是最小二乘法的核心。你想想看,如果每个像差都为零,那 Φ=0,完美系统。但现实中不可能,我们只能让 Φ 尽可能小。

关键点: 评价函数 f(x) 的选择直接影响优化结果。我见过太多人随便选几个像差就开始跑,结果优化出来的系统根本不能用。评价函数要覆盖所有关键像差,还要考虑权重。

3.2 阻尼最小二乘法(DLS)

阻尼最小二乘法,英文叫 Damped Least Squares,简称 DLS。这是光学设计领域最经典的局部优化算法,没有之一。

它的思路是这样的:在每一步迭代中,我们求解一个线性方程组,但加了一个“阻尼因子”来控制步长。数学表达式如下:

(JᵀJ + μI)Δx = -Jᵀf

其中:

  • J 是雅可比矩阵(偏导数矩阵)
  • μ 是阻尼因子
  • Δx 是参数变化量
  • f 是当前像差向量

为什么要加这个 μ?我举个例子你就明白了。假设你站在一个山谷里,想找最低点。如果没有阻尼,你可能会一步跨太大,直接翻到对面山坡上去了。阻尼就是给你脚下加个“刹车”,让你小步走,别摔着。

我的经验: μ 的初始值一般设为 0.01~0.1。如果迭代后 Φ 增大,就把 μ 乘以 10;如果 Φ 减小,就把 μ 除以 10。这个策略我用了十几年,基本没出过问题。

3.3 自适应最小二乘法

阻尼最小二乘法有个问题:μ 是固定的调整策略,不够灵活。自适应最小二乘法就是针对这个痛点改进的。

它的核心思想是:根据当前优化状态,动态调整阻尼因子和步长。具体来说:

  1. 梯度感知: 如果梯度变化剧烈,说明接近极值点,减小步长
  2. 曲率感知: 如果曲率很大,说明地形陡峭,增大阻尼
  3. 历史记忆: 记录最近几次迭代的效果,调整搜索方向

我做过一个对比实验:同一个初始结构,DLS 跑了 200 步收敛,自适应最小二乘法只用了 87 步。效率提升了一倍多。

算法 收敛步数 最终 Φ 值 稳定性
DLS(固定 μ) 200 0.0035 中等
自适应最小二乘 87 0.0031 高
注意: 自适应算法虽然快,但参数调不好容易震荡。我曾经在一个变焦系统上试过,自适应算法直接跑飞了——评价函数不降反升。后来加了步长上限才稳住。

3.4 算法收敛性分析

收敛性分析,说白了就是回答一个问题:这个算法到底能不能找到最优解?

对于 DLS 和自适应最小二乘法,有几个关键结论:

  • 局部收敛性: 只要初始点在最优解附近,算法保证收敛
  • 线性收敛速度: 误差按指数衰减,但衰减速度取决于问题条件数
  • 对初始点敏感: 初始点离最优解越远,收敛越慢,甚至可能发散

我遇到过最典型的情况:一个三片式镜头,初始结构给得特别差,DLS 跑了 500 步还没收敛。后来我把初始结构稍微调了一下,只跑了 30 步就收敛了。初始点的重要性,怎么强调都不过分。

收敛判据: 一般用三个条件判断是否收敛:
1. Φ 的变化量小于阈值(如 1e-6)
2. 梯度模长小于阈值(如 1e-4)
3. 参数变化量小于阈值(如 1e-5)
满足任意一个即可认为收敛。

3.5 算法对比与选择建议

说了这么多,到底该用哪个?我个人的建议是:

  • 新手入门: 先用 DLS,参数少,容易上手
  • 复杂系统: 用自适应最小二乘法,效率高
  • 高精度需求: 先用自适应快速收敛,再用 DLS 精修

嗯,这里要注意:没有万能算法。我见过有人死磕自适应算法,结果还不如 DLS 效果好。关键是要理解你的系统特性,选择合适的工具。

局部优化算法知识体系 局部优化算法 最小二乘法基础 阻尼最小二乘法 自适应最小二乘法 评价函数定义 阻尼因子控制 动态参数调整 雅可比矩阵 步长控制策略 梯度与曲率感知 算法收敛性分析 核心:局部收敛性 + 线性收敛速度 + 初始点敏感性

3.6 实战中的避坑指南

最后,分享几个我踩过的坑:

  • 不要迷信默认参数: 每个光学系统的特性不同,默认参数不一定适合你
  • 监控收敛曲线: 如果 Φ 曲线震荡,说明步长太大或阻尼太小
  • 多试几个初始点: 局部优化只能找到局部最优,换几个初始点试试
  • 别忽略物理约束: 优化出来的参数可能不满足加工要求,记得加约束
我的习惯: 每次优化前,我都会先跑一次 DLS 看看趋势。如果 Φ 下降很快,说明初始点选得好;如果下降很慢,我会调整初始结构再试。这个习惯帮我省了不少时间。