鱼的深度学习

论文笔记-Learning to Simulate Comple

2020-08-27  本文已影响0人  升不上三段的大鱼

论文原文

摘要

在这里,我们提供了一个学习模拟的通用框架,并提供了一个单一模型的实现,该模型可在各种具有挑战性的物理领域(包括流体,刚性固体和可变形材料彼此相互作用)中产生最先进的性能。我们的框架(我们称为“基于图网络的模拟器”(GNS))表示带有粒子的物理系统的状态,表示为图中的节点,并通过学习的消息传递来计算动力学。我们的结果表明,我们的模型可以从训练期间包含数千个粒子状态的单一时间步长的预测,推广到不同的初始条件,数千个时间步长,以及在测试时至少增加一个数量级的粒子。我们的模型对于跨各种评估指标的超参数选择具有鲁棒性:长期表现的主要决定因素性能是消息传递步骤的数量,并通过用噪声破坏训练数据来减轻错误的累积。我们的GNS框架是迄今为止最准确的通用学习型物理模拟器,它有望解决各种复杂的正反问题。

介绍

复杂物理学的现实仿真器对许多科学和工程学科而言都是无价的,但是传统仿真器的创建和使用可能非常昂贵。 构建模拟器可能需要多年的工程工作,并且通常必须在狭窄的设置范围内牺牲通用性才能获得准确性。 高质量的模拟器需要大量的计算资源,因此需要扩展起来让人望而却步。 由于对基本物理和参数的了解不足或难以近似,即使最好的也常常是不准确的。 一种有吸引力的传统模拟器的替代方法是使用机器学习直接从观察到的数据中训练模拟器,但是对于大型的状态空间和复杂的动力学而言,标准的端到端学习方法很难克服。

在这里,我们提出了一个从数据中学习模拟的通用框架-“基于图形网络的模拟器”(GNS)。 我们的框架强加了归纳偏见,其中丰富的物理状态由相互作用粒子的图表示,而复杂的动力学则通过在节点之间学习到的消息传递来近似。

我们在一个深度学习架构中实现了GNS框架,发现它可以学习准确地模拟流体,刚性固体和可变形材料相互影响的各种物理系统。 我们的模型还可以很好地推广到比经过训练的系统更大的系统和更长的时间范围。 虽然以前的学习模拟方法高度专注于特定任务,但我们发现单个GNS模型在数十个实验中表现良好,并且通常对超参数选择具有鲁棒性。 我们的分析表明,性能是由以下几个关键因素决定的:其计算远程交互作用的能力,空间不变性的归因偏差以及可减轻长时间模拟轨迹上的误差累积的训练程序。

模型

一般的可学习模拟

我们假设X^t \in \mathcal{X}是世界在时间t的状态。在K个时间步上应用物理动力学可得出状态轨迹,X^{t:k} = (X^{t0}, .. X^{tK})。一个模拟器,s:X→ X, 通过将先前的状态映射到因果的未来状态来对动力学建模。 我们将模拟的“展开”轨迹表示为:X^{t0:K} =(X^{t0}, \widetilde{X}^{t1},...,\widetilde{X}^{tk}),它由\widetilde{X}^{tk+1} = s(\widetilde{X}^{tk})迭代计算 时间步长。 模拟器计算反映当前状态如何变化的动力学信息,并使用它来将当前状态更新为预测的未来状态。 一个例子是数值微分方程求解器:这些方程计算动力学信息,即时间导数,而积分器是更新机制。

一个可学习的模拟器s_{\theta}使用参数化函数近似器(d_{\theta}: \mathcal{X} \rightarrow \mathcal{Y})计算动力学信息,其参数可以针对某些训练目标进行优化。 Y \in \mathcal{Y}表示动力学信息,其语义由更新机制确定。 可以将更新机制视为采用\widetilde{X} ^{tk}的函数,并使用d_{\theta}来预测下一个状态,即\widetilde{X} ^{tk+1} = Update(\widetilde{X} ^{tk}, d_{\theta})。 在这里,我们假设一个简单的更新机制(一个Euler积分器)和代表加速度的Y。 但是,也可以使用更复杂的更新程序,这些更新程序不止一次调用d_{\theta},例如高阶积分器。

