從0構(gòu)建大模型知識(shí)體系(3):大模型的祖宗RNN

0 評(píng)論 838 瀏覽 0 收藏 36 分鐘
🔗 产品经理的核心价值是能够准确发现和满足用户需求,把用户需求转化为产品功能,并协调资源推动落地,创造商业价值

從自然語(yǔ)言的數(shù)字化過(guò)程,到RNN的數(shù)學(xué)原理、訓(xùn)練方法和文本生成機(jī)制,再到其在現(xiàn)代大模型中的地位和影響,本文將為你揭開(kāi)RNN的神秘面紗,帶你深入理解大語(yǔ)言模型的核心技術(shù)基礎(chǔ)。

按照慣例,結(jié)論先行

這篇文章要討論啥?

討論AI是如何通過(guò)自然語(yǔ)言處理技術(shù)來(lái)完成“用戶提問(wèn),AI回答”的文本生成任務(wù)的。RNN(循環(huán)神經(jīng)網(wǎng)絡(luò),Recurrent Neural Network)是完成這一任務(wù)的經(jīng)典模型,同時(shí)也是現(xiàn)在大語(yǔ)言模型的技術(shù)源頭,了解RNN有助于我們理解現(xiàn)在大語(yǔ)言模型的概率輸出機(jī)制以及幻覺(jué)現(xiàn)象的成因。

我會(huì)以訓(xùn)練一個(gè)RNN架構(gòu)的客服機(jī)器人為切入口,剖析其通過(guò)循環(huán)結(jié)構(gòu)實(shí)現(xiàn)序列數(shù)據(jù)記憶的機(jī)制,并闡釋其概率輸出機(jī)制與幻覺(jué)現(xiàn)象的內(nèi)在關(guān)聯(lián)。

文章討論的核心問(wèn)題和結(jié)論是啥?

① 人類的自然語(yǔ)言是如何被數(shù)字化的?

自然語(yǔ)言的數(shù)字化過(guò)程分為token化、數(shù)字映射、獨(dú)熱編碼和詞嵌入四步

② 如果說(shuō)模型的本質(zhì)是一套數(shù)學(xué)公式,那么文本生成模型的數(shù)學(xué)公式是什么?

模型的數(shù)學(xué)公式無(wú)法用一個(gè)簡(jiǎn)單式子描述,只能畫出模型結(jié)構(gòu),其內(nèi)部進(jìn)行了矩陣乘法運(yùn)算

③ 文本生成模型的訓(xùn)練數(shù)據(jù)是如何構(gòu)造的,模型又是怎么被訓(xùn)練的?

將訓(xùn)練語(yǔ)料分割為多個(gè)“輸入→輸出”語(yǔ)料對(duì),通過(guò)這些語(yǔ)料對(duì)來(lái)調(diào)整模型參數(shù)

④ 訓(xùn)練出的模型是怎么完成文本生成任務(wù)的?

基于文本序列末尾的幾個(gè)字循環(huán)預(yù)測(cè)下一個(gè)字,逐字?jǐn)U展直至完成文本生成

⑤ 為什么模型會(huì)有幻覺(jué)現(xiàn)象?

根本原因在于模型基于概率的輸出機(jī)制本質(zhì)是在最大化語(yǔ)言的連貫性而非正確性

次要問(wèn)題和結(jié)論是啥?

⑥ 模型真的具備智能嗎?

語(yǔ)言模型本質(zhì)是統(tǒng)計(jì)不同字詞共同出現(xiàn)概率的預(yù)測(cè)系統(tǒng),不具備因果理解能力,不具備廣義的智能

⑦ 為什么模型會(huì)對(duì)相同的輸入產(chǎn)生不同的輸出?

為追求創(chuàng)造性,模型的“溫度”參數(shù)會(huì)讓其在即便相同的輸入下也會(huì)輸出不同的內(nèi)容

“RNN是時(shí)間交易所里永恒的賭徒,它用過(guò)去的記憶來(lái)?yè)Q取預(yù)測(cè)未來(lái)的籌碼”

——題記

上一篇文章《從0構(gòu)建大模型知識(shí)體系(2):給模型開(kāi)眼的CNN》已介紹圖像識(shí)別的經(jīng)典模型CNN。但日常傳遞信息除了圖像外還會(huì)使用大量的自然語(yǔ)言,即人類日常交流使用的語(yǔ)言(如中文、英語(yǔ))。讓計(jì)算機(jī)能夠理解并處理自然語(yǔ)言的技術(shù)被統(tǒng)稱為自然語(yǔ)言處理(NLP,Natural Language Processing),其中最經(jīng)典的一項(xiàng)技術(shù)就是本文要介紹的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN,Recurrent Neural Network)。

