使用 PyTorch 加速带边界的线性最小二乘优化?

问题描述

我正在使用 scipy.optimize.lsq_linear 运行一些线性最小二乘优化,一切都很好,但有点慢。我的 A 矩阵的大小通常约为 100 x 10,000,并且很稀疏(稀疏通常约为 50%)。解决方案的界限很关键。鉴于我的容忍度,lsq_linear 通常可以在大约 10 秒内解决问题,加快速度对于运行许多优化非常有帮助。

我在 PyTorch 中阅读了有关使用 GPU 加速来加速线性代数运算的文章。看起来 PyTorch 处理 sparse arrays(torch 称它们为张量),这很好。但是,我一直在挖掘 PyTorch documentation,特别是 torch.optimtorch.linalg 包,但我没有发现任何似乎能够进行线性最小二乘优化的东西边界。

  • 是否有一种火炬方法可以使用 scipy.optimize.lsq_linear 之类的边界进行线性最小二乘优化?
  • 还有其他方法可以加速 lsq_linear 或以更快的方式执行优化吗?

就其价值而言,我认为我已经将 lsq_linear 推得相当远。我认为我无法在不牺牲结果的情况下进一步减少矩阵元素的数量增加稀疏性或降低优化容差。

解决方法

不容易,不。

我会尝试在您的问题上分析 lsq_linear,看看它是纯 python 开销(可能会被修剪一些)还是线性代数。在后一种情况下,我将首先提供 lsq_linear 代码并交换相关的线性代数例程。虽然是 YMMV。