模拟图上的消息传递

我们可学习的模拟方法采用物理系统的基于粒子的表示形式,即X =(x_{0},...,x_{N}),其中N个粒子的每个xi表示其状态。物理动力学是通过粒子之间的相互作用来进行近似的,例如,在粒子之间进行能量和动量的交换。粒子间相互作用的建模方式决定了模拟方法的质量和普遍性,例如,可以模拟的效果和材料的类型,方法在哪种情况下效果良好或较差等。我们对学习这些相互作用感兴趣,从原则上讲,它应该允许学习任何系统的动力学可以表示为粒子动力学。因此至关重要的是,不同的\theta值应使d_{\theta}跨越很大范围的粒子间相互作用函数。

基于粒子的模拟可以看作是图形上的消息传递。节点对应于粒子,并且边缘对应于粒子之间的成对关系,在该关系上计算相互作用。我们可以在此框架中理解SPH之类的方法-节点之间传递的消息可能对应于使用密度内核评估压力。

我们利用基于粒子的模拟器与图上的消息传递之间的对应关系来定义基于GN的通用d_{\theta}。 我们的d_{\theta}分为三个步骤-编码器,处理器和解码器。

编码器定义。 编码器:\mathcal{X} \rightarrow \mathcal{G}将基于粒子的状态表示,X嵌入为潜图(latent graph), G0 = ENCODER(X),其中G =(V,E,u),v_i \in V和e_{i,j} \in E)。 节点嵌入v_i =\varepsilon^v(x_i),是粒子状态的学习函数。添加有向边以在具有某些潜在交互作用的粒子节点之间创建路径。边缘嵌入e_{i,j} =\varepsilon^e(r_{i, j})是相应粒子ri; j的成对属性的学习函数,例如,它们的位置之间的位移,弹簧常数等。图形级嵌入u可以表示诸如重力和磁场之类的全局属性( 尽管在我们的实现中,我们只是将它们附加为输入节点功能)。

处理器定义。 处理器:\mathcal{G} \rightarrow \mathcal{G}通过M个学习的消息传递步骤来计算节点之间的交互,以生成一系列更新的潜图(latent graph)G =(G^1,...... G^M),其中G^{m + 1} = GN^{m + 1}(G^m))。 它返回最终图形G^M = PROCESSOR(G^0)。 消息传递允许信息传播并遵守约束:所需的消息传递步骤数可能会随着交互的复杂性而扩展。

解码器定义。 解码器:\mathcal{G} \rightarrow \mathcal{Y}从最终潜图的节点y^i = \delta^v(v^{M}_i))。 学习\delta^v应该使\mathcal{Y}表示反映相关的动力学信息,例如加速度,以便在语义上对更新过程有意义。

GNS实施细节

输入和输出表示。 每个粒子的输入状态向量分别代表位置,C = 5的先前速度序列,并具有捕获静态材料特性(例如,水,沙,团,刚性,边界粒子)的特征,x^{tk}_i = [p^{tk}_i, \dot{p}^{tk-C+ 1}_i, ......, \dot{p}^{tk}_i, f_i]。 如果适用,系统的整体特性g包括外力和整体材料特性。 监督学习的预测目标是每粒子平均加速度\dot{p_i}。 请注意,在我们的数据集中,我们只需要p_i向量:使用有限差分从p_i计算出\dot{p_i}\ddot{p_i}

编码器详细信息。 ENCODER通过为每个粒子分配一个节点并在“连接半径” R内的粒子之间添加边来构造图形结构G0,该半径反映了粒子的局部相互作用,并且对于相同分辨率的所有模拟均保持不变。 为了生成卷展栏,在每个时间步上,图形的边缘都由最近的邻居算法重新计算,以反映当前粒子的位置。

ENCODER将\varepsilon^v\varepsilon^e实现为多层感知器(MLP),它们将节点特征和边缘特征编码为大小为128的潜在向量v_ie_{i, j}