順便一提,RNN被稱為大模型祖宗是因其改良版本——LSTM(長(zhǎng)短期記憶網(wǎng)絡(luò))啟發(fā)了Transformer的設(shè)計(jì)。而Transformer又是現(xiàn)在大模型(如chatGPT、DeepSeek)的基礎(chǔ)架構(gòu),因此理解RNN有助于理解現(xiàn)代大模型的核心機(jī)制及挑戰(zhàn),如幻覺(jué)的成因。

從客服機(jī)器人開(kāi)始說(shuō)起

假設(shè)你是某網(wǎng)店的客服,面對(duì)日均5000+條諸如 “包郵嗎”、” 有贈(zèng)品嗎 ” 的重復(fù)咨詢,即便寫了FAQ文檔用戶也懶得看。于是你開(kāi)始思考:能否訓(xùn)練一個(gè)智能助手,讓它根據(jù)用戶的問(wèn)題自動(dòng)生成符合語(yǔ)境的回復(fù)?

這種需求催生了自然語(yǔ)言處理領(lǐng)域的文本生成任務(wù)(text generation),其核心是讓模型在給定輸入后,輸出語(yǔ)法正確且語(yǔ)義連貫的文本。當(dāng)前炙手可熱的ChatGPT、DeepSeek等大語(yǔ)言模型,本質(zhì)上都是在完成這一任務(wù)。

與上一篇文章處理圖片數(shù)據(jù)不同的是,自然語(yǔ)言處理有兩個(gè)特殊挑戰(zhàn)。

處理自然語(yǔ)言的兩個(gè)挑戰(zhàn):序列性與上下文相關(guān)性

在圖像識(shí)別任務(wù)中,CNN架構(gòu)的模型存在兩個(gè)致命缺陷。① 無(wú)法處理輸入數(shù)據(jù)的順序。例如識(shí)別數(shù)字時(shí),先識(shí)別圖片1后識(shí)別圖片2與先識(shí)別2后識(shí)別1毫無(wú)差異。② 無(wú)法記憶之前處理的內(nèi)容。即圖片1的識(shí)別結(jié)果完全不會(huì)影響圖片2。然而自然語(yǔ)言具有:

1)嚴(yán)格的序列性:”我喜歡上班” 與 “班喜歡上我” 的語(yǔ)序差異直接導(dǎo)致語(yǔ)義顛覆。

2)復(fù)雜的上下文相關(guān)性:例如試著完成下面3個(gè)空格填字

1.“食堂大__”2.“保潔阿__”3.“外賣小__”人類可以輕松補(bǔ)全為 “媽 / 姨 / 哥”,這是因?yàn)槿四X能建立上下文關(guān)聯(lián)。這種特性要求模型必須具備記憶能力,這正是傳統(tǒng) CNN 難以處理自然語(yǔ)言的根本原因。

不過(guò)在解決這兩個(gè)挑戰(zhàn)之前還有個(gè)問(wèn)題,那就是專欄第一篇文章就提到,無(wú)論大模型小模型,其本質(zhì)都是把一個(gè)數(shù)通過(guò)一定運(yùn)算變成另一個(gè)數(shù)的數(shù)學(xué)公式。所以顯然,我們需先解決自然語(yǔ)言數(shù)字化的問(wèn)題。

把自然語(yǔ)言轉(zhuǎn)為數(shù)字的四個(gè)步驟

第一步:token化(tokenization)。人類理解中文是以字為最小單位,如“我喜歡上班。”這句話是被拆分為“我”、“喜”、“歡”、“上”、“班”、“。”來(lái)理解的。類似人類逐字理解的過(guò)程,token(詞元)即模型處理自然語(yǔ)言的最小單元,將句子分割為多個(gè)token的過(guò)程就是token化。

比如“我喜歡上班。”這句話按照詞的維度可以被token化為[“我” ,”喜歡” ,”上班” , “。”]4個(gè)token,也可以按照字的維度token化為[“我” ,”喜” ,”歡” ,”上” ,”班”, “。”]6個(gè)token。不同的模型往往有不同的策略。所以我們平時(shí)使用大模型時(shí)輸入一句話到底算幾個(gè)token取決于所用模型自己的token策略

現(xiàn)在的大模型如DeepSeek廣泛采用的token化策略叫做BPE(Byte Pair Encoding),核心思想是將高頻字符組(包括非完整詞匯)與單字共同作為 token。比如除了將“我”、“喜”、“歡”三個(gè)高頻漢字各算作一個(gè)token外,也會(huì)將“我喜歡”,這樣高頻出現(xiàn)的非完整詞匯算作一個(gè)token。所以上面這句話其實(shí)還可以被分割為[“我喜歡” ,”上班”, “。”]3個(gè)token。

為方便解釋,本文一律把一個(gè)漢字算作一個(gè)token。

第二步:指定token和數(shù)字的對(duì)應(yīng)關(guān)系。token雖然是模型處理自然語(yǔ)言的最小單位,但畢竟token不是數(shù)字,所以還需要給每個(gè)token指定所對(duì)應(yīng)的數(shù)字。比如我們可以這樣指定token和數(shù)字的對(duì)應(yīng)關(guān)系:

