这篇论文还是用神经网络求解微分方程,是很老(2005年)的一篇论文,和前面两篇论文不同的是这里的神经网络很宽,不再是深度的神经网络。
这篇论文的方法和上一篇的FEA-Net(根据刚度矩阵构造卷积核)有些类似,都是基于有限元的求解过程构造网络,不同的是本篇论文只是很根据有限元公式很直观地转换成一个神经网络,把神经网络中的参数(层间的权值,还有激活函数)都换成FEA公式中的某个量或累加函数;本文中神经网络结构的亮点在于把未知量作为层间权重,把可以确定的已知量作为输出,通过基于梯度下降的方法优化权重得到最终解,具体网络架构看第二部分
一.FEM有限元方法
上一篇论文中有直接用到一个FEM中的最终公式
这篇论文第一部分首先具体推导了这个公式
1.首先给出一个微分方程
L
L
L是微分算子,
f
f
f是施加的源或力函数,
ϕ
\phi
ϕ是未知量
2.FEA中通过最小化下面这个关于测试函数
ϕ
\phi
ϕ~(代表
ϕ
\phi
ϕ上一个波浪线,不知道咋打)的公式来确定未知量
3.最小化过程从把
Ω
\Omega
Ω划分成
M
M
M个子域(称为单元)开始
并通过在单元上定义的基函数表示每个元素上的
ϕ
\phi
ϕ~
ϕ
e
\phi^e
ϕe~表示单元
e
e
e上的未知解,
N
j
e
N^e_j
Nje表示在单元e上与节点j相关的基函数,
ϕ
j
e
\phi^e_j
ϕje表示在节点j上的未知量的值,n是单元e上的节点总个数
基函数(也称为插值函数或形状函数)可以是线性、二次或更高次的函数,通常,FEM中的基函数可以是线性函数也可以是分段样条多项式
4. 2.中的函数在单元内可以写作下式
再把3.中公式代入上式得到
(
.
.
.
)
T
(...)^T
(...)T表示矩阵的转置,
φ
e
\varphi^e
φe由单元e相关的节点上的未知量的值组成,
K
e
K^e
Ke是单元e内n x n的矩阵,该矩阵内的元素为
b
e
b^e
be是单元e内1 x n的向量,其元素为
5. 把每个单元e的值((4)中第二个公式的值)组合起来得到
K
K
K是一个N x N(N是节点总数)的由不同单元的单元矩阵推导得到的全局矩阵,称为刚度矩阵,是一个稀疏的带状矩阵。
F
F
F是函数的离散形式,对节点参数
φ
\varphi
φ求偏导并使其等于0便可以使
F
F
F最小化
整理可得
K
φ
=
b
K\varphi=b
Kφ=b,令
φ
=
x
,
b
=
f
\varphi=x,b=f
φ=x,b=f,即可得(1)中式子
K
x
=
f
Kx=f
Kx=f
6.添加边界条件
有两种边界条件:自然边界条件和本质边界条件
(1)本质边界条件又称为狄利克雷边界条件:在一些节点上对未知量
ϕ
\phi
ϕ的值施加限制
如何把狄利克雷边界条件应用于函数最小化公式
K
ϕ
=
b
K\phi=b
Kϕ=b中:删除刚度矩阵
K
K
K中与狄利克雷边界上节点对应的行和列,并修改b
(2)自然边界条件:对跨边界的变化施加约束,诺伊曼边界条件是自然边界条件的一个特例
如何把自然边界条件应用于FEM中:在方程中增加一个附加项
假设一个自然边界条件的形式如下
Γ
N
\Gamma_N
ΓN表示诺伊曼边界,
n
n
n^表示边界上的外法向量,
α
\alpha
α是一个常量,
γ
\gamma
γ、
p
p
p和
q
q
q是与边界相关的已知量
假设边界由
M
s
M_s
Ms段组成,可以定义每段上的
K
s
K^s
Ks和
b
s
b^s
bs的元素为
N
j
s
N^s_j
Njs是定义在段s上的基函数,
l
s
l^s
ls是段s的长度,
ϕ
1
s
\phi^s_1
ϕ1s和
ϕ
2
s
\phi^s_2
ϕ2s表示未知量在段s左右端点的值
5.中公式就修改为
这一过程确保了在有限元求解过程中自然边界条件得到隐式和自动的满足
二.FENN (finite-element neural networks)
这一部分介绍如何把有限元模型转换成并行网络形式:所用的有限元模型如下:
以下第一部分为推导过程
1.推导有限元公式
(1) 转换刚度矩阵K的形式 :把微分算子中表示材料属性的参数提取出来
局部刚度矩阵
K
e
K^e
Ke的一个元素可以表示成如下形式
α
e
\alpha^e
αe是表示单元e的材料属性的参数,
L
L
L拔表示在单元层不包含材料属性的微分算子
整体刚度矩阵
K
K
K中的元素为
遍历M个单元并累加得到K中一个元素;
i
,
j
i,j
i,j是节点编号,当第i个节点和第j个节点属于同一个单元时,关于
i
j
ij
ij的
ω
e
=
S
e
\omega^e=S^e
ωe=Se,否则为0
(2) 把上式代入第一部分推导出的式子
中,得到离散表示:
(3) 最小化F,方法同第一部分,求F对
ϕ
\phi
ϕ的偏导并令其为0
就可以得到本部分的第一个公式
ϕ
j
\phi_j
ϕj表示
j
j
j节点上未知量的值,而单元内部的未知量值可以看成通过基函数插值得到
2.利用FEM公式构造有限元神经网络FENN
对于一个有两个单元四个节点的域利用上述公式构造得到的神经网络如下:
首先假设在有限元网格中有M个单元和N个节点
(1)输入层: 有M个输入,输入为每个单元上的材料属性,
α
1
,
…
…
,
α
M
\alpha^1,……,\alpha^M
α1,……,αM
对于上图例子,有两个单元,所以有两个输入,分别为
α
1
,
α
2
\alpha^1,\alpha^2
α1,α2
(2)隐藏层: 有N*N个神经元,对应刚度矩阵
K
K
K的元素;每N个神经元为一组,表示刚度矩阵中的一个行向量;每个神经元起到累加求和的作用,根据下面公式求和
对于上图例子,隐藏层有4 x 4=16个神经元,第一组对应4 x 4的刚度矩阵的第一行:K11,K12,K13,K14
对于K11,其求和公式为
K
11
=
α
1
∗
w
1
11
+
α
2
∗
w
2
11
K11=\alpha^1*w^111+\alpha^2*w^211
K11=α1∗w111+α2∗w211
(3)输入层和隐藏层之间的权值:
根据(2)中公式,可得单元e对于刚度矩阵第
i
i
i行的权值贡献
w
i
e
=
[
w
e
i
1
,
…
…
,
w
e
i
N
]
w^e_i=[w^ei1,……,w^eiN]
wie=[wei1,……,weiN]
对于上图例子,对于刚度矩阵的第一行:
w
1
1
=
[
S
1
11
,
S
1
12
,
S
1
13
,
0
]
w^1_1=[S^111,S^112,S^113,0]
w11=[S111,S112,S113,0],
w
1
2
=
[
0
,
0
,
0
,
0
]
w^2_1=[0,0,0,0]
w12=[0,0,0,0]
对于K11,
K
11
=
α
1
∗
S
1
11
+
α
2
∗
0
K11=\alpha^1*S^111+\alpha^2*0
K11=α1∗S111+α2∗0
(4)输出层: 有N个输出,每个输出对应
b
b
b中的一个元素;每个神经元也是起到累加求和的作用
ϕ
j
\phi_j
ϕj表示在节点
j
j
j上未知量的值
对于上图例子,
b
1
=
K
11
∗
ϕ
1
+
K
12
∗
ϕ
2
+
K
13
∗
ϕ
3
+
K
14
∗
ϕ
4
b1=K11*\phi_1+K12*\phi_2+K13*\phi_3+K14*\phi_4
b1=K11∗ϕ1+K12∗ϕ2+K13∗ϕ3+K14∗ϕ4
(5)隐藏层和输出层之间的权值:
根据(4)中公式,可知一组隐藏层和一个输出神经元之间的权值为
φ
=
[
ϕ
1
,
…
…
,
ϕ
N
]
\varphi=[\phi_1,……,\phi_N]
φ=[ϕ1,……,ϕN],且每一组的权值相同
对于上图例子,
φ
=
[
ϕ
1
,
ϕ
2
,
ϕ
3
,
ϕ
4
]
\varphi=[\phi_1,\phi_2,\phi_3,\phi_4]
φ=[ϕ1,ϕ2,ϕ3,ϕ4]
(6)添加边界条件 (没有细讲)
a.对于自然边界条件:
K
s
,
b
s
K^s,b^s
Ks,bs与材料属性
α
\alpha
α无关,所以自然边界条件可以作为偏置输入应用于作为边界一部分的隐层神经元,以及相应的输出神经元
b.对于狄利克雷边界条件: 通过限制(clamping?)在隐藏层和输出层神经元之间的相应权值,应用狄利克雷边界条件
(7)训练FENN:
该网络的损失函数:
a.微分方程的正问题: 给定材料参数
α
\alpha
α和应用源(the applied source)
b
b
b确定权值
φ
\varphi
φ即未知量在节点上的值
求损失函数对隐藏层和输出层之间的权值(即未知量在节点上的值)的偏导:
b.微分方程的逆问题: 给定
φ
\varphi
φ和
b
b
b确定
α
\alpha
α
求损失函数对输入的偏导:
然后选取基于梯度下降法的优化方法多次迭代即可
总结
很明显,这个网络的最大缺点就是可能会很宽,隐藏层神经元个数和刚度矩阵元素个数相同,为N*N个
优点就是也赋予了网络一定的意义,让网络不再是黑匣子;文章中也一直表明因为神经网络的应用,可以平行计算刚度矩阵各行,所以速度有加快很多
这是一个设计FENN的流程图,可以看到,前期处理和手工操作有很多,没有完全发挥神经网络的作用(例如,对于图像处理,我们现在根本不用人工进行特征提取,直接给网络一张图片即可,也就是说是端到端的网络)
猜想: 根据神经网络的反向传播,既然可以优化隐藏层到输出层的权重
φ
\varphi
φ,那是不是也可以优化输入层到隐藏层的权重,也就是说我们不需要计算出
w
e
i
j
w^eij
weij,这样会不会少了许多计算?但是也不清楚两层之间权重的优化会不会有影响?