插值与神经网络

计算科学 插值 机器学习
2021-12-19 19:06:18

我正在向社区寻求知识。我正在使用 COMSOL 求解传输 PDE(溶质质量守恒)。在每次 Newton-Raphson 迭代中,我需要更新一个名为Kd对于一些正在运输的化学物质(也许我会更新Kd在每个时间步取决于收敛)。

这个 Kd 是从 5 个参数中获得的。因此,Kd=f(X1,X2,X3,X4,X5). 我有一个多维数组(或表,或任何您喜欢的名称),其中来自不同的组合X1,X2,X3,X4, 和X5我得到一个Kd. 组合数为61440,因此大小X1,X2,X3,X4,X5Kd也是61440(不确定这是否被认为是一个很大的数量,对我来说是)。

在模拟的某个时刻,我将不得不进行插值,我已经在 Matlab 中尝试使用griddatan函数,但它花费了太多时间,我得到NaN了答案。所以,我正在寻找替代品。我读过应该可以使用神经元网络进行“预测”(对我来说是插值),但我想知道:

1)多元插值和神经网络领域的算法有哪些?(我对这些领域不太熟悉)

2)哪一个可以更好或更快?

3)在我使用插值算法或神经网络算法的情况下会有什么不同?(我没有噪音,虽然我有大数据)。

注意:组合的网格X1,X2,X3,X4,X5应该是等距的。

2个回答

我在机器学习方面的经验有限;但是,简化后,您可以将其视为“训练有素的黑匣子”。我想说,你必须对你的问题、函数的行为有很多了解,才能成功、可靠地应用任何形式的机器学习。你必须决定如何获取训练数据、训练集的大小、训练方法、你的神经网络结构(如果你选择神经网络)以及许多其他事情。因此,当您刚刚开始时,我会避免通过机器学习路线进行数值应用。这可能是一种方法,但应首先尝试其他数值技术。

关于插值。您提到您的函数可能不平滑(我想,我们没有可以查看的分析形式)。值得尝试在更粗糙的网格上使用插值,该网格可以切实地适合内存并使用例如双三次插值开始。然后,对您的错误进行抽样以了解发生了什么。选择不同的插值技术也可能有所帮助。

另一种选择是有理函数拟合这可能会更好地捕捉更复杂函数的行为。

我会说,你需要学习你的函数的行为(Kd) 更好地了解会发生什么,然后,也许,尝试机器学习。然而,数值应用中的机器学习很少能给你提供高精度(总是有例外和特殊问题),所以如果你想要在你的Kd,我怀疑机器学习是否可行。

因此,阅读您的问题后,我将分享一些评论,然后我的观点与 Anton 写的好答案有一些重叠。

首先,您的问题措辞令人困惑。你最初让它听起来像61440的组合(X1,X2,X3,X4,X5)可能在您的网格离散化中,但是您在ngrid函数注释中提到的代码问题暗示了每个变量Xi61440值,使总组合(X1,X2,X3,X4,X5)等于614405,这对于 RAM 来说实在是太多了。哪个是正确的情况?

如果你确实有614405离散组合,那么我首先建议您减少沿每个维度的样本数量,以便您可以将此模型放入 RAM。假设这个粗化模型足够准确,这个模型的计算速度会很快。

您总是可以使用一些神经网络来基于数据样本构建模型,因为神经网络是一种通用逼近器,但即使是在数据的子集上训练这样的模型614405数据集最终将是一个挑战。近似误差可能大于基于表格的插值模型。

Anton 提到了您可能会尝试提出更好模型的各种方法。我要补充一点,您确实需要考虑您要建模的内容。最终,您希望您使用的技术能够充分逼近真实函数所对应的函数空间Kd生活。如果你知道的话Kd非常不平滑,您可能很难使用平滑函数逼近/插值技术构建一个好的模型。如果您有更多关于Kd,你应该描述它们。