MIT發布加強版「高數」求解器:7門課程正確率達81%
?不光玩小學數學應用題,AI已經開始攻克高數了!
最近MIT的研究人員宣布他們基于OpenAI Codex預訓練模型,在本科生級別的數學問題上通過few-shot learning成功達到81%的正確率!
- 論文鏈接:https://arxiv.org/abs/2112.15594
- 代碼鏈接:https://github.com/idrori/mathq
先來幾個小問題看看答案,比如計算單變量函數的圖形繞軸旋轉產生的體積、計算洛倫茨吸引子及投影、計算和描繪奇異值分解(SVD)的幾何形狀,不光能正確解答,還能給出對應的解釋!
確實是逆了天了,憶往昔,高數及格都是飄過,如今AI一出手就能拿81分,我單方面宣布AI已經超越人類了。
更牛的是,除了能解決普通機器學習模型難以解決的問題外,這項研究還表明該技術可以大規模推廣,可以解決所屬課程及類似的課程問題。
這也是歷史上首次,單個機器學習模型能夠解決如此大規模的數學問題,而且還能對問題的解答過程進行解釋、繪圖,甚至還能生成新問題!
實際上這篇論文早在年初就發布出來了,經過半年的修改后,從114頁的篇幅增加到181頁,能解決的數學問題更多了,附錄的編號從A-Z直接拉滿。
文章的作者單位主要有四個,分別為麻省理工學院、哥倫比亞大學、哈佛大學和滑鐵盧大學。
第一作者Iddo Drori是MIT的電氣工程與計算機科學系AI部門講師、哥倫比亞大學工程和應用科學學院的兼任副教授。曾獲得CCAI NeurIPS 2021最佳論文獎。
他的主要研究方向為教育機器學習,即試圖讓機器解決,解釋和生成大學級數學和STEM課程;氣候科學的機器學習,即根據數千年的數據預測極端氣候變化并監測氣候,融合多學科的工作來預測大西洋多年來海洋生物地球化學的變化;自動駕駛的機器學習算法等。
他也是劍橋大學出版社出版的The Science of Deep Learning的作者。
高等教育里程碑
在這篇論文之前,大部分研究人員都認為神經網絡無法處理高數問題,只能解決一些簡單的數學題。
即便Transformer模型在各種各樣的NLP任務中超越人類的性能,在解決數學問題上仍然沒有不行,主要原因還是因為各種大模型如GPT-3都是只在文本數據上進行預訓練。
后來有研究人員發現,以逐步解析的方式(chain of thoughts)還是可以引導語言模型來推理回答一些簡單的數學問題,但高等數學問題就沒這么容易解決了。
當目標瞄準為高數問題后,首先就得搜集一波訓練數據。
作者從麻省理工學院的七門課程中各隨機抽出25個問題,包括:
- 18.01單變量微積分
- 18.02多變量微積分
- 18.03微分方程
- 18.05概率和統計學概論
- 18.06線性代數
- 6.042計算機科學數學
- 哥倫比亞大學的COMS3251計算線性代數
對于MATH數據集,研究人員從數據集的六個主題(代數、計數與概率、中級代數、數論、預代數和預科)中隨機抽取15個問題。
為了驗證模型生成的結果不是對訓練數據的過擬合,研究人員選擇了沒有在互聯網上公開過的COMS3251課程來驗證生成結果。
工作流程
模型以一個課程問題作為輸入,然后對其進行上下文增強(automatic augmentation with context),結果合成程序(resulting synthesized program),最后輸出答案和生成的解釋。
對于不同的問題來說,輸出結果可能不同,比如18.01的答案為一個方程式,18.02的答案為一個布爾值,18.03和18.06的答案為一個圖或矢量,18.05的答案為一個數值。
拿到一個問題,第一步就是讓模型找到問題的相關的上下文。研究人員主要關注Codex生成的Python程序,所以在問題前加上「write a program」的文字,并將文字放在Python程序的三個引號內,裝作是程序里的一個docstring 。
生成程序后,還需要一個Codex prompt來指定引入哪些庫,作者選擇在問題前加入「use sympy」字符串作為上下文,指定為解決問題而合成的程序應該使用這個包。
通過統計每門課程所使用的Python編程包,可以看到所有課程都使用NumPy和Sympy。Matplotlib只在有需要繪圖的問題的課程中使用。大約有一半的課程使用math、random和SciPy。在實際運行的時候,研究人員只指定SymPy或繪圖相關的包導入,其他導入的包都是自動合成的。
以Zero-shot learning的方式,即僅對原始問題采用自動增強的方式就可以自動解決71%的問題。
如果一個問題沒有解決,研究人員嘗試對這類問題采用Few-shot learning的方式來解決。
首先使用OpenAI的text-similarity-babbag-001嵌入引擎獲取所有問題的2048維的embedding,然后對所有向量使用余弦相似度計算,找出與已解決的問題最相似的未解決問題。最后將最相似的問題及其相應的代碼作為新問題的few-shot例子。
如果生成的代碼沒有輸出正確的答案,就再增加另一個已解決的question-code對,每次都使用下一個類似的已解決的問題。
在實踐中可以發現,使用最多5個例子進行few-shot learning的效果最好,可以自動解決的問題總數從zero-shot learning的71%增加到few-shot learning的81% 。
要想解決剩下19%的問題,就需要人工編輯的介入了。
研究人員首先收集所有的問題,發現這些問題大多是模糊的(vague)或包含多余的信息,如參考電影人物或當前事件等,需要對問題進行整理以提取問題的本質。
問題整理主要包括刪除多余的信息,將長句結構分解成較小的組成部分,并將提示轉換為編程格式。
另一種需要人工介入的情形是,一個問題的解答需要多個步驟的繪圖來解釋,也就是需要交互式地提示Codex,直到達到預期的可視化效果。
除了生成答案外,模型還應該能解釋出答案的理由,研究人員通過提示詞「Here is what the above code is doing: 1.」來引導模型生成一步步解釋的結果。
能解答問題后,下一步就是用Codex為每門課程生成新問題。
研究人員創建了一個由每個班級的學生寫的問題的編號列表,這個列表在隨機的問題數量后被切斷,其結果被用來提示Codex生成下一個問題。
這個過程重復進行,直到為每門課程創建了足夠多的新問題。
為了評估生成的問題,研究人員對參加過這些課程或其同等課程的麻省理工學院學生進行了調查,以比較機器生成的問題與課程原始的質量和難度差異。
從學生調查的結果可以看到:
- 機器的評分在質量上與人類出的題目已經有一戰之力了;
- 在難度上人類的問題更適合作為課程題目,而機器生成的結果則略難一些;
- 超過一半的課程題目都能被學生看出來是模型生成的,最貼近人類的是18.01課程
參考資料:
https://www.reddit.com/r/artificial/comments/v8liqh/researchers_built_a_neural_network_that_not_only/?