无迹变换

无迹变换（unscented transform、UT）是有关非线性转换及几率分布的数学工具。在特定几率分布只有少数统计特征的情形下，无迹变换可以估计其经过非线性转换后的结果，是由美国科学研究人员Jeffrey Uhlmann所创。

无迹变换最常见的用途是在卡尔曼滤波（Kalman filter）的非线性版本下，估计其平均值及共变异数在非线性投影下的值。其创建者Jeffrey Uhlmann解释其名称中的“无迹”（unscented）是随便取的，目的是不要让此方法称为“Uhlmann滤波器”。

## 背景

许多滤波和控制技术会用平均向量以及误差共变异数矩阵，来表示系统状态的估计。例如某物体的2维位置估计会表示为平均位置向量$[x, y]$，其不确定性会用2x2的共变异数矩阵表示，其中有$x$和$y$的变异数，以及两者之间的互协方差。若变异数为零，表示没有不确定性的误差，物体的位置可以完全用位置的平均向量表示。

平均值和共变异数只表示了几率分布的前二个动差（moment），没有其他更高次的资讯。以移动物体的例子来说，不确定性的几率分布可以表示物体位置在某个时间的不确定性。用平均值向量和共变异数矩阵来表示不确定性，在数学上很方便，因为可将任何的线性变换$T$应用在平均值向量$m$和共变异数矩阵$M$上，得到$Tm$和$TMT^\mathrm{T}$。但针对其他更高次的动差，线性变换后就没有类似的线性特性，因此一般来说无法针对平均值向量$m$和共变异数矩阵$M$，得到非线性变换后的平均值向量和共变异数矩阵通式，因为这不只和平均值向量及共变异数矩阵，也和更高次所有的动差有关。

以定义来说，共变异数矩阵是有关平均的预期方差，但实务上会设法让共变异数矩阵是实际方差的上界。平均和共变异数的估计值$(m,M)$会保守处理，使得共变异数矩阵$M$恒大于或等于和平均$m$有关的实际方差。在数学上，共变异数矩阵$M$减去预期方差（多半无法求得）会是半正定或是正定矩阵。以保守方式处理共变异数矩阵的原因是大部分的滤波算法或是控制波算法，在低估共变异数矩阵的情形下可能会发散失效。这是因为一个错误的小共变异数，意味着不确定性比较小，滤波器会给予过高的权重，而不是依平均数的准确性给与权重。

回到上述的问题，若共变异数为0，可以直接求得该物体的位置在非线性变换$f(x,y)$后的值：就直接对平均值向量使用非线性变换即可。若共变异数矩阵不为0，变换后的平均值一般来说不一定会等于$f(x,y)$，也无法只靠原来的平均向量和共变异数矩阵得到转换后几率分布的平均值。非线性变换下的平均向量和共变异数矩阵只能靠近似方式求得。最早的近似方式是将非线性变换线性化，再用雅可比矩阵求得平均向量和共变异数矩阵。这是扩展卡尔曼滤波器（EKF）。已知此方式在许多情形下的结果不佳，但数十年来没有其他可行方式可以取代此方法。

## 发展无迹变换的原因

Jeffrey Uhlmann在1994年年注意到EKF让系统状态的非线性函数以及部分的分布资讯（以平均及共变异数的形式表示）要用近似方式表示，而不是使用不准确性已知的几率分布。他建议一个必较好的作法，是直接将非絈线性函数加在近似的几率分布上。此作法的原因在他的博文论文中有提到，其中也首次定义了“unscented变换”：

考虑以下直觉的看法：“利用固定个数的参数，比较容易近似已知的分布，比近似任意的非线性函数/变换要简单。”依照上述的直觉看法，目标是要找到可以捕捉平圴以及共变异数的一组参数，而同时可以透过任意的非线性方程变换这组参数。这可以用产生一组有相同一次动差及二次动差（也许还包括更高次动差）的离散分布，而离散分布下的每一个点都可以直接变换。可以将离散分布经过变换，再计算其平均以及共变异数，以这个当作原分布在非线性变换下的平均以及共变异数估计值。更准确地说，将已知的非线性变换加在几个点组成的离散分布上，以此计算，来当成未知分布的统计量，这就是“unscented变换”

换句话说，可以用一组资料完整记录平均以及共变异数的资讯，这组资料称为sigma points，这组贠料当成离散几率分布来处理，但其平均以及共变异数和原分布的值相同。可以用非线性函数直接处理这些数据，将其进行非线性变换。转换后资料的平均和共变异数就代表转换后分布的估计值。此作法主要的好处是充分利用了非线性变换，而不是像EKF用线性化的版本代替非线性变换。去除了线性化的需求，也有可以独立提升估计水准的优点。UT还有一个好处，是可以用在不可微分、无法线性化的函数上。另一个优点是UT比较容易实作，不需推导线性化的雅克比矩阵。

## Sigma points

若要计算unscented transform，需要先选一组sigma points。由于Uhlmann开创性的工作，在文献中已有提出许多不同的sigma points。在Menegaz等人的论文中有对这些sigma points的彻底研究。一般来说，若要定义$n$维下有特定平均以及共变异数的离散分布，其充份条件及必要条件是要用$n+1$个sigma points。

