【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(46)——Diffusion生成代碼?ChatGPT20B?
前幾天有一篇微軟的論文引起了研究人員的注意,雖然一部分人已經(jīng)知道了很多人真正關(guān)注的點(diǎn)。但是,這篇論文本身也很有意思,我們還是先介紹一下這篇文章,然后再討論最有意思的一個(gè)點(diǎn)。


1.用Diffusion模型生成代碼?
可能有人一上來(lái)就感到疑惑,特別是對(duì)AI有一定熟悉度的朋友,很多人也許會(huì)問(wèn)“Diffusion模型不是AI繪畫用的模型嗎?為什么拿來(lái)做自然語(yǔ)言處理的活了?”
哎,其實(shí)在前不久的一篇專欄中也提到了一個(gè)用語(yǔ)言模型生成圖片的工作:
【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(44)——語(yǔ)言模型戰(zhàn)勝了Diffusion?!
大家還是要建立一個(gè)認(rèn)識(shí),一套模型架構(gòu)不是只能針對(duì)同一種任務(wù)來(lái)設(shè)計(jì),況且很多任務(wù)之間都是有辦法相互轉(zhuǎn)化的,我在學(xué)神經(jīng)網(wǎng)絡(luò)初期也一度以為CNN(卷積神經(jīng)網(wǎng)絡(luò))就是只能在CV(計(jì)算機(jī)視覺(jué))領(lǐng)域用的,實(shí)際上NLP(自然語(yǔ)言處理)也可以用。
事實(shí)上,代碼生成很多時(shí)候也不是被當(dāng)做自然語(yǔ)言生成的一個(gè)子集來(lái)處理的,根據(jù)原語(yǔ)生成、根據(jù)AST生成以及各種奇形怪狀的網(wǎng)絡(luò)都拿來(lái)作為代碼生成的模型的,只不過(guò)LLM(大語(yǔ)言模型)出現(xiàn)后對(duì)代碼生成任務(wù)的其他研究造成了降維打擊,現(xiàn)在才開(kāi)始流行Code LLM。
言歸正傳,Diffusion模型本質(zhì)上只是學(xué)習(xí)一個(gè)去噪器,并沒(méi)有綁定圖像生成任務(wù)。

2.具體架構(gòu)
好了,我們之前只是說(shuō)了Diffusion能作為代碼生成模型的可能性,但是想法要落地還是需要給出方案的,直接上圖:

我們不細(xì)講這張圖了,這向來(lái)不是這一系列專題的目標(biāo)(目標(biāo)就是告訴大家現(xiàn)在AI都在搞哪一方面的研究,這樣搞有什么好處以及個(gè)人和這個(gè)主題相關(guān)的小故事等。對(duì)提到論文的具體方法有興趣的大家自行查看原文)
但是對(duì)于圖生成Diffusion模型大家應(yīng)該很熟悉它們的輸入輸出,實(shí)際上,輸入是隨機(jī)噪聲,因?yàn)镈iffusion的核心是去噪,就是上圖中中間的那個(gè)東西。我們輸入的文本一般被叫做prompt,實(shí)際上是作為一種“附加信息”的,對(duì)應(yīng)于圖中左側(cè)的結(jié)構(gòu),只不過(guò)圖中是把自然語(yǔ)言(就是要求模型最終生成什么功能的代碼)輸入了,Encoder的作用只是把自然語(yǔ)言變成模型能理解的信息(所以叫編碼器嘛),右邊的Decoder(解碼器)的作用就是把去噪器的結(jié)果轉(zhuǎn)換成人類可以理解的形式,在一般的圖生成Diffusion模型中輸出是圖像,這邊就是代碼了。

