双随机投影算法(Randomized Bilateral Projection)在矩阵低秩近似中的应用
我们来讲一种用于矩阵低秩近似的高效随机化算法:双随机投影算法。这个算法的核心思想是,利用两个独立的随机投影矩阵,从“左右两边”同时压缩一个大型矩阵,从而快速得到其低秩近似。
题目描述
设我们有一个大型矩阵 \(A \in \mathbb{R}^{m \times n}\),并且假设它在数值上是近似低秩的,即其奇异值衰减得很快。我们的目标是在不计算其完整的奇异值分解(SVD)的前提下,找到一个秩为 \(k\)(\(k \ll \min(m, n)\))的矩阵 \(A_k\),使得 \(A_k \approx A\),且计算成本远低于经典SVD。
传统的方法如随机SVD,通常先进行一侧的随机投影。而双随机投影算法通过同时进行左乘和右乘随机矩阵,将原矩阵压缩到一个更小的核心矩阵上,再通过这个核心矩阵重构低秩近似,有时能获得更好的计算效率或数值稳定性。
解题过程详解
双随机投影算法的主要步骤可以概括为以下四步:
- 生成两个随机投影矩阵。
- 从两侧投影,形成一个小型的“草图”矩阵。
- 对草图矩阵进行经济SVD分解。
- 利用SVD因子和投影矩阵,重构原矩阵的低秩近似。
下面我们循序渐进地讲解每个步骤。
步骤一:生成随机投影矩阵
算法的第一步是生成两个独立的、服从特定分布的随机矩阵。
- 目标: 我们要将矩阵 \(A\) 的行空间和列空间同时进行压缩。
- 做法:
- 选择一个目标秩 \(k\)(例如,我们希望近似秩为10)。
- 选择一个“过采样”参数 \(p\)(例如,\(p = 5\) 或 \(10\)),这是为了提升近似的精度和鲁棒性。定义 \(l = k + p\)。
- 生成两个随机矩阵:
- \(\Omega \in \mathbb{R}^{n \times l}\),称为右侧随机投影矩阵。通常其元素独立同分布,例如服从标准正态分布 \(N(0, 1)\),或由更高效的稀疏随机分布(如Subsampled Randomized Hadamard Transform, SRHT)生成。
- \(\Psi \in \mathbb{R}^{l \times m}\),称为左侧随机投影矩阵。同样,它独立于 \(\Omega\),且通常服从相同的分布。注意它的维度是 \(l \times m\),所以它的转置 \(\Psi^T \in \mathbb{R}^{m \times l}\) 将用于左乘。
关键点: 这里的 \(l\) 略大于 \(k\)。过采样(\(p > 0\))确保了即使随机投影丢失了一些信息,我们仍有很高概率能捕获到与 \(A\) 的前 \(k\) 个主成分相关的子空间。
步骤二:双侧投影与草图矩阵构建
这是算法的核心压缩步骤。
- 目标: 利用 \(\Omega\) 和 \(\Psi\) 从左右两侧“夹住”矩阵 \(A\),得到一个很小的 \(l \times l\) 矩阵,它包含了重构 \(A\) 的低秩近似所需的关键信息。
- 做法:
- 右侧投影(压缩列空间): 计算 \(Y = A \Omega\)。这个矩阵 \(Y \in \mathbb{R}^{m \times l}\) 的列是 \(A\) 的列空间的近似一组基(更准确地说,它近似张成了 \(A\) 的前 \(l\) 个右奇异向量所张成的子空间)。
- 左侧投影(压缩行空间): 计算 \(W = \Psi A\)。这个矩阵 \(W \in \mathbb{R}^{l \times n}\) 的行是 \(A\) 的行空间的近似一组基。
- 核心压缩: 计算 草图矩阵(Sketch Matrix) \(C = \Psi A \Omega = W \Omega \in \mathbb{R}^{l \times l}\)。这个矩阵虽然很小,但它同时编码了从 \(\Psi\) 视角看到的列空间信息(来自 \(Y\))和从 \(\Omega\) 视角看到的行空间信息(来自 \(W\))。
直观理解: 你可以把 \(C\) 想象成是原矩阵 \(A\) 在一个由 \(\Psi^T\) 和 \(\Omega\) 的列所张成的“小坐标系”下的表示。因为 \(l\) 很小(比如15),所以 \(C\) 是一个很小的方阵。
步骤三:对草图矩阵进行经济SVD
- 目标: 从这个小型的草图矩阵 \(C\) 中,提取出最重要的奇异值和奇异向量,它们将作为我们重构 \(A_k\) 的蓝图。
- 做法:
- 对 \(l \times l\) 的矩阵 \(C\) 进行经济型SVD(或完全SVD,因为 \(C\) 很小):
\[ C = U_C \Sigma_C V_C^T \]
其中,$ U_C \in \mathbb{R}^{l \times l} $, $ \Sigma_C = \text{diag}(\sigma_1, \dots, \sigma_l) \in \mathbb{R}^{l \times l} $, $ V_C \in \mathbb{R}^{l \times l} $。
* 我们只保留前 $ k $ 个主要成分。即,取 $ U_k = U_C(:,\, 1:k) $($ U_C $ 的前 $ k $ 列), $ \Sigma_k = \Sigma_C(1:k,\, 1:k) $(前 $ k $ 个奇异值), $ V_k = V_C(:,\, 1:k) $(前 $ k $ 列)。
关键点: 由于 \(C\) 的尺寸仅为 \(l \times l\),对它进行SVD的成本 \(O(l^3)\) 非常低。这个分解是快速的。
步骤四:重构低秩近似矩阵
- 目标: 利用上一步得到的 \(U_k, \Sigma_k, V_k\) 以及第一步生成的随机投影矩阵,构造出我们最终想要的、对原矩阵 \(A\) 的秩 \(k\) 近似 \(A_k\)。
- 做法:
- 重建近似基:
- 近似的右奇异向量(列空间基)可以通过 \(Y = A \Omega\) 和 \(V_k\) 来“升级”:\(\tilde{V} = Y V_k \in \mathbb{R}^{m \times k}\)。但为了数值稳定性和正交性,通常会对 \(\tilde{V}\) 进行QR分解:\(\tilde{V} = Q_V R_V\),取 \(Q_V\) 作为正交化的近似右奇异向量矩阵。
- 近似的左奇异向量(行空间基)可以通过 \(W = \Psi A\) 和 \(U_k\) 来“升级”:\(\tilde{U} = W^T U_k \in \mathbb{R}^{n \times k}\)。同样,进行QR分解:\(\tilde{U} = Q_U R_U\),取 \(Q_U\) 作为正交化的近似左奇异向量矩阵。
- 构建核心矩阵: 计算一个小型的 \(k \times k\) 核心矩阵 \(M\):
- 重建近似基:
\[ M = (Q_U^T A) (A Q_V) \quad \text{或者更高效地,利用已有量:} M = (U_k^T C) V_k \cdot \Sigma_k^{-1} \text{(需要推导和调整)} \]
一个更标准且稳定的方式是计算:$ M = Q_U^T A Q_V $。由于 $ Q_U $ 和 $ Q_V $ 是正交的,且 $ M $ 很小,这个计算可以通过矩阵乘法完成。
3. **对核心矩阵进行SVD:** 对 $ M \in \mathbb{R}^{k \times k} $ 进行SVD:$ M = \tilde{U}_M \Sigma_k \tilde{V}_M^T $。
4. **最终近似:** 最终的秩 $ k $ 近似矩阵为:
\[ A_k = (Q_U \tilde{U}_M) \Sigma_k (Q_V \tilde{V}_M)^T \]
这正好是 $ A_k = \hat{U} \Sigma_k \hat{V}^T $ 的形式,其中 $ \hat{U} = Q_U \tilde{U}_M $ 和 $ \hat{V} = Q_V \tilde{V}_M $ 是(近似)正交的。
简化实用版本:
在实践中,有一个更直接(虽然理论保证可能稍弱)的版本,直接从步骤三的结果出发:
\[A_k = Y (U_k \Sigma_k^{-1}) (V_k^T \Sigma_k) W = (Y U_k \Sigma_k^{-1}) (\Sigma_k V_k^T W) \]
令 \(P = Y U_k \Sigma_k^{-1} \in \mathbb{R}^{m \times k}\) 和 \(Q^T = \Sigma_k V_k^T W \in \mathbb{R}^{k \times n}\),则 \(A_k = P Q^T\)。这是一个显式的低秩分解形式(\(P\) 和 \(Q\) 是瘦矩阵),计算和存储都很方便。
算法总结与优势
算法输入: 矩阵 \(A \in \mathbb{R}^{m \times n}\),目标秩 \(k\),过采样量 \(p\)。
算法输出: 秩 \(k\) 近似矩阵 \(A_k\),或其分解形式 \(A_k = P Q^T\)(或 \(A_k = \hat{U} \Sigma_k \hat{V}^T\))。
- 生成随机矩阵 \(\Omega \in \mathbb{R}^{n \times (k+p)}\), \(\Psi \in \mathbb{R}^{(k+p) \times m}\)。
- 计算 \(Y = A \Omega\), \(W = \Psi A\)。
- 计算草图矩阵 \(C = \Psi A \Omega = W \Omega\)。
- 计算 \(C\) 的SVD:\([U_C, \Sigma_C, V_C] = \text{svd}(C)\)。
- 取前 \(k\) 个成分:\(U_k = U_C(:,\, 1:k)\), \(\Sigma_k = \Sigma_C(1:k,\, 1:k)\), \(V_k = V_C(:,\, 1:k)\)。
- (可选,简化输出)计算 \(P = Y U_k \Sigma_k^{-1}\), \(Q^T = \Sigma_k V_k^T W\)。
- 近似矩阵为 \(A_k = P Q^T\)。
优势:
- 计算效率: 主要计算量在于两次矩阵乘法(\(A \Omega\) 和 \(\Psi A\))和对一个很小矩阵 \(C\) 的SVD。如果 \(A\) 是稀疏的或者能快速进行矩阵向量乘法,那将非常高效。总复杂度约为 \(O(mn l + l^3)\),远低于完全SVD的 \(O(mn \min(m, n))\)。
- 灵活性: 随机投影矩阵 \(\Psi\) 和 \(\Omega\) 可以选用多种分布,以适应不同的计算平台和精度要求。
- 理论保证: 在一定的概率下(通常很高),该算法得到的近似误差 \(\| A - A_k \|\) 可以与最佳秩 \(k\) 近似(由截断SVD给出)的误差相媲美,误差上界是可控的。
这个算法完美地体现了随机化方法在处理大规模矩阵低秩近似问题上的威力:通过巧妙的随机采样,将问题规模急剧减小,从而在可接受的计算成本内获得高质量的近似解。