求解微分方程,用seq2seq就夠了,性能遠超 Mathematica、Matlab

2021-01-07 雷鋒網

雷鋒網 AI 科技評論按:近日,Facebook AI研究院的Guillaume Lample 和Francois Charton兩人在arxiv上發表了一篇論文,標題為《Deep Learning for Symbolic Matehmatics》。

這篇論文提出了一種新的基於seq2seq的方法來求解符號數學問題,例如函數積分、一階常微分方程、二階常微分方程等複雜問題。其結果表明,這種模型的性能要遠超現在常用的能進行符號運算的工具,例如Mathematica、Matlab、Maple等。

有例為證:

上圖左側幾個微分方程,Mathematica和Matlab都求解失敗,而作者所提的模型卻能夠獲得右側的正確結果(這不是個案,而是普遍現象,具體可見後文)。

更有意思的是,這還並不僅僅是它的唯一好處。由於seq2seq模型的特點,作者所提方法能夠對同一個公式得出不止一個的運算結果,例如如下的微分方程

該模型能夠反饋這麼多的結果:

可以驗證一下,這些結果都是正確的,至多差一個常數 c。

我們來看下這樣美好的結果,作者是如何做到的。(其實很簡單!)

一、總體思路

首先需要強調,在過往中,機器學習(包括神經網絡)是一種統計學習方法,這些方法被證明在統計模式識別方面非常有效,例如在CV、NLP、語音識別等問題上均已經達到了超過人類的性能。但機器學習(這裡特別強調是神經網絡)卻不適合去解決符號推理問題,目前僅有少數這樣的工作,但主要集中在解決基本的算術任務(例如加法和乘法)上,且實驗上證明在這些問題上,神經網絡的方法往往表現不佳,需要引入一些已有的指向任務的組件才勉強可行。

相比於以往的各種方法,作者思想獨特,他們認為數學符號計算的過程本質上就是一個模式識別的過程。由此他們將數學(尤其是符號計算)視為一個 NLP 模型問題,符號推理等同於seq2seq的「機器翻譯」過程。(真是「機器翻譯」解決一切啊)

具體來講,作者在文章中主要針對函數積分和常微分方程(ODE)進行研究。

學過高等數學的我們都有過求積分和解微分方程的痛苦經歷,對計算機軟體來講,求解這些問題事實上也同樣困難。以函數積分為例,人類在求解過程中主要是依賴一些規則(例如基本函數的積分公式、換元積分、部分積分等);而傳統的計算機代數系統則主要是通過從大量具體的案例中進行搜索,例如對用於函數積分的Risch算法的完整描述就超過了100頁。

但,回過頭,我們思考,從本質上來講,求積分的過程不正是一個模式識別的過程嗎?當給你一個公式yy′(y^2 + 1)^{1/2},你會從腦海中牢牢記住的數十、數百個積分模型中尋找出「模式」最為匹配的結果\sqrt{y^2 + 1}。

基於這種思路,作者首先提出了將數學表達式轉換為seq2seq表示形式的方法,並用多種策略生成了用於監督學習的數據集(積分、一階和二階微分方程),然後將seq2seq模型用於這些數據集,便得出了比最新計算機代數程序Matlab、Mathematica等更好的性能。

就是這麼「簡單」!

二、表示:從數學公式到seq

作者將數學問題視作自然語言處理的問題,因此首要一步便是將數學公式轉化為NLP模型能夠處理的形式,即序列(seq)。

這分兩步:

首先,將數學公式轉化為樹結構。

運算符和函數(例如cos、pow等)為內部節點,數字、常數和變量為葉。可以看出這裡每一個數學公式都對應唯一一個樹結構。

需要強調兩點:

這裡把2+3 和 3 +2視作不同的數學公式;這裡x/0、log(0)等在數學中認為是無效的函數表達式在這裡並不會排除在外。由於樹和表達式之間存在一一對應的關係,因此表達式之間的相等性,將反映在它們相關的樹上。作為等價關係,由於 2 + 3 = 5 = 12-7 = 1×5,所以這對應於這些表達式的四棵樹是等價的。

形式數學的許多問題都可以重組為對表達式或樹的運算。例如,表達式簡化等於找到樹的較短等效表示。

在這篇文章中,作者考慮兩個問題:符號積分和微分方程。兩者都可以歸結為將一個表達式轉換為另一個表達式。例如在函數積分中,將 cos(x) 的樹映射到其解 sin(x)+c 的樹。

