Deep Ritz Method

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

基本思想

对于给定的一个变分问题

Deep Ritz Method

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

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

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

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

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

Deep Ritz Method

3.**函数选取 Deep Ritz Method 有点奇怪,应该是作者仔细选取后得出来的,原文是这样说的(To balance simplicity and accuracy

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

Deep Ritz Method

我的体会

1. 损失函数不一定为正

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

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

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

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

Deep Ritz Method

此问题对应的变分形式为

Deep Ritz Method

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

Deep Ritz Method

我采用

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

得到最后的结果为

Deep Ritz Method

 

Deep Ritz Method
My Result

再来测试一个高维例子:

Deep Ritz Method

可以看到

Deep Ritz Method

Deep Ritz Method