那么“我喜歡上班?!?這句話現(xiàn)在就可以表示為[1, 2, 3, 4, 5, 6]6個(gè)數(shù)字。實(shí)踐當(dāng)中往往會(huì)把所有token按照其在語(yǔ)料中的出現(xiàn)頻率由高到低排列,頻率越高的token指定的數(shù)字越小,這是因?yàn)樾〉臄?shù)字在計(jì)算機(jī)中的存儲(chǔ)和運(yùn)算成本都更小

到此,對(duì)于一些數(shù)據(jù)量少,問(wèn)題簡(jiǎn)單,小模型就能解決的場(chǎng)景來(lái)說(shuō)自然語(yǔ)言數(shù)字化的過(guò)程就結(jié)束了。但這樣的數(shù)字化結(jié)果存在兩個(gè)問(wèn)題:

1)數(shù)值大小≠語(yǔ)義關(guān)系。例如“我”對(duì)應(yīng)數(shù)字1,“喜”對(duì)應(yīng)2,雖然1<2但這并不代表“我”<“喜”。數(shù)值大小與語(yǔ)義脫節(jié)會(huì)導(dǎo)致模型學(xué)習(xí)到錯(cuò)誤的語(yǔ)言規(guī)律。

2)無(wú)法進(jìn)行運(yùn)算。雖然數(shù)學(xué)上 1+2=3,但 “我”+“喜” 顯然不等于“你”。這將導(dǎo)致模型無(wú)法以數(shù)學(xué)運(yùn)算的方式對(duì)語(yǔ)言做處理。

因此,大模型需要通過(guò)后續(xù)步驟解決這些問(wèn)題,使數(shù)字真正承載語(yǔ)義信息,從而實(shí)現(xiàn)更接近人類的語(yǔ)言處理能力。

第三步:獨(dú)熱編碼(one-hot encoding)。也就是將每個(gè)token所對(duì)應(yīng)的數(shù)字再做一次轉(zhuǎn)換,具體轉(zhuǎn)換也很容易理解,比如“我”對(duì)應(yīng)的數(shù)字是1,那就用除了第一位是1,其余位全是0的六維向量來(lái)表示它,即[1,0,0,0,0,0]。同理,“愛(ài)”對(duì)應(yīng)2,那么它的編碼結(jié)果就是[0,1,0,0,0,0]……以此類推。這種方法消除了數(shù)值大小的誤導(dǎo)性,且允許簡(jiǎn)單組合,比如“我”+“喜”=[1,1,0,0,0,0]表示“我”和“喜”兩個(gè)字,很合理。但獨(dú)熱編碼仍存在兩大局限:

1)計(jì)算成本高。這里我們只考慮了6個(gè)token,所以一個(gè)token經(jīng)過(guò)獨(dú)熱編碼后只有6個(gè)數(shù)字。但處理整個(gè)中文體系至少也需要一萬(wàn)個(gè)token吧。每個(gè)token獨(dú)熱編碼后就是一萬(wàn)個(gè)數(shù)字,所以光是理解“我喜歡上班?!?個(gè)token就需要計(jì)算機(jī)處理6萬(wàn)個(gè)數(shù)字,成本太高。

2)語(yǔ)義關(guān)聯(lián)性缺失。例如 “樹(shù)”被編碼為 [0,0,0,0,1,0],“ 木”被編碼為 [1,0,0,0,0,0],兩個(gè)編碼結(jié)果完全無(wú)法體現(xiàn)“樹(shù)”和“木”的語(yǔ)義相似性。

所以對(duì)于大模型來(lái)說(shuō),自然語(yǔ)言的數(shù)字化轉(zhuǎn)換還有一步。

第四步:將獨(dú)熱編碼后的token進(jìn)行詞嵌入操作(word embedding)。通過(guò)專門訓(xùn)練的詞嵌入模型,將獨(dú)熱編碼的高維向量(如 10000 維)轉(zhuǎn)換為低維向量(如 3 維)。詞嵌入模型的設(shè)計(jì)和訓(xùn)練是另一個(gè)話題,我們只需要知道經(jīng)過(guò)詞嵌入后可實(shí)現(xiàn)三個(gè)效果:

1)維度變低且數(shù)值有零有整。原本一個(gè)token是用一個(gè)只有0和1的高維向量表示的,但現(xiàn)在變?yōu)榱擞辛阌姓牡途S向量,比如[3.1, 2.6, 7]這樣。

2)語(yǔ)意相近的token編碼結(jié)果會(huì)比較相似。比如我們會(huì)發(fā)現(xiàn)進(jìn)行詞嵌入處理后以下4個(gè)token的編碼可能長(zhǎng)這樣

如果把每個(gè)token編碼中的三個(gè)數(shù)字當(dāng)做xyz坐標(biāo),“樹(shù)”、“木”、“葉”會(huì)非常接近,且他們距離“海”的距離都比較遠(yuǎn)。