3.優(yōu)點(diǎn)與缺點(diǎn)
簡(jiǎn)單說(shuō)幾個(gè)這樣做的優(yōu)點(diǎn)與缺點(diǎn)吧
優(yōu)點(diǎn):1.Diffusion也是研究的比較成熟的模型了;2.這樣做的好處是能一定程度上保證代碼生成前top n的穩(wěn)定性(語(yǔ)言模型的采樣隨機(jī)性還是太大了)
缺點(diǎn):1.慢??赡艽蠹夷荏w會(huì)出來(lái),現(xiàn)在的ChatGPT等模型實(shí)際上很多已經(jīng)能生成的非??炝耍呛芏郃I繪圖還是需要等一段時(shí)間的;2.最大的問(wèn)題還是多樣性低。目前模型只能解決英文輸入和少數(shù)編程語(yǔ)言,而且知識(shí)儲(chǔ)備也存在一定的問(wèn)題,拿來(lái)刷幾個(gè)榜倒還可以(實(shí)際上這個(gè)模型很小的,效果也已經(jīng)很不錯(cuò)了),但放到實(shí)際問(wèn)題中應(yīng)用還是太有限

4.ChatGPT的參數(shù)量
沒(méi)錯(cuò),重點(diǎn)來(lái)了,在這篇論文的一個(gè)表格中,竟然明晃晃地寫著ChatGPT的參數(shù)量只有20B。

我們知道,GPT-3的參數(shù)量是175B(也就是1750億),雖然GPT-3.5家族很多也不是基于175B的GPT-3修改來(lái)的,但ChatGPT這種強(qiáng)大如斯(世界上只存在兩類模型,一類是GPT-4和ChatGPT,另一類是其他模型),難道真的就20B嗎?要知道,現(xiàn)在市面上比20B大的模型一抓一大把,然而和ChatGPT的能力比起來(lái)簡(jiǎn)直更是一個(gè)天上一個(gè)地下(希德:沒(méi)錯(cuò)我又來(lái)客串了,我就是那個(gè)習(xí)慣用別人更少的魔力和對(duì)方打五五開(kāi)的變態(tài)。再次證明希德就是大模型(bushi)
關(guān)于這一點(diǎn),大家也是有各種猜測(cè):
(1)應(yīng)該是微軟人寫錯(cuò)了(簡(jiǎn)單筆誤),實(shí)際上應(yīng)該是120B或者200B之類的(眾所周知,微軟對(duì)OpenAI投資是很大的,微軟很可能確實(shí)知道ChatGPT和GPT-4的技術(shù)細(xì)節(jié))
(2)從ChatGPT剛發(fā)布的時(shí)候,很多人就猜測(cè)可能比175B還大,所以就是單純寫錯(cuò)了(不是筆誤的那種),主要依據(jù)是強(qiáng)大的能力
(3)確實(shí)只有20B,甚至是10B的規(guī)模。這主要是由于ChatGPT的速度實(shí)際上是很快的,剛出來(lái)的時(shí)候就有人算過(guò),ChatGPT的參數(shù)量應(yīng)該不會(huì)很大
(4)ChatGPT的參數(shù)量是慢慢變小的。有些學(xué)者認(rèn)為,一開(kāi)始版本的ChatGPT確實(shí)很大,但是隨著版本更替,參數(shù)量逐漸變少了,主要是是因?yàn)椋w感上)ChatGPT的速度實(shí)際上是變快的,也就是OpenAI一直在蒸餾模型(蒸餾簡(jiǎn)單來(lái)說(shuō)就是把大模型的能力壓縮進(jìn)小模型),OpenAI最近確實(shí)很關(guān)注壓縮視角的大模型,這不就對(duì)上了嘛。
當(dāng)然,在這時(shí)候還要保證ChatGPT的能力不會(huì)下降,實(shí)際上我們可能是需要一個(gè)比ChatGPT大得多的獎(jiǎng)勵(lì)模型的,換句話說(shuō),ChatGPT現(xiàn)在的20B的背后可能是一些更大的模型,甚至可能比GPT-3的175B還要大。之前也有小道消息說(shuō)OpenAI其實(shí)相比于市面上的人來(lái)說(shuō)更加關(guān)注那個(gè)看起來(lái)好像是用完就扔的獎(jiǎng)勵(lì)模型的,也許我們相反了,不是用一個(gè)小的獎(jiǎng)勵(lì)模型來(lái)對(duì)齊大的實(shí)際的模型,而是一個(gè)大的獎(jiǎng)勵(lì)模型對(duì)齊一個(gè)小的時(shí)間模型(這一步,OpenAI又在大氣層了)
當(dāng)然,以上全部都是猜測(cè),大家也就當(dāng)看個(gè)樂(lè)就行了。