AI程式設計登上Science封面:AlphaCode打競賽,三分之二賽題一遍過,成績超過一半程式設計師
DeepMind的NS論文又新添一篇。
這回,是“資訊學競賽選手”AlphaCode,登上了最新一期Science封面。
對,就是那個悄悄潛入10場程式設計比賽敲程式碼,成績超過了一半人類的程式設計AI。
並且就在這篇最新更新的論文中,DeepMind還首次透露了AlphaCode的“一次通過率”:66%。
也就是說,AlphaCode近三分之二的提交,都是一次AC(Accepted)的。
CMU博世人工智慧中心教授J. Zico Kolter的最新評論文章也同時發表在了這一期Science上,他認為:
AlphaCode不僅僅是複製現有的解決方案。在面對以前沒見過的程式設計題時,它表現得非常好,無論它是在多大程度上真正“理解”了這個任務。
而在DeepMind的官方推特下,還有不少人把AlphaCode同當紅炸子雞ChatGPT聯絡了起來。
有人已經迫不及待看到兩者同台演出:
首次通過率66%
儘管AI程式設計領域,GitHub的Copilot已經快進到收費模式,甚至還和程式設計師們“法庭上見”了。
但在DeepMind看來,AlphaCode還是頗有些不同之處。
一方面,程式設計競賽對於AI而言本身就是比純程式設計更為複雜的任務,關鍵是要為無法預見的問題建構解決方案。
另一方面,在架構上,AlphaCode採用了不同的機制來編碼賽題文字。
值得一提的是,AlphaCode“打”的這10場程式設計比賽都來自Codeforces。
相比其他針對演算法和資料結構的程式設計比賽,Codeforces更偏好考查思維能力,這意味著AI無法僅僅通過“背題”來完成挑戰。
例如這是Codeforces上關於1553D問題的描述:
有兩個字串s和t,都是由小寫字母組成。對於字串s,我們從前向後掃描整個字串。如果按下Backspace鍵,就刪除該游標前到上一個未刪除字元之間的所有字元。
也就是說,假設字串s是”abcbd”,你分別在第一個位置和第四個位置按下Backspace,那麼將得到字串”bd”。
因為在第一個游標位置前沒有字元,所以第一次沒有動作。第四個游標位置前的字元是c,上一個未刪除字元是a,所以按下Backspace將刪除前三個字元”bd”。
針對這個“前提”,我們需要解決的問題如下:
我們能否從前向後掃描一次s字串,讓s變為t?如果可以就輸出YES,否則輸出NO。
針對這個問題,AlphaCode給出的解法如下:
那麼,我們只需要給定輸入的字串數量(4)和具體的字串內容,就能讓程序輸出對應的結果:
第一組ababa(ba),第二組ababa(bb),第三組aaa(aaaa),第四組aababa(ababa)。
對此程序輸出的結果分別是YES、NO、NO和YES。
在做題過程中,AlphaCode的“解題思路”也不再是黑箱。
它不僅成功解決了問題,還能將程式碼和注意力高亮的對應位置顯示出來:
上述還只是AlphaCode解的其中一道題。
整體來說,在Codeforces平台舉辦的程式設計比賽模擬評估中,AlphaCode在超過5000名參與者的比賽中平均排名前54.3%——擊敗了一半的選手。
並且第一次提交就通過的機率達到了66%。
AlphaCode是如何讀題寫碼的
所以,AlphaCode究竟是憑藉什麼原理達成這一“戰果”的呢?
它仍然基於預訓練-微調的範式打造,採用Transformer架構,其中編碼器具備“解讀能力”,解碼器則具備“寫碼能力”。
這次發表在Science上的論文,也給出了更直觀的原理圖,並以Python作為案例,講解具體訓練的過程。
在預訓練(pre-training)時,研究人員會先整理出GitHub上的各種程式碼集,並“喂”給AlphaCode上的編碼器和解碼器。
以Python上的print(“hello”)為例,這裡print()是一個常見的函數,即“列印輸出”,”hello”則是具體需要列印輸出的內容。
經過預訓練後的模型,就具備了基本的“按指令完成任務”的要求,其中編碼器負責生成指令,解碼器則負責填充剩餘的部分。
在微調(fine-tuning)環節,研究人員會整理出競爭性程式設計競賽的資料集,包括問題和解決思路兩部分,並以GOLD與tempering作為訓練目標,進一步減少搜尋空間。
其中,問題以註釋#的形式交給編碼器“學習”,解決思路則交給解碼器來嘗試理解:
微調完成後,解碼器就懂得通過編碼器生成註釋的內容,來嘗試輸出對應的程式碼。
經過預訓練-微調後,就來到了最終的評測環節。
Codeforces的題目會被直接以註釋的形式交給編碼器,解碼器則嘗試輸出數百萬個不同的程序,對它們進行過濾和聚類(cluster)之後,提交其中的10個程序來解決問題。
(當然前面也提到,有不少問題在第一次提交後就通過了)
對於AlphaCode的出現,有程式設計師調侃稱“可以在藝術家旁邊排隊等領救濟糧了。”
不過,DeepMind官方對於AlphaCode的定調並非“AI版程式設計師”,而是希望它作為一個輔助的角色出現在程式設計工作中:
我們希望它能作為軟體開發者的助手,尤其是為0程式設計基礎的人提供寫程式碼的機會。
論文地址:https://www.science.org/doi/10.1126/science.abq1158
參考連結:
[1]https://www.science.org/doi/10.1126/science.add8258
[2]https://mp.weixin.qq.com/s/wZcY_hEk_M61wTJVVIXfIg
[3]https://www.deepmind.com/blog/competitive-programming-with-alphacode
本文來自微信公眾號“量子位”(ID:QbitAI),作者:魚羊 蕭簫,36氪經授權發佈。
本文經授權發布,不代表36氪立場。
如若轉載請註明出處。來源出處:36氪