設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

谷歌讓 NLP 模型也能 debug,只要給一張“草稿紙”就行

量子位 2021/12/4 14:36:26 責(zé)編:長(zhǎng)河

現(xiàn)在的大型語(yǔ)言模型,能力個(gè)個(gè)都挺強(qiáng)。但,它們的計(jì)算能力都不太行:比如 GPT-3,沒(méi)法做超過(guò)三位數(shù)的加法。再比如它們當(dāng)中的大多數(shù)都可以寫(xiě)代碼,但是理解代碼卻很費(fèi)勁 —— 稍微遇到點(diǎn)帶循環(huán)的程序就“GG”。

不過(guò),來(lái)自 MIT 和谷歌的研究人員發(fā)現(xiàn):不用修改模型的底層架構(gòu),只需訓(xùn)練它們學(xué)會(huì)像程序員 debug 時(shí)那樣“打斷點(diǎn)”,讀代碼的能力就唰唰唰地漲上去了。

將同樣的思路用于大數(shù)加法、多項(xiàng)式計(jì)算,那就更不在話下了。所以,語(yǔ)言模型的數(shù)學(xué)能力終于也要跟上了?!

教語(yǔ)言模型用“打斷點(diǎn)”的方法做加法、讀程序

前面說(shuō)的“打斷點(diǎn)”,其實(shí)指的是在計(jì)算步驟較多的程序中,讓模型把每一步都編碼為文本,并將它們記錄到一個(gè)稱(chēng)為“便簽”的暫存器中,或者叫“草稿紙”。

聽(tīng)起來(lái)是個(gè)“笨”方法,但正是這樣才使得模型的計(jì)算過(guò)程變得清晰有條理,性能也就比以往直接計(jì)算的方式提升了很多。

具體操作也很簡(jiǎn)單。就比如在簡(jiǎn)單的加法計(jì)算中,計(jì)算“29+57”的方式就是像這樣的:

其中 C 表示進(jìn)位,#表注釋。先計(jì)算 9+7,進(jìn)位 1;再計(jì)算 2+5 + 進(jìn)位 1,最后得出 86。

從上可以看出,這個(gè)訓(xùn)練示例由“輸入”和“目標(biāo)”組成。訓(xùn)練時(shí)將兩者都喂給模型;測(cè)試時(shí),模型就能根據(jù)“輸入”預(yù)測(cè)出正確的“目標(biāo)”。

而“目標(biāo)”就是要發(fā)送到臨時(shí)暫存器上的內(nèi)容,通過(guò)關(guān)注其上下文就可以引用;實(shí)際操作中,還可以對(duì)“草稿”內(nèi)容進(jìn)行檢查糾錯(cuò)。

顯著提高語(yǔ)言模型的計(jì)算能力

研究人員選用了僅含解碼器結(jié)構(gòu)的 Transformer 語(yǔ)言模型來(lái)實(shí)驗(yàn),其參數(shù)規(guī)模介于 200 萬(wàn)到 1370 億之間。原則上,任何序列模型都可以使用這個(gè)方法,包括編-解碼器模型或循環(huán)網(wǎng)絡(luò)等。

首先,他們按這種“打斷點(diǎn)”的方式訓(xùn)練語(yǔ)言模型進(jìn)行 1-8 位數(shù)的整數(shù)加法。訓(xùn)練包含 10 萬(wàn)個(gè)示例,并進(jìn)行了 5000 步的微調(diào),batch size 為 32。然后分別用 1 萬(wàn)個(gè)數(shù)據(jù)來(lái)測(cè)試訓(xùn)練分布內(nèi)的加法;1 千個(gè)數(shù)據(jù)來(lái)測(cè)試訓(xùn)練分布之外,也就是 9 位和 10 位數(shù)的加法。

將結(jié)果分別與直接運(yùn)算的語(yǔ)言模型進(jìn)行比較,發(fā)現(xiàn):即使超出臨界模型大小,用了“打斷點(diǎn)”法的模型也能夠進(jìn)行加法運(yùn)算,而直接運(yùn)算的基線模型就沒(méi)法做到這一點(diǎn)。

而在分布外的任務(wù)中,直接運(yùn)算的基線模型完全掛掉 ——“沒(méi)練過(guò)就不會(huì)做”,而用了“斷點(diǎn)”法的模型隨著規(guī)模的增大 hold 住了 9-10 位數(shù)的加法。

好,大數(shù)加法搞定。接下來(lái)上多項(xiàng)式。他們生成了一個(gè)包含 1 萬(wàn)個(gè)多項(xiàng)式的訓(xùn)練數(shù)據(jù)集和 2000 個(gè)數(shù)據(jù)的測(cè)試集。其中項(xiàng)數(shù)一般不超過(guò) 3 項(xiàng),系數(shù)范圍在-10 到 + 10 之間,結(jié)果在-1000 到 + 10000 之間。多項(xiàng)式的訓(xùn)練示例如下:

結(jié)果發(fā)現(xiàn):無(wú)論是微調(diào)還是少樣本訓(xùn)練之后,“斷點(diǎn)”法的性能都優(yōu)于直接預(yù)測(cè)。

最后就是讀 Python 代碼了。

代碼的訓(xùn)練示例中,記錄了正在執(zhí)行的是哪行代碼,以及此時(shí)各變量的值,用 json 格式表示。

此前的語(yǔ)言模型讀代碼的能力都表現(xiàn)不佳?!按驍帱c(diǎn)”的方式可以讓它們一改常態(tài)么?

首先,經(jīng)過(guò) 200 個(gè)程序(都是人工編寫(xiě)的,包括簡(jiǎn)單的 while 循環(huán)和 if 語(yǔ)句)的測(cè)試發(fā)現(xiàn),“斷點(diǎn)法”整體執(zhí)行精度更高。與直接執(zhí)行的模型相比,微調(diào)還可以將模型性能從 26.5% 提高到 41.5%。

一個(gè)真實(shí)例子:

“斷點(diǎn)”法經(jīng)過(guò) 3 次 while 循環(huán),最終給出了正確的變量值。

接著,他們又用包含了 1000 個(gè)程序的 MBPP 數(shù)據(jù)集進(jìn)行訓(xùn)練和測(cè)試。這些程序涉及多種數(shù)據(jù)類(lèi)型的計(jì)算,包括整數(shù)、字符串、浮點(diǎn)數(shù)等,以及涉及循環(huán)、API 調(diào)用和遞歸等流程結(jié)構(gòu)。并添加訓(xùn)練數(shù)據(jù)之外的“single line”程序集和 CodeNet 程序集進(jìn)行測(cè)試。

結(jié)果發(fā)現(xiàn),模型也可以很好地?cái)U(kuò)展。

當(dāng)然,這個(gè)方法也有局限性:比如復(fù)雜的計(jì)算可能需要很“長(zhǎng)”的暫存器,這可能需要進(jìn)一步改進(jìn) Transformer 生成窗口的大小。好在這也是 NLP 領(lǐng)域的一個(gè)活躍研究領(lǐng)域。而在未來(lái),他們可能會(huì)嘗試在無(wú)監(jiān)督情況下用強(qiáng)化學(xué)習(xí)讓語(yǔ)言模型學(xué)會(huì)“打斷點(diǎn)”。

總之,語(yǔ)言模型的計(jì)算能力、讀代碼的能力會(huì)越來(lái)越強(qiáng)。

論文地址:

https://arxiv.org/abs/2112.00114

廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:谷歌,模型

軟媒旗下網(wǎng)站: IT之家 最會(huì)買(mǎi) - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會(huì)買(mǎi) 要知