今天,DeepMind 的“Alpha”家族再添一名新成員:會刷編程競賽題的 AlphaCode 來了!
其實,AlphaCode 早在幾個月前就“悄悄進村”了,一直沒人察覺。它默默參加了著名網(wǎng)站 Codeforces 最近舉行的 10 場編程比賽,成績超過了一半人類。
直到今天 DeepMind 才公布最終成績:AlphaCode 在這 10 場比賽中排名前 54.3%,Elo 評分 1238。
更重要的是,在編程比賽這樣考察算法創(chuàng)造力的問題中,AI 終于不落下風(fēng),而這恰恰是 AI 過去所欠缺的。
如果把這個分?jǐn)?shù)放到過去六個月總體來看,AlphaCode 的成績更為優(yōu)秀,因為它只刷了 10 周的題目,就已經(jīng)達(dá)到了前 28% 用戶的水平。
Codeforces 是一個由俄羅斯程序員 Mikhail Mirzayanov 創(chuàng)辦的編程競賽網(wǎng)站,大約每周舉行一次名為“Codeforces Rounds”的編程比賽。
通過 Codeforces 的 Elo 評分可以衡量一位程序員的編程水平。
△ Codeforces 創(chuàng)始人 Mikhail Mirzayanov
當(dāng)看到 AlphaCode 的成績后,連創(chuàng)始人 Mirzayanov 都驚訝不已。
他原本對 AI 持懷疑態(tài)度,因為編程比賽考驗的是發(fā)明算法的能力,這是最困難的,沒想到 AlphaCode 的結(jié)果完全超出了他的預(yù)期。
DeepMind 發(fā)布這條消息僅半天,在 Twitter 上已經(jīng)有 2000 多次轉(zhuǎn)發(fā)、5000 多點贊。
AlphaCode 如何編程
說了這么多,下面我們來看看 AlphaCode 是如何成為“編程做題家”的。
以下是 Codeforces 上的 1553D 問題:(鏈接:https://codeforces.com/ problemset / problem / 1553 / D)
有兩個字符串 s 和 t,都是由小寫字母組成。對于字符串 s,我們從前向后掃描整個字符串。
如果按下 Backspace 鍵,就刪除該光標(biāo)前到上一個未刪除字符之間的所有字符。
例如字符串 s 是”abcbd”,你分別在第一個位置和第四個位置按下 Backspace,那么將得到字符串”bd”。
因為在第一個光標(biāo)位置前沒有字符,所以第一次沒有動作。第四個光標(biāo)位置前的字符是 c,上一個未刪除字符是 a,所以按下 Backspace 將刪除前三個字符”bd”。
好了,現(xiàn)在問題來了:
我們能否從前向后掃描一次 s 字符串, 讓 s 變?yōu)?t。如果可以輸出 YES,否則輸出 NO。
AlphaCode 給出的代碼是這樣的:
向以上程序輸入 4 組字符串:
得到的輸出是:
在這里,AlphaCode 不再是黑箱。
它不僅成功解決了問題,還能將代碼和注意力高亮的對應(yīng)位置顯示出來。
一位網(wǎng)友表示:既然 AI 能看得這么細(xì),那么如果能在代碼后面加入注釋就更好了。
至于更多的案例,可以去 AlphaCode 網(wǎng)站觀摩。
原理
DeepMind 說,在 Codeforces 比賽中所需解決問題的能力,已經(jīng)超出了現(xiàn)有 AI 系統(tǒng)的能力。
整個 AlphaCode 模型的流程如下:
用標(biāo)準(zhǔn)的語言建模目標(biāo)在 GitHub 代碼上預(yù)訓(xùn)練一個基于 Transformer 的語言模型。這個模型可以合理地代表人類編寫代碼的空間,大大減少了問題的搜索空間。
在競爭性編程數(shù)據(jù)集上微調(diào)模型,使用 GOLD 與 tempering 作為訓(xùn)練目標(biāo),進一步減少了搜索空間,并利用預(yù)訓(xùn)練彌補了少量的競爭性編程數(shù)據(jù)。
為每個問題從模型中生成非常多的樣本。
對樣本進行過濾,以獲得一小部分候選提交的樣本(最多 10 個),在隱藏的測試案例上進行評估,方法是利用實例測試和聚類,根據(jù)程序行為挑選樣本。
總而言之,通過將大規(guī)模 Transformer 模型與大規(guī)模采樣和過濾相結(jié)合,DeepMind 在可以解決的問題數(shù)量方面取得了重大進展,比之前的工作高出一個數(shù)量級。
刷題人士抵觸
正如 Codeforces 創(chuàng)始人所說,在編程問題中對算法的發(fā)明創(chuàng)造是最難的。
在全球編程比賽網(wǎng)站上常年排名前幾的谷歌工程師 Petr Mitrichev 說:解決編程比賽問題是一件非常困難的事情。它既需要良好的代碼技能,也需要人類解決問題的創(chuàng)造力。
AlphaCode 不是第一個編程工具,Codex 以及 GitHub Copilot 都給人留下了深刻的印象。
但 DeepMind 認(rèn)為,AlphaCode 和前輩們大有不同:最近的大規(guī)模語言模型展示了生成代碼的驚人能力,現(xiàn)在能夠完成簡單的編程任務(wù)。然而,當(dāng)對更復(fù)雜、看不見的問題進行評估時,這些模型的表現(xiàn)仍然很差,這些問題需要解決問題的技能,而不僅僅是將指令翻譯成代碼。
與 Twitter 上截然不同的是,Codeforces 高手們卻多有抵觸情緒。
一位程序員認(rèn)為:“這個 AI 真是個菜鳥?!?/p>
因為 AlphaCode 只有 1238 分,只相當(dāng)于一個學(xué)生水平,一個參加信息學(xué)奧賽的中學(xué)生也能刷到這個水平。
雖然 DeepMind 聲稱 AlphaCode 是為了輔助人類,但也有程序員開始擔(dān)心了:
現(xiàn)在連刷題的世界都被 AI 占領(lǐng),本來這里是程序員們切磋的地方,AI 應(yīng)該適可而止,給程序員們留一片凈土吧!
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。