MIT最近更新了他們的高等數學的求解AI,並在七門大學數學課程中正確率達到了81%!此外還能對求解過程進行解釋、繪圖,還能生成新問題!
最近MIT的研究人員宣佈他們基於OpenAI Codex預訓練模型,在數學本科生領域的數學問題上通過few-shot learning成功達到81%的正確率!
先來幾個小問題看看答案,比如計算單變量函數的圖形繞軸旋轉產生的體積、計算勞侖次吸引子(Lorenz attractor)及投影、計算和描繪奇異值分解(SVD)線性代數的幾何形狀,不光能正確解答,還能說出對應的解釋!
現在許多人應該都把高等數學還回去了,上面這些描述恐怕能夠聽懂這些名詞就不簡單了。如今AI一出手就能拿81分。
除了能解決一般機器學習模型難以解決的問題外,這項研究還表明該技術可以大規模推廣,可以解決所屬課程及類似的課程問題。這也是歷史上首次,單個機器學習模型能夠解決如此大規模的數學問題,而且還能對問題的解答過程進行解釋、繪圖,甚至還能生成新問題,說不定比你以前學校的數學老師還要神!
實際上這篇論文早在年初就發佈出來了,經過半年的修改後,從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生成下一個問題。
這個過程重複進行,直到為每門課程創建了足夠多的新問題。
為了評估生成的問題,研究人員對參加過這些課程或其同等課程的麻省理工學院學生進行了調查,以比較機器生成的問題與課程原始的品質和難度差異。
從學生調查的結果可以看到:
1、機器的評分在品質上與人類出的題目已經有一戰之力了;
2、在難度上人類的問題更適合作為課程題目,而機器生成的結果則略難一些;
3、超過一半的課程題目都能被學生看出來是機器模型生成的,最貼近人類的是18.01課程
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!