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
— 完 —
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539634.html
標籤:其他
上一篇:有向圖的拓撲排序
下一篇:城市云災備,為業務連續性保駕護航