3)token編碼之間的加減也具有語(yǔ)義。比如我們會(huì)發(fā)現(xiàn)“樹(shù)”-“木”≈“葉”

到此,對(duì)大模型來(lái)說(shuō)自然語(yǔ)言數(shù)字化的過(guò)程才算徹底結(jié)束。

所以總結(jié)一下,當(dāng)我們輸入一句話時(shí),這句話首先會(huì)被切分成多個(gè)token,不同的模型有不同的切分策略,每個(gè)token會(huì)被映射成一個(gè)數(shù)字,之后再經(jīng)過(guò)獨(dú)熱編碼和詞嵌入,最終成為模型可處理的一串?dāng)?shù)。

現(xiàn)在我們解決了自然語(yǔ)言數(shù)字化的問(wèn)題,接下來(lái)就需要搭建模型完成文本生成任務(wù)了。完成這一任務(wù)的核心數(shù)學(xué)運(yùn)算是矩陣乘法,所以我們先簡(jiǎn)單介紹一下這種運(yùn)算。

一種運(yùn)算:矩陣乘法

矩陣乘法就是說(shuō)兩個(gè)矩陣相乘可以得到一個(gè)新的矩陣。比如:

總之就是兩組數(shù)相乘表示通過(guò)對(duì)這兩組數(shù)進(jìn)行加法和乘法運(yùn)算可以得到新的一組數(shù)。

來(lái),讓我們給AI開(kāi)記憶

RNN中的神經(jīng)元其實(shí)就干矩陣相乘這一件事。RNN既然叫循環(huán)神經(jīng)網(wǎng)絡(luò),說(shuō)明在其中有個(gè)東西得是循環(huán)出現(xiàn)的,并且還通過(guò)這種方式組成了一個(gè)網(wǎng)絡(luò)。這個(gè)循環(huán)出現(xiàn)的東西就是RNN網(wǎng)絡(luò)中的神經(jīng)元,它長(zhǎng)這樣:

在這個(gè)結(jié)構(gòu)中A、B和C都是一個(gè)矩陣。其中A是輸入,B是模型參數(shù),A與B相乘后得到了輸出C,C會(huì)往模型中其他兩個(gè)方向繼續(xù)傳遞,所以C有兩個(gè)輸出方向。

模型對(duì)語(yǔ)言的處理本質(zhì)上也是在做加減乘除。舉個(gè)例子,假設(shè)“你”這個(gè)字?jǐn)?shù)字化后的結(jié)果為[1, 5, 3]這串?dāng)?shù),而模型的參數(shù)B為:

那么輸入“你”后模型內(nèi)部即進(jìn)行了一次矩陣乘法,即:

得到的結(jié)果怎么解讀我們之后再說(shuō)。

神經(jīng)元循環(huán)連接就成為了循環(huán)神經(jīng)網(wǎng)絡(luò)RNN,網(wǎng)絡(luò)能夠?qū)v史輸入信息融入當(dāng)前計(jì)算,從而具備了記憶。比如我們讓神經(jīng)元循環(huán)連接3次,得到的網(wǎng)絡(luò)長(zhǎng)這樣:

我們來(lái)觀察一下模型的3個(gè)輸出C1、C2和C3。C1的產(chǎn)生完全由A1決定,它是以A1為輸入與B相乘后得到的輸出。數(shù)據(jù)流向畫出來(lái)是這樣

而C2的產(chǎn)生則是由A1和A2共同決定的

同理,C3的產(chǎn)生由A1,A2和A3共同決定。換句話說(shuō),模型在輸出時(shí)記住了之前輸入的內(nèi)容,所以說(shuō)模型擁有了記憶。

那如果要讓模型完成“外賣小__”的空格填字怎么辦了?好說(shuō),把“外”、“賣”、“小”三個(gè)字?jǐn)?shù)字化后分別當(dāng)做A1、A2和A3輸入給模型,取C3作為最終輸出就行,畢竟C3的產(chǎn)生結(jié)合了A1至A3。至于中間結(jié)果C1和C2在我們這兒用不上,丟棄就行。

C3表示模型認(rèn)為每一個(gè)token有多大的可能成為當(dāng)前的輸出?,F(xiàn)在我們來(lái)解讀一下模型的最終輸出。模型最終的輸出C3不是一個(gè)數(shù),而是一串?dāng)?shù)。有多少個(gè)數(shù)取決于我們準(zhǔn)備的訓(xùn)練語(yǔ)料包含多少個(gè)不同的token。假設(shè)我們的語(yǔ)料一共包含“外賣小哥保潔阿姨食堂大媽”這12個(gè)token,那么C3就是12個(gè)數(shù),每個(gè)數(shù)是一個(gè)0~1之間的小數(shù),比如我們輸入“外賣小”三個(gè)token后得到的C3可能長(zhǎng)這樣:

