PINNs出了名的难训练。主要原因之一就是这个多目标优化问题。优化器很容易找到投机取巧的路径——比如拼命降低微分方程残差,但完全不管初始条件和边界约束。只要给初始条件和边界损失配的权重够低,它们增加的那点损失完全能被残差损失的大幅下降抵消掉。调整权重也许能暂时缓解这个问题,但谁也不能保证最优权重在整个训练过程中一直有效。
标准的PINN用复合损失函数,把三项加权求和:
- 初始条件损失
- 边界损失
- 微分方程残差损失
要让解有用,必须让所有损失项同时降下来。用复合损失训练PINN的时候,优化器面对多个目标,有什么办法让优化器的工作简单点呢?
硬约束
要简化训练,最好能把复合损失换成单一项。所以如果能设计一种神经网络架构,让它自动满足初始和边界条件那么事情就会简单很多了。初始条件和边界条件直接"钉"在网络结构里,所以叫"硬约束"。相比之下,原始PINN把初始和边界条件放在损失函数里,那些约束是"软"的——不保证精确满足。
下面看看怎么把这些约束具体嵌入网络架构。
强制初始条件
初始条件一般是空间域上的一系列离散测量点。比如1D + t(一个空间维度加时间)的情况,初始条件就是沿x轴的一串值:(0 m, 100°C), (0.01 m, 105°C), (0.02 m, 106°C), … (0.3 m, 31°C),诸如此类。
假设能用函数u₀(x)在整个空间域上插值。对1D + t的例子,如果_x_在样本点上,u₀(_x_)返回观测值;否则返回平滑插值,_x_ ∈ [0 m, 0.3 m]。三次样条很适合干这活。现在把初始条件的插值函数u₀(x)整合进PINN架构的输出:
方程(1)给出了一种强制u(x, 0) = u₀(x)的方式。β是常数或者可训练的时间衰减参数,决定了从初始状态到热扩散状态的过渡期长短。任意函数v(x, t)是神经网络的输出,不过还有点额外的处理。
强制边界条件
如果方程(1)里的函数v(x, t)在边界上取零值,再加上u₀(x)满足Dirichlet边界条件的假设,那么u(xᵇ, t) = u₀(xᵇ),这里xᵇ是边界上的点。
Ω(x)是个平滑函数,边界处输出零,空间域内部输出非零有限值。可以想象成平面上的肥皂泡。
https://avoid.overfit.cn/post/4b21ca89cc714512bff16ffd1af69538