高數期末有救了?AI新方法解決高數問題,性能超越Matlab

2020-12-05 機器之心Pro

選自arXiv

作者:Guillaume Lample、Francois Charton

機器之心編譯

參與:魔王

數學也可以是一種自然語言,而使用機器翻譯方法就可以解決數學問題,這是 Facebook 科學家提出的用神經網絡精確解符號計算的方法。

來,回顧一下常微分方程

機器學習的傳統是將基於規則的推斷和統計學習對立起來,很明顯,神經網絡站在統計學習那一邊。神經網絡在統計模式識別中效果顯著,目前在計算機視覺、語音識別、自然語言處理等領域中的大量問題上取得了當前最優性能。但是,神經網絡在符號計算方面取得的成果並不多:目前,如何結合符號推理和連續表徵成為機器學習面臨的挑戰之一。

近日,來自 Facebook 的 Guillaume Lample 和 Francois Charton 發表了一篇論文,他們將數學(具體來說是符號計算)作為 NLP 模型的目標。更準確地講,研究者使用序列到序列模型(seq2seq)解決符號數學的兩個問題:函數積分和常微分方程(ODE)。這兩個問題不管對接受過數學訓練的人還是計算機軟體而言都是難題。

論文連結:https://arxiv.org/pdf/1912.01412.pdf

Facebook 研究者首先提出一種可用於 seq2seq 模型的數學表達式和問題表示,並討論了問題空間的大小和結構。然後展示了如何為積分和一階、二階微分方程的監督式訓練生成數據集。最後,研究者對數據集應用 seq2seq 模型,發現其性能超過當前最優的計算機代數程序 Matlab 和 Mathematica。

數學也是一門自然語言

將數學表達式變成「樹」

數學表達式可被表示為樹的形式:運算符和函數是內部節點,運算域是子節點,常量和變量是葉節點。下面三棵樹分別表示 2 + 3 × (5 + 2)、3x^2 + cos(2x) 1 和

Facebook 研究者將這些數學表達式看作一組數學符號組成的序列。2 + 3 和 3 + 2 是不同的表達式,√4x 和 2x 也是如此,它們都可以通過不同的樹來表示。大部分數學表達式表示有意義的數學對象。x / 0、√2 或 log(0) 也是正當的數學表達式,儘管它們未必具備數學意義。

很多數學問題都可被重新定義為對表達式或樹的運算。這篇論文探討了兩個問題:符號積分和微分方程。二者都可以將一個表達式變換為另一個,如將一個方程的樹映射到其解的樹。研究者將其看作機器翻譯的一種特例。

將樹作為序列

相比於 seq2seq 模型,「樹-樹」模型更加複雜,訓練和推斷速度也更慢。出於簡潔性考慮,研究者選擇使用 seq2seq 模型,此類模型可以高效生成樹,如在語境成分分析中,這類模型用於預測輸入句子對應的句法分析樹。

使用 seq2seq 模型生成樹需要將樹與序列對應起來。為此,研究者使用前綴表示法(又叫「波蘭表示法」),將每個節點寫在其子節點前面,順序自左至右。例如,數學表達式 2+ 3(5+ 2) 按照前綴表示法可被表示為序列 [+ 2 3 + 5 2]。與更常見的中綴表示法 2 + 3 (5 + 2) 相比,前綴序列沒有括號、長度更短。在序列內,運算符、函數或變量都由特定 token 來表示,符號位於整數前面。表達式與樹之間存在映射關係,同樣地,樹與前綴序列之間也存在一對一的映射。

生成隨機表達式

要想創建訓練數據,我們需要生成隨機數學表達式。但是,均勻採樣具備 n 個內部節點的表達式並不是一項簡單的任務。樸素算法(如使用固定概率作為葉節點、一元節點、二元節點的遞歸方法)傾向於深的樹而非寬的樹。以下示例展示了研究者想使用相同概率生成的不同樹。

計數表達式(COUNTING EXPRESSION)

