微軟的研究部門發(fā)布了一篇關(guān)于預(yù)訓(xùn)練擴(kuò)散代碼模型CodeFusion的論文。在展示代碼生成任務(wù)的基線數(shù)據(jù)對比時(shí),發(fā)現(xiàn)了一個(gè)有趣的事情,ChatGPT(gpt-3.5-turbo)的參數(shù)只有200億。
要知道,gpt-3.5-turbo是OpenAI中應(yīng)用最多、最成熟的型號之一,而它的前任GPT-3.5已經(jīng)公布是1750億參數(shù)。如此小的參數(shù),在性能、效率方面比大參數(shù)的模型更強(qiáng),使用價(jià)格卻更低。
這也從側(cè)面驗(yàn)證了年初Meta首次開源Llama時(shí)的說法,小參數(shù)的模型在龐大、高質(zhì)量的數(shù)據(jù)集訓(xùn)練下,性能并不一定就比高參數(shù)的差。
事實(shí)上,很多國內(nèi)外知名的開源大模型項(xiàng)目如百川大模型、LLaMA-2、Falcon-40B等,在多個(gè)知名評測中擊敗了更高的參數(shù)模型,資源消耗卻更低。
論文地址:https://arxiv.org/abs/2310.17680
言歸正傳,繼續(xù)為大家介紹微軟發(fā)布的這個(gè)創(chuàng)新代碼模型CodeFusion。
GitHub Copilot Chat等產(chǎn)品已經(jīng)充分驗(yàn)證了大語言模型在編程領(lǐng)域的可行性和重要作用,通過文本描述就能快速生成各種類型代碼,極大提升了開發(fā)效率。
但是生成的代碼經(jīng)常會出現(xiàn)錯(cuò)誤、質(zhì)量不佳等難題,為了解決這一痛點(diǎn),微軟提出了創(chuàng)新代碼模型CodeFusion。
CodeFusion與傳統(tǒng)代碼模型不同的是,引入了“擴(kuò)散過程”模式,通過逐步添加噪聲,讓代碼從簡單向復(fù)雜過渡,然后再逐步減少噪聲回到純凈狀態(tài)。
受Midjourney等擴(kuò)散模型啟發(fā),研究人員設(shè)計(jì)了獨(dú)特的“去噪”機(jī)制,使得模型可以自動學(xué)習(xí)代碼語法,生成更精準(zhǔn)的高質(zhì)量代碼。
為了評估CodeFusion的效果,研究團(tuán)隊(duì)在多種編程語言上進(jìn)行了比較。包括Python、Bash和Excel公式。與T5、CodeT5、GPT-3、CodeGen等主流代碼生成模型相比, CodeFusion取得了驚人的效果,無論是單次生成的成功率,還是多次生成后正確代碼出現(xiàn)的概率,都有明顯的優(yōu)勢。
在Python語言上, CodeFusion的單次生成精確度達(dá)80.7%,超過了GPT-3;考慮前5次生成, CodeFusion包含正確代碼的概率高達(dá)90.3%,其它模型最高只達(dá)到85.8%。在Bash和Excel語言上, CodeFusion同樣表現(xiàn)出了強(qiáng)勁的性能。
在代碼多樣性測試中, CodeFusion生成的前5個(gè)候選代碼,新增代碼行覆蓋率達(dá)到81%,是其它模型的兩倍之多。
值得一提的是, CodeFusion只有7500萬參數(shù),遠(yuǎn)小于測試模型中的數(shù)十億、上百億甚至上千億參數(shù)模型。這也再次驗(yàn)證了上面所說的小參數(shù)模型,同樣可以比高參數(shù)模型性能更強(qiáng)。
CodeFusion評測數(shù)據(jù)
從論文介紹來看,CodeFusion的架構(gòu)主要包含編碼器、去噪器和解碼器三大模塊。
編碼器
編碼器的作用是將自然文本提問的編碼轉(zhuǎn)換成向量表示。編碼器會先將自然語言文本進(jìn)行分詞,然后輸入到一個(gè)預(yù)訓(xùn)練的轉(zhuǎn)換器編碼器中,例如T5的編碼器。每個(gè)詞會被映射為一個(gè)稠密的詞向量。
接著,轉(zhuǎn)換器編碼器會通過多層自注意力和前饋全連接網(wǎng)絡(luò),學(xué)習(xí)輸入文本的上下文語義信息,輸出文本的最終語義向量表示。主要技術(shù)關(guān)鍵點(diǎn)如下:
使用預(yù)訓(xùn)練模型:直接利用在大規(guī)模語料上預(yù)訓(xùn)練的編碼器,可以有效學(xué)習(xí)語義信息,無需從零訓(xùn)練。
輸出全局語義向量:通過自注意力捕獲輸入文本的全局上下文語義,不同位置的詞語都互相影響,最后形成整體的語義向量。
高效編碼:相比RNN等順序模型,轉(zhuǎn)換器編碼器可以高效并行計(jì)算,對長文本也有很強(qiáng)的建模能力。
去噪器
去噪器的作用是進(jìn)行擴(kuò)散過程,向編碼器輸出添加高斯噪聲。去噪器會首先隨機(jī)初始化一個(gè)噪聲向量,然后依據(jù)擴(kuò)散步數(shù),通過加權(quán)平均的方式,將編碼器輸出語義向量與噪聲向量融合,得到噪聲新增的隱狀態(tài)向量。
隨著迭代步數(shù)增加,融入的噪聲占比會漸漸增大,所以狀態(tài)向量會逐步偏離原始語義,加入更多隨機(jī)性。這模擬了物理擴(kuò)散過程。
去噪器的輸出是一個(gè)噪聲復(fù)雜程度逐步增強(qiáng)的狀態(tài)序列。這為解碼階段提供了一個(gè)從簡單到復(fù)雜的目標(biāo)函數(shù),使模型更容易優(yōu)化。
解碼器
解碼器需要逐步從復(fù)雜的噪聲狀態(tài)中,還原出編碼器對應(yīng)的源文本提示語義,以生成準(zhǔn)確、高質(zhì)量代碼。
解碼器會使用類似的轉(zhuǎn)換器結(jié)構(gòu),每一步接收上一步去噪器輸出的狀態(tài)向量,并結(jié)合源語義向量,通過自注意力學(xué)習(xí)狀態(tài)內(nèi)部的語義,并通過交叉注意力學(xué)習(xí)與源語義的匹配關(guān)系。
然后,解碼器需要預(yù)測從當(dāng)前狀態(tài)中需要減去的噪聲量,以獲得上一步的干凈狀態(tài)。重復(fù)這一過程,直到還原出源語義向量。
最后,解碼器完成從擴(kuò)散隱狀態(tài)到源語義再到代碼符號的映射,實(shí)現(xiàn)了從自然語言提示到代碼的轉(zhuǎn)換。
本文素材來源微軟CodeFusion論文,如有侵權(quán)請聯(lián)系刪除
未經(jīng)允許不得轉(zhuǎn)載:RPA中國 | RPA全球生態(tài) | 數(shù)字化勞動力 | RPA新聞 | 推動中國RPA生態(tài)發(fā)展 | 流 > ChatGPT參數(shù)只有200億?擴(kuò)散代碼模型,意外泄露
熱門信息
閱讀 (14728)
1 2023第三屆中國RPA+AI開發(fā)者大賽圓滿收官&獲獎(jiǎng)名單公示閱讀 (13753)
2 《Market Insight:中國RPA市場發(fā)展洞察(2022)》報(bào)告正式發(fā)布 | RPA中國閱讀 (13055)
3 「RPA中國杯 · 第五屆RPA極客挑戰(zhàn)賽」成功舉辦及獲獎(jiǎng)名單公示閱讀 (12964)
4 與科技共贏,與產(chǎn)業(yè)共進(jìn),第四屆ISIG中國產(chǎn)業(yè)智能大會成功召開閱讀 (11567)
5 《2022年中國流程挖掘行業(yè)研究報(bào)告》正式發(fā)布 | RPA中國