用人工神經網路求解微分方程

本文將介紹如何用人工神經網路(ANN)求解偏微分方程,並且Python以及Matlab的代碼已經放在Github上。這篇文章省略了ANN的原理介紹,這裡是一篇介紹ANN的文檔。

求解偏微分方程的原理

我們考慮具有這類形式的偏微分方程(PDE):

delta ^2 psi(x,y)/delta x^2 + delta ^2 psi(x,y)/delta y^2=f(x,y)

根據文獻1 , 我們可以得知這個PDE的探索解(Trial Solution)是

psi_{t}(x,y)=A(x,y)+x(1-x)y(1-y)N(x,y,ar{p})

其中 N(x,y,ar{p}) 代表了ANN生成的隨機結構,具體的權重將在訓練中確定。

而我們的目的是使以下的式子值最小,也就是一般而言的損失函數:

 E[ar{p}]=sum_{i}^{}{left{ delta ^2 psi(x_{i},y_{i})/delta x^2 + delta ^2 psi(x_{i},y_{i})/delta y^2 - f(x_{i},y_{i})
ight}}^2

求解偏微分方程的例子

考慮拉普拉斯方程:


abla^2(x)=0,forall xin D

並且具有以下的邊界條件:

psi (x)=0,forall xinleft{ (x_{1},x_{2})in delta D | x_{1}=0,x_{1}=1, x_{2} = 0
ight}

psi (x)=sin(pi x),forall xinleft{ (x_{1},x_{2})in delta | x_{2}=1
ight}

代入前一小節的探索解中,可得

psi_{t}(x,v,ar{W})=x_{2}sin(pi x_{1})+ x_{1}(1- x_{1})x_{2}(1- x_{2})N( x_{1}, v,ar{W})

根據拉普拉斯方程的相關知識背景,我們得到其解析解為:

 g = (1 / (exp(pi) - exp(-pi))) * sin(pi * x_{1}) * (exp(pi * x_{2}) - exp(-pi * x_{2}))

用Matlab或Python繪製函數可得:

使用隨機函數生成ANN的權重,我們可以得到:

而經過多次訓練,在參數設定在一定範圍內的時候,我們可以得到接近於解析解的答案:

總結

基本上就是翻譯了參考文獻的內容??:

  1. ANN算出來的解可微,其形式在後續計算中較容易被使用。
  2. 本方法需要的參數數量遠小於其他方法,因此本方法空間複雜度很小。
  3. 常微分方程,偏微分方程皆可用本法計算。
  4. 本方法適用於並行計算,可以通過優化大幅減少運算時間。
  5. 理論上,卷積神經網路也可以被用來計算。

參考文獻:

1) Lagaris, Isaac E., Aristidis Likas, and Dimitrios I. Fotiadis. "Artificial neural networks for solving ordinary and partial differential equations." IEEE Transactions on Neural Networks 9.5 (1998): 987-1000.

2) Neural networks for solving differential equations – Becoming Human: Artificial Intelligence Magazine. Retrieved January 17, 2018


推薦閱讀:

邏輯與神經之間的橋
9行Python代碼搭建神經網路
M.1.0 神經網路的數學基礎-前言

TAG:机器学习 | 神经网络 | 偏微分方程 |