目錄
程式設計競賽有啥難的?
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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 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)

mysql 無法啟動怎麼解決 mysql 無法啟動怎麼解決 Apr 08, 2025 pm 02:21 PM

MySQL啟動失敗的原因有多種,可以通過檢查錯誤日誌進行診斷。常見原因包括端口衝突(檢查端口占用情況並修改配置)、權限問題(檢查服務運行用戶權限)、配置文件錯誤(檢查參數設置)、數據目錄損壞(恢復數據或重建表空間)、InnoDB表空間問題(檢查ibdata1文件)、插件加載失敗(檢查錯誤日誌)。解決問題時應根據錯誤日誌進行分析,找到問題的根源,並養成定期備份數據的習慣,以預防和解決問題。

了解 ACID 屬性:可靠數據庫的支柱 了解 ACID 屬性:可靠數據庫的支柱 Apr 08, 2025 pm 06:33 PM

數據庫ACID屬性詳解ACID屬性是確保數據庫事務可靠性和一致性的一組規則。它們規定了數據庫系統處理事務的方式,即使在系統崩潰、電源中斷或多用戶並發訪問的情況下,也能保證數據的完整性和準確性。 ACID屬性概述原子性(Atomicity):事務被視為一個不可分割的單元。任何部分失敗,整個事務回滾,數據庫不保留任何更改。例如,銀行轉賬,如果從一個賬戶扣款但未向另一個賬戶加款,則整個操作撤銷。 begintransaction;updateaccountssetbalance=balance-100wh

mysql 能返回 json 嗎 mysql 能返回 json 嗎 Apr 08, 2025 pm 03:09 PM

MySQL 可返回 JSON 數據。 JSON_EXTRACT 函數可提取字段值。對於復雜查詢,可考慮使用 WHERE 子句過濾 JSON 數據,但需注意其性能影響。 MySQL 對 JSON 的支持在不斷增強,建議關注最新版本及功能。

掌握SQL LIMIT子句:控制查詢中的行數 掌握SQL LIMIT子句:控制查詢中的行數 Apr 08, 2025 pm 07:00 PM

SQLLIMIT子句:控制查詢結果行數SQL中的LIMIT子句用於限制查詢返回的行數,這在處理大型數據集、分頁顯示和測試數據時非常有用,能有效提升查詢效率。語法基本語法:SELECTcolumn1,column2,...FROMtable_nameLIMITnumber_of_rows;number_of_rows:指定返回的行數。帶偏移量的語法:SELECTcolumn1,column2,...FROMtable_nameLIMIToffset,number_of_rows;offset:跳過

如何針對高負載應用程序優化 MySQL 性能? 如何針對高負載應用程序優化 MySQL 性能? Apr 08, 2025 pm 06:03 PM

MySQL數據庫性能優化指南在資源密集型應用中,MySQL數據庫扮演著至關重要的角色,負責管理海量事務。然而,隨著應用規模的擴大,數據庫性能瓶頸往往成為製約因素。本文將探討一系列行之有效的MySQL性能優化策略,確保您的應用在高負載下依然保持高效響應。我們將結合實際案例,深入講解索引、查詢優化、數據庫設計以及緩存等關鍵技術。 1.數據庫架構設計優化合理的數據庫架構是MySQL性能優化的基石。以下是一些核心原則:選擇合適的數據類型選擇最小的、符合需求的數據類型,既能節省存儲空間,又能提升數據處理速度

使用 Prometheus MySQL Exporter 監控 MySQL 和 MariaDB Droplet 使用 Prometheus MySQL Exporter 監控 MySQL 和 MariaDB Droplet Apr 08, 2025 pm 02:42 PM

有效監控 MySQL 和 MariaDB 數據庫對於保持最佳性能、識別潛在瓶頸以及確保整體系統可靠性至關重要。 Prometheus MySQL Exporter 是一款強大的工具,可提供對數據庫指標的詳細洞察,這對於主動管理和故障排除至關重要。

mysql 主鍵可以為 null mysql 主鍵可以為 null Apr 08, 2025 pm 03:03 PM

MySQL 主鍵不可以為空,因為主鍵是唯一標識數據庫中每一行的關鍵屬性,如果主鍵可以為空,則無法唯一標識記錄,將會導致數據混亂。使用自增整型列或 UUID 作為主鍵時,應考慮效率和空間佔用等因素,選擇合適的方案。

Navicat查看MongoDB數據庫密碼的方法 Navicat查看MongoDB數據庫密碼的方法 Apr 08, 2025 pm 09:39 PM

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

See all articles