近日,OpenAI帶著他們最新、最神自動編碼神器Codex霸榜各大科技媒體頭條,我們知道OpenAI是微軟投資的通用人工智能平臺,而GitHub是微軟旗下的代碼托管平臺,這樣微軟出算力、OpenAI出技術(shù)、GitHub出代碼的AI編程鐵三角就產(chǎn)生了,在發(fā)布了AI自動輔助編程工具Copilot之后,能夠自動寫代碼的Codex也正式登場了。與Copilot一樣,Codex也是在GPT-3的基礎(chǔ)上構(gòu)建而成,可以將英文的需求描述直接轉(zhuǎn)換為代碼。 雖然目前AI自動編碼水平還更像一個華而不實的噱頭,但這項技術(shù)的發(fā)展卻給程序員們敲響了警鐘,在未來,“我有個創(chuàng)意,就差個程序員”的說法是否會演變成“只要有創(chuàng)意,根本不需要什么程序員”,的確值得我們思考。 Codex的前世今生 Codex要從GPT-3(論文地址:https:///abs/2005.14165)說起,GPT-3的出現(xiàn)充分證明大力就是能夠出奇跡,這個訓(xùn)練集45TB,參數(shù)規(guī)模1750億,預(yù)訓(xùn)練結(jié)果700G的AI模型一經(jīng)問世就成為了大眾矚目的焦點。一時之間用GPT-3作詩、作曲乃至畫畫的應(yīng)用層出不窮,而Codex的前身應(yīng)該算是那個能夠自動生成代碼的網(wǎng)站debuid.co(https:///)。 在debuild注冊以后,用戶只要用英語描述需求,相關(guān)前端的代碼就會被自動生成出來了,筆者這種在IT界摸爬滾打十幾年的老程序員,在一年前試用debuild時也驚得說不出話來,當(dāng)然這個網(wǎng)站只是曇花一現(xiàn),目前已經(jīng)基本處于純關(guān)閉狀態(tài)。 不過這次的Codex明顯是更猛的,它能準(zhǔn)確Get到自然語言描述的需求,并生成有一定復(fù)雜邏輯代碼,比如下面這個游戲。 奇跡創(chuàng)造者OpenAI 說起OpenAI最源依靠AI游戲強(qiáng)化學(xué)習(xí)模型gym(https://github.com/openai/gym)在業(yè)界抱得大名,翻開OpenAI (https://www./)的主頁,你會發(fā)現(xiàn)他們除了做游戲AI,還做這種自動玩魔方的機(jī)器人。 不過在NLP領(lǐng)域OpenAI迎來了華麗的轉(zhuǎn)身,雖然本次Codex論文的正式版還沒發(fā)出,但是本質(zhì)上講Codex只是個編碼專用版的GPT-3,OpenAI在GPT-3在論文開頭就直接指出,通過對大量文本進(jìn)行預(yù)訓(xùn)練,并且針對特定任務(wù)進(jìn)行微調(diào),模型的性能可以在許多NLP任務(wù)以及基準(zhǔn)測試中獲得顯著提升。如圖所示,X軸代碼模型的參數(shù)數(shù)量級而縱軸代表準(zhǔn)確率,可以看到,模型規(guī)模越大,準(zhǔn)確率也會隨之升高,尤其是在參數(shù)規(guī)模達(dá)到13億以后,準(zhǔn)確率提升的速度還會更快。簡單講也就是說GPT-3的決勝之道在于,其模型的訓(xùn)練集特別大,參數(shù)茫茫多。 GPT-3與GPT-2使用了相同的模型和架構(gòu),包括改進(jìn)的初始設(shè)置、預(yù)歸一化和 reversible tokenization。GPT-3最主要提升點在于其在transformer的各層上都使用了交替密集和局部帶狀稀疏的注意力模式,我們知道理解自然語言需要注意最相關(guān)的信息。例如,在閱讀過程中,人們傾向于把注意力集中在最相關(guān)的部分來尋找問題的答案。然而,如果不相關(guān)的片段對閱讀理解產(chǎn)生負(fù)面影響,就會阻礙理解的過程,而理解過程需要有效的注意力。這一原理同樣適用于自然語言的計算系統(tǒng)。注意力一直是自然語言理解和自然語言生成模型的重要組成部分。因此,交替密集和局部帶狀稀疏的注意力模式只關(guān)注k個貢獻(xiàn)最大的狀態(tài)。通過顯式選擇,只關(guān)注少數(shù)幾個元素,與傳統(tǒng)的注意方法相比,對于與查詢不高度相關(guān)的值將被歸0。 由于代碼規(guī)模遠(yuǎn)不如整體自然語言的規(guī)模大,因此Codex的規(guī)模僅有100多億,比GPT-3的1750億要少得多,不過正如我們上文演示中所展現(xiàn)的,它的效果還不錯。 新時代到底需要什么樣的程序員 最新上線的代碼Codex可能只是OpenAI的一次嘗試而已,直接根據(jù)產(chǎn)品經(jīng)理的需求描述,生成全套可執(zhí)行的代碼,似乎并不是GPT-3這種基于已有代碼進(jìn)行訓(xùn)練的模型所能達(dá)到的高度,本質(zhì)上Codex不創(chuàng)造代碼,而只是代碼的搬運工,這也就決定了它只能對以往代碼進(jìn)行模仿,卻很難有創(chuàng)造性的突破,因此想讓AI獨立完成編碼任務(wù)似乎不太現(xiàn)實,未來AI與人類程序員配合,由人類程序員完成功能模塊的一部分,再由AI幫助續(xù)寫剩余代碼,似乎才是合理選擇。 因此筆者認(rèn)為Copilot(https:///eWPueAXTFt)也就是“程序員結(jié)對編程實踐中的AI對手”,可能在未來的發(fā)展空間會更大,很多時候開發(fā)者只需要提供函數(shù)簽名,Copilot就可以完成整個函數(shù)的代碼編寫了,有時甚至只需要一個簡單的注釋描述,Copilot就能把整個功能模塊全寫出來。 那么在這個AI自動編程的時代下,什么樣的程序員會更受歡迎呢? Ctrl+C/V式開發(fā)將迎末路,實力程序員將迎春天:根據(jù)OpenAI的官方說法Codex試圖理解需求描述中的邏輯,并盡可能生成最好的代碼,AI最擅長做的就是高度模仿之前大量存在過的類似代碼,因此如果是簡單的拷貝粘貼加修修補(bǔ)補(bǔ)式的開發(fā)方案,那么AI很可能比人類程序員做得更好。 因此這也要求人類程序員需要在更有創(chuàng)造力的領(lǐng)域繼續(xù)發(fā)揮作用,這也會帶來一個現(xiàn)象就是未來初級程序員的需求量會變少,而能與機(jī)器完美結(jié)對編程的大神級程序員會更加緊俏,不過問題也就隨之而來,程序員都是慢慢成長的,很難有人起步就是大神,初級崗位變少是否意味程序員群體的斷檔也值得觀察。 信息安全編程將更為緊俏專家:正如前文所說AI真正擅長的僅僅是對以往代碼的高度模仿,不過這個技能造成的問題就是AI很可能會引用舊的類庫或者軟件包,從而帶來安全隱患。因此即便AI生成的代碼能夠正常運行,也不能代表這些代碼沒有安全漏洞,這就很可能為黑客們創(chuàng)造各種可逞之機(jī),同時也給信息安全領(lǐng)域的專家提供更大的空間。 最后的靈魂拷問,使用開源代碼訓(xùn)練的Codex是否有原罪 不少的開源項目都是禁止將代碼用于商業(yè)用途的,而用這部分不應(yīng)用于商業(yè)的代碼去訓(xùn)練收費AI模型,這種做法真的合適嗎?正如前文所說GPT-3能夠成功依靠就是海量的訓(xùn)練集,而Codex的訓(xùn)練代碼由公開來源的英語注釋及源代碼而來,這其中包括了GitHub上公共存儲庫中的源代碼及注釋,而且種種跡象表明Codex的訓(xùn)練代碼并沒有按照不同的開源許可證進(jìn)行區(qū)分對待。 如果AI最終給出的建議代碼與原先訓(xùn)練集中的代碼達(dá)到一定的相似度閾值,那就肯定會涉嫌侵權(quán),但AI生成的代碼與訓(xùn)練集代碼的相似度如何界定才是問題關(guān)鍵,當(dāng)然截止目前這還依舊是個開放性問題,業(yè)界尚未形成共識。 目前已經(jīng)有消息稱OpenAI已經(jīng)開始關(guān)注GPT-3及Codex有可能引發(fā)的道德風(fēng)險了,不過大的趨勢不可阻擋,坦率講,目前AI編碼并沒有迎來自己的阿爾法狗時刻,在現(xiàn)有模式下,AI編碼最多只能達(dá)到初級程序員的水平,而沒有任何創(chuàng)造性,不過筆者也不能排除未來AI會完全拋棄人類的編程方式,走出自己的風(fēng)險甚至達(dá)到神之一手的水平的可能。因此AI程序員Codex的出現(xiàn)也給程序員們敲響了警鐘,至少只會復(fù)制粘貼的話在未來就很難保住飯碗了,程序員還要盡快擴(kuò)充自己的知識棧,盡快提升進(jìn)步才是王道。 |
|