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氪