這本質上就是機器翻譯的一個特殊實例,而已。

其次,將樹轉化為序列。

這很顯然,機器翻譯模型運行在序列(seq)。針對這一步,學過計算機的同學應該都不陌生,作者選用了前綴表示法,從左到右,將每個節點寫在其子節點前面。例如 2 + 3×(5+2),表示為序列為 [+ 2 * 3 + 5 2]。這裡,在序列內部,運算符、函數或變量由特定的標記表示。就像在表達式和樹之間的情況一樣,樹和前綴序列之間也存在一對一的映射。

三、數據集生成

當有了合適的表示之後,另一個重要的事情便是如何生成恰當的數據集。作者採用生成隨機表達式的算法(具體這裡不再贅述),如果用p1表示一元運算子(例如cos、sin、exp、log等)的集合,p2表示二元運算子(例如+、-、×、÷等)的集合,L表示變量、常數、整數的集合,n 為一棵樹的內部節點個數(因此也是表達式中運算子的個數)。可以計算,表達式的個數與n之間有如下關係:

要訓練網絡模型,就需要有(問題,解決方案)對的數據集。理想情況下,我們應該生成問題空間的代表性樣本,即隨機生成要積分的函數和要求解的微分方程。但我們知道,並不是所有的函數都能夠積分(例如f=exp(x^2)和f=log(log(x)))。為了生成大型的訓練集,作者提出了一些技巧。

在這裡我們以積分為例(ODE-1 和ODE-2 數據集的生成方法這裡不再贅述,可參見論文)。作者提出了三種方法:

Forward generation(FWD)。給定n 個運算子的表達式,通過計算機代數系統求解出該表達式的積分;如果不能求解,則將該表達式丟棄。顯然這種方式獲得的數據集只是問題空間的一個子集,也即只包含符號框架可以求解的函數積分;且求積分的過程往往是非常耗時的。

Backward generation(BWD)。求微分是容易的。因此我們可以先隨機生成積分表達式f,然後再對其進行微分得到 f',將(f, f')添加到數據集當中。這種方法不會依賴於符號積分系統。這種方法生成的數據集也有一定的問題:1)數據集中簡單積分函數的數量很少,例如 f=x^3 sin(x),其對應的積分式微F=-x^3 cos(x) + 3x^2 sin(x) + 6x cos(x) - 6 sin(x),這是一個有15個運算子的表達式,隨機生成的概率相對來說會小一些;2)表達式的微分往往會比表達式本身更長,因此在BWD方式所生成的數據集中,積分(問題的解)傾向短於積分函數(問題)。

Backward generation with integration by parts(IBP)。為了克服BWD所存在的問題,作者提出IBP的方法,即利用分部積分

隨機生成兩個函數F和G,如果已知fG和它的積分式已經在數據集當中,那麼就可以求解出Fg的積分式,然後把Fg和它的積分式放入數據集。反之也可以求解 fG 的積分式。如果fG和Fg都不在數據集中,那麼可以按照BWD的方式求解FG 對應的微分fg。不斷迭代,從而獲得數據集。

可以對比一下不同的方式,生成數據集的特點:

這裡假設了 n = 15,L ={x} ∪ {-5, ... , 5} \ {0}, p2={+, -, ×, ÷}, p1= {exp, lgo, sqrt, sin, cos, tan, sin-1, cos-1, tan-1, sinh, cosh, tanh, sinh-1, cosh-1, tanh-1}。

可以看出 FWD 和 IBP 傾向於生成輸出比輸入更長的樣本,而 BWD 方法則生成較短的輸出。 與 BWD 情況一樣,ODE 生成器傾向於生成比其方程式短得多的解。

補充一點,生成過程中清洗數據也非常重要。這包括幾個方面:

1)方程簡化。例如將 x+1+1+1+1 簡化為x +4

2)係數簡化。例如 x + x tan(3) + cx +1 簡化為 cx +1

3)清除無效表達式。例如 log(0)。

四、模型

這篇文章中所使用的模型比較簡單,就是一個seq2seq的模型,當給定一個問題的表達式(seq),來預測其對應的解的表達式(seq)。具體來說,作者使用了一個transformer模型,有 8 個注意力頭,6層,512維。(在這個案例中,大的模型並不能提高性能)

