Levenberg-Marquardt 算法
最优估计算法中通常的做法都是写一个代价函数,并迭代计算最小化代价函数。
解决非线性最小二乘问题的方法有高斯牛顿法等,下面介绍Levenberg-Marquardt 算法:
1. 算法描述
以下引用自维基百科
问题描述
假设 f {\displaystyle f} f是一个从 ℜ m → ℜ n {\displaystyle \Re ^{m} \rightarrow \Re ^{n}} ℜm→ℜn 的非线性映射,也就是说 P ∈ ℜ m {\displaystyle \mathbf {P} \in \Re ^{m}} P∈ℜm 且 X ∈ ℜ n {\displaystyle \mathbf {X} \in \Re ^{n}} X∈ℜn 那么:
f ( P ) = X {\displaystyle f(\mathbf {P} )=\mathbf {X} } f(P)=X
而我们的目的就是希望任意给定一个 x {\displaystyle \mathbf {x} } x 以及合理的初始值 p 0 {\displaystyle \mathbf {p} _{0}} p0 ,我们能找到一个 p + {\displaystyle \mathbf {p}^{+}} p+,使得 ϵ T ϵ {\displaystyle \mathbf {\epsilon } ^{T}\mathbf {\epsilon } } ϵTϵ 尽量小(局部极小),其中 ϵ = f ( p + ) − x {\displaystyle \mathbf {\epsilon } =f(\mathbf {p} ^{+})-\mathbf {x} } ϵ=f(p+)−x。
解法
像大多数最小化的方法一样,这是一个迭代的方法。首先根据泰勒展开式我们能把 f ( p + δ p ) {\displaystyle f(\mathbf {p} +\mathbf {\delta _{p}} )} f(p+δp)写为下面的近似,这有两个好处:第一是线性、第二是只需要一阶微分。
f ( p + δ p ) ≈ f ( p ) + J δ p {\displaystyle f(\mathbf {p} +\mathbf {\delta _{p}} )\approx f(\mathbf {p} )+\mathbf {J\delta _{p}} } f(p+δp)≈f(p)+Jδp
其中 J \mathbf {J} J 是 f f f 的雅可比矩阵。对于每次的迭代我们这么做:假设这次 iteration 的点是 p k {\mathbf {p}}_{k} pk,我们要找到一个 ∣ x − f ( p + δ p , k ) ∣ ≈ ∣ x − f ( p ) − J δ p , k ∣ = ∣ ϵ k − J δ p , k ∣ |{\mathbf {x}}-f({\mathbf {p}}+{\mathbf {\delta }}_{ { {\mathbf {p}},k}})|\approx |{\mathbf {x}}-f({\mathbf {p}})-{\mathbf {J{\mathbf {\delta }}_{ { {\mathbf {p}},k}}}}|=|{\mathbf {\epsilon }}_{ {k}}-{\mathbf {J{\mathbf {\delta }}_{ { {\mathbf {p}},k}}}}| ∣x−f(p+δp,k)∣≈<