[0.05, 0.02, 0.1, 0.2, 0.1, 0.05, 0.04, 0.07, 0.02, 0.15, 0.09, 0.11]

其中第一個(gè)數(shù)表示模型認(rèn)為token集中第一個(gè)token(也就是“外”)應(yīng)該作為本次輸出的概率為0.05,第二個(gè)數(shù)表示第二個(gè)token(也就是“賣”)作為本次輸出的概率為0.02……以此類推。我們畫個(gè)圖來(lái)看一下

這個(gè)圖表示了每個(gè)token的輸出概率,因此模型的輸出機(jī)制是“基于概率輸出”。從這些候選token中如何選出一個(gè)token作為輸出就叫做“采樣策略”。目前來(lái)看“哥”這個(gè)token的概率最高,所以如果我們的采樣策略是“把概率最高的token作為本次輸出”(雖然這是最符合直覺(jué)的采樣策略,但實(shí)際往往不會(huì)這樣做),那模型就會(huì)以“哥”作為本次輸出。當(dāng)然,在實(shí)際當(dāng)中完全有可能是某個(gè)別的token概率最大。

至于為什么要強(qiáng)調(diào)“基于概率輸出”以及“采樣策略”這兩點(diǎn),先埋個(gè)伏筆……在介紹完模型訓(xùn)練和實(shí)際使用之后再回收。

所以總結(jié)一下,將RNN神經(jīng)元多次循環(huán)連接就可以得到RNN。最末尾神經(jīng)元的輸出是由之前所有的輸入共同決定的,因此RNN具有記憶。此外,模型對(duì)自然語(yǔ)言的處理本質(zhì)也只是在做加減乘除,當(dāng)我們輸入一句話后,模型的輸出是一個(gè)概率分布,最終實(shí)際會(huì)輸出什么內(nèi)容取決于我們的采樣策略。

到此,模型就搭建完了,其本質(zhì)也是一個(gè)數(shù)學(xué)公式,即給定一句話后進(jìn)行的一系列運(yùn)算?;氐揭婚_(kāi)始的問(wèn)題,我們要如何依靠這個(gè)模型來(lái)訓(xùn)練一個(gè)客服機(jī)器人呢?這就關(guān)乎訓(xùn)練數(shù)據(jù)應(yīng)該如何準(zhǔn)備以及如何訓(xùn)練了。

訓(xùn)練前:準(zhǔn)備訓(xùn)練數(shù)據(jù)

還記得啥叫文本生成嗎?讓模型依據(jù)給定的輸入來(lái)輸出符合語(yǔ)法規(guī)則、語(yǔ)義通順的文本內(nèi)容。所以我們要根據(jù)語(yǔ)料不停的提供這樣的“輸入→輸出”示范讓模型學(xué)會(huì)語(yǔ)料內(nèi)的內(nèi)在關(guān)系。具體來(lái)說(shuō),假設(shè)我們的客服文檔中關(guān)于產(chǎn)品品質(zhì)部分的說(shuō)明如下:

“此款襯衫采用新疆長(zhǎng)絨棉混紡莫代爾面料,兼具純棉的透氣親膚與莫代爾的抗皺垂墜特性。立體剪裁設(shè)計(jì),衣長(zhǎng)覆蓋腰線,袖口深度優(yōu)化活動(dòng)自由度,版型貼合人體工學(xué)?!?/p>

那么我們可以四個(gè)字為一組,前三個(gè)字作為給定輸入,第四個(gè)字為期望輸出的方式對(duì)這段話進(jìn)行分割,如下所示。

按照這樣的方式上面這段話能被分割為71個(gè)語(yǔ)料對(duì)。到此我們的訓(xùn)練數(shù)據(jù)就準(zhǔn)備完了。

訓(xùn)練中:輸入每個(gè)語(yǔ)料對(duì)調(diào)整參數(shù)

分割出的每一對(duì)語(yǔ)料對(duì)都將用于調(diào)整模型參數(shù),以第一個(gè)語(yǔ)料對(duì)(此款襯,衫)為例,一共有4步:

所以整個(gè)訓(xùn)練過(guò)程可以這樣表示:

訓(xùn)練后:文本生成

完成訓(xùn)練后的模型就可以投入使用了。實(shí)際使用需要用戶先給輸入,也就是現(xiàn)在常說(shuō)的prompt。假設(shè)用戶輸入“您好!”,模型會(huì)先根據(jù)這三個(gè)字輸出下一個(gè)字,然后繼續(xù)根據(jù)最新的三個(gè)字輸出下一個(gè)字,如此循環(huán)直到模型認(rèn)為可以停止輸出。整個(gè)過(guò)程可以如下表示:

這就解釋了為什么我們?nèi)粘J褂玫拇竽P屯ǔ2捎弥鹱州敵龅姆绞?,同時(shí)也解釋了為何部分模型會(huì)忘記用戶之前輸入的內(nèi)容——因?yàn)橹拜斎氲膬?nèi)容已超出其輸入范圍。比如圖中這個(gè)模型每次的輸入范圍就只有最近的3個(gè)token,3個(gè)token之前的東西就記不住。(但現(xiàn)在的大模型如GPT-4o的輸入范圍是128,000個(gè)token)

