关于FBPINN的讨论
讨论:关于FBPINN的讨论
- 关于FBPINN的讨论
- 问题
- 分析
- 总结
关于FBPINN的讨论
问题
关于 FBPINN 这篇文章,有人提出如下几个问题:
- 在每个子域内神经网络训练时,如果训练点不在共享区域内就是直接正常的进行训练,那如果这个训练点在共享区域时,它会被所有区域的神经网络都进行训练吗?
- (论文中的话:在每个子域内放置一个神经网络,使得在子域的中心,网络学习完整的解,而在重叠区域,解被定义为所有重叠网络的和。在求和之前,每个网络被一个平滑的、可微的窗口函数相乘,该窗口函数将其局部限制在它的子区域内) 这句话的理解是在非重叠区域,学到的结果就是该区域所有训练点训练完成后得到的解;在重叠区域,它的解就是在构成这个重叠区域的所有区域都训练结束后得到的结果的和? 这样理解正确吗
- 每个子域的具体训练过程: 每个子域的训练点,在输入到网络之前先进行正规化处理,然后进行训练,得到一个估计值 N N ( x ; θ ) NN(x;\theta) NN(x;θ),然后通过损失函数的反馈,对神经网络不断进行训练,从而得到该子域的神经网络的训练结果 N N ( x ; θ ) NN(x;\theta) NN(x;θ),这样理解对吗?在每个子域的训练中,不需要用到 ansatz拟设法这个方法吗,就是是弱约束 PINNS 吗?
- 重叠区域的求和操作是在什么时候进行的,是在所有的子域都训练结束后,对每个网络的输出进行非归一化处理,并乘以窗函数再进行
重叠区域的加和操作吗?但是又因为 FBPINN 可以有灵活的训练时间安排,所以说重叠区域的加和操作该在什么时候进行呢?
分析
个人认为,对于 FBPINN 可以简单理解如下:
传统的线性回归具有如下形式:
y
=
a
x
+
b
,
x
∈
[
−
1
,
1
]
y=ax+b,x\in[-1,1]
y=ax+b,x∈[−1,1]
其中
a
,
b
a,b
a,b 就是可训练参数。那么对于目标函数
y
1
=
2
x
+
1
,
x
∈
[
−
1
,
1
]
y_1=2x+1,x\in[-1,1]
y1=2x+1,x∈[−1,1] 可以设置损失函数如下:
L
(
x
;
a
,
b
)
=
(
a
x
+
b
−
2
x
−
1
)
2
L(x;a,b) = (ax+b-2x-1)^2
L(x;a,b)=(ax+b−2x−1)2 然后使用优化方法对
a
,
b
a,b
a,b 更新,当损失足够小时就认为找到了合适的近似。
而FBPINN则类似于使用如下形式进行近似:
y
=
u
1
+
u
2
y=u_1+u_2
y=u1+u2,其中
u
1
=
a
1
x
+
b
1
,
x
∈
[
−
1
,
0.1
]
u
2
=
a
2
x
+
b
2
,
x
∈
[
−
0.1
,
1
]
u_1=a_1x+b_1,x\in[-1,0.1] \\ u_2=a_2x+b_2,x\in[-0.1,1]
u1=a1x+b1,x∈[−1,0.1]u2=a2x+b2,x∈[−0.1,1]
同样,对于目标函数
y
1
=
2
x
+
1
,
x
∈
[
−
1
,
1
]
y_1=2x+1,x\in[-1,1]
y1=2x+1,x∈[−1,1] 可以设置损失函数如下:
L
(
x
;
a
,
b
)
=
(
y
(
x
)
−
2
x
−
1
)
2
L(x;a,b) = (y(x)-2x-1)^2
L(x;a,b)=(y(x)−2x−1)2 然后使用优化方法对
a
1
,
b
1
,
a
2
,
b
2
a_1,b_1,a_2,b_2
a1,b1,a2,b2 更新,当损失足够小时就认为找到了合适的近似。
可以看到,FBPINN 只是在逼近形式的定义上具有区别,在参数更新上(或者说在训练上)其实是一致的。
而关于具体的训练过程可以简单理解如下:
一般神经网络的参数更新公式如下:
θ
k
+
1
=
θ
k
+
η
∇
L
(
x
;
θ
k
)
\theta_{k+1} = \theta_k + \eta \nabla L(x;\theta_k)
θk+1=θk+η∇L(x;θk)
其中,
θ
k
\theta_k
θk 表示第
k
k
k 次迭代时的神经网络参数,
L
(
x
;
θ
)
L(x;\theta)
L(x;θ) 表示由
x
,
θ
x,\theta
x,θ 计算出的损失,
η
\eta
η 表示学习率,
∇
\nabla
∇ 表示梯度算子。在 PINN 中,PDE 损失一般可以表示为:
L
(
x
;
θ
k
)
=
N
(
N
N
(
x
;
θ
k
)
)
L(x;\theta_k)=\mathcal N(NN(x;\theta_k))
L(x;θk)=N(NN(x;θk)) ,其中
N
\mathcal N
N 指微分算子。
FBPINN 中虽然使用了多个神经网络,但在参数更新方式上仍然符合上述训练过程,区别在于将单一神经网络
N
N
(
x
;
θ
)
NN(x;\theta)
NN(x;θ) 更改为了多个神经网络的组和
C
[
N
N
‾
(
x
;
θ
)
]
\mathcal{C}\left[\overline{NN}(x;\theta)\right]
C[NN(x;θ)] ,为方便理解,下面把神经网络参数也进行对应分组
θ
i
\theta^i
θi 表示第
i
i
i 个神经网络对应的可训练参数,假设一共有
m
m
m 个神经网络。于是,参数更新公式可以转换如下:
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
+
1
=
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
+
η
∇
L
(
x
;
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
)
\{\theta^1,\theta^2,\dots,\theta^m\}_{k+1} = \{\theta^1,\theta^2,\dots,\theta^m\}_{k} + \eta \nabla L(x;\{\theta^1,\theta^2,\dots,\theta^m\}_{k})
{θ1,θ2,…,θm}k+1={θ1,θ2,…,θm}k+η∇L(x;{θ1,θ2,…,θm}k)
可以看到,神经网络的训练受到哪些训练点的影响可以从损失函数梯度的角度来分析。
对于训练点不在共享区域内的情况,假设训练点
x
a
x_a
xa 只在
N
N
(
x
;
θ
b
)
NN(x;\theta^b)
NN(x;θb) 这个神经网络对应的区域内,由于 FBPINN 利用窗口函数将神经网络限制在其对应区域内,在对应区域外的结果可以近似看做恒等于零。因此,在计算其 PDE 损失时可以简写为
L
(
x
a
;
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
=
N
(
N
N
(
x
a
;
θ
b
)
)
L(x_a;\{\theta^1,\theta^2,\dots,\theta^m\}_{k} = \mathcal N(NN(x_a;\theta^b))
L(xa;{θ1,θ2,…,θm}k=N(NN(xa;θb))
此时,
x
a
x_a
xa 所产生的损失只对
θ
b
\theta^b
θb 产生梯度,对
{
θ
∣
θ
≠
θ
b
}
\{\theta|\theta \ne \theta^b\}
{θ∣θ=θb} 不产生梯度。因此,
x
a
x_a
xa 只会影响神经网络
b
b
b 的训练过程。
类似的,可以假设训练点
x
a
x_a
xa 在
N
N
(
x
;
θ
b
)
NN(x;\theta^b)
NN(x;θb) 和
N
N
(
x
;
θ
c
)
NN(x;\theta^c)
NN(x;θc) 这两个神经网络对应的区域内,即重叠域内,那么在计算其 PDE 损失时可以简写为
L
(
x
a
;
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
=
N
(
N
N
(
x
a
;
θ
b
)
+
N
N
(
x
a
;
θ
c
)
)
L(x_a;\{\theta^1,\theta^2,\dots,\theta^m\}_{k} = \mathcal N(NN(x_a;\theta^b)+NN(x_a;\theta^c))
L(xa;{θ1,θ2,…,θm}k=N(NN(xa;θb)+NN(xa;θc))
此时,
x
a
x_a
xa 所产生的损失只对
θ
b
\theta^b
θb 和
θ
c
\theta^c
θc 产生梯度,对
{
θ
∣
θ
∉
{
θ
b
,
θ
c
}
}
\{\theta|\theta \notin \{ \theta^b, \theta^c\} \}
{θ∣θ∈/{θb,θc}} 不产生梯度。因此,
x
a
x_a
xa 只会影响神经网络
b
b
b 和神经网络
c
c
c 的训练过程。
而对于灵活的训练时间安排这点,也可以从参数更新的部分来理解。训练时间安排可以视作对上式增加了一个掩码操作,即:
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
+
1
=
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
+
η
∇
L
(
x
;
{
θ
1
,
θ
2
,
…
,
θ
m
}
k
)
∗
mask
k
\{\theta^1,\theta^2,\dots,\theta^m\}_{k+1} = \{\theta^1,\theta^2,\dots,\theta^m\}_{k} + \eta \nabla L(x;\{\theta^1,\theta^2,\dots,\theta^m\}_{k})*\text{mask}_k
{θ1,θ2,…,θm}k+1={θ1,θ2,…,θm}k+η∇L(x;{θ1,θ2,…,θm}k)∗maskk
其中
mask
\text{mask}
mask 是一个
01
01
01 向量 ,假设具有
mask
1
=
[
1
,
0
,
0
,
…
,
0
]
\text{mask}_1=[1,0,0,\dots,0]
mask1=[1,0,0,…,0] 则表示在1时刻,只有第一个神经网络会进行参数更新。
总结
综上,对于第一个问题,如果训练点在共享区域时,它会被所有具有该区域的神经网络进行训练。或者说,训练点会被所有子域包含其位置的训练。反过来说可能会顺一点,就是神经网络的训练过程会受到其子域内所有训练点的影响。
对于第二个问题,问题表述中似乎假定了不同区域训练具有先后关系且相互独立。正如上文所述,参数的更新是同时的,各个区域在重叠域上也并不是相互独立的,关于这一点以及灵活的训练时间安排将在后两问中进行更详细的解释。但对于解的构成确实可以这么理解,即,非重叠域上的解就是该处神经网络的解,而重叠域上的解则是多个神经网络解的耦合。
对于第三个问题,正如上文所述,只是逼近形式的定义具有区别,在参数更新上(或者说在训练上)其实是一致的。
对于第四个问题,求和是定义在整个逼近形式中的,对于网络参数的训练也是同时进行的。
以上是我的个人观点,如果你对 PINN 的相关问题感兴趣的话,随时欢迎与我讨论和交流。