非线性最小方差估计
学习基于:《Optimal Estimation of Dynamic Systems》
Nonlinear Least Squares Estimation(非线性最小方差估计)也称为 Gaussian least squares differential correction(高斯最小二乘微分校正),本文我将用最简单通俗的语言,抛开公式背后复杂深层的原理,以一个使用者的角度带你看待这种经典的方法。希望能帮助非此专业的人更好地从宏观上把握非线性最小方差估计,将他作为一种解决问题的工具。
先抛出一个式子:
y
~
=
f
(
x
)
+
e
\tilde {\mathbf{y}} = \mathbf{f}(\mathbf{x}) +\mathbf{e}
y~=f(x)+e
这看起来很简洁的一个公式,实际上已经充分陈述了我们非线性最小方差估计要解决的问题情景:有一个系统,它的里面有一些参数
x
\mathbf{x}
x是未知的,我们想要知道参数到底是多少,或者说至少能知道它近似是多少。然而,我们无法直接观测或者测量到
x
\mathbf{x}
x,幸运的是,我们至少能测量到系统的输出
y
\mathbf{y}
y。当然,我们测量到的
y
\mathbf{y}
y与真实的
y
\mathbf{y}
y之间有一点点误差,因为任何测量方法都不能做到100%准确。所以,为了在方程中体现这件事情,我们用
y
~
\tilde{\mathbf{y}}
y~表示测量到的
y
\mathbf{y}
y;用
e
\mathbf{e}
e表示误差。此外,每个符号都表示向量,为了用一个一维的数来综合地表示一下误差,我们可以这样子定义
J
=
1
2
e
T
W
e
J=\frac{1}{2} \mathbf{e}^{T} W \mathbf{e}
J=21eTWe
这样,误差就转化为一个数了,其中出现的
W
W
W是一个所谓的权重矩阵,决定多个变量之间谁比较重要,我们学习的时候就直接按照单位阵理解就好了。
此时
y
~
\tilde{\mathbf{y}}
y~已经有了,为了估计出
x
\mathbf{x}
x,一个很自然的想法就是把所有可能的
x
\mathbf{x}
x都代进去算一下,看看什么时候能让计算出的误差
e
\mathbf{e}
e最小,那么这个时候的
x
\mathbf{x}
x显然是一个比较可靠的估计值。但是,在很多时候
x
\mathbf{x}
x是有无穷多种可能的值的,我们无法把每一种可能都一一计算出来,这该怎么办呢。
Δ
y
c
=
y
~
−
f
(
x
c
)
\Delta \mathbf{y}_c=\tilde{\mathbf{y}}-\mathbf{f}(\mathbf{x}_c)
Δyc=y~−f(xc)
所以,更进一步地,这里有一个更好的思路:我们先随便假设一个
x
c
\mathbf{x_c}
xc作为一个预测的
x
\mathbf{x}
x,如果我们预测的非常准,正好就是真正的
x
\mathbf{x}
x的值,那么上面式子里的
Δ
y
c
\Delta \mathbf{y}_c
Δyc就会等于0。但是往往不可能那么巧,如果不是0,我们就计算一下
f
(
x
)
\mathbf{f}(\mathbf{x})
f(x)对
x
\mathbf{x}
x的导数
H
≡
∂
f
∂
x
∣
x
c
\left.H \equiv \frac{\partial \mathbf{f}}{\partial \mathbf{x}}\right|_{\mathbf{x}_{c}}
H≡∂x∂f∣∣∣∣xc
这个
H
H
H相当有用,它的大小和方向会指示我们
x
c
\mathbf{x_c}
xc下一步应该如何调整。
有了
H
H
H,我们就可以引入一对魔法公式,就是下面这个
Δ
x
=
(
H
T
W
H
)
−
1
H
T
W
Δ
y
c
x
c
,
n
e
w
=
x
c
+
Δ
x
\Delta \mathbf{x}=\left(H^{T} W H\right)^{-1} H^{T} W \Delta \mathbf{y}_{c} \\ \mathbf{x}_{c, new}=\mathbf{x}_{c}+\Delta \mathbf{x}
Δx=(HTWH)−1HTWΔycxc,new=xc+Δx
这个公式指出了下一步的的
x
c
\mathbf{x_c}
xc应该如何取,接着把新算出的
x
c
,
n
e
w
\mathbf{x}_{c, new}
xc,new代回去重新计算,又会出现下一个
x
c
,
n
e
w
\mathbf{x}_{c, new}
xc,new,如此反复,我们会发现
x
c
\mathbf{x_c}
xc会渐渐地趋向于某个值,当循环次数足够多时,每一次迭代带来的变化会越来越小,对
x
c
\mathbf{x_c}
xc的估计也会越来越精确。
那么什么时候停止这个过程呢,还记得前面的误差
J
J
J吗,由于计算所需要的
e
\mathbf{e}
e不知道,我们用
Δ
y
c
\Delta \mathbf{y}_c
Δyc代替
e
\mathbf{e}
e;我们可以这样认为:如果两次迭代分别算出的两个
J
J
J几乎没有差别,就认为此时
J
J
J已经足够小了,迭代也就差不多可以终止了,用严谨的式子表示就像下面这样
δ
J
≡
∣
J
i
−
J
i
−
1
∣
J
i
<
ε
∥
W
∥
\delta J \equiv \frac{\left|J_{i}-J_{i-1}\right|}{J_{i}}<\frac{\varepsilon}{\|W\|}
δJ≡Ji∣Ji−Ji−1∣<∥W∥ε
小于号左边表示的是后一次误差相对于前一次误差变化的百分比,小于号右边是一个很小的数
ε
\varepsilon
ε(自己设定的,比如0.0001)除以权重矩阵的范数。当这个式子成立的时候,迭代终止,此时最后一次计算得到的
x
c
\mathbf{x_c}
xc就被认为是对
x
\mathbf{x}
x的最终的估计。
看看下面的这个非线性最小方差估计算法流程图,相信你会对它有更加宏观上的把握
本文从一个使用者的角度简要解读了非线性最小方差估计算法,目的在于让初次接触者以及非专业人士更轻松地了解非线性最小方差估计算法的整体。过程中省略了一些复杂的公式推导,如果你对更详细的内容感兴趣,推荐阅读《Optimal Estimation of Dynamic Systems》的第一章,书上也有一些例子,相信阅读后你会对非线性最小方差估计有更深层更本质的理解。
行文如有错误或纰漏希望指出
求赞!