目錄
程式設計競賽有啥難的?
AlphaCode的學習系統
首頁 科技週邊 人工智慧 超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

Apr 30, 2023 pm 01:19 PM
程式設計 ai

這個12月,正當OpenAI的ChatGPT勢頭正旺時,那個曾經卷趴一半程式設計師的AlphaCode登上Science封面了!

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

論文連結:https://www.science.org/doi/10.1126/science.abq1158

#說到AlphaCode,想必大家並不陌生。

早在今年2月,它就在著名的Codeforces上,悄悄地參加了10場程式設計比賽,並一舉擊敗了半數的人類碼農。

卷趴一半碼農

我們都知道,程式設計師中非常流行這樣一種測試-程式設計競賽。

在競賽中,主要考察的就是程式設計師透過經驗進行批判性思維,為不可預見的問題創造解決方案的能力。

這體現了人類智慧的關鍵,而機器學習模型,往往很難模仿這種人類智慧。

但DeepMind的科學家們,打破了這個規律。

YujiA Li等人,使用自監督學習和編​​碼器-解碼器轉換器架構,開發出了AlphaCode。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

AlphaCode的開發工作,還是在居家期間完成的

雖然AlphaCode也是基於標準的Transformer編解碼器架構,但DeepMind對它進行了「史詩級」的強化-

它使用基於Transformer的語言模型,以前所未有的規模生成程式碼,然後巧妙地篩選了一小部分可用的程式。

具體步驟為:

1)多問詢注意力:讓每個注意力區塊共用鍵和值的頭,並同時結合編碼器-解碼器模型,使AlphaCode的取樣速度提高了10倍以上。

2) 掩碼語言建模(MLM):透過在編碼器上加入一個MLM損失,來提高模型的解決率。

3)回火:讓訓練分佈更尖銳,從而防止過度擬合的正規化效應。

4)值調節與預測:透過區分CodeContests資料集中正確和錯誤的問題提交,來提供一個額外的訓練訊號。

5)示範性異策略學習產生(GOLD):透過將訓練的重點放在每個問題最可能的解決方案上,讓模型為每個問題產生正確方案。

結果嘛,大家都知道了。

憑藉著1238的Elo得分,AlphaCode讓自己在這10場比賽中的排名達到了前54.3%。放眼之前的6個月,這成績更是達到了前28%。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

要知道,為了達到這個排名,AlphaCode必須「過五關斬六將」,解決融合了批判性思維、邏輯、演算法、編碼和自然語言理解相結合的種種新問題。

從結果來看,AlphaCode不僅解決了CodeContests資料集中29.6%的程式設計問題,而且其中有66%是在第一次提交時解決的。 (總提交次數限制在10次)

相比起來,傳統的Transformer模型求解率都比較低,只有個位數。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

對於這個結果,就連Codeforces創辦人Mirzayanov都非常驚訝。

畢竟,程式設計比賽考驗的是發明演算法的能力,這一直是AI的弱項,人類的強項。

我可以肯定地說,AlphaCode的結果超出了我的預期。開始我持懷疑態度,因為即使在簡單的競賽問題中,不僅需要實施演算法,而且還需要發明演算法(這是最困難的部分)。 AlphaCode已經讓自己成為許多人類的強大對手。我迫不及待地想知道,未來會發生什麼事!

——Mike Mirzayanov,Codeforces 創辦人

所以,AlphaCode這是能搶程式設計師的飯碗了?

當然還不行。

AlphaCode還只能完成簡單的程式設計任務,如果任務變得更複雜,問題更加「不可預見」,只會將指令翻譯成程式碼的AlphaCode就束手無策了。

畢竟,1238的分數從某個角度來說,也就相當於一個初學程式的中學生菜鳥的等級。這個level,還威脅不到真正的程式設計大牛。

但毫無疑問的是,這類編碼平台的開發,會對程式設計師的生產力產生巨大的影響。

甚至,整個程式設計文化都可能會被改變:或許,以後人類只要負責制定問題就可以,而產生和執行程式碼的任務,就可以交給機器學習了。

程式設計競賽有啥難的?

我們知道,雖然機器學習在生成和理解文字方面取得了巨大進步,但是大部分AI目前仍然局限於簡單的數學和程式設計問題。

它們會做的,更多是檢索和複製現有的方案(這一點相信最近玩過ChatGPT的人都深有體會)。

那麼,讓AI學習產生正確的程序,為什麼這麼困難呢?

1.  要產生解決指定任務的程式碼,就需要在所有可能的字元序列中搜索,這是一個海量的空間,而其中只有一小部分對應有效的正確程式.

2. 、一個字元的編輯,可能會完全改變程式的行為,甚至會導致崩潰,而且每個任務都有許多截然不同的有效解決方案。

對於難度極高的程式設計比賽,AI需要理解複雜的自然語言描述;需要對以前從未見過的問題進行推理,而不是簡單地記住程式碼片段;需要掌握各種演算法和資料結構,並精確地完成可能長達數百行的程式碼。

