AI模型參數,OpenAI Codex顯示了大型語言模型的局限性
AI模型參數,OpenAI Codex顯示了大型語言模型的局限性
?本文來自 Ben Dickson
在一篇新論文中,OpenAI的研究人員揭示了Codex的細節,Codex是一種生成軟件源代碼的深度學習模型。Codex為Copilot提供動力,這是OpenAI和GitHub聯合開發的“人工智能配對程序員”工具。副駕駛目前只對有限的用戶開放beta測試模式。
這篇論文很有意思,它解釋了OpenAI的科學家們設法重新利用他們的旗艦語言模型GPT-3來創建Codex的過程。但更重要的是,這篇論文也闡明了深度學習在編程中的可信度。
“沒有免費的午餐”定理?
Codex是GPT-3的下一代產物。GPT-3是去年發布的大規模深度學習語言模型,深度學習模型的復雜性通常是通過其參數的數量來衡量的。一般來說,模型的學習能力隨著參數的增加而增加。GPT-3有1750億個參數,比它的前身GPT-2(15億個參數)多了兩個數量級。GPT-3的訓練數據集超過600GB,比GPT-2的訓練數據集大50多倍。
除了規模上的增長外,GPT-3的主要創新是“few-shot學習”,即執行沒有經過訓練的任務的能力。介紹GPT-3的文章標題是“語言模型是few-shot學習者”,并指出:“在這里我們表明,擴展語言模型極大地提高了任務無關性、少鏡頭的性能[重點挖掘],有時甚至達到了現有最先進的微調方法的競爭力。”
基本上,前提是一個在大型文本語料庫上訓練的足夠大的模型可以匹配或優于幾個專門用于特定任務的模型。
但根據OpenAI的新論文,各種版本的GPT-3都無法解決用于評估Codex的編碼問題。公平地說,GPT-3的訓練數據集中沒有編碼樣本,所以我們不能期望它能夠編碼。但是OpenAI的科學家們也測試了GPT-J,一個在the Pile上訓練的60億個參數的模型。the Pile是一個800GB的數據集,其中包括95GB的GitHub和32GB的StackExchange數據。GPT-J解決了11.4%的編碼問題。Codex是GPT-3的120億個參數的一個版本,在GitHub的159GB代碼示例上進行了微調,解決了28.8%的問題。Codex的另一個版本,稱為Codex- s,通過監督學習進行了優化,將性能提高到了37.7%(其他GPT和Codex模型都是通過無監督學習進行訓練的)。
AI模型參數、?Codex證明了機器學習仍然受制于“沒有免費的午餐”定理(NFL),這意味著泛化是以犧牲性能為代價的。換句話說,當機器學習模型被設計用來解決一個特定問題時,它們會更加準確;另一方面,當他們的問題范圍擴大時,他們的性能就會下降。
Codex可以以較差的自然語言處理能力為代價,高精度地執行一項專門任務(將功能描述和簽名轉換為源代碼)。另一方面,GPT-3是一種通用語言模型,它可以生成關于許多主題(包括復雜的編程概念)的像樣的文本,但不能編寫一行代碼。
大小VS成本
?OpenAI研究人員的實驗表明,隨著機器學習模型規模的增加,Codex的性能得到了改善。在3億參數的情況下,Codex解決了13.2%的評估問題,而120億參數模型的性能為28.8%。
但是GPT-3的完整版本是1750億個參數,比用來創建Codex的參數大了一個數量級。在Codex的訓練數據上訓練更大的模型不會產生更好的結果嗎?
一個可能的原因是數據集的大小。更大的Codex模型需要更大的數據集,在159GB的語料庫上進行訓練可能會導致過度擬合,模型變得非常擅長記憶和排練訓練實例,而在處理新情況方面則非常糟糕。收集和維護更大的數據集是一個昂貴和耗時的過程。
同樣令人煩惱的問題是Codex的成本。除了一項科學實驗,Codex本應成為未來產品的支柱,該產品可以為商業實體準所有的研究實驗室帶來利潤。正如我之前已經討論過的,培訓和運行1750億GPT-3模型的成本將使圍繞它開發一個盈利的商業模式變得非常困難。
然而,一個更小但微調版本的GPT-3在利潤和損失方面將更易于管理。
最后,OpenAI的實驗表明,Codex的規模/性能比率遵循對數尺度。這意味著隨著模型規模的增加,性能收益逐漸減少。因此,收集數據、培訓和運行更大的模型所增加的成本可能抵不上小小的性能提升。
請注意,代碼生成是一個非常有利可圖的市場。考慮到程序員的高時薪,即使每月節省幾個小時的編碼時間,也足以支付Codex的訂閱費。在其他勞動力成本較低的領域,使用大型語言模型實現任務自動化從利潤和損失的角度來看將更具挑戰性。
生成VS理解代碼
ai語言是什么,?需要提醒的一件事是,無論Codex的輸出多么吸引人,深度學習模型并不理解編程。與所有其他基于深度學習的語言模型一樣,Codex正在捕捉代碼片段之間的統計相關性。
OpenAI的科學家們在論文中承認,Codex“并不是高效的樣本訓練”,而且“即使是經驗豐富的開發人員在他們的職業生涯中也不會遇到這么多代碼”。
他們進一步補充說,“一個完成了計算機科學入門課程的優秀學生,預計能夠解決比Codex-12B更大比例的問題。”
“我們從Codex中對令牌進行抽樣,直到遇到以下停止序列之一:' \nclass ', ' \ndef ', ' \n# ', ' \nif ',或' \nprint ',因為模型將繼續生成其他函數或語句。”
這意味著Codex將盲目地繼續生成代碼,即使它已經完成了解決提示中所述問題的部分。
當你想要解決反復出現的簡單問題時,這種方案非常有效。但是當你縮小并試圖編寫一個大型程序來解決一個必須通過多個步驟來解決的問題時,Codex的局限性就變得明顯了。
OpenAI的科學家們發現,隨著功能描述中組件數量的增加,模型的性能呈指數級下降。
研究人員在他們的論文中寫道:“這種行為不是人類程序員的特征,如果一個人能夠正確地為一個長度為2的鏈執行程序,那么他就應該能夠正確地為一個任意長度的鏈執行程序。”
?進一步暴露Codex對程序結構和代碼缺乏理解的事實是,“Codex可以推薦語法不正確或未定義的代碼,可以調用未定義或超出代碼庫范圍的函數、變量和屬性”。實際上,這意味著在某些情況下,即使它們并不適合在一起,機器學習模型會將之前見過的不同代碼片段拼接在一起。
在論文中,研究人員還討論了Codex中的“錯位”問題,即該模型可以解決一個特定的問題,但由于各種錯誤而不能這樣做。Codex使用您正在處理的文件的內容作為上下文來生成其輸出。研究人員警告說,如果你的代碼包含微妙的錯誤(如果你是一個人類程序員,這是很正常的),Codex可能“故意”建議代碼表面上看起來很好,但實際上是不正確的。
不對準是一個有趣的現象,需要進一步研究。但OpenAI的實驗進一步表明,“如果數據、參數和訓練時間按比例放大,可能失調會持續下去,甚至變得更糟。”這可能是保持模型在120億個參數下尺寸平衡的另一個原因。
這篇文章還廣泛討論了Codex產生過時和脆弱代碼的可能性。
?使用和報告人工智能的責任
就像我在《Copilot》發布后說的,GitHub網頁上的“副駕駛”一詞是不準確的。
Codex不是程序員。它也不會奪走你的工作(如果你是程序員)。編碼只是程序員工作的一部分。OpenAI的科學家們觀察到,在目前的狀態下,Codex“可能通過提高程序員的工作效率在某種程度上降低了軟件生產的成本”,但它不會取代軟件開發人員經常做的其他任務,比如“與同事協商、編寫設計規范、升級現有軟件堆棧”。
將Codex誤認為程序員也會導致“過度依賴”,即程序員會盲目地認可模型生成的任何代碼,而不去修改它。鑒于Codex可能犯下的明顯和微妙的錯誤,忽視這一威脅可能會帶來質量和安全風險。OpenAI的研究人員在論文中警告說:“安全使用Codex這樣的代碼生成系統需要人類的監督和警惕。”?
總的來說,程序員社區的反應表明Codex是一個非常有用的工具,可能會對軟件行業的未來產生巨大的影響。與此同時,考慮到《Copilot》發行的大肆宣傳,理解其不必要的含義是很重要的。在這方面,值得贊揚的是OpenAI負責任地研究、記錄和報告Codex的限制和威脅。