线性方程组一般考虑两类:
A 是 m * n 矩阵,x 是 n * 1 的向量,b 是 m * 1 的向量。此类问题可以很方便地采用SVD奇异值分解来求解。
关于线性方程组的解析解存在性的讨论在之前的博客中已经介绍,主要基于向量组的线性相关性理论。链接为:【线性代数】齐次与非齐次线性方程组有解的条件。
主要结论为:
对于齐次线性方程组 Ax = 0:
对于非齐次线性方程组 Ax = b:
重新考虑形如 Ax = b 的方程组,A 是 m * n 矩阵,则有三种可能性:
在实际问题中,通常会遇到方程数大于未知数的情况,现在考虑 m ≥ n 并且 A 的秩为 n 的情形。如果解不存在,那么对许多情形,我们仍然希望寻找一个向量 x 使 || Ax - b || 最小,这样的 x 称为该 超定方程组的一个最小二乘解,用 SVD 奇异值分解方法可以方便地求最小二乘解。
下面直接给出结论。
给定对角方阵 Σ \Sigma Σ,定义它的 伪逆 Σ † \Sigma^\dagger Σ† 是对角矩阵,且其对角元素满足:
Σ i i † = 0 , i f Σ i i = 0 Σ i i † = Σ i i − 1 , i f Σ i i ≠ 0 \Sigma^\dagger_{ii} = 0, \qquad \mathrm{if} \; \Sigma_{ii}=0 \\ \Sigma^\dagger_{ii}= \Sigma^{-1}_{ii},\mathrm{if} \; \Sigma_{ii}\neq0 Σii†=0,ifΣii=0Σii†=Σii−1,ifΣii=0
现在考虑 m * n 矩阵 A,其中 m ≥ n。令 A 的 SVD分解为 A = U Σ V T A = U\Sigma V^T A=UΣVT。定义 A 的 伪逆 为矩阵
A † = V Σ † U T A^{\dagger}=V\Sigma^{\dagger}U^T A†=VΣ†UT
结论:秩为 n 的 m × n m \times n m×n 方程组 Ax = b 的最小二乘解由 x = A † ^{\dagger} † b 给出。
线性最小二乘问题也可以用一个涉及正规方程的方法来解。考虑线性方程组 Ax = b,其中 A 为 m * n 的矩阵并且 m > n。这个方程组一般不存在解 x。此时我们的任务是求最小化范数 || Ax - b || 的向量 x。
当 x 取遍所有的值时,Ax 将遍历 A 的整个列空间,即由 A 的列生成的一个 R m R^m Rm 子空间。因此我们的任务是在 A 的列空间中寻找最接近 b 的那个向量,接近程度由向量范数定义。
令 x 是这个问题的解,则 Ax 是最接近 b 的点。此时,两者的差 Ax - b 必然是与 A 的列空间垂直的向量,即 Ax - b 垂直于 A 的每一列,因此有 A T ( A x − b ) = 0 A^T(A\mathbf{x} - \mathbf{b}) = 0 AT(Ax−b)=0,进一步转化就得到方程:
( A T A ) x = A T b (A^TA)\mathbf{x} = A^T \mathbf{b} (ATA)x=ATb
这是一个 n × n n \times n n×n 的线性方程组,称为 正规方程。该方程组有解并且可用来求问题 Ax = b 的最小二乘解。
由于 x = A † b \mathbf{x}=A^\dagger\mathbf{b} x=A†b,不难得到:如果 m × n m \times n m×n 矩阵 A 的秩为 n,那么 A 的伪逆为 A † = ( A T A ) − 1 A T A^\dagger=(A^TA)^{-1}A^T A†=(ATA)−1AT。这个结论不仅在理论分析时有用,而且当 n 相对于 m 很小时,在计算上也给出比用 SVD 分解计算伪逆更简单的方法(因为计算 ( A T A ) (A^TA) (ATA)的逆比计算 A 的 SVD 要节省)。
该算法总结如下:
目标:求最小化 ||Ax|| 的 x.
算法:
(1)解正规方程 ( A T A ) x = A T b (A^TA)\mathbf{x} = A^T \mathbf{b} (ATA)x=ATb.
(2)如果 A T A A^TA ATA可逆,则解是 x = ( A T A ) − 1 A T b \mathbf{x} = (A^TA)^{-1}A^T \mathbf{b} x=(ATA)−1ATb.
对于正规方程的求解,常用的方法还有 Cholesky 分解、QR分解等,该部分内容待后续补充。
与上一问题类似的是求齐次线性方程组 Ax = 0 的解。我们仍然考虑 方程数大于未知数的情形——即超定方程组。平凡解 x = 0 不是我们期望的,因此重点关注其非零解。值得注意的是,如果 x 是该方程组的一个解,那么对任何标量 k,kx也是解,因此一个合理的约束是只求 || x || = 1 的解。
假定 A 的维数是 m * n,那么根据上面第一节的讨论,存在非零解析解的充要条件是 rank(A) < n。在实际应用中,齐次线性方程组一般不存在解析解。当没有精确解时,我们通常求它的一个最小二乘解,问题描述为:
该问题利用奇异值分解的求解思路如下。
该算法总结如下:
目标:给定行数不少于列数的一个矩阵A,求最小化 ||Ax|| 且满足 ||x|| = 1 的 x.
解:x 是 V 的最后一列,其中 A = U Σ V T A = U \Sigma V^T A=UΣVT 是 A 的奇异值分解.
在计算机视觉相关的应用中,通常会涉及到尺度等价性问题,比如本质矩阵、基础矩阵的求解等。待求解的齐次线性方程组为 Ax = 0,其中A 是 m * n 矩阵, x 是 n * 1 的向量。
对于齐次线性方程组的解,讨论其解空间的情况:
所以,在计算机视觉的某些应用中,对于具有尺度等价性的变量 x,构建 Ax = 0 齐次线性方程组时,约束个数 ≥ n - 1 时可应用奇异值分解求最小二乘解。
比如在《视觉SLAM十四讲》第7.3.2节中求解本质矩阵时,仅考虑尺度等价性,使用8对点来估计本质矩阵 E。E矩阵有9个元素,转换成向量的形式为 9 * 1 的向量 e \mathbf{e} e,每对点可以提供一个约束方程,那么总共构成 8 * 9 的系数矩阵 A,问题描述为 A e = 0 A\mathbf{e} = \mathbf{0} Ae=0.