自适应线性代数库

计算科学 线性代数 机器学习
2021-12-27 18:10:49

在阅读了第一个关于如何找到性能最高的稀疏求解器的最佳方法是尝试几乎所有方法的第一个答案后,我开始怀疑过去是否有任何关于库的工作或自适应库的研究。

我所说的自适应库是一种实现(或链接到)各种迭代和直接求解器的库,在模拟过程中尝试不同的求解器以自动找到性能最佳的求解器。虽然简单的模拟可能不会从这种系统中受益,但我目前正在处理涉及大约一百万个求解的模拟。即使我的前几十个解决方案比其他解决方案慢几个数量级,因为它收敛到接近最佳的解决方案设置速度仅比我自己选择的方案快几个百分点,很容易弥补额外的时间。

显然,这样的系统要求每个被求解的矩阵都必须在某种程度上与以前的矩阵共享特征,但这通常是 FD、FV 或 FE 模型中的情况。所以我的问题是,这样的库是否存在,在性能方面的实现可能会遇到哪些陷阱?

1个回答

您不应该从引用的问题中得到没有理论的印象,例如“所有方法”的蛮力测试(无论这意味着什么;很容易产生难以先验排除的无限方法序列)是唯一可行的方法。问题是,如果您对自己的问题了解得不够多,无法提出一个连贯的问题,那么我们可以做出的确定性陈述就很少。坦率地说,很多时候人们问这些过于笼统的问题,是由于懒惰和对该领域缺乏熟悉的结合。在很多情况下,由于物理、离散化、材料、领域等的变化,问题会非常迅速地发生变化。

对于任何给定的类,我们通常可以设计好的求解器,但对于非标准问题,它需要一些努力和一些经验(就像任何熟练的交易一样)。在设计方法时,我们经常使用迭代过程,在该过程中,我们查看通过尝试几类方法获得的收敛和诊断。

至于自动求解器配置适应性,它很像“自动调整”,但在更高的层次上涉及更多的数学。杰克引用的诸如 SALSA 之类的项目未能成功地为尚未被充分理解的问题找到好的解决者。考虑到通用“自动调整”系统往往只能有效地找到最终被证明不是特别好的局部最小值,这并不奇怪。如果你注入了大量的领域知识,自动调优系统可以“微调”一些细节。

我认为为非标准系统请求黑盒迭代求解器主要是浪费时间。如果产生高质量的结果,一般的自动配置将是一个黑匣子。相反,我建议不要尝试走捷径,了解问题并了解几类方法的属性,然后使用这些知识来设计一个好的求解器。