在訓練中,作者使用了Adam優化器,學習率為10E-4。對於超過512個token的表達式,直接丟棄;每批使用256個表達式對進行訓練。

在推斷過程中,作者使用了帶有early stopping的beam搜索方法來生成表達式,並通過序列長度來歸一化beam中假設的對數似然分數。

注意一點,在生成過程中沒有任何約束,因此會生成一些無效的前綴表達式,例如[+ 2 * 3]。這很好解決,直接丟棄就行了,並不會影響最終結果。

評估。在機器翻譯中,一般採用對人工翻譯進行對比的BLEU分數作為指標來評價翻譯質量,但許多研究表明,更好的BLEU分數並不一定與更好的表現有關。不過對求解積分(或微分方程)來說,評估則相對比較簡單,只要將生成的表達式與其參考解進行簡單比較,就可以驗證結果的正確性了。例如微分方程xy′ y + x = 0的參考解為 x log(c / x) ,模型生成的解為 x log(c) x log(x),顯然這是兩個等價的方程。

由於對表達式是否正確可以很容易地進行驗證,因此作者提出如果生成的beam中的表達式中,只要有一個正確,則表示模型成功解決了輸入方程(而不是只選用得分最高的)。例如當 beam =10時,也即生成 10 個可能的解,只要有一個正確即表明模型成功輸出結果正確。

五、結果

1、實驗結果

從上表可以看出,

1)在積分中即使讓 beam=1,模型的準確性也是很高的。

2)beam=1時,ODE結果並不太理想。不過當beam尺寸增大時,結果會有非常顯著的提升。原因很簡單,beam大了,可供挑選的選項也就多了,正確率自然會提高。

2、與三大著名數學軟體對比

這個表格顯示了包含 500 個方程的測試集上,本文模型與Mathematica、Matlab、Maple三大著名數學軟體的比較。對於Mathematica,假設了當時間超過30s而未獲得解則認為失敗(更多時延的對比可見論文原文附錄)。對於給定的方程式,本文的模型通常會在不到 1 秒的時間裡找到解決方案。

從正確率上可以看出,本文方法要遠遠優於三大著名數學軟體的結果。

3、等價解

這種方法最有意思的地方出現了。通常你用符號求解軟體,只能得到一個結果。但這種seq2seq 的方法卻能夠同時給你呈現一系列結果,它們完全等價,只是用了不同的表示方式。具體案例,我們前面已經提到過,這裡雷鋒網不再贅述。

4、通用性研究

在前面提到的實驗結果中,測試集與訓練集都來自同一種生成方法。但我們知道每一種生成方法都只是問題空間的一個子集。那麼當跨子集測試時會出現什麼現象呢?

結果很吃驚。

1)當用FWD數據集訓練,用BWD數據集進行測試,分數會極低;不過好在用IBP數據集測試,分數還行;

2)同樣的情況,當用BWD數據集訓練,用FWD數據集進行測試,結果也很差;意外的是,用IBP數據集測試,結果也不理想;

3)當把三個數據集結合在一起共同作為訓練集時,測試結果都還不錯。

這說明

1)FWD數據集和BWD數據集之間的交集真的是非常小;

2)數據集直接影響模型的普適性,因此如何生成更具代表性的數據集,是這種方法未來一個重要的研究內容。

六、總結

我們用幾句話來總結這項工作的意義:

1、本文提出了一種新穎的、利用seq2seq模型求解符號數學推理的方法,這種方法是普遍的,而非特定模型;

2、如何生成更具代表性的數據集,有待進一步研究;

3、完全可以將類似的神經組件,內嵌到標準的數學框架(例如現在的 3M:Mathematica、Matlab、Maple)的求解器當中,這會大大提升它們的性能。

雷鋒網報導。