此外,為了評估自己產生的這些程式碼,AI還需要在一套詳盡的隱藏測試上執行任務,並且檢查執行速度和邊緣情況的正確性。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

(A)問題1553D,中等難度評分為1500;(B)AlphaCode產生的問題解決方案

就拿這個1553D問題來說,參賽者需要找到一個方法,使用一組有限的輸入將一串隨機重複的s和t字母轉換成另一串相同的字母。

參賽者不能只是輸入新的字母,而必須使用「退格」指令刪除原始字串中的幾個字母。賽題具體如下:

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

對此,AlphaCode給出的解決方案如下:

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

並且,AlphaCode的「解題思路」也不再是黑箱,它還能顯示程式碼和注意力高亮的位置。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

AlphaCode的學習系統

#參加程式設計比賽時,AlphaCode面臨的主要挑戰是:

#(i)需要在巨大的程式空間中搜索,(ii)只能獲得約13,000個用於訓練的範例任務,以及(iii)每個問題的提交數量有限。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

為了回應這些問題,AlphaCode整個學習系統​​的建構分為三個環節,預訓練、微調、取樣與評估,如上圖所示。

預訓練

#在預訓練階段,利用在GitHub收集的715GB人類碼農的程式碼快照,對模型進行預訓練,並使用交叉熵next-token預測損失。在預訓練過程中,隨機地將程式碼檔案分成兩部分,將第一部分當作編碼器的輸入,並訓練模型去掉編碼器產生第二部分。

這種預訓練為編碼學習了一個強大的先驗,使隨後的特定任務的微調能夠在一個更小的資料集上進行。

微調

#在微調階段,在一個2.6GB的競爭性程式設計問題資料集上對模型進行了微調和評估,資料集是DeepMind創建的,命名為CodeContests公開發布。

CodeContests資料集中包括問題以及測試案例。訓練集包含13,328個問題,每個問題平均有922.4個提交答案。驗證集和測試集分別包含117個和165個問題。

在微調過程中,將自然語言的問題陳述編碼為程式註釋,以使其看起來與預訓練期間看到的檔案更加相似(其中可以包括擴展的自然語言註釋),並使用相同的next-token預測損失。

取樣

為了選出10個最好的樣本進行提交,採用過濾和聚類的方法,利用問題陳述中包含的例子測試來執行樣本,並刪除未能通過這些測試的樣本。

透過過濾篩除了近99%的模型樣本,再對剩下的候選樣本進行聚類,在一個單獨的transformer模型產生的輸入上執行這些樣本,並將在產生的輸入上產生相同輸出的程式歸為一類。

然後,從10個最大的聚類中各挑選一個樣本來提交。直觀地說,正確的程序行為相同,並形成大的聚類,而不正確的程序的失敗方式是多種多樣的。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

評估

上圖所示為在10@k指標上,模型性能是如何隨著更多的樣本量和計算量而變化的。從對採樣結果的效能評估來看,研究人員得出了以下4點結論:

#1. 解決率隨著更大的樣本量而呈對數線性擴展;

2. 更好的模型在比例曲線上有較高的斜率;

#

3. 解決率與更多的計算量呈對數線性比例;

4. 樣本選擇對解決率的擴展至關重要。

純粹的「資料驅動」

#毫無疑問,AlphaCode的提出,代表了機器學習模型在發展上已經邁出了實質的一步。

有趣的是,AlphaCode並不包含關於電腦程式碼結構的明確的內建知識。

相反,它依靠一種純粹的「資料驅動」方法來編寫程式碼,也就是透過簡單地觀察大量現有程式碼來學習電腦程式的結構。

超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師

文章網址:https://www.science.org/doi/10.1126/science.add8258

#從根本上說,使AlphaCode在競爭性程式設計任務上勝過其他系統的原因歸結為兩個主要屬性:

##1. 訓練資料

2. 候選解決方案的後處理

#但電腦程式碼是一個高度結構化的媒介,程式必須遵守定義的語法,並且必須在解決方案的不同部分中產生明確的前、後條件。

而AlphaCode在產生程式碼時所採用的方法,卻和產生其他文字內容時完全一樣-一次一個token,並且只在整個程式寫完後檢查程式的正確性。

鑑於適當的資料和模型的複雜性,AlphaCode可以產生連貫的結構。然而,這個順序生成程序的最終配方被深埋在LLM的參數中,難以捉摸。

不過,無論AlphaCode是否真的能「理解」程式設計問題,它的確在程式碼競賽方面達到了人類的平均水準。

「解決程式設計競賽的問題是一件非常困難的事情,需要人類具有良好的編碼技能和解決問題的創造力。AlphaCode能夠在這一領域取得進展,給我留下了深刻的印象,我很高興看到,該模型如何利用其語句理解來生成程式碼,並引導其隨機探索以創建解決方案。」

                  -Petr Mitrichev,Google軟體工程師和世界級競技程式設計師

AlphaCode在程式設計競賽中名列前54%,展現了深度學習模式在需要批判性思維的任務中的潛能。

