读论文随笔之简单谈谈PINNs

我们如何解决预测问题

在很多实际的工程问题中,我们经常会碰到很多预测问题,而当这些预测问题与时间和空间相关时,他们往往会与偏微分方程(PDE)相关,比如台风预报、河流流速流量预测等等。一般来说,主流的求解偏微分方程问题的手段大多采用有限元法。百度百科上给出的定义是:

在数学中,有限元法(FEM,Finite Element Method)是一种为求解偏微分方程边值问题近似解的数值技术。求解时对整个问题区域进行分解,每个子区域都成为简单的部分,这种简单部分就称作有限元。

在这段描述中,我们可以发现,有限元法的基本思想是借助离散化的方法,通过将大问题进行分解,转化成可以简单求解的小问题。
那么这种方法有什么缺陷呢?最明显的一个缺陷是,这个方法需要进行离散化,通过将问题区域网格化来进行求解。但是在很多实际的问题中,区域往往并非是规则的、易分的几何区域,此时网格很难生成,基于网格的方法也无法取得很好的效果。
除此缺陷外,传统的求解方法还存在着噪声对解的准确性影响很大、高维问题难以求解、由已知的稀疏的观测解很难反推原问题等等。
而最近机器学习等数据驱动的方法被证明在解决一些预测问题上有着比较好的效果,我们可以不需要任何物理先验知识,仅仅通过大量的数据去对结果进行预测。这个预测过程自然也绕开了偏微分方程。
但是,数据驱动方法也有问题,那就是很多情况下我们无法获得足量且优质的数据。对于有些工程问题,我们进行实验获取数据的成本太高,不足以支撑我们一遍遍进行实验直到获得足够的数据;而在一些工程实践中,我们的设备精度不够,无法支撑我们获得质量足够好的数据。
那么一个很自然的想法出现了——能不能将我们已知的一些物理知识和数据驱动的方法相结合呢?

物理知识与数据驱动结合的几种尝试

首先一种结合方法称为基于观测的方法。这种方法的思路听起来其实更加偏向于纯数据方法:我们首先根据已经观测到的数据来发现一些此类数据的规律,比如某种不变性、某种对称性,然后我们依据这种特性来对数据作增广变换等处理,这样就能产生足够多的高质量数据,因此神经网络在进行学习的时候就会更加贴合真实的物理规律。这种方法操作起来非常简单,但是并不是对于所有的问题、所有的数据都能找到这样一种合适的特性来让我们去作这种变换操作。
如果说基于观测的方法是以数据驱动为主,那么下面这一种基于归纳的方法就更加趋向于以物理知识为主。这种方法主张直接将物理规律嵌入到神经网络的构造中去,比如下面这个例子:
在这里插入图片描述
我们想满足u(0)=0,u(1)=1这样一组边界条件,于是我们直接构造了两个函数为g(x)=x和l(x)=x(1-x),并构造u(x)=g(x)+l(x)N(x)。这样就直接满足了x=0时,u为0,x=1时,u为1的条件。
这种方法的好处是,他一定是精确满足物理规律的,因此如果能找到一个合适的设计规则嵌入的话,这种方法几乎可以称得上是free lunch。但显然这个设计规则不一定是好找的,尤其是当这个问题很复杂的时候。
因此第三种方法出现了,这种方法被称作基于学习的方法,这种方法充分利用了神经网络训练的过程,通过改变网络的loss function,一步一步调节网络使得其符合我们的物理规律。而PINNs(Physics-informed neural networks)就是基于这个思想。

PINNs是什么

我们看一下比较学术的对PINNs定义:
在这里插入图片描述
f是一个微分方程,B代表内部条件和边界条件,I代表一些额外的观测信息,因此我们的损失函数就分别由f、B和I三部分loss构成,而且巧的是,由于这三部分都是微分方程的形式,因此其都是越接近0越好。
于是,我们通过神经网络的训练,让这个loss尽可能的接近0,就完成了对符合物理规律的解的寻找。而且我们使用的是神经网络,这就意味着求导的过程完全可以通过反向传播自动完成,无需复杂的计算我们就可以轻松的求解各阶导数。
因此我个人认为PINNs的思想大概就可以总结为:
把输入输出用神经网络链接,然后把列出来的微分方程都放到损失函数里,在不断训练的过程中使得输出越来越符合物理规律。