接下來需要研究所有可能表達式的數量。表達式是基於有限的變量(即文字)、常量、整數和一系列運算符創建得到的,這些運算符可以是簡單函數(如 cos 或 exp),也可以更加複雜(如微分或積分)。準確來講,研究者將問題空間定義為:

至多具備 n 個內部節點的樹;p_1 個一元運算符(如 cos、sin、exp、log);p_2 個二元運算符(如+、、×、pow);L 個葉節點,包含變量(如 x、y、z)、常量(如 e、π)、整數(如 {10, . . . , 10})。

圖 1 展示了不同內部節點數量所對應的二元樹數量(C_n)和 unary-binary 樹數量(S_n)。研究者還展示了不同運算符和葉節點組合所對應的表達式數量(E_n)。

圖 1:不同數量的運算符和葉節點所對應的樹和表達式的數量。p_1 和 p_2 分別對應一元運算符和二元運算符的數量,L 對應葉節點數量。最下方的兩條曲線對應二元樹和 unary-binary 樹的數量。最上方兩條曲線表示表達式的數量。從該圖可以觀察到,添加葉節點和二元運算符能夠顯著擴大問題空間的規模。

萬事俱備,只欠數據集

為數學問題和技術定義語法並隨機生成表達式後,現在需要為模型構建數據集了。該論文剩餘部分主要探討兩個符號數學問題:函數積分和解一階、二階常微分方程。

要想訓練網絡,首先需要包含問題及其對應解的數據集。在完美情況下,研究者想要生成能夠代表問題空間的樣本,即隨機生成待解的積分和微分方程。然而,隨機問題的解有時並不存在或者無法輕鬆推導出來。研究者提出了一些技術,生成包含積分和一階、二階常微分方程的大型訓練數據集。

積分

研究者提出三種方法來生成函數及其積分。

前向生成(Forward generation,FWD):該方法直接生成具備多達 n 個運算符的隨機函數,並通過計算機代數系統計算其積分。系統無法執行積分操作的函數即被捨棄。該方法生成對問題空間子集具備代表性的樣本,這些樣本可被外部符號數學框架成功求解。

後向生成(Backward generation,BWD):該方法生成隨機函數 f,並計算其導數 f',將 (f', f) 對添加到訓練集。與積分不同,微分通常是可行的且速度極快,即使是面對非常大的表達式。與前向生成方法相反,後向生成方法不依賴外部符號積分系統。

使用部分積分的後向生成(Backward generation with integration by parts (IBP)):該方法利用部分積分:給出兩個隨機生成函數 F 和 G,計算各自的導數 f 和 g。如果 fG 已經屬於訓練集,我們就可以知道其積分,然後計算 Fg 的積分:

該方法可在不依賴外部符號積分系統的情況下生成函數積分,如 x^10 sin(x)。

一階常微分方程(ODE 1)

如何生成具備解的一階常微分方程?研究者提出了一種方法。給定一個雙變量函數 F(x, y),使方程 F(x, y) = c(c 是常量)的解析解為 y。也就是說,存在雙變量函數 f 滿足

。對 x 執行微分,得到 x, c:

其中 f_c = x |→ f(x, c)。因此,對於任意常量 c,f_c 都是一階常微分方程的解:

利用該方法,研究者通過附錄中 C 部分介紹的方法生成任意函數 F(x, y),該函數的解析解為 y,並創建了包含微分方程及其解的數據集。

研究者沒有生成隨機函數 F,而是生成解 f(x, c),並確定它滿足的微分方程。如果 f(x, c) 的解析解是 c,則我們計算 F 使 F (x, f(x, c)) = c。通過上述方法,研究者證明,對於任意常量 c,x |→ f(x, c) 都是微分方程 3 的解。最後,對得到的微分方程執行因式分解,並移除方程中的所有正因子。