伏筆回收之一:模型基于概率的輸出機(jī)制

無(wú)論是大模型還是本文介紹的RNN,他們都采用基于概率的輸出機(jī)制,因此必然產(chǎn)生幻覺(jué) 。回顧一下我們是怎么訓(xùn)練模型的:我們將語(yǔ)料按照“輸入→輸出”的方式分割為了眾多語(yǔ)料對(duì),并用來(lái)調(diào)整模型參數(shù)。這種機(jī)制使模型學(xué)到的是語(yǔ)料中字詞共同出現(xiàn)的規(guī)律(也就是當(dāng)某些字出現(xiàn)之后,在這之后的字大概率會(huì)是什么),而非事實(shí)邏輯。

因此假設(shè)我們的語(yǔ)料中出現(xiàn)了大量的“星期三”,模型就會(huì)認(rèn)為“星期”二字之后大概率應(yīng)該是“三”,所以如果輸入“2025年4月32日是星期”,模型會(huì)輸出“三”,哪怕4月其實(shí)并沒(méi)有32日。同理,如果語(yǔ)料中出現(xiàn)大量的“1+1=3”,那么輸入“1+1=”模型也會(huì)輸出3。

這種基于概率的輸出機(jī)制使得模型并不追求語(yǔ)言的 “正確性”,而是根據(jù)所學(xué)語(yǔ)料追求語(yǔ)言的“連貫性”。因此會(huì)出現(xiàn)模型的語(yǔ)言表達(dá)連貫自然但與事實(shí)不符的現(xiàn)象,也就是幻覺(jué)。

模型真的“智能”嗎?現(xiàn)在我們理解了模型的本質(zhì)是通過(guò)大規(guī)模數(shù)據(jù)訓(xùn)練形成的概率預(yù)測(cè)系統(tǒng),那這算作真正的智能嗎?我認(rèn)為不算。雖然“智能”到底應(yīng)該如何定義是一個(gè)宏大的哲學(xué)問(wèn)題,但一個(gè)智能的個(gè)體至少應(yīng)該能夠理解因果,并運(yùn)用因果關(guān)系解決實(shí)際問(wèn)題。而模型從海量的數(shù)據(jù)中真的學(xué)到了因果嗎?顯然不是,它只學(xué)到了字詞共同出現(xiàn)的概率。

那為什么現(xiàn)在的大模型看上去如此智能?因?yàn)檎Z(yǔ)料足夠多,質(zhì)量足夠好,模型設(shè)計(jì)足夠復(fù)雜,這使得現(xiàn)在的大模型確實(shí)太像一個(gè)真正智能的個(gè)體了,像到確實(shí)可以用來(lái)解決很多問(wèn)題了。但即便如此,其概率預(yù)測(cè)系統(tǒng)的本質(zhì)決定了它不可能發(fā)展為理解因果關(guān)系的終極智能系統(tǒng)。

伏筆回收之二:模型的token采樣策略

回到輸入“外賣小”后模型的輸出這個(gè)例子,我們之前假設(shè)模型此時(shí)對(duì)每個(gè)token的輸出概率如下

如果選擇“把概率最高的token作為本次輸出”的采樣策略,那模型自然會(huì)輸出“哥”字。而實(shí)際當(dāng)中往往不會(huì)采用這個(gè)策略,而是用一個(gè)叫做“溫度”(temperature)的參數(shù)來(lái)控制模型的輸出要按照多大程度偏移概率最高的token。

如果溫度為0,那么模型就會(huì)始終按照它從訓(xùn)練語(yǔ)料中習(xí)得的最有可能與當(dāng)前輸入共同出現(xiàn)的token作為輸出。這種情況下無(wú)論我們輸入多少次“外賣小”,模型輸出都是“哥”。此時(shí)的模型具有較強(qiáng)的準(zhǔn)確性。

如果把溫度提升,模型就可能從其他token里選一個(gè)作為輸出,溫度越高越有可能。這種情況下我們多次輸入“外賣小”的話有可能第一次是“哥”,第二次是“姨”,第三次又是“媽”,第四次又是“哥”。此時(shí)的模型具有較強(qiáng)的創(chuàng)造性。這也是為啥我們即便多次輸入一樣的內(nèi)容給大模型,每次回復(fù)都不一樣的原因之一。(其他原因有用戶所用的設(shè)備不同、地點(diǎn)不同、時(shí)間不同。這些信息雖然不在我們的prompt中,但app會(huì)自動(dòng)上傳給大模型以優(yōu)化其回復(fù))