可能这么说还是听抽象的,我在这里用陆路老师给出的一个例子来说明一下PINNs。

PINNs的一个应用例子——求解Invisible Cloaking问题

这个问题的表述是:
在这里插入图片描述
在电场中放入一个小球会让电场从上游看和从下游看出现不同的特性,现在我们想为小球加一个涂层,使得加上涂层后的小球放入电场之后电场的上下游特性完全一样(就像没放小球一样),就像用一个隐身衣把小球罩住一样。
这个问题就可以抽象为:
在这里插入图片描述
给定原电场介电常数 ϵ 1 \epsilon_1 ϵ1和小球的介电常数 ϵ 3 \epsilon_3 ϵ3,去寻找合适的涂层介电常数 ϵ 2 \epsilon_2 ϵ2 ϵ 2 \epsilon_2 ϵ2与空间位置x和y有关。约束条件是上下游电场一致,即 E 1 = E 1 , t a r g e t E_1=E_{1,target} E1=E1,target
对于这个问题,我们知道整个系统一定满足亥姆霍兹方程,且涂层于外电场、涂层与小球这两个边界调节也可以表示出来。于是神经网络就可以如此构造:
在这里插入图片描述
可以看出,我们把输入定为x,y,把输出设为三个E和一个 ϵ 2 \epsilon_2 ϵ2,上一步得到的所有代表物理规律的偏微分方程都放到了loss function里,这样在不断训练的过程中我们的系统就会越来越贴合物理规律。而且在求导的过程中我们无需进行有限元处理,而是可以根据神经网络的性质来做back propagation或者说自动微分,解析的、精确的求出各阶导的情况。

PINNs好在哪

首先,PINNs的一个很大的优点在于它是mesh-free的,即不需要画网格,这样就可以处理很多几何区域很复杂的问题。
其次,各种物理规律——不一定是偏微分方程,比如质量守恒、能量守恒——都可以加入到loss function中,随着网络一起训练。甚至于一些积分式、或是随机偏微分方程,都可以在通过一些变化后加入到loss function中。

自从神经网络诞生之后,很多问题的解决似乎变得越来越“无脑”、“暴力”,人们过分依赖也过分迷信数据驱动方法,以至于抛弃了对于事物本身遵循的真实世界物理规律的思考。PINNs这类方法重新让物理定律这类人类千百年来的智慧结晶走上舞台的中央,返璞归真。这种方法就像贝叶斯学派一样,强调着人的先验知识与主观能动性对于解决问题是有很深刻的意义的。我们不应该纯粹的依赖数据、追求纯粹的客观,而是要关注人的经验、关注主观因素。

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于WPF中的ListBox和ListView控件,修改选中项的前景色可以通过修改控件的样式来实现。以下是一种可能的解决方案: 1. 首先,需要将ListBox或ListView的SelectionMode属性设置为Single或Extended,以便只能选择单个项或多个项。 2. 然后,需要为控件定义一个样式。可以使用以下代码: ``` <Style TargetType="ListBoxItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListBoxItem"> <Border Name="Border" Padding="2" SnapsToDevicePixels="true"> <ContentPresenter /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter TargetName="Border" Property="Background" Value="LightBlue"/> <Setter Property="Foreground" Value="White"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground" Value="Gray"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 这个样式将ListBoxItem的背景色设置为LightBlue,并将前景色设置为白色。当项被选中时,将应用IsSelected触发器,并将前景色设置为白色。当项被禁用时,将应用IsEnabled触发器,并将前景色设置为灰色。 3. 最后,将ListBox或ListView的ItemContainerStyle属性设置为新定义的样式。例如: ``` <ListBox ItemContainerStyle="{StaticResource MyListBoxItemStyle}"> <ListBoxItem>Item 1</ListBoxItem> <ListBoxItem>Item 2</ListBoxItem> <ListBoxItem>Item 3</ListBoxItem> </ListBox> ``` 通过这种方式,就可以自定义ListBox或ListView的选中项前景色了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值