我们测试了两种ENCODER变体,以其使用绝对位置还是相对位置信息来区分。 对于绝对变量,\varepsilon^v的输入是上述的xi,并带有全局特征。\varepsilon^e的输入,即ri; j实际上没有携带任何信息,因此被丢弃,其中e^0_iG_0设置为可训练的固定偏差矢量。 相对的ENCODER变体旨在对绝对空间位置施加不变的归纳偏差。 \varepsilon^v被迫通过遮蔽来忽略xi内的pi信息。\varepsilon^e被提供了相对位置位移,其大小为r_{i, j} = [(p_i-p_j),|| p_i-p_j||]。 两种变体都将全局属性g连接到每个xi上,然后传递给“\varepsilon^u

处理器详细信息。 我们的处理器使用具有相同结构的MGN(其中M为超参数)堆栈,作为内部边缘和节点更新功能的MLP,以及共享或不共享的参数。 我们使用没有全局功能或全局更新(类似于交互网络)的GN,并且在输入和输出潜在节点与边属性之间存在残余连接。

解码器详细信息。 我们解码器的学习函数\delta^v,是MLP。 在DECODER之后,使用Euler积分器更新将来的位置和速度,因此y_i对应于加速度\ddor{p}_i,具有2D或3D尺寸,具体取决于物理域。 如上所述,监督训练目标只是这些\ddor{p}_i向量。

神经网络参数化。 所有MLP都有两个隐藏层(具有ReLU激活),其后是一个未激活的输出层,每个层的大小为128。所有MLP(输出解码器除外)之后是LayerNorm(层。 我们通常发现训练稳定性得到了改善。

训练

软件。 我们使用TensorFlow 1,Sonnet 1和“ Graph Nets”库实施了模型。

训练噪声。 对复杂而混乱的仿真系统进行建模需要模型减轻长时间部署时的错误累积。 因为我们在基本事实单步数据上训练我们的模型,所以永远不会为它们提供被此类累积噪声破坏的输入数据。 这意味着,当我们通过向模型提供自己的噪声,先前的预测作为输入来生成推广时,其输入不在训练分布范围内这一事实可能导致其产生更大的误差,从而迅速累积进一步的误差。 我们使用一种简单的方法使模型对嘈杂的输入更具鲁棒性:在训练过程中,我们以随机行走噪声\mathcal{N}(0,\sigma_v = 0.0003)破坏模型的输入位置和速度,因此训练分布更加 与推出期间产生的分布相似。

正则化。我们使用训练期间在线计算的统计数据,将所有输入和目标向量的元素归一化为零均值和单位方差。初步实验表明,归一化可加快训练速度,但融合性能并未得到明显改善。

损失函数和优化程序。我们从训练轨迹中随机采样粒子状态对(x^{tk}_ i,x^{tk + 1}_i),计算目标加速度p^{tk}_ i,并根据预测的每个粒子加速度计算L2损失,即L(x^{tk}_i, x^{tk + 1}_i, \theta)= ||d_{\theta}(x^{tk}_i)-\ddot{p}^{tk}_i ||^2。我们使用最小批量大小2,使用Adam优化器针对这种损失优化了模型参数\theta。我们最多执行了20M梯度更新步骤,指数学习速率从10^{-4}下降到10^{-6}。尽管模型可以以更少的步骤进行训练,但我们避免使用过高的学习率来减少数据集之间的差异,并使设置之间的比较更加公平。

我们在训练过程中通过在5个保持不变的验证轨迹上进行全长展示来定期评估我们的模型,并记录了相关的模型参数以获得最佳展示MSE。当我们观察到MSE的下降幅度可忽略不计时,我们停止了训练,在GPU / TPU硬件上,对于较小,较简单的数据集,MSE通常在几个小时内;对于较大,更复杂的数据集,则长达一周。

模型效果以及动画:https://www.linkresearcher.com/theses/bb7cfd1d-20a8-4f08-8a2b-a64dd04e37b6

上一篇下一篇

猜你喜欢

热点阅读