Uhlmann最早提出的canonical sigma point是一组对称的资料。考虑在二维下，以原点为质心的正三角形的三个顶点：

$$<pre> s_1 = \frac{1}{\sqrt{2}}\left[0, 2\right]^\mathrm{T}, \quad s_2 = -\frac{1}{\sqrt{2}}\left[\sqrt{3}, 1\right]^\mathrm{T}, \quad s_3 = -\frac{1}{\sqrt{2}}\left[-\sqrt{3}, 1\right]^\mathrm{T} </pre>$$

可以验证这三个点的平均 $s=\left[0, 0\right]^\mathrm{T},\quad$，且共变异数矩阵为$S=I$（单位矩阵）。给定任意二维的平均值以及共变异数$(x, X)$，可以将上述的点乘以$X$的矩阵平方根，再加上$x$，就可以得到想要的点。可以用类似方式产生任意维度$n$的canonical sigma points，也就是平均为0向量，变异数矩阵为单位矩阵的点。

Uhlmann证明可以很方便的从$\pm\sqrt{nX}$（其中$X$是给定的共变异数矩阵）的行以及零向量产生对称的$2n+1$个sigma points，不需计算矩阵倒数。此方式在计算上也很方便，因为这三个点是对称分布，其三次动差（偏度）已知，或是可以假设为对称。他也发现权重（包括负的权重）可以影响这组资料的统计特性。Julier也发展了针对可以捕捉任意分布下其三次动差（偏度），以及对称分布下四次动差（峰度）sigma points的方法，并且对这些方法进行检验。

## 例子

无迹变换是应用在将已知的函数应用在只知部分资讯的分布中，但最常见的情形是只知道分布的平均值以及共变异数。常见的例子是座标变换，例如从直角座标变换为极座标。

假设以下是直角座标下的二维的平均以及共变异数估计值$(m, M)$：

$$m = [12.3, 7.6]^\mathrm{T}, \quad M = \begin{bmatrix}1.44 & 0 \\0 & 2.89\end{bmatrix}$$

以下是变换到极座标的变换$f(x, y) \rightarrow [r, \theta]$：

$$r = \sqrt{x^2 + y^2}, \quad \theta = \arctan\left(\frac{y}{x}\right)$$

将前面提到的canonical sigma points乘以$M^\frac{1}{2} = \begin{bmatrix}1.2 & 0 \\0 & 1.7\end{bmatrix}$，再加上平均$m$，可得：

$$\begin{align} <pre> m_1 &= [0, 2.40] + [12.3, 7.6] = [12.3, 10.0] \\ m_2 &= [-1.47, -1.20] + [12.3, 7.6] = [10.8, 6.40] \\ m_3 &= [1.47, -1.20] + [12.3, 7.6] = [13.8, 6.40] </pre> \end{align}$$

上述每一个点进行座标变换：

$$\begin{align} <pre> {m^+}_1 &= f(12.3, 10.0) = [15.85, 0.68] \\ {m^+}_2 &= f(10.8, 6.40) = [12.58, 0.53] \\ {m^+}_3 &= f(13.8, 6.40) = [15.18, 0.44] </pre> \end{align}$$

转换后的平均值$m_{UT} = \frac{1}{3}\Sigma^3_{i=1}{m^+}_i$，是极座标下平均值的UT估计：

$$m_{UT} = [14.539, 0.551]$$

共变异数的UT估计是：

$$M_{UT} = \frac{1}{3}\Sigma^3_{i=1}\left({m^+}_i - m_{UT}\right)^2$$

和里的每一个平方项都是向量外积。可以得到：

$$M_{UT} = \begin{bmatrix}2.00 & 0.0443 \\0.0443 & 0.0104\end{bmatrix}$$

可以和线性化的平均值和共变异数比较：

$$\begin{align} <pre> m_\text{linear} &= f(12.3, 7.6) = [14.46,0.554]^\mathrm{T} \\ M_\text{linear} &= \nabla_f M \nabla_f^\mathrm{T} = \begin{bmatrix}1.927 & 0.047 \\0.047 & 0.011\end{bmatrix} </pre> \end{align}$$

UT和线性化估计值的绝对差相对较小，但在滤波应用中，小误差的累计效果仍可能造成估计值不可回复的发散。若低估共变异数时，滤波器会过度相信平均的准确度，因此误差的效果会被放大。在上述例子中，线性化的共变异数估计值较小，因此此例中，线性化比较可能低估平均的实际误差。

## 应用

无迹变换可用来将扩展非线性的卡尔曼滤波器，称为无迹卡尔曼滤波器（Unscented Kalman Filter，简称UKF）。此滤波器在许多非线性滤波及控制领域已取代了扩展卡尔曼滤波器，这些领域包括水下、陆上及空中导航和太空船。无迹变换也已经是Riemann-Stieltjes最佳控制的计算框架。此计算框架称为是无迹最佳控制。

### 无迹卡尔曼滤波器

Uhlmann和Simon Julier发表过数篇将无迹变换应用在卡尔曼滤波器（无迹卡尔曼滤波器）上的论文，指出此方法相较于扩展卡尔曼滤波器，在许多领域都有显著的性能提升。