設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

AI 編程登上 Science 封面:AlphaCode 打競賽,三分之二賽題一遍過,成績超過一半程序員

量子位 2022/12/9 16:27:07 責(zé)編:遠(yuǎn)生

DeepMind 的 NS 論文又新添一篇。

這回,是“信息學(xué)競賽選手”AlphaCode,登上了最新一期 Science 封面。

對,就是那個悄悄潛入 10 場編程比賽敲代碼,成績超過了一半人類的編程 AI。

并且就在這篇最新更新的論文中,DeepMind 還首次透露了 AlphaCode 的“一次通過率”:66%。

也就是說,AlphaCode 近三分之二的提交,都是一次 AC(Accepted)的。

CMU 博世人工智能中心教授 J. Zico Kolter 的最新評論文章也同時發(fā)表在了這一期 Science 上,他認(rèn)為:

AlphaCode 不僅僅是復(fù)制現(xiàn)有的解決方案。

在面對以前沒見過的編程題時,它表現(xiàn)得非常好,無論它是在多大程度上真正“理解”了這個任務(wù)。

而在 DeepMind 的官方推特下,還有不少人把 AlphaCode 同當(dāng)紅炸子雞 ChatGPT 聯(lián)系了起來。

有人已經(jīng)迫不及待看到兩者同臺演出:

首次通過率 66%

盡管 AI 編程領(lǐng)域,GitHub 的 Copilot 已經(jīng)快進(jìn)到收費模式,甚至還和程序員們“法庭上見”了。

但在 DeepMind 看來,AlphaCode 還是頗有些不同之處。

一方面,編程競賽對于 AI 而言本身就是比純編程更為復(fù)雜的任務(wù),關(guān)鍵是要為無法預(yù)見的問題構(gòu)建解決方案。

另一方面,在架構(gòu)上,AlphaCode 采用了不同的機(jī)制來編碼賽題文本。

值得一提的是,AlphaCode“打”的這 10 場編程比賽都來自 Codeforces。

相比其他針對算法和數(shù)據(jù)結(jié)構(gòu)的編程比賽,Codeforces 更偏好考查思維能力,這意味著 AI 無法僅僅通過“背題”來完成挑戰(zhàn)。

例如這是 Codeforces 上關(guān)于 1553D 問題的描述:

有兩個字符串 s 和 t,都是由小寫字母組成。對于字符串 s,我們從前向后掃描整個字符串。

如果按下 Backspace 鍵,就刪除該光標(biāo)前到上一個未刪除字符之間的所有字符。

也就是說,假設(shè)字符串 s 是”abcbd”,你分別在第一個位置和第四個位置按下 Backspace,那么將得到字符串”bd”。

因為在第一個光標(biāo)位置前沒有字符,所以第一次沒有動作。第四個光標(biāo)位置前的字符是 c,上一個未刪除字符是 a,所以按下 Backspace 將刪除前三個字符”bd”。

針對這個“前提”,我們需要解決的問題如下:

我們能否從前向后掃描一次 s 字符串,讓 s 變?yōu)?t?如果可以就輸出 YES,否則輸出 NO。

針對這個問題,AlphaCode 給出的解法如下:

那么,我們只需要給定輸入的字符串?dāng)?shù)量(4)和具體的字符串內(nèi)容,就能讓程序輸出對應(yīng)的結(jié)果:

第一組 ababa(ba),第二組 ababa(bb),第三組 aaa(aaaa),第四組 aababa(ababa)。

對此程序輸出的結(jié)果分別是 YES、NO、NO 和 YES。

在做題過程中,AlphaCode 的“解題思路”也不再是黑箱。

它不僅成功解決了問題,還能將代碼和注意力高亮的對應(yīng)位置顯示出來:

上述還只是 AlphaCode 解的其中一道題。

整體來說,在 Codeforces 平臺舉辦的編程比賽模擬評估中,AlphaCode 在超過 5000 名參與者的比賽中平均排名前 54.3%—— 擊敗了一半的選手。

并且第一次提交就通過的概率達(dá)到了 66%。

AlphaCode 是如何讀題寫碼的

所以,AlphaCode 究竟是憑借什么原理達(dá)成這一“戰(zhàn)果”的呢?

它仍然基于預(yù)訓(xùn)練-微調(diào)的范式打造,采用 Transformer 架構(gòu),其中編碼器具備“解讀能力”,解碼器則具備“寫碼能力”。

這次發(fā)表在 Science 上的論文,也給出了更直觀的原理圖,并以 Python 作為案例,講解具體訓(xùn)練的過程。

在預(yù)訓(xùn)練(pre-training)時,研究人員會先整理出 GitHub 上的各種代碼集,并“喂”給 AlphaCode 上的編碼器和解碼器。

以 Python 上的 print (“hello”) 為例,這里 print () 是一個常見的函數(shù),即“打印輸出”,”hello”則是具體需要打印輸出的內(nèi)容。

經(jīng)過預(yù)訓(xùn)練后的模型,就具備了基本的“按指令完成任務(wù)”的要求,其中編碼器負(fù)責(zé)生成指令,解碼器則負(fù)責(zé)填充剩余的部分。

在微調(diào)(fine-tuning)環(huán)節(jié),研究人員會整理出競爭性編程競賽的數(shù)據(jù)集,包括問題和解決思路兩部分,并以 GOLD 與 tempering 作為訓(xùn)練目標(biāo),進(jìn)一步減少搜索空間。

其中,問題以注釋#的形式交給編碼器“學(xué)習(xí)”,解決思路則交給解碼器來嘗試?yán)斫猓?/p>

微調(diào)完成后,解碼器就懂得通過編碼器生成注釋的內(nèi)容,來嘗試輸出對應(yīng)的代碼。

經(jīng)過預(yù)訓(xùn)練-微調(diào)后,就來到了最終的評測環(huán)節(jié)。

Codeforces 的題目會被直接以注釋的形式交給編碼器,解碼器則嘗試輸出數(shù)百萬個不同的程序,對它們進(jìn)行過濾和聚類(cluster)之后,提交其中的 10 個程序來解決問題。

(當(dāng)然前面也提到,有不少問題在第一次提交后就通過了)

對于 AlphaCode 的出現(xiàn),有程序員調(diào)侃稱“可以在藝術(shù)家旁邊排隊等領(lǐng)救濟(jì)糧了?!?/p>

不過,DeepMind 官方對于 AlphaCode 的定調(diào)并非“AI 版程序員”,而是希望它作為一個輔助的角色出現(xiàn)在編程工作中:

我們希望它能作為軟件開發(fā)者的助手,尤其是為 0 編程基礎(chǔ)的人提供寫代碼的機(jī)會。

論文地址:

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),作者:魚羊 蕭簫

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:AI編程

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會買 要知