Cholesky 分解与 LDL 分解

计算科学 线性代数 最小二乘
2021-12-24 11:42:27

在不同的书籍和 Wikipedia 上,您可以看到提到 Cholesky 分解,但有时只提到 LDL 分解。

据我了解,LDL分解可以应用于更广泛的矩阵(我们不需要矩阵是正定的)。

我特别想解决成千上万的最后一个正方形问题,如下所示:

Xβ=z
β^=(XTX)1XTz

有时在哪里XTX由于共线性不是很好的条件。我选择不使用 QR 分解或 SVD,因为:1. 比 cholesky 慢得多,2. 我可以舍弃一些βs 如果性能提升是值得的。

忘了提,但我也在从 GPU 性能优化的角度考虑这些算法。考虑到,如果可能(SVD 在 GPU 上不好),我可以使用批处理版本一次启动数千个问题。

一般而言,LDL 不是比纯 Cholesky 更好吗?是不是慢很多?

2个回答

正如评论者已经说过的,对于您的具体问题,QR 分解可能是一种更好的方法,这不是因为速度,而是因为数值稳定性。一般来说,这仍然是一个很好的问题。

您引用的优点之一是LDL可用于不定矩阵,这绝对是它的优势。我强烈推荐的线性代数库Eigen有一些关于此的基准,这似乎表明LL对于大型矩阵(> 1000 x 1000)来说要快得多。 他们网站上的这张表也很有趣。似乎说他们没有实施阻塞优化来提高缓存利用率LDL,这可能解释了目前在大型矩阵上速度较慢的原因。另一方面,同一张表也表明LL条件数的形式比LDL表单,无论他们是否实现了缓存阻塞,这都应该是正确的。哪种形式更好然后成为一个情境问题,具体取决于系统的大小和条件数。

天真地,我希望优化实现LDL会更快,因为它使用更少的平方根和除法运算,这比现代 CPU 上的浮点加法或乘法需要多 4 倍的周期。(这个 4 倍因子在 GPU 上可能会有所不同。)这可能是我错了,因为我缺少一些基本的东西,或者因为其中一个实现比另一个更优化。无论哪种情况,它都只是说明了自己进行测量的重要性。

不是一个完整的答案,但我只会提到两个微妙的细节:

  1. OP 正在将 LDLT 应用于在精确算术中为半正定的矩阵;因此人们会期望,除非发生灾难性的取消错误,否则 LDLT 总是使用 1x1 枢轴而不是 2x2 枢轴。因此,这些矩阵的基准测试结果可能与通用矩阵不同(我认为是基于随机矩阵)。

  2. 此外,如果 LDLT 甚至在其中一个矩阵上进行一次 2x2 枢轴,那么这意味着计算错误已经受到干扰XTX超过它到奇点的距离。因此,可以说,在这种情况下,由 LDLT 给出的结果和计算值β很可能是垃圾。(Cholesky 在同一个例子上给出的结果也很可能是垃圾,所以这不是支持 Cholesky 的观点。这只是意味着 LDLT 中的 2x2 代码路径在这里并不重要。)