相關焦點

  • AI攻破高數核心,1秒內精確求解微分方程、不定積分
    一階常微分方程,和它的解從一個二元函數F(x,y)說起。有個方程F(x,y)=c,可對y求解得到y=f(x,c)。就是說有一個二元函數f,對任意x和c都滿足:再對x求導,就得到一個微分方程:fc表示從x到f(x,c)的映射,也就是這個微分方程的解。這樣,對於任何的常數c,fc都是一階微分方程的解。
  • 萬能的Seq2Seq:基於Seq2Seq的閱讀理解問答
    這次的目標主要是通用性和易用性,所以用了最萬能的方案——seq2seq 來實現做閱讀理解。用 seq2seq 做的話,基本不用怎麼關心模型設計,只要把篇章和問題拼接起來,然後預測答案就行了。此外,seq2seq 的方案還自然地包括了判斷篇章有無答案的方法,以及自然地導出一種多篇章投票的思路。
  • 「每周一識」一階非齊次線性微分方程求解及應用舉例
    本文介紹一階非齊次線性微分方程的通解的應用、特解求解舉例,以及二階微分方程可用該通解求解的情形。一、方程通解公式一階非齊次線性微分方程的解析式為:y'+p(x)=q(x),則其通解表達式如下:y=e^[-∫p(x)]dx{∫q(x)*e^[∫p(x)dx]dx+c}.
  • 直觀理解並使用Tensorflow實現Seq2Seq模型的注意機制
    如果您曾使用過谷歌Translate,或與Siri、Alexa或谷歌Assistant進行過互動,那麼你就是序列對序列(seq2seq)神經結構的受益者。我們這裡的重點是機器翻譯,基本上就是把一個句子x從一種語言翻譯成另一種語言的句子y。機器翻譯是seq2seq模型的主要用例,注意機制對機器翻譯進行了改進。
  • 微分方程重點二:常係數非齊次線性微分方程
    小編在之前的文章:微分方程重點一中講了常係數齊次線性微分方程的內容。那是微分方程難點的一半,接下來的內容是另外一半。讓我們在講解之前,先來對一下答案。題目在微分方程重點一:常係數齊次線性微分方程中。並且考試中的非齊次線性微分方程也只會考這兩種形式。這裡的所用的方法不用積分就可得出特解 y*。這種方法就是待定係數法。形式一:這裡根據λ,不是特徵方程的根,是特徵方程的單根,是特徵方程的重根分為三種情況。證明過程在高數課本p348,這裡不予證明。
  • 微分方程重點一:常係數齊次線性微分方程
    微分方程前面的都是一些基礎,如果是一些和其他題型結合在一起的題目的話,可能會考前面的微分方程內容,比如說求知道函數的全微分,讓求原函數這類的。但是如果微分方程考大題的話,就是考二階常係數非齊次線性微分方程了。之前講的微分方程解的結構是基礎,主要是為了說明做題時我們需要求什麼。
  • Seq2Seq之雙向解碼機制 | 附開源實現
    用公式來說,假設當前情況下 L2R 模塊要預測第 n 個字,以及 R2L 模塊要預測倒數第 n 個字。假設經過若干層編碼後,得到的 R2L 向量序列(對應圖中左上方的第二行)為: 代碼參考下面是筆者給出了雙向解碼的參考實現,整體還是跟之前的玩轉Keras之Seq2Seq自動生成標題一致,只是解碼端從雙向換成單向了: https://github.com/bojone/seq2seq/blob/master/seq2seq_bidecoder.py 註:測試環境還是跟之前差不多,大概是 Python 2.7
  • SMAC-seq可評估大規模染色質狀態
    SMAC-seq可評估大規模染色質狀態 作者:小柯機器人 發布時間:2020/2/13 9:58:54 史丹福大學William J.
  • 常微分方程
    關於解的性質:線性微分方程的解的性質,主要是:(1)齊次線性方程的解的疊加性(2)非齊次線性方程的解的疊加性)非齊次線性微分方程的通解可以表示為它的一個特解與它對應的齊次線性微分方程的通解之和(6)線性微分方程的通解包含了這個方程的所有解2.
  • 北洋數學講堂 江松院士帶你探索偏微分方程
    2019年4月20日上午,中國科學院院士、北京應用物理與計算數學研究所研究員江松做客天津大學,在會議樓第七會議室做主題為「偏微分方程:作用、分析與數值求解」的報告,帶領我校師生一探偏微分方程的奧秘。數學學院院長孫笑濤主持了活動。
  • 微分方程VS機器學習,實例講解二者異同
    為什麼以上 4 個方程都是微分方程?因為它們都包含某些未知函數的導數(即變化率)。這些未知函數(如 SIR 模型中的 S(t)、I(t) 和 R(t))被稱為微分方程的解。我們再來看一個模型。請注意 Murray-Gottman「愛情模型」實際上是一個差分方程(微分方程的一種姊妹模型)。差分方程輸出離散的數字序列(例如,每 5 年的人口普查結果),而微分方程則建模連續數值(即持續發生的事件)。上述 5 個模型(微分和差分方程)都是機械模型,我們可以在其中自行選擇系統的邏輯、規則、結構或機制。
  • 圖神經常微分方程,如何讓 GNN 在連續深度域上大顯身手?
    GNN 在許多應用領域都展示了顯著的效果,例如:節點分類[2]、圖分類、預測[3][4]以及生成任務[5]。一、深度學習中的常微分方程一種類型不同但重要性相等的歸納偏差與收集到數據所使用系統的類別相關。
  • 科學家利用scRNA-Seq繪製人類炎症性皮膚病轉錄圖譜
    他們進行基於第二鏈合成的大規模平行單細胞RNA測序(scRNA-seq),揭示了人類炎症性皮膚病的細胞狀態和分子特徵。這一研究成果發表在2020年10月13日出版的國際學術期刊《免疫》上。 要精確研究細胞關鍵表型特徵的表達,需要高保真度和高通量的scRNA-seq平臺。
  • 2021考研高數複習:常微分方程
    同時,關於微分方程的應用題,也是考查的重點內容之一,同時也是學習的難點。這類題目要求考生首先能夠根據題意和問題的性質,建立方程,常用思路是積分方程轉化為微分方程,利用原函數和全微分的概念簡歷並求解方程;利用曲線積分與路徑無關的充要條件建立方程;利用函數項級數的分析性質建立方程。另外這類題目一般多是初值問題,要能夠從題設條件中確定初始條件。
  • 利用針對血漿無細胞核小體的ChIP-seq鑑定細胞來源的基因表達基序
    利用針對血漿無細胞核小體的ChIP-seq鑑定細胞來源的基因表達基序 作者:小柯機器人 發布時間:2021/1/12 16:42:07 以色列耶路撒冷希伯來大學Nir Friedman研究團隊在研究中取得進展。
  • AI求解薛丁格方程,兼具準確度和計算效率,登上《自然-化學》
    著名物理學家埃爾溫 · 薛丁格是量子力學奠基人之一,他在 1926 年提出的薛丁格方程(Schrdinger equation)為量子力學奠定了堅實的基礎。薛丁格方程是描述物理系統的量子態怎樣隨時間演化的偏微分方程,是量子力學的基礎方程之一。在經典力學裡,人們使用牛頓第二定律描述物體運動。而在量子力學裡,類似的運動方程為薛丁格方程。
  • 用深度神經網絡求解『薛丁格方程』,AI開啟量子化學新未來|Nature...
    它出自某部科幻作品,暗指劇情中那些解釋不通的、奇奇怪怪的現象,都可以用「量子力學」來矇混過關。由此,人們也形成了一種既定印象,所有難以理解的問題都可以通過求解量子力學基本方程來解決。但事實上能夠精確求解方程的體系少之又少。薛丁格方程是量子力學的基本方程,即便已經提出70多年,它的氫原子求解還是很困難,超過2個電子的氫原子便很難保證精確度。不過,多年來科學家們一直在努力攻克這一難題。
  • [M007] 建模教程 - 微分方程問題 - 電荷追擊 (一)
    微分方程模型的建立1.1 分析由於 1.3 建立微分方程如上圖所示,寫出了 :2.,求出解析解(表達式)比較困難,這裡可以使用 Matlab 的 ODE 方法求解。ODE 是 Matlab 專門用於解微分方程的功能函數。一般使用 ode45 方法求解,採用了 Runge-Kutta 算法。
  • 可分離變量方程
    2.本題也是求階數,把它變為標準形式,就可以看出它的階數是為一的。3.這道題是驗證這個函數是不是微分方程的解,那麼我們就只需要求出微分方程中所需要的一階導數和二階導數,然後帶入即可。注意求cosx導數時要記得變號。
  • 谷歌翻譯核心技術 Seq2Seq
    這件事情標誌著說無人駕駛這個技術基本上可以商業化,所以在2017年的時候,無人駕駛這個行業火得一塌糊塗。百度開源,為什麼?因為這個無人駕駛這個領域的競爭比賽已經進入下半場了,上半場的任務是搶奪領先地位,而下半場的任務就是把競爭對手幹掉,所以百度一開源,很多競爭企業都沒了,這就是百度的基本戰略設想。