因此,如果app內(nèi)可以調(diào)控這個(gè)參數(shù)的話(比如下圖里Google的AI Studio),對(duì)于一些要求準(zhǔn)確性強(qiáng)的任務(wù),如法律文件生成,可以將溫度調(diào)低,讓模型忠于語(yǔ)料中學(xué)到的字詞共現(xiàn)規(guī)律,不要憑空捏造法律條文。而對(duì)于要求創(chuàng)造性的任務(wù),如詩(shī)歌生成,則可以將溫度適當(dāng)調(diào)高。

復(fù)盤一下,我們學(xué)到了什么

自然語(yǔ)言的序列性和上下文相關(guān)性是兩大挑戰(zhàn)。這要求模型具備記憶能力。

自然語(yǔ)言處理本質(zhì)也是在對(duì)數(shù)字進(jìn)行加減乘除。我們輸入的一句話會(huì)先被切分成多個(gè)token,每個(gè)token會(huì)經(jīng)過(guò)獨(dú)熱編碼和詞嵌入最終成為模型可處理的一串?dāng)?shù)。模型對(duì)這些數(shù)進(jìn)行加減乘除后就可以達(dá)到預(yù)期的效果。

RNN就是將一個(gè)神經(jīng)元循環(huán)連接組成的網(wǎng)絡(luò),這種網(wǎng)絡(luò)具有記憶。一個(gè)神經(jīng)元只干矩陣相乘這一件事,當(dāng)我們把這樣的神經(jīng)元循環(huán)連接后,最后一個(gè)神經(jīng)元的輸出會(huì)兼顧之前所有的輸入,所以RNN具有記憶。

給定一句話,讓模型續(xù)寫這事兒叫文本生成,訓(xùn)練文本生成模型需要準(zhǔn)備眾多語(yǔ)料對(duì)。每個(gè)語(yǔ)料對(duì)體現(xiàn)的是哪些字詞會(huì)共同出現(xiàn),模型就是通過(guò)學(xué)習(xí)這種共現(xiàn)規(guī)律來(lái)生成文本的。

模型基于序列末尾的幾個(gè)字循環(huán)預(yù)測(cè)下一個(gè)字,逐字?jǐn)U展直至完成文本生成。這是模型之所以一個(gè)字一個(gè)字往外蹦以及有時(shí)候會(huì)忘記用戶之前輸入內(nèi)容的原因。

模型產(chǎn)生幻覺(jué)的根本原因在于其基于概率的輸出機(jī)制。無(wú)論大模型還是 RNN,這類語(yǔ)言模型都通過(guò)學(xué)習(xí)語(yǔ)料中字詞的共現(xiàn)規(guī)律來(lái)生成輸出。在訓(xùn)練過(guò)程中,數(shù)據(jù)被分割為 “輸入→輸出” 的語(yǔ)料對(duì),模型通過(guò)統(tǒng)計(jì)規(guī)律預(yù)測(cè)給定輸入后的下一個(gè)字,本質(zhì)是在最大化語(yǔ)言的連貫性而非正確性,因此會(huì)出現(xiàn)幻覺(jué)。

大模型也好,小模型也罷,都不是真正的智能。模型的本質(zhì)是一個(gè)統(tǒng)計(jì)了語(yǔ)料間字詞共現(xiàn)規(guī)律的概率預(yù)測(cè)系統(tǒng),它并未理解語(yǔ)料中包含的信息,并不理解因果,更不能運(yùn)用因果?,F(xiàn)在的大模型確實(shí)很像一個(gè)智能的個(gè)體,像到了真的可以用來(lái)解決現(xiàn)實(shí)問(wèn)題的程度,但它依舊不是廣泛意義的智能。

“溫度”是導(dǎo)致模型對(duì)于相同輸入的回復(fù)不一致的原因之一。溫度為0,模型則始終按照概率最大的token進(jìn)行輸出。溫度越高,模型偏移概率最大的token進(jìn)行輸出的可能性越高。除此之外,app還會(huì)上傳用戶所用設(shè)備、所在的位置、時(shí)間等信息供大模型參考,也會(huì)導(dǎo)致相同prompt下大模型輸出不一致。

歡迎來(lái)到1997

RNN雖然在20世紀(jì)80年代就已被提出,但礙于其梯度消失和爆炸的固有問(wèn)題(即網(wǎng)絡(luò)一旦變長(zhǎng),通過(guò)反向傳播就無(wú)法有效調(diào)整模型參數(shù))實(shí)際應(yīng)用非常受限。直到1997年Sepp Hochreiter和Jürgen Schmidhuber提出的長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)才徹底解決了這個(gè)問(wèn)題,使得RNN被大量應(yīng)用于自然語(yǔ)言處理。ChatGPT的早期版本、蘋果Siri、亞馬遜Alexa都是其具體應(yīng)用。

所以這里以RNN的第二生日來(lái)恭喜你對(duì)大模型知識(shí)的理解來(lái)到了1997年。此時(shí)距離DeepSeek-R1發(fā)布還有28年。

