AI大模型是怎么從一個(gè)“小白”到學(xué)會(huì)人類語言的
大模型從一個(gè)“小白”變成一個(gè)掌握人類語言的過程稱之為“預(yù)訓(xùn)練(Pretrain)”,本文嘗試用盡量“大白話”的方式描述大模型是如何“預(yù)訓(xùn)練”的。
預(yù)訓(xùn)練階段,我們都對(duì)小白做了什么?
(這一階段所需要的訓(xùn)練數(shù)據(jù)是最大的,也是最耗時(shí))
- 不停的閱讀大量大量的人類文字資料
- 亦步亦趨的學(xué)習(xí)人類是如何使用文字的(一字一字的學(xué)習(xí))
- 學(xué)習(xí)到最多的人類知識(shí),學(xué)習(xí)到大量的文字表達(dá)方式
訓(xùn)練這么多數(shù)據(jù)用來干什么?
為了讓小白“掌握”人類語言。
首先我們要知道一個(gè)概念,即所謂模型,有三個(gè)關(guān)鍵要素,“輸入,輸出,以及中間的處理機(jī)制”。比如DeepSeek-R1是一種模型,你給它一個(gè)問題(輸入),它經(jīng)過自身的分析處理后,還給你一個(gè)回答(輸出)。
拿漢字舉例,假設(shè)所有漢字共5000個(gè)。小白經(jīng)過訓(xùn)練后,就知道了這5000字當(dāng)中的每一個(gè)字與其他4999個(gè)字之間的關(guān)系。這個(gè)關(guān)系是怎么得出來的呢?
- 將每個(gè)漢字轉(zhuǎn)化為一個(gè)Token,可理解為一串編碼或者每個(gè)字的身份證號(hào)碼(實(shí)際上漢字和Token不是一一對(duì)應(yīng)的關(guān)系,1個(gè)漢字可能由1個(gè)或多個(gè)Token組成)
- 有了身份證,那小白此時(shí)就認(rèn)識(shí)每個(gè)漢字了,但它還無法知道字與字之間的關(guān)系。比如“人”和“類”有一定的關(guān)系1,可以組成“人類”,“人”和“們”也有一定的關(guān)系2,可以組成“人們”,其中關(guān)系1和關(guān)系2表示所代表的關(guān)系程度會(huì)不一樣,比如在某些場(chǎng)景下,可能“人”和“類”的關(guān)系程度要大于“人”和“們”,有些場(chǎng)景下則可能相反。這時(shí),小白就需要用一種方法來衡量這些關(guān)系,這個(gè)方法就是將Token進(jìn)行向量化。因?yàn)槊總€(gè)向量都代表唯一1個(gè)坐標(biāo),坐標(biāo)與坐標(biāo)之間就會(huì)有距離,所以此時(shí)就相當(dāng)于讓每個(gè)漢字之間都有了一個(gè)“距離”;
- 距離越近,代表越相似即關(guān)系越程度越大。(比如推薦策略中,每個(gè)物或人都被量化為一個(gè)向量,判斷給什么人推什么東西時(shí)也會(huì)用到相似推薦,其實(shí)這里的“相似”也是看向量的距離,一般常用余弦計(jì)算夾角,越小代表越相似)
- 就像上述“2”所描述的,字與字之間的關(guān)系程度不是唯一的,需要帶入實(shí)際當(dāng)時(shí)的場(chǎng)景(上下文含義)進(jìn)行計(jì)算。
(實(shí)際的訓(xùn)練過程遠(yuǎn)比這個(gè)復(fù)雜,還有位置向量需要參與計(jì)算等等)
以上,向量里的每個(gè)坐標(biāo)分別是多少呢?
簡(jiǎn)化點(diǎn),拿3維向量舉例;
假設(shè)我們定義漢字“人”為a(a1,a2,a3),其中a1,a2,a3這3個(gè)參數(shù)分別是多少呢?
另外4999個(gè)字的各自向量的參數(shù)分別又是多少呢?
假設(shè)我們?nèi)藶橐?guī)定每個(gè)坐標(biāo)的取值只能為0-99之間的整數(shù)(即每個(gè)坐標(biāo)各自有100種取值)
小白在預(yù)訓(xùn)練之前,它也不知道每個(gè)參數(shù)是多少,人類科學(xué)家也是不知道的。但我們可以在第1次訓(xùn)練時(shí),給每個(gè)參數(shù)隨機(jī)賦一個(gè)值,然后通過上述訓(xùn)練步驟(學(xué)習(xí)人類文字資料)來測(cè)試這輪隨機(jī)賦值準(zhǔn)確的概率(設(shè)想一下,假設(shè)小白通過閱讀了人類幾乎所有有記載的文字內(nèi)容,那么它就知道了每個(gè)字與其他字在什么“場(chǎng)景、語境”下該是什么關(guān)系,當(dāng)它在某個(gè)上下文場(chǎng)景下看到某個(gè)字時(shí),它就能判斷下一個(gè)字大概是什么),通過一輪輪迭代調(diào)試,小白就逐漸掌握了人類的表達(dá)方式,這個(gè)“逐漸掌握人類表達(dá)方式的過程”就是“不斷調(diào)整參數(shù)的過程”,最終就確定了這個(gè)小白的這個(gè)版本的預(yù)訓(xùn)練階段的每個(gè)參數(shù)的值(訓(xùn)練過程大致描述放到了文章后面)。
到這里,假設(shè)給小白輸入一個(gè)漢字“人”,讓它輸出下一個(gè)字是什么,此時(shí)5000個(gè)字每個(gè)字都有成為下一個(gè)字的可能(即概率),且每個(gè)字的概率值不同,所有字的概率之和為100%。輸入的字越多,它輸出下一個(gè)字的準(zhǔn)確性會(huì)越高,比如輸入“人類簡(jiǎn)”,下一個(gè)字的范圍就被大大縮?。ū热纭笆贰?、“介”、“要”、“值”……這些字的概率就會(huì)遠(yuǎn)大于其他字),又比如輸入“我想閱讀的書的名字叫《人類簡(jiǎn)”,此時(shí)下一個(gè)字是“史”的概率就非常大了。
當(dāng)我們給小白輸入一個(gè)問題時(shí),它開始回答輸出第1個(gè)字,然后把這個(gè)字和用戶的問題一起打包再返回給小白,小白把這個(gè)打包的整體當(dāng)成一個(gè)問題繼續(xù)輸出第2個(gè)字,依次類推,直到輸出最后一個(gè)字。
這里有個(gè)問題,小白怎么判斷回答完畢了呢?
它在訓(xùn)練階段會(huì)把所有的標(biāo)點(diǎn)符號(hào)都當(dāng)成一個(gè)特殊的字進(jìn)行處理,也定義了開始符和結(jié)束符,同時(shí)也把開始符和結(jié)束符當(dāng)成特殊的字進(jìn)行處理,只不過開始符和結(jié)束符用戶是不會(huì)輸出給用戶的。所以當(dāng)輸出“結(jié)束符”時(shí),就回答完了。
(因?yàn)樵谟?xùn)練階段,喂給小白的文字資料里,每個(gè)句子,每段話,哪里用的是什么標(biāo)點(diǎn)符合,以及句子怎么開始的,怎么結(jié)束的,這些都是客觀存在的,所以可以把它們看成一種特殊的字讓小白學(xué)會(huì))
所以不論哪個(gè)大模型,在輸出回答時(shí)都是一個(gè)字一個(gè)字的往外蹦,并且同一個(gè)問題每次的回答都不一樣,根本原因是大模型的本質(zhì)是一個(gè)概率輸出機(jī)器,正因?yàn)檫@樣,所以大模型才會(huì)有幻覺,才會(huì)在有些時(shí)候沒有依據(jù)的胡編亂造,沒辦法,當(dāng)遇到訓(xùn)練階段它沒有學(xué)習(xí)到的東西時(shí),它就沒有辦法讓本應(yīng)是相對(duì)正確的“下一個(gè)字”輸出,而輸出了那個(gè)看似幻覺的“下一個(gè)字”。
正因?yàn)榇竽P褪莻€(gè)概率機(jī)器,所以它是不知道時(shí)間,不知道空間位置,不知道天氣的。比如你問大模型,今天天氣如何?它無法回答你,因?yàn)樗恢澜裉焓悄奶?,也不知道你要問哪里的天氣,它也沒法知道你當(dāng)前在哪。
那有人會(huì)問了,不對(duì)呀,我問DeepSeek今天天氣時(shí),它就能告訴我今天的天氣啊。
那是因?yàn)槲覀冇玫倪@個(gè)DeepSeek是在DeepSeek大模型(不選深度思考時(shí)連接V3,選擇的話連接R1)的基礎(chǔ)上封裝的一個(gè)應(yīng)用產(chǎn)品,已經(jīng)不只是一個(gè)大模型了,它在回答天氣時(shí),是大模型讓這個(gè)產(chǎn)品去調(diào)用了某個(gè)“日期”,“天氣“相關(guān)的API或插件等等。
實(shí)際的訓(xùn)練的過程大概是這樣:假設(shè)小白獲取到的所有漢字資料加起來共有7.5萬億個(gè)漢字,將這7.5萬億個(gè)漢字按20000個(gè)字為單位,共切成3.75億個(gè)段落。每個(gè)段落都會(huì)找小白說,你趕緊把我訓(xùn)練聰明點(diǎn)-讓我理解我的這20000個(gè)字組成的段落是什么意思吧。
這樣經(jīng)過一輪輪迭代訓(xùn)練,每個(gè)段落就逐漸理解了自己的段落的意思了。
這里有個(gè)詞叫“段落聯(lián)合概率”:段落的20000字,每個(gè)字都有一個(gè)輸出概率,20000個(gè)字每個(gè)字的概率相乘就是段落聯(lián)合概率,訓(xùn)練每個(gè)段落的目的就是提升每個(gè)段落的段落聯(lián)合概率,只有這個(gè)概率足夠高,小白才能足夠理解段落所表示的含義。那這里會(huì)有3.75億個(gè)段落聯(lián)合概率,每個(gè)段落都去找小白要求訓(xùn)練自己,小白感到壓力山大。因?yàn)橛?xùn)練的目的是提升小白的能力,它不可能讓每個(gè)段落聯(lián)合概率都提升。于是就它就規(guī)定了一個(gè)綜合不滿意度,也就是把所有段落看成一個(gè)整體,現(xiàn)在的訓(xùn)練目標(biāo)就變成了降低這個(gè)綜合不滿意度(每個(gè)段落的不滿意度的綜合值,訓(xùn)練過程中,有的段落的段落聯(lián)合概率會(huì)變低及不滿意度會(huì)變高,但只有綜合不滿意度是提升的,小白就是在進(jìn)步的),那么小白理解人類語言的能力就會(huì)提升。(這里的綜合不滿意度在訓(xùn)練里叫作損失函數(shù)。通過調(diào)參降低損失函數(shù)的過程叫作梯度下降。訓(xùn)練過程中所用的方法是神經(jīng)網(wǎng)絡(luò)。訓(xùn)練過程中的絕大部分參數(shù)都在神經(jīng)網(wǎng)絡(luò)階段)。
大模型每完成1次訓(xùn)練稱作Epoch(輪次/周期)-表示模型在訓(xùn)練過程中完整遍歷整個(gè)訓(xùn)練數(shù)據(jù)集1次。實(shí)際的大模型訓(xùn)練過程需要完成多次Epoch,為什么要進(jìn)行多次呢?
- 學(xué)習(xí)更充分:模型需要多次接觸數(shù)據(jù)才能捕捉復(fù)雜模式(尤其深層神經(jīng)網(wǎng)絡(luò))。好比我們常說的“你到底幾個(gè)意思”,就是說一句話經(jīng)常會(huì)包含不止1個(gè)意思,大模型如果只1次Epoch,則會(huì)漏掉很多意思。
- 避免欠擬合:?jiǎn)蝹€(gè)Epoch可能不足以讓模型學(xué)到有效特征。
- 梯度優(yōu)化:通過多次更新參數(shù)逐步逼近最優(yōu)解(類似下山需要多步-梯度下降是個(gè)很復(fù)雜的過程)。
就好比我們正在復(fù)習(xí)準(zhǔn)備考試:
- 訓(xùn)練數(shù)據(jù):課本內(nèi)容
- Epoch:從頭到尾完整復(fù)習(xí)一遍課本
- 多個(gè)Epoch:反復(fù)復(fù)習(xí)同一課本多次,直到知識(shí)點(diǎn)全部掌握
這里還有個(gè)詞叫Batch(批次)-可類比課本的章節(jié),是指由于待訓(xùn)練的數(shù)據(jù)集太大,模型很能一次性學(xué)習(xí)所有數(shù)據(jù),所以需要拆分來訓(xùn)練(一章一章的學(xué),當(dāng)然實(shí)際上大模型是并行訓(xùn)練的,而人類是串行學(xué)習(xí)的),比如上面提到的3.75億個(gè)段落,就是3.75億Batch。每訓(xùn)練1個(gè)Batch,就表示1次調(diào)參的過程,每次調(diào)參,可理解為控制讓其中1個(gè)參數(shù)變化,其他所有參數(shù)都不變,看這個(gè)可變參數(shù)(被調(diào)參數(shù))是增大還是減小能使當(dāng)前Batch的段落聯(lián)合概率提升(即使整體那個(gè)損失函數(shù)降低-梯度下降)。
以此方法,把當(dāng)前Epoch里的所有參數(shù)全部調(diào)1遍。這個(gè)過程相當(dāng)于“復(fù)習(xí)課本的第1個(gè)章節(jié)-做題“的過程,這一過程我們逐漸背下了很多知識(shí)點(diǎn)很多題目的答案,做題出錯(cuò)率自然就會(huì)降低-損失函數(shù)降低,但是,這就代表我們一定能考得好嗎?肯定不是,考試題目大概率是課本上沒有的,所以要想驗(yàn)證我們是否真的掌握了這一章節(jié)的內(nèi)容,還需要通過考試來驗(yàn)證,大模型訓(xùn)練也是,調(diào)完參數(shù)后,需要驗(yàn)證集數(shù)據(jù)進(jìn)行驗(yàn)證,如果“驗(yàn)證損失函數(shù)“值也下降,說明本輪訓(xùn)練參數(shù)有效,可以繼續(xù)調(diào)參。
實(shí)際訓(xùn)練過程中:
Epoch數(shù)量的選擇:
太少:模型未收斂(欠擬合)
比如圖像分類任務(wù)中,5個(gè)Epoch可能只能達(dá)到60%準(zhǔn)確率
太多:過擬合
比如100個(gè)Epoch后訓(xùn)練集準(zhǔn)確率90%,但驗(yàn)證集準(zhǔn)確率下降
如何避免:通過驗(yàn)證集監(jiān)控,使用早停法(Early Stopping)
曲線觀測(cè):
理想情況:訓(xùn)練損失下降,驗(yàn)證損失也下降,則繼續(xù)訓(xùn)練
過擬合信號(hào):訓(xùn)練損失下降,驗(yàn)證損失上升,則停止訓(xùn)練
比如:備考數(shù)學(xué),刷了1000道練習(xí)題,都背下了,訓(xùn)練損失下降,真正考試時(shí),遇到同知識(shí)點(diǎn)的新題,不會(huì)了,驗(yàn)證損失上升—過擬合,實(shí)際硬背下了1000題的答案,但沒理解解題方法。
過擬合可理解為模型過于復(fù)雜了,記憶力太強(qiáng)了,比如記下了圖片中的噪點(diǎn),把噪點(diǎn)也當(dāng)做分類特征了。
到這里,這個(gè)被訓(xùn)練過的小白就已經(jīng)是一個(gè)很熟悉人類語言的模型了,它“閱讀”了大量的人類資料,語言能力與人類相近,只要給出一些初始文字,猜下一個(gè)字的能力與人類差不多。
但,此時(shí)它還不會(huì)“做任務(wù)”。這就好比一個(gè)人上了學(xué)學(xué)了很多知識(shí),但你讓他去完成一件具體“工作”,他還是不會(huì)的,比如實(shí)習(xí)生,剛開始工作時(shí)需要有人帶,教他該怎么做。因?yàn)樵陬A(yù)訓(xùn)練階段LLM只是“閱讀”了大量人類資料,它并沒有經(jīng)過“任務(wù)”訓(xùn)練(SFT階段-這里先不展開)。它只是理解了人類文字,但還不會(huì)做“任務(wù)”-不會(huì)回答問題(只會(huì)“接話茬”)。好比一個(gè)人畢業(yè)了,但此時(shí)他還沒有工作的能力。需要實(shí)習(xí),實(shí)習(xí)的過程可看作SFT。
本文由 @弋十三 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于 CC0 協(xié)議。
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
明白了,大模型的學(xué)習(xí)過程需要海量數(shù)據(jù)和復(fù)雜計(jì)算,其掌握語言的能力真的令人驚嘆。