我们如何在内存有限的情况下求解正规方程?

计算科学 优化 最小二乘 回归 内存管理
2021-12-06 19:01:56

我曾经在一次采访中被问到这个开放式问题:

您如何找到内存有限的正规方程的解?

求解具有有限内存的稀疏最小二乘系统不同,矩阵A不一定是稀疏的。它可能很稠密。

这个问题是在机器学习/统计上下文中提出的,所以我给出的答案不是精确地解决它(例如,使用 QR),您可以使用随机或批量梯度下降来解决它并获得一个近似解。

在线性代数和科学计算环境中,有没有办法解决内存有限的密集最小二乘系统?

3个回答

这也可能是一个棘手的问题。假设您要求解的正规方程,即让我们假设提问者的意思是实际上已经存储在内存中,所以我们知道已经有那么多内存可用。我们还假设又高又窄(更具体地说,列比行少)——因为否则求解正规方程。Ax=b(ATA)x=ATbAA

然后,如果矩阵是密集的,那么也是如此,而且小于,因此在内存中最多以两倍为代价,如果可以存储 ,则可以存储B=ATABABA

如果是稀疏的,那么的存储成本可能高得多,尽管这取决于的稀疏模式。如果是这种情况,那么我们可以用共轭梯度 (CG) 求解正规方程,因为是对称且(希望是)正定矩阵。在 CG 中,您所需要的只是将向量乘以矩阵的能力,这可以通过编写以最少的额外内存来实现,即,您只需要做两个后续的矩阵向量乘积——永远不需要形成乘积矩阵ABABBBv=(ATA)v=AT(Av)B

所谓的“无矩阵”方法,主要依赖于执行矩阵乘以向量的能力,非常适合 GMRES 等迭代技术。矩阵本身可能在磁盘上,但有选择地检索部分以计算必要的矩阵向量乘积。

在近似技术中:

  • 考虑到局限性,梯度下降应该做得不错。
  • 随机 SVD 是一种有效的技术。它可以快速实施,并且有现成的错误界限(参见例如https://doi.org/10.1137/090771806以了解该领域的评论)。

在产生精确解决方案的技术中:

  • 有核外QR和SVD计算的研究;本质上,QR 的主要思想是预先计算的较薄“面板”的 QR,然后将它们合并(当然,细节变得非常技术性)。A
  • 如果您的问题条件良好,并且适合内存,则可以只使用正规方程解,其中您可以对核外数据进行一次计算。就实现而言,这是迄今为止最简单的解决方案(其次是随机 SVD),但它的稳定性只是有条件的和问题相关的。min(m,n)2x=(ATA)1(ATb)