人工智慧(AI)的飛速發展有目共睹,如今,AI 在下圍棋、玩星際爭霸等遊戲、生成藝術作品、甚至是優化微晶元的架構等方面都達到或超過了人類的水平。接下來,AI 會在編程方面也超過人類嗎?
事實上,自動化編程已經不是一個新鮮話題。今天已經有一些功能強大的大規模語言模型,在網頁設計等簡單的編程任務中,展現出了在代碼生成方面的潛力。然而,要想讓 AI 通過編程來解決那些較為複雜且隱晦的問題,仍有很長的路要走。
而最近來自DeepMind 開發的名為 AlphaCode 的系統,可通過基於轉換器的語言模型來生成代碼,並且針對那些需要深度推理的編程問題,能夠創建新穎的解決方案。在 10 場有 5000 多名人類參與者的競賽級別的編程比賽中,AlphaCode 排名位於前 54.3%。也就是說,其已達到了平均人類水平。
近日,相關論文以《可實現完成競賽級別的代碼生成任務的 AlphaCode》(Competition-level code generation with AlphaCode)為題發表在 Science,並成為當期封面論文[1]。
圖 | AlphaCode 相關論文(來源:Science)
讓 AI 實現編程有著許多挑戰,尤其是即使對於同一個問題,可提供的解決方案也可能看起來截然不同,而如何讓 AI 對部分正確或不正確的程序進行判斷,是一項艱巨的挑戰。
此前已經有一些可完成簡單編程任務的 AI 系統,例如 Codex 可以完成簡短的敘述總結等任務。但是,當真正面對複雜的編程問題,這些 AI 系統便顯得捉襟見肘。尤其是如何讓 AI 編程,使用 C++ 或 Python 等通用編程語言來生成整個程序,來解決諸如較長的自然語言描述任務等,在這方面一直進展不多。
為解決這一問題,DeepMind 為 AlphaCode 設置了以下三個關鍵組件,使其得以在代碼生成任務中實現可以與人類競爭的水平:一是選用廣泛且簡潔的競爭性編程數據集,以便進行訓練和評估;二是採用大型、且具備高效採樣能力的架構;三是通過大規模模型抽樣來縮小探索空間,並根據程序行為對一小組提交內容進行過濾。
AlphaCode 訓練時所選擇的數據集,是競爭性的編程數據集。該數據集也正是這些複雜編程問題的代表集,AI 不僅需要理解複雜的自然語言描述,對以前未見過的問題進行推理,還要掌握範圍廣泛的演算法和數據結構,並能精確地實施跨越數百行的解決方案。此外,由於每年都有全球數十萬編程者廣泛參與,因此競爭性編程問題集可以更好地確保針對問題找到最佳解決捷徑,從而提供更好的判別基準。
圖 | AlphaCode 系統的概述(來源:arXiv)
如上圖所示,是 AlphaCode 系統的概述,簡單來說系統工作主要分為以下四個過程:
首先,系統會在有著標準語言建模目標的 GitHub 代碼集上,對基於轉換器的語言模型進行預訓練。這樣模型便可實現合理地將問題在人類的編碼空間定位,從而大大減少了問題搜索範圍。
然後,系統以 GOLD 作為訓練目標,在競爭性編程數據集上進行模型的微調。這可以進一步將搜索空間縮小,並可以通過預訓練來補償少量的競爭性編程數據。
接下來,系統會為每個問題生成大量樣本。
最後,系統對這些樣本進行過濾,並獲得數量不超過 10 個的一小組候選樣本提交。然後通過使用示例測試和聚類等,對所選樣本進行隱藏的測試評估,然後根據程序的反饋來選擇樣本。
可以看出 AlphaCode 中有個獨特的設置,就是在大規模採樣後進行過濾,這大大提高了問題解決率,能夠促進更快捷、高效的採樣。
為了對 AlphaCode 的性能進行評估,研究人員將其在著名的編程競賽 Codeforces 和 CodeContests 平台上進行了評估。
圖 | AlphaCode 系統在 10 次 Codeforces 中的排名(越低越好)(來源:arXiv)
經過評估,AlphaCode 系統在 10 次 Codeforces 競賽中,平均排名可達到前 54.3%,也就是已經與平均人類編程者的水平。
概括來說,此次人工智慧輔助編碼平台的開發,會顯著提高程序員的生產力。同期Science 評論中寫道:「它代表了機器學習模型向前邁出的實質性一步,該模型可以通過合成計算機程序來解決一些挑戰性問題。」另據悉,論文作者告訴媒體,雖然 AlphaCode 是從 0% 到 30% 的重要一步,但仍有很多工作要做,下一步其將繼續完善 AlphaCode。
參考資料
1.Yujia Li et al. Science 378, 6624,1092-1097(2022).DOI: 10.1126/science.abq1158