順便提一下,RNN由于可并行計(jì)算的部分有限,因而不能在大規(guī)模數(shù)據(jù)集上通過(guò)GPU訓(xùn)練,所以現(xiàn)在已經(jīng)不怎么流行了。取而代之的是繼承了RNN的思想,所有計(jì)算都可并行的,下一篇文章就會(huì)提到的,現(xiàn)在大模型普遍采用的,大模型基石——Transformer。

AI Heroes

LSTM發(fā)明者——Sepp Hochreiter教授

賦予RNN第二次生命的LSTM。RNN在誕生之初由于梯度消失和爆炸問(wèn)題導(dǎo)致模型一旦過(guò)長(zhǎng)便無(wú)法有效訓(xùn)練,因此無(wú)法處理較長(zhǎng)的序列數(shù)據(jù)。這個(gè)問(wèn)題在1997年由Sepp Hochreiter和Jürgen Schmidhuber發(fā)表的《Long Short-Term Memory》中被徹底解決,他們對(duì)RNN的改良在于引入門控機(jī)制和記憶單元,實(shí)現(xiàn)了對(duì)信息的選擇性存儲(chǔ)與遺忘,使得 LSTM 在處理長(zhǎng)序列時(shí)能夠穩(wěn)定地傳遞梯度,有效捕捉長(zhǎng)期依賴。一個(gè)LSTM神經(jīng)元長(zhǎng)這樣:

比咱介紹的只做了一次矩陣乘法的RNN神經(jīng)元復(fù)雜多了,而且看上去像只草履蟲(chóng)哈哈哈

Sepp Hochreiter,IEEE 2021年神經(jīng)網(wǎng)絡(luò)先驅(qū)獎(jiǎng)獲得者。Hochreiter現(xiàn)任奧地利林茨大學(xué)研究所所長(zhǎng),2021年獲得 IEEE 神經(jīng)網(wǎng)絡(luò)先鋒獎(jiǎng)以表彰他在LSTM領(lǐng)域的開(kāi)創(chuàng)性貢獻(xiàn),該獎(jiǎng)項(xiàng)被視為神經(jīng)網(wǎng)絡(luò)領(lǐng)域的最高榮譽(yù)之一。

xLSTM,makes RNN great again。2024年5月Hochreiter團(tuán)隊(duì)推出的了xLSTM(eXtendedLSTM),旨在解決現(xiàn)在以Transformer架構(gòu)為主的大模型(如DeepSeek)計(jì)算開(kāi)銷大的問(wèn)題。

  • Transformer架構(gòu)的計(jì)算開(kāi)銷與文本長(zhǎng)度呈平方增長(zhǎng)關(guān)系,而xLSTM在處理長(zhǎng)文本時(shí)只需增加相應(yīng)數(shù)量的神經(jīng)元,因此計(jì)算開(kāi)銷僅為線性增長(zhǎng)。
  • 在模型訓(xùn)練上x(chóng)LSTM克服了傳統(tǒng)LSTM的并行計(jì)算瓶頸,實(shí)現(xiàn)了與Transformer相當(dāng)?shù)牟⑿谢?xùn)練能力。
  • 在最終效果上,xLSTM在同等參數(shù)量下,長(zhǎng)序列任務(wù)性能顯著優(yōu)于Transformer,尤其在語(yǔ)言建模和實(shí)時(shí)場(chǎng)景中困惑度更低、內(nèi)存效率更高,硬件適配性更強(qiáng),適合工業(yè)部署;但在代碼生成、多模態(tài)融合等結(jié)構(gòu)化任務(wù)中仍弱于Transformer,需依賴混合架構(gòu)平衡順序與并行能力。
  • 對(duì)于那些推理計(jì)算量龐大和需要快速響應(yīng)的場(chǎng)景,xLSTM 或許是值得關(guān)注的一條技術(shù)路線。

連續(xù)創(chuàng)業(yè)者。

  • 2017 年Hochreiter 創(chuàng)立奧地利人工智能高級(jí)研究所(IARAI)并擔(dān)任首任所長(zhǎng),推動(dòng) AI 在交通、能源等領(lǐng)域的應(yīng)用,例如開(kāi)發(fā)實(shí)時(shí)交通預(yù)測(cè)系統(tǒng),減少城市擁堵。
  • 2024年其研究所孵化了一家名叫NXAI的科技公司,針對(duì)特定行業(yè)(如汽車、醫(yī)療)定制 AI 解決方案
  • 2025年孵化Emmi AI,專注于通過(guò)其核心技術(shù)xLSTM 模型為制造業(yè)和能源行業(yè)提供輕量化、高效能的 AI 解決方案。

“他以循環(huán)為針腳,將離散的字符織入時(shí)間的經(jīng)緯 ,讓昨天的字節(jié)得以親吻明天的比特”

——后記

本文由 @夜雨思晗 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖由作者提供

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒(méi)評(píng)論,等你發(fā)揮!