使用該方法的必要條件是生成解析解為 c 的函數 f(x, c)。由於這裡使用的所有運算符和函數都是可逆的,因此確保 c 為解的簡單條件是確保 c 在 f(x, c) 樹表示的葉節點中僅出現一次。生成恰當 f(x, c) 的直接方式是使用附錄中 C 部分介紹的方法採樣隨機函數 f(x),並將其樹表示中的一個葉節點替換成 c。以下示例展示了全過程:

二階常微分方程(ODE 2)

前面介紹的生成一階常微分方程的方法也可用於二階常微分方程,只需要考慮解為 c_2 的三變量函數 f(x, c_1, c_2)。

和之前方法一樣,研究者推導出三變量函數 F,使 F (x, f(x, c_1, c_2), c_1) = c_2。對 x 執行微分獲得一階常微分方程:

其中 f_c1,c2 = x |→ f(x, c1, c2)。如果該方程的解為 c_1,則我們可以推斷出另一個三變量函數 G 滿足:

對 x 執行第二次微分,得到以下方程:

因此,對於任意常量 c_1 和 c_2,f_c1,c2 是二階常微分方程的解:

通過該方法,研究者創建了二階常微分方程及其解的對,前提是生成的 f(x, c_1, c_2) 的解為 c_2,對應一階常微分方程的解為 c_1。

對於 c_1,研究者使用了一個簡單的方法,即如果我們不想其解為 c_1,我們只需跳過當前方程即可。儘管簡單,但研究者發現在大約一半的場景中,微分方程的解是 c_1。示例如下:

數據集清洗

方程簡化:在實踐中,研究者簡化生成的表達式,以減少訓練集中唯一方程的數量,從而縮短序列長度。此外,研究者不想在可以使模型預測 x+5 的情況下,令其預測 x + 1 + 1 + 1 + 1 + 1。

係數簡化:在一階常微分方程中,研究者更改一個變量,將生成的表達式變為另一個等價表達式。研究者對二階常微分方程也使用了類似的方法,不過二階方程有兩個常量 c_1 和 c_2,因此簡化略微複雜一些。

無效表達式:最後,研究者從數據集中刪除無效的表達式。如果子樹的值不是有限實數(如∞、+∞或複數),則丟棄該表達式。

實驗

數據集

表 1 展示了數據集統計情況。如前所述,研究者觀察到後向生成方法生成的導數(即輸入)比前向生成器要長得多,詳見附錄中 E 部分內容。

表 1:不同數據集的訓練集大小和表達式長度。FWD 和 IBP 生成樣本的輸出比輸入長,而 BWD 方法生成樣本的輸出比輸入短。和 BWD 類似,ODE 生成器輸出的解也比方程短。

模型

對於所有實驗,研究者訓練 seq2seq 模型來預測給定問題的解,即預測給定函數的原函數或預測給定微分方程的解。研究者使用 transformer 模型 (Vaswani et al., 2017),該模型有 8 個注意力頭、6 個層,維度為 512。

研究者使用 Adam 優化器訓練模型,學習率為 10^4。研究者移除長度超過 512 個 token 的表達式,以每批次 256 個方程來訓練模型。

在推斷過程中,表達式通過集束搜索來生成,並使用早停法。研究者將集束中所有假設的對數似然分數按其序列長度進行歸一化。這裡使用的集束寬度為 1(即貪婪解碼)、10 和 50。

在解碼過程中,模型不可避免地會生成無效的前綴表達式。研究者發現模型生成結果幾乎總是無效的,於是決定不使用任何常量。當模型生成無效表達式時,研究者僅將其作為錯誤解並忽略它。

評估

在每個 epoch 結束時,研究者評估模型預測給定方程解的能力。但是,研究者可以通過對比生成表達式及其參考解,輕鬆核對模型的正確性。

因此,研究者考慮集束中的所有假設,而不只是最高分的假設。研究者核實每個假設的正確性,如果其中一個正確的話,則模型對輸入方程成功求解。因此,「Beam size 10」的結果表示,集束中 10 個假設裡至少有一個是正確的。

