DeepMind 的 NS 論文又新添一篇。這回,是 " 信息學競賽選手 "AlphaCode,登上了最新一期 Science 封面。對,就是那個悄悄潛入 10 場編程比賽敲代碼,成績超過了一半人類的今天林語嫣要和大家分享的是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
關于AI編程登上Science封面:AlphaCode打競賽,三分之二賽題一遍過,成績超過一半程序員就介紹完了,您有什麼想法可以聯系林語嫣。