讨论:关于PDE频率的问题
- 关于PDE频率的问题
- 问题
- 复现
- 讨论
- 解决方法
关于PDE频率的问题
问题
在这篇文章下有人提出一个问题:
在使用物理信息神经网络对固定求解区域内进行物理场的预测,具体来说是在求解传热问题。在定义域为1或者大于0.4的正方形求解域中,已知四条边的温度,和区域内的热传递方程,物理信息神经网络可以进行正确求解的。但是当求解区域缩小到0.4以下时,求解结果变的错误。
具体来说,我所采用的PINN网络结构是全连接神经网络,目标函数函数由两个损失函数构成,第一个损失函数是求解区域内的传热方程,第二个损失函数是边界上已知数据与预测值的均方误差,且两个损失函数。现在有五个实验例子,第一个例子,求解区域在1大小的正方形的时候,PINN可以正确预测。第二个例子,求解区域在0.4大小的正方形的时候,PINN可以正确预测,但是需要经过多轮训练。第三个例子,求解区域在0.1大小的正方形的时候,PINN不能正确预测,经过多轮训练后仍然不能得到正确结果。第四个例子,求解区域在0.1大小的正方形的时候,把第二个损失函数的权重乘以1000,PINN可以正确预测。第五个例子,求解区域在0.01大小的正方形的时候,把第二个损失函数的权重乘以1000,PINN不能正确预测,即使损失函数权重乘以10000也无法预测
尝试了包括这篇文章的一些调节权重的算法,但是结果都不太好,我想请问一下这块问题可能出在什么地方呢?可能是什么问题呢?PINN求解小尺度高频的问题吗?
简单来说,就是提问者对于同一个PDE问题,保持解 u u u 在求解域 Ω \Omega Ω 上的复杂度不变,对 Ω \Omega Ω 的大小进行变换后发现,求解域越小,PINN越难以求得正确的解。针对这一现象,提问者怀疑是PINN求解小尺度高频的问题。
当时,我看到这个问题时是这么想的:
我个人认为PINN能否正确预测与求解区域的大小并没有直接关联,可能和求解区域内解的复杂度关联更为密切。因为使用简单的仿射变换就可以把 [0.1,0.1] 的区域映射到 [1,1] 的区域上,而利用神经网络去拟合这个变换也是相对而言比较简单的,因此 [0.1,0.1] 的区域和 [1,1] 的区域对于PINN来说可能不会造成太大的差别。
我不太清楚你要求解的传热问题的具体形式(如边界条件、已知数据等),如果能够提供可复现的代码可以帮助我更全面地了解你所面对的问题。
这两天我会利用波动方程构建一些样例来对你所说的问题进行复现。
换句话说,我当时认为神经网络去学习一个相应的缩小或者放大的变换是相对容易的,既然保持了解 u u u 在求解域 Ω \Omega Ω 上的复杂度不变,那么应该也能较好的学习出真实的解。
复现
于是,我首先对他所描述的现象进行了复现:
对于方腔流
u
⋅
∇
u
+
∇
p
−
1
R
e
Δ
u
=
0
,
i
n
Ω
,
∇
⋅
u
=
0
,
i
n
Ω
,
u
(
x
,
y
)
=
(
1
,
0
)
,
o
n
Γ
1
,
u
(
x
,
y
)
=
(
0
,
0
)
,
o
n
Γ
0
.
\begin{aligned} &\boldsymbol{u}\cdot\nabla\boldsymbol{u}+\nabla p-\frac1{Re}\Delta\boldsymbol{u}=0,\quad&\mathrm{in}\quad\Omega, \\ &\nabla\cdot\boldsymbol{u}=0,\quad&\mathrm{in}\quad\Omega, \\ &\boldsymbol{u}(x,y)=(1,0),\quad&\mathrm{on}\quad\Gamma_1, \\ &u(x,y)=(0,0),\quad&\mathrm{on}\quad\Gamma_{0}. \end{aligned}
u⋅∇u+∇p−Re1Δu=0,∇⋅u=0,u(x,y)=(1,0),u(x,y)=(0,0),inΩ,inΩ,onΓ1,onΓ0.
对其计算域缩放后训练结果如下:
上面三幅图分别为计算域 Ω = [ 0 , 1 ] 2 , [ 0 , 0.1 ] 2 , [ 0 , 0.01 ] 2 \Omega = [0,1]^2,[0,0.1]^2,[0,0.01]^2 Ω=[0,1]2,[0,0.1]2,[0,0.01]2 的情况,可以看到,当计算域 Ω = [ 0 , 1 ] 2 \Omega = [0,1]^2 Ω=[0,1]2 时,PINN能够学习到比较准确的解;而当计算域 Ω = [ 0 , 0.1 ] 2 \Omega = [0,0.1]^2 Ω=[0,0.1]2 时,PINN 的结果就没有那么令人满意了;当计算域 Ω = [ 0 , 0.01 ] 2 \Omega = [0,0.01]^2 Ω=[0,0.01]2 时,PINN直接训练失败了。
让我们再换一个Helmholtz 方程:
− u x x − u y y − k 0 2 u = f , Ω = [ 0 , 1 ] 2 u ( x , y ) = 0 , ( x , y ) ∈ ∂ Ω f ( x , y ) = k 0 2 sin ( k 0 x ) sin ( k 0 y ) -u_{xx}-u_{yy} - k_0^2 u = f, \qquad \Omega = [0,1]^2 \\ u(x,y)=0, \qquad (x,y)\in \partial \Omega\\ f(x,y) = k_0^2 \sin(k_0 x)\sin(k_0 y) −uxx−uyy−k02u=f,Ω=[0,1]2u(x,y)=0,(x,y)∈∂Ωf(x,y)=k02sin(k0x)sin(k0y)
同样对其计算域缩放后训练结果如下:
同样的,可以看到,对计算域的缩小确实对网络的训练造成了显著的影响。
讨论
于是我仔细思考了一下,确实应该是解的频率上升,与网络初始化时的频率相差太多导致的问题,具体可以参考一下这篇文章。我发现之前我之前一直没有真正弄清楚所谓的“高频”、“低频”指的是什么。本质上来说,“高”和“低”都是一个相对的概念,我之前并没有建立起一个比较的基准,因此之前的理解更偏向于解在计算域内的频率。但在神经网络中,对于具有相同初始化参数的神经网络,或许可以以这个神经网络初始化时的频率作为比较的基准。那么对于相同的解,对计算域的缩放当然会改变其频率,计算域越小,频率越高;计算域越大,频率越低。
解决方法
解决方法的话,可以分为两种情况:
- 解的频率(相对于神经网络)已知,那么可以想办法让神经网络和解的频率尽可能近似,比如对解做仿射变换,也可以利用三角函数对神经网络的频率进行变换,或者把计算域映射到更合适的大小等;
- 解的频率(相对于神经网络)未知,那么可以参考上述文章,对解的频率进行预测,然后通过三角函数控制网络初始化时的频率,使其和解尽量相近。
- 相关代码:PINN_in_small_domain: 关于PDE频率的问题 (gitee.com)