結果

下表 2 展示了模型對函數積分和微分方程求解的準確率。

表 2:模型對函數積分和微分方程求解的準確率。所有結果均基於包含 5000 個方程的留出測試集。對於微分方程,使用集束搜索解碼顯著提高了模型準確率。

下表 3 展示了不同集束大小時模型的準確率,此處 Mathematica 有 30 秒的超時延遲。

表 3:該研究提出的模型與 Mathematica、Maple 和 Matlab 在包含 500 個方程的測試集上的性能對比情況。此處,Mathematica 處理每個方程時有 30 秒的超時延遲。對於給定方程,該研究提出的模型通常在不到一秒的時間內即可找出解。

下表 4 展示了該研究提出模型能解而 Mathematica 和 Matlab 不能解的函數示例:

表 4:該研究提出模型能解而 Mathematica 和 Matlab 不能解的函數示例。對於每個方程,該研究提出的模型使用貪婪解碼找出有效解。

下表 5 是模型對方程返回的 top 10 假設。研究者發現,所有生成結果實際上都是有效解,儘管它們的表達式迥然不同。

表 5:通過集束搜索方法,模型對一階常微分方程

返回的 top 10 生成結果。

下表 6 對比了使用不同訓練數據組合訓練得到的 4 個模型在 FWD、BWD 和 IBP 測試集上的準確率情況。

表 6:該研究提出的模型對函數積分求解的準確率。FWD 訓練的模型在對來自 BWD 數據集的函數執行積分時性能較差。

FWD 訓練模型有時可對 SymPy 無法求積分的函數執行積分操作,下表 7 展示了此類函數的示例:

表 7:FWD 訓練模型可求積分而 SymPy 不可求積分的函數/積分示例。儘管 FWD 模型僅在 SymPy 可求積分函數的子集上訓練,但它可以泛化至 SymPy 不可求積分的函數。

下表 8 展示了超時值對 Mathematica 準確率的影響。增加超時延遲的值可提高準確率。

表 8:在不同超時值情況下,Mathematica 對 500 個函數求積分的準確率。隨著超時延遲值增大,超時次數下降,因而失敗率下降。在 3 分鐘極限情況下,超時次數僅帶來 10% 的失敗。因此,沒有超時的準確率不會超過 86.2%。

