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