Deep Ritz Method

Deep Ritz Method 是鄂维南老师(Weinan E)提出来的一种用神经网络求解PDE的方法, 作为最开始的几篇探讨DeepLearning 与PDE 关系的文章,他的很多思想还是很厉害的, 下面我们来介绍一下这篇文章以及我在实现时遇到的一些问题。

基本思想

对于给定的一个变分问题

我们怎么用神经网络来求解呢?

事实上, 我们把 \Omega 中的每个点看做训练样本, 将 u(x)  看做是神经网络的输出, 将 I 看做是损失函数去优化, 这个问题便解决了。

但是具体实践过程中,有以下几点要注意:

1.采用 Adam 作为优化器, 初始学习率为 1e-3;

2. 网络结构采用 Resnet 结构, 也就是

3.激活函数选取 max\{0,x^3\} 有点奇怪,应该是作者仔细选取后得出来的,原文是这样说的(To balance simplicity and accuracy

4. 损失函数是一个积分的形式, 我们把它取成离散和。 值得注意的是: 这里的离散和并不是传统意义上的积分和(Riemann和)。举个例子, 我们一般求解 [0,1]\times[0,1]上的问题, 均匀采点,解方程。 但是这里的离散和不是均匀采点得来的,而是来自均匀分布采样。即 x_i 是从均匀分布中采的点, Loss Function 为

我的体会

1. 损失函数不一定为正

2. 文章中给定的函数在我的实际计算中可能会梯度爆炸, 所以我采用的激活函数是 Tanh()

3. 对于高维问题的边界采样还不是很友好(好像也没有什么其他的办法)

注意到以上情况后,复刻文章中的实际例子便很简单了。 比方说:

对于文章中的第一个例子:

此问题对应的变分形式为

其中第二项用来惩罚边界,作者给出的解为

我采用

  • Adam优化器, 初始学习率为1e-3,
  • 边界的惩罚因子为500,
  • 每次从内部随机采点500个,边界采点100个,
  • xavier初始化神经网络的W,b,
  •   训练50000次

得到最后的结果为

 

My Result

再来测试一个高维例子:

可以看到

 

上述两个例子的代码见

Github 链接: https://github.com/xdfeng7370/Deep-Ritz-Method

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值