相關焦點

  • 大一新生期末考試,為什麼容易掛高數?
    我們學校的大一新生,第一次大學期末考試已經全部結束了。我們學校的大學老師,判卷速度真是非常給力啊!聽說是兩整天,判完了大一新生的全部高數試卷。根據大學裡學弟學妹們的反饋,一個班裡有40個學生,平均每個班高數掛科的有五個、六個。說實話,這個掛科的人數比較多了。
  • 大一學生覺得高數難的原因是什麼,學好高數需要注意這四點
    大部分工科學生,在大學中,高數、線代、概率是必修的三門課,也是考研數學要考的三門課(數二不考線代),在這三門課中,高數是最先接觸到的一門課,其實論起難度,線代和概率的難度也不低於高數,但從期末考試成績來說,線代和概率的不及格率卻低於高數,或者說考得比高數好(葉秋學校的歷年統計情況)!
  • 大一的學生,期末考試高數應該怎麼複習?有什麼好的建議?
    大一的學生,期末考試高數應該怎麼複習?有什麼好的建議?憶往昔,崢嶸歲月,恰同學少年,風華正茂。如果問我大學物理、機械製圖等等課程,我可是一點都回憶不起來了,但唯獨高數,我印象非常深刻。因為我大學4年,唯一的一次考試不及格就是大一高數的期中考試,也是大學入學後的第一次考試。
  • 高數掛了?聽聽學霸的學習之道,有了這個方法,想掛都難!
    「你高數掛了嗎?」「你高數過了嗎?」這句話可能是大一同學期末成績出來後互相問候的對話,心生後怕......高數這門課已經支配了大一的同學們。1+1的問題探討:高數那麼,如何以瀟灑的走位順利通過高數,便是小二今天跟同學們交流的問題了。大一同學們現在已經看過自己的課表了吧,在課表裡,最令你恐懼的應該就是學長口中的「高數」!
  • 高數(一)、高數(工專)、高數(工本)有何差異
    很多考生在看各專業課程設置時發現,有的專科專業高數課程為高等數學(一),有的專業則為高等數學(工專)。這兩門課有哪些差異?  兩門課面向的考生群體不同。從自學考試大綱中可了解到,高數(一)是全國高等教育自學考試經濟管理類專科中重要的基礎理論課程,高數(工專)是工科各專業專科自學考試計劃中重要的基礎理論課程。
  • 大一新生需要重視的大學英語和高數,期末複習應該怎麼學?
    要說大一階段,最容易掛科的不就是大學英語和高數這兩科嗎?想當年自己的高數也非常危險,期末成績只有61分。要是沒有平時成績,我是必掛無疑了。這篇文章,學長和大家分享一下,怎麼學?才能保證自己的大學英語和高數這兩門課,順利通過期末考試。
  • 自考高數(一)、高數(工專)、高數(工本)有何差異?
    很多考生在閱讀《考生必讀》各專業課程設置時發現,有的專科專業高數課程為高等數學(一),有的專業則為高等數學(工專)。這兩門課有哪些差異?  兩門課面向的考生群體不同。從自學考試大綱中可了解到,高數(一)是全國高等教育自學考試經濟管理類專科中重要的基礎理論課程,高數(工專)是工科各專業專科自學考試計劃中重要的基礎理論課程。
  • 「再掛一小時我就是天才」大一男生期末備考打高數吊瓶,評論亮了!
    「再掛一小時我就是高數天才。」12日,南京。大一年級許同學拍攝的「期末不掛科」視頻走紅。視頻中,高數課本被晾衣架掛在柜子上,一根充電線連接課本和許同學的手。許同學稱,複習壓力太大,想通過這種方式解壓。如今,淘汰「水課」成為嚴格本科教育教學過程管理的重要舉措,在「水分」減少的課堂中,期末考試成為實打實的「硬仗」,大學生們為此拿出了過關斬將的招數,微信「自救群」就是其中之一。中國人民大學的大二學生範小揚(化名)和同學們在期末考試通知下來的時候也自發建了「複變函數自救群」和「高數自救群」。和邱歡歡加入的群不一樣的是,這些群都是關係好的幾個同學建的小群,只有10人左右。
  • 高數好難?tan90°,西石大高數女神來教你
    從課題的導入、問題的提出、模型的建立、內容的講解,到問題的解決,每一個環節都修改了很多遍;微課的錄製是在咱們學校信息中心的多媒體教室裡面完成的,兩位負責錄製的老師也是不厭其煩地幫我錄製、剪輯了很多次,最終完成了微課視頻。
  • 大學高數老師履行期末考試承諾 線上直播鑽木取火
    7月31日下午,四川農業大學高數教師黃厚輝為了履行承諾,在視頻平臺上進行了一場趣味橫生的直播——鑽木取火。「鑽木取火看起來簡單,其實很難!」據悉,因為黃厚輝在上網課期間曾允諾過學生,如果期末考試成績不錯,就為大家直播,所以才有了「鑽木取火」這個「名場面」。「暑假還有一個月,有很多同學參加第二個批次考試,我想通過直播給他們打氣,督促大家複習。」
  • 掃一掃題目就能算高數!一款大學必備的高數神器
    【PConline 應用】不知不覺到了開學季,已經有很多朋友迎來了大學的新生活,而不少學生讀者也將會第一次接觸那顆掛了很多人的樹——高數。高數難不難?平心而論,用心學的話並不算特別難,但首次接觸出現不適應的情況,那還是很正常的。遇到解決不了的高數題,如果有工具能幫你一把,無疑可以大大加深理解!
  • 大一學生怕高數掛科將公式寫滿寢室,稱高考數學只考了124
    大一男生認為高數難學,擔心期末高數掛科,將高數公式寫滿寢室的牆面,並且自稱「高考時數學只考了124分」。數學這門學科想必大家都接觸過,那可是令無數人都感到頭疼甚至絕望的存在。隨著學業的拓展,難度係數那也自然是越來越大。
  • 「高數+線代+概率論」考前急救包!幫助你不掛科~
    總有同學抱怨高數好難、學不會,概率論好複雜,怕考試掛科,給我們後臺留言尋求不掛科的方法。我懂你們的,想當年,高數也是我的夢魘,但所幸沒掛科。那麼我這個上課不認真聽講的人,是如何做到不掛科的呢?答案很簡單,關鍵就在於我把教材的習題認認真真地做了一遍,不懂的就看習題解析,再不懂就問同學和老師。
  • 「高數「老王」」教好你的高數|是我的責任
    很多學生一開始會和王老師說高數好難,特別枯燥乏味,但往往過了一段時間,學生除了能在高數上取得高分外,也開始喜歡上這一門充滿邏輯性和美感的學科。王老師說:「高數在專科院校講得比較淺,一開始學生聽不懂也不怪他們,這是我們當老師的責任。」在此背景下,他會花時間去跟大家講解、推導一些基本概念、基本定理和基本公式,他會保持著課上手寫講義的習慣。
  • 高數|夾逼定理
    在拿到高數題後,很多人默默的發現,這個出題人的意圖是:他想讓我死!這道題我看出的唯一結論是:出題的可能不是人!    恩,有些題目確實是這樣的,但是你們要記住,面相很複雜的題目往往都會有很簡單的處理辦法,今天我們就來討論這樣一個化繁為簡的定理:夾逼定理!
  • 為了高數不掛科,大一新生這樣做,評論區酸了
    高數的難是出了名的,有網友說大學裡唯一掛科的課程就是高數,也有網友說大學畢業很多年後做噩夢還和高數有關……讓很多人意想不到的是,高數的難度竟然也讓學霸緊張起來了。在吉林大學就有這樣一位大一新生。他自稱認為自己數學不太好,到了大學後發現高數很難,為了期末考試不掛科,他想到了一個可以隨時學習的方法,那就是趁著宿舍文化節裝扮宿舍的機會,將數學公式寫在了宿舍牆壁上,這樣就可以隨時複習。這位同學的做法引起很多網友的點讚,但評論區也有很多網友「酸了」,這是怎麼回事呢?
  • 高數022|微分 微積分裡的微來了
    大家都知道 高數 其實也叫「微積分」,而我們今天就要正式接觸這一思想
  • AI攻破高數核心,1秒內求解微分方程、不定積分,性能遠超Matlab
    這是Facebook發表的新模型,1秒給出的答案,超越了Mathematica和Matlab這兩隻付費數學軟體30秒的成績。團隊說,這是Seq2Seq和Transformer搭配食用的結果。用自然語言處理 (NLP) 的方法來理解數學,果然行得通。
  • 一鍵橫掃高數試卷
    文中有野生福利出沒,歡迎捕捉來制霸高數~高數是什麼樣的存在?大概是——昨晚夢到高數掛科補考,好難一道數學題,夢裡真實難哭聽說人被逼急了什麼都做的出來,除了數學題全靠高數給我的打擊,才有了現在介麼堅強的自己
  • 大一新生打「高數吊瓶」,網友:別通電,危險
    網上最近看到一則新聞,發生在南京,一大一學生許同學發布了一條視頻,視頻中許同學用高數課本做吊瓶,用手機充電線做輸液管,cos了一個打吊瓶複習的場景。許同學說,因為期末複習壓力大,所以想出了這麼個主意為自己減壓。網上很多網友開始網上調侃,「掛高數,涼了」,「別通電,危險」......