這些模型優雅地利用現代機器學習,將問題的解決方案表達為程式碼,這就回到幾十年前AI的符號推理根源。

而這,只是一個開始。

在未來,還會誕生更多解決問題的強大AI,或許這一天已經不遠了。

以上是超級編程AI登上Science封面! AlphaCode程式設計大賽卷趴一半程式設計師的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
C  中的chrono庫如何使用? C 中的chrono庫如何使用? Apr 28, 2025 pm 10:18 PM

使用C 中的chrono庫可以讓你更加精確地控制時間和時間間隔,讓我們來探討一下這個庫的魅力所在吧。 C 的chrono庫是標準庫的一部分,它提供了一種現代化的方式來處理時間和時間間隔。對於那些曾經飽受time.h和ctime折磨的程序員來說,chrono無疑是一個福音。它不僅提高了代碼的可讀性和可維護性,還提供了更高的精度和靈活性。讓我們從基礎開始,chrono庫主要包括以下幾個關鍵組件:std::chrono::system_clock:表示系統時鐘,用於獲取當前時間。 std::chron

如何理解C  中的DMA操作? 如何理解C 中的DMA操作? Apr 28, 2025 pm 10:09 PM

DMA在C 中是指DirectMemoryAccess,直接內存訪問技術,允許硬件設備直接與內存進行數據傳輸,不需要CPU干預。 1)DMA操作高度依賴於硬件設備和驅動程序,實現方式因係統而異。 2)直接訪問內存可能帶來安全風險,需確保代碼的正確性和安全性。 3)DMA可提高性能,但使用不當可能導致系統性能下降。通過實踐和學習,可以掌握DMA的使用技巧,在高速數據傳輸和實時信號處理等場景中發揮其最大效能。

怎樣在C  中處理高DPI顯示? 怎樣在C 中處理高DPI顯示? Apr 28, 2025 pm 09:57 PM

在C 中處理高DPI顯示可以通過以下步驟實現:1)理解DPI和縮放,使用操作系統API獲取DPI信息並調整圖形輸出;2)處理跨平台兼容性,使用如SDL或Qt的跨平台圖形庫;3)進行性能優化,通過緩存、硬件加速和動態調整細節級別來提升性能;4)解決常見問題,如模糊文本和界面元素過小,通過正確應用DPI縮放來解決。

C  中的實時操作系統編程是什麼? C 中的實時操作系統編程是什麼? Apr 28, 2025 pm 10:15 PM

C 在實時操作系統(RTOS)編程中表現出色,提供了高效的執行效率和精確的時間管理。 1)C 通過直接操作硬件資源和高效的內存管理滿足RTOS的需求。 2)利用面向對象特性,C 可以設計靈活的任務調度系統。 3)C 支持高效的中斷處理,但需避免動態內存分配和異常處理以保證實時性。 4)模板編程和內聯函數有助於性能優化。 5)實際應用中,C 可用於實現高效的日誌系統。

怎樣在C  中測量線程性能? 怎樣在C 中測量線程性能? Apr 28, 2025 pm 10:21 PM

在C 中測量線程性能可以使用標準庫中的計時工具、性能分析工具和自定義計時器。 1.使用庫測量執行時間。 2.使用gprof進行性能分析,步驟包括編譯時添加-pg選項、運行程序生成gmon.out文件、生成性能報告。 3.使用Valgrind的Callgrind模塊進行更詳細的分析,步驟包括運行程序生成callgrind.out文件、使用kcachegrind查看結果。 4.自定義計時器可靈活測量特定代碼段的執行時間。這些方法幫助全面了解線程性能,並優化代碼。

量化交易所排行榜2025 數字貨幣量化交易APP前十名推薦 量化交易所排行榜2025 數字貨幣量化交易APP前十名推薦 Apr 30, 2025 pm 07:24 PM

交易所內置量化工具包括:1. Binance(幣安):提供Binance Futures量化模塊,低手續費,支持AI輔助交易。 2. OKX(歐易):支持多賬戶管理和智能訂單路由,提供機構級風控。獨立量化策略平台有:3. 3Commas:拖拽式策略生成器,適用於多平台對沖套利。 4. Quadency:專業級算法策略庫,支持自定義風險閾值。 5. Pionex:內置16 預設策略,低交易手續費。垂直領域工具包括:6. Cryptohopper:雲端量化平台,支持150 技術指標。 7. Bitsgap:

給MySQL表添加和刪除字段的操作步驟 給MySQL表添加和刪除字段的操作步驟 Apr 29, 2025 pm 04:15 PM

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優化查詢性能和數據結構;刪除字段前需確認操作不可逆;使用在線DDL、備份數據、測試環境和低負載時間段修改表結構是性能優化和最佳實踐。

deepseek官網是如何實現鼠標滾動事件穿透效果的? deepseek官網是如何實現鼠標滾動事件穿透效果的? Apr 30, 2025 pm 03:21 PM

如何實現鼠標滾動事件穿透效果?在我們瀏覽網頁時,經常會遇到一些特別的交互設計。比如在deepseek官網上,�...

See all articles