在閱讀本文前,有幾個(gè)熱身的問(wèn)題,您嘗試回答一下。
2. 大語(yǔ)言模型開(kāi)發(fā)與傳統(tǒng)機(jī)器學(xué)習(xí)開(kāi)發(fā)有什么區(qū)別?
3. 什么是任務(wù)特定模型?
4. 什么是大語(yǔ)言模型的微調(diào)和參數(shù)有效調(diào)整?
下面就讓我們開(kāi)啟探討大語(yǔ)言模型奧秘之旅。
深度學(xué)習(xí)的子領(lǐng)域中有兩個(gè)重要的概念:大型語(yǔ)言模型(LLMs)和生成式人工智能(Generative AI)。這兩者在許多方面都有交集,并且都屬于深度學(xué)習(xí)的研究范疇。如果您對(duì)生成式人工智能感興趣,建議您閱讀金博士的《科普|AI技術(shù)干貨——生成式人工智能詳解》一文。
在過(guò)去的幾年中,生成式人工智能發(fā)展迅速,吸引了大量的關(guān)注。這種類(lèi)型的人工智能能夠生成全新的內(nèi)容,包括文本、圖像、音頻和合成數(shù)據(jù)。
本文我們探討一下什么是大型語(yǔ)言模型。這類(lèi)模型預(yù)先通過(guò)大量的文本數(shù)據(jù)進(jìn)行訓(xùn)練,通常是從互聯(lián)網(wǎng)或其他公開(kāi)可獲取的書(shū)籍中提取的。預(yù)訓(xùn)練期間,模型學(xué)習(xí)并理解文本數(shù)據(jù)的模式和結(jié)構(gòu)。之后,在微調(diào)階段,模型會(huì)根據(jù)特定的任務(wù)進(jìn)行優(yōu)化,這些任務(wù)可能包括機(jī)器翻譯、文本生成、情感分析等。
下面我們通過(guò)幾個(gè)通俗易懂的示例,逐步對(duì)大模型的工作機(jī)理展開(kāi)進(jìn)行講解,希望能夠讓更多的讀者掌握相關(guān)的背景知識(shí)。
首先,讓我們以平時(shí)使用手機(jī)時(shí)的場(chǎng)景作為起點(diǎn),相信大家一定會(huì)對(duì)手機(jī)輸入法的自動(dòng)補(bǔ)全功能有所了解。不知你有沒(méi)有想過(guò)它到底是如何工作的呢?舉例來(lái)說(shuō),當(dāng)輸入"我“之后,系統(tǒng)會(huì)提供一些后續(xù)詞語(yǔ)建議,比如”在“、”的“、”現(xiàn)在“等。為什么會(huì)推薦這幾個(gè)字或詞組呢?因?yàn)?,這些組合是我們經(jīng)常用到的,在日常生活中,使用頻率極高。

當(dāng)我們繼續(xù)輸入或選擇“現(xiàn)在”之后,系統(tǒng)會(huì)進(jìn)一步給出以“我現(xiàn)在...”開(kāi)頭的字、詞和句子的組合建議。

圖 2 手機(jī)輸入“我現(xiàn)在”之后的推薦
我們可以從候選列表中,根據(jù)自己的需要進(jìn)行選擇,比如:“我現(xiàn)在過(guò)來(lái)”等。
上述示例雖然簡(jiǎn)單,卻揭示了大語(yǔ)言模型如何通過(guò)預(yù)測(cè)和建議下一個(gè)可能的詞匯來(lái)幫助我們更高效地進(jìn)行輸入和生成內(nèi)容的機(jī)理。
注:由于存在使用習(xí)慣不同以及使用時(shí)間長(zhǎng)短等因素,每個(gè)人在自己手機(jī)上輸入相同字或詞組之后,系統(tǒng)給出的推薦選項(xiàng)可能會(huì)不同。
在社會(huì)的發(fā)展和演進(jìn)過(guò)程中,詞匯的使用頻率會(huì)隨著時(shí)間的推移而變化。在這個(gè)過(guò)程中,有些詞匯可能會(huì)逐漸被淘汰,而一些新的詞匯又會(huì)出現(xiàn)。舉個(gè)例子,英文單詞"tye"在19世紀(jì)初期的使用頻率相當(dāng)高,然而在今天,你可能需要閱讀幾千萬(wàn)字才能偶然遇到一次。再比如,中文的“先生”一詞,隨著社會(huì)的變化和語(yǔ)言的發(fā)展,這個(gè)詞在不同的時(shí)期,其使用的場(chǎng)景和頻率也會(huì)有很大差別。另外,在科技發(fā)展迅速的今天,許多科技相關(guān)的新詞匯被創(chuàng)造出來(lái),并被廣泛使用,比如“互聯(lián)網(wǎng)”,“智能手機(jī)”,“人工智能”和“類(lèi)腦計(jì)算”等等。


我們可能沒(méi)有注意到,當(dāng)我們?cè)谑褂盟阉饕孢M(jìn)行查詢(xún)時(shí),存在同樣的過(guò)程。搜索引擎會(huì)對(duì)每一個(gè)查詢(xún)進(jìn)行評(píng)分,這個(gè)評(píng)分基于它的使用頻率,也就是看這個(gè)查詢(xún)被多少人使用過(guò)。
同樣的,語(yǔ)言模型也會(huì)通過(guò)類(lèi)似的方法預(yù)測(cè)你接下來(lái)可能要輸入的詞匯或者短語(yǔ)。這一切,都是大語(yǔ)言模型工作的一部分。目前很多AI工具都有當(dāng)語(yǔ)句補(bǔ)全功能,比如,當(dāng)我們要求 ChatGPT 對(duì)輸入“我在上海參加 2023 年世界人工智能大會(huì)...”時(shí),工具會(huì)按照一定的規(guī)則,給出建議的多個(gè)句子,我們可以根據(jù)自己的需要,進(jìn)行選用,這極大地方便了我們的日常工作。

不過(guò),語(yǔ)言建模絕不是給每個(gè)句子分配一個(gè)概率值這么簡(jiǎn)單,固然,使用頻率是一種測(cè)量句子出現(xiàn)可能性的方法。但是,只依賴(lài)于頻率來(lái)預(yù)測(cè)就會(huì)遇到一個(gè)問(wèn)題,那就是無(wú)法給未出現(xiàn)過(guò)的新句子打分。
以"金博士在月球上買(mǎi)了一公頃地修了一座禪院用于招待外星人"為例,這是一個(gè)合理且通順的句子,但可能在到目前為止的所有歷史文本中從未出現(xiàn)過(guò)。在這種情況下,如何為該句子分配一個(gè)概率值?也許,你會(huì)好奇:真的有那么多新的句子可以生成嗎?考慮到每天互聯(lián)網(wǎng)上的帖子數(shù)量之巨,我們是否已經(jīng)窮盡了所有可能的詞匯組合呢?
我們可以進(jìn)行一個(gè)簡(jiǎn)單的計(jì)算:英語(yǔ)中有超過(guò)十萬(wàn)個(gè)詞匯,一個(gè)典型的句子通常包含超過(guò)10個(gè)詞,那么總的組合數(shù)將達(dá)到10的50次方,這是一個(gè)非常大的數(shù)字,遠(yuǎn)超我們的想象。
實(shí)際上,大部分的句子可能永遠(yuǎn)不會(huì)被人所看到或使用。因此,要真正地建模語(yǔ)言,我們需要做的不僅僅是統(tǒng)計(jì)已經(jīng)存在的句子。我們還需要通過(guò)某種方式來(lái)模擬語(yǔ)言的各種規(guī)則,包括語(yǔ)法、風(fēng)格等等。這就需要我們的模型能夠理解和生成語(yǔ)言,而不僅僅是對(duì)歷史數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。這是大語(yǔ)言模型的一個(gè)重要任務(wù),也是它的核心挑戰(zhàn)。
下面是一段來(lái)自諾貝爾獎(jiǎng)得主鮑勃·迪倫的歌曲《Tangled Up In Blue》中的一段歌詞,我們將以這段歌詞為例,討論大語(yǔ)言模型(LLM)生成內(nèi)容的工作機(jī)理。
“Early one morning the sun was shining I was laying in bed wondering if she'd changed at all if her hair was still red”
假設(shè)我們嘗試構(gòu)建一個(gè)可以寫(xiě)出像鮑勃·迪倫那樣的語(yǔ)言模型,我們首先把這段文字看作是一個(gè)時(shí)間序列,每個(gè)單詞都依賴(lài)于前一個(gè)單詞。
注意到單詞“was”出現(xiàn)了三次。我們把這三個(gè)實(shí)例合并成一個(gè),這樣我們的序列就變成了如下的一個(gè)圖。

歌詞中另一個(gè)重復(fù)的詞是`if`,我們也把這兩個(gè)合并一下。

單詞"was"和單詞“if”合并之后的圖如下所示。

把文本視為時(shí)間序列是理解語(yǔ)言模型如何工作的一個(gè)關(guān)鍵概念。在這個(gè)視角下,每個(gè)單詞都可以視為受到它前面單詞影響的結(jié)果。通過(guò)這種方式,模型可以學(xué)習(xí)詞序列的統(tǒng)計(jì)規(guī)律,預(yù)測(cè)接下來(lái)可能出現(xiàn)的詞。如果我們?cè)谶@些邊上添加概率,它就成為了一個(gè)語(yǔ)言模型,你可以使用它來(lái)生成像鮑勃·迪倫那樣的文字。

圖 9 單詞was和 if合并后不同從句的概率分布圖
舉例來(lái)說(shuō),如果從單詞"early"開(kāi)始,可以按照?qǐng)D中紅點(diǎn)從左至右逐字地遵循正確的分支序列,我們將逐步還原鮑勃原始的歌詞,“Early one ...”。

圖 10 根據(jù)概率分布在線鮑勃迪倫的歌詞一
當(dāng)紅點(diǎn)依次移動(dòng)時(shí),如果沒(méi)有分叉就把當(dāng)前的單詞作為預(yù)測(cè)的單詞生成出來(lái)。“Early one morning the ...”。

圖 11 根據(jù)概率分布在線鮑勃迪倫的歌詞二
當(dāng)遇到多路徑的分叉口時(shí),可以根據(jù)后續(xù)路徑可能出現(xiàn)的概率進(jìn)行選著生成,這里我們選擇原歌詞的路徑,如此類(lèi)推... ?!癊arly one morning the sun was shining I was laying in ...”。

圖 12 根據(jù)概率分布在線鮑勃迪倫的歌詞三
在實(shí)際應(yīng)用中,大語(yǔ)言模型會(huì)提供一個(gè)模型參數(shù)供用戶進(jìn)行配置,是單純地按照概率選在下個(gè)路徑中的內(nèi)容,還是增加一定的隨機(jī)性,后續(xù)文章會(huì)有更多的介紹。
下面,我們嘗試生成一個(gè)在歌曲中沒(méi)有出現(xiàn)過(guò)的全新的短語(yǔ)。我們將從"the"開(kāi)始,然后沿著圖中的分支走。

圖 13 從中間開(kāi)始根據(jù)概率分布生成新的類(lèi)似鮑勃迪倫風(fēng)格的歌詞一
這次我們選擇第三個(gè)分支,形成新的短語(yǔ)“the sun was still red”。

圖 14 從中間開(kāi)始根據(jù)概率分布生成新的類(lèi)似鮑勃迪倫風(fēng)格的歌詞二
因?yàn)槲覀兪歉鶕?jù)鮑勃迪倫的歌詞模型生成的新短語(yǔ),雖然是全新的短語(yǔ),但聽(tīng)起來(lái)就像是鮑勃·迪倫的作品。
但是,如果隨機(jī)地嘗試其它的路徑,則可能會(huì)產(chǎn)生奇怪的結(jié)果,其中大部分都是些無(wú)意義的內(nèi)容。例如:“I was shing ...”, "I was still red"等短語(yǔ)。

圖 15 從中間開(kāi)始根據(jù)概率分布生成新的類(lèi)似鮑勃迪倫風(fēng)格的歌詞三
我們將在下面討論如何改善上述簡(jiǎn)單隨機(jī)方法產(chǎn)生垃圾或無(wú)用短語(yǔ)的情形。
通過(guò)上述方法構(gòu)建了一個(gè)簡(jiǎn)單的語(yǔ)言模型,該模型也被稱(chēng)為馬爾科夫模型。這種模型的基本思想是,給定當(dāng)前的單詞,下一個(gè)單詞的概率只取決于當(dāng)前的單詞。這種模型非常有效,因?yàn)樗梢陨尚碌?、在原始?shù)據(jù)中未出現(xiàn)過(guò)的句子,而且這些句子在語(yǔ)法和風(fēng)格上往往都是合理的。
然而,僅僅使用馬爾科夫模型來(lái)生成文本也存在一些問(wèn)題。例如,這種模型無(wú)法很好地處理長(zhǎng)距離的依賴(lài)關(guān)系。也就是說(shuō),如果一個(gè)句子中的某個(gè)詞依賴(lài)于很早之前的詞,那么這種依賴(lài)關(guān)系在馬爾科夫模型中無(wú)法得到很好的處理。另外,由于馬爾科夫模型僅僅關(guān)注單詞的頻率,而沒(méi)有考慮深層的語(yǔ)言結(jié)構(gòu),所以它生成的文本可能在語(yǔ)義上存在問(wèn)題,甚至可能生成一些無(wú)意義的句子。
因此,盡管馬爾科夫模型可以在一定程度上模擬鮑勃·迪倫的寫(xiě)作風(fēng)格,但要生成真正具有深度和感情的文本,我們還需要更復(fù)雜的語(yǔ)言模型。這些模型需要能夠理解和生成語(yǔ)言的深層結(jié)構(gòu),包括語(yǔ)法、語(yǔ)義,甚至是隱含的情感和語(yǔ)境。對(duì)于這段鮑勃·迪倫的詩(shī)句來(lái)說(shuō),如果我們只是簡(jiǎn)單地關(guān)注單詞的頻率和順序,就無(wú)法捕捉到它的旋律、情感和含義。這就需要我們的模型具有更高級(jí)的語(yǔ)言理解能力,這是語(yǔ)言模型的一個(gè)重要目標(biāo),也是它的核心挑戰(zhàn)。
如何使我們的模型更加完善呢?首先,我們可以使用更多的文本來(lái)構(gòu)建我們的模型。如果你使用整首歌來(lái)建立模型,結(jié)果可能會(huì)有所改善。但是,這些生成的句子還是有點(diǎn)奇怪。真正的問(wèn)題在于,我們的模型過(guò)于簡(jiǎn)化。它假設(shè)每個(gè)單詞僅取決于前一個(gè)單詞。我們可以把這種關(guān)系寫(xiě)成條件概率的形式。
這是當(dāng)前單詞Xn在前一個(gè)單詞是 Xn-1時(shí)出現(xiàn)的概率。如果不僅僅考慮兩個(gè)單詞之間的關(guān)系,還考慮三個(gè)單詞連續(xù)出現(xiàn)的情形,那么,我們可能會(huì)得到更好的結(jié)果。下面先建立一個(gè)所有連續(xù)的三元組(trigrams)表格。

我們可以使用這些trigrams來(lái)定義在前兩個(gè)單詞同時(shí)出現(xiàn)的情況下的,當(dāng)前單詞緊跟其后出現(xiàn)的概率。
通過(guò)三元組概率生成文本,其結(jié)果比二元組要稍微好一些,但還是不夠好。問(wèn)題在于,這些單詞之間可能存在相當(dāng)長(zhǎng)距離的依賴(lài)關(guān)系。例如,單詞 red不但與三個(gè)單詞之前的 hair有關(guān),而且也與13個(gè)單詞之前的bed押韻。如果忽略了這些押韻的要求,生成的歌曲就沒(méi)有原來(lái)的味道了。

圖 17 超過(guò)三元組關(guān)聯(lián)的例子
當(dāng)然我們還是可以通過(guò)采用更長(zhǎng)的條件概率函數(shù)來(lái)進(jìn)行下一個(gè)單詞的預(yù)測(cè),比如采用如下的條件概率函數(shù),即當(dāng)前單詞出現(xiàn)的概率和其前面 13 個(gè)單詞都一起出現(xiàn)的情形有關(guān)系。下圖給出了這種組合的可能情形,由圖可以看出,這種組合的可能性太多了,為此我們需要尋求更好的解決方案。

圖 18 基于前面 13 個(gè)單詞的條件概率及其組合的可能性
為了解決上述問(wèn)題,我們需要構(gòu)建一個(gè)更復(fù)雜的模型,這個(gè)模型能夠考慮更長(zhǎng)距離的依賴(lài)關(guān)系。這就需要使用更高級(jí)的模型,比如遞歸神經(jīng)網(wǎng)絡(luò)(RNN)或者變換器(Transformer)模型。這些模型可以記住之前的信息,從而處理長(zhǎng)距離的依賴(lài)關(guān)系。
例如,遞歸神經(jīng)網(wǎng)絡(luò)(RNN)通過(guò)將前一個(gè)時(shí)間步的隱藏狀態(tài)作為輸入來(lái)處理長(zhǎng)距離的依賴(lài)關(guān)系。這意味著,模型在生成下一個(gè)單詞時(shí),會(huì)考慮到所有之前的單詞,而不僅僅是前一個(gè)或前兩個(gè)單詞。
而變換器(Transformer)模型則通過(guò)自注意力機(jī)制來(lái)處理長(zhǎng)距離的依賴(lài)關(guān)系。自注意力機(jī)制允許模型在生成下一個(gè)單詞時(shí),注意到所有之前的單詞,并根據(jù)這些單詞的重要性賦予它們不同的權(quán)重。
通過(guò)使用這些更復(fù)雜的模型,我們可以更好地模擬像鮑勃·迪倫那樣的語(yǔ)言風(fēng)格,處理長(zhǎng)距離的依賴(lài)關(guān)系,甚至模擬詩(shī)歌的押韻和節(jié)奏。
下面我們將從神經(jīng)網(wǎng)絡(luò)的角度繼續(xù)探討上述文本生成的例子。
如前所述,為了精確對(duì)語(yǔ)言建模,需要引入更長(zhǎng)或更復(fù)雜的條件概率函數(shù)。由于這些函數(shù)的復(fù)雜程度極高,我們無(wú)法對(duì)其進(jìn)行精確模擬,不過(guò),我們可以嘗試對(duì)其進(jìn)行近似。對(duì)某個(gè)函數(shù)的近似方法有許多,比如大家熟知的傅立葉級(jí)數(shù),它通過(guò)正弦和余弦來(lái)近似一個(gè)函數(shù),或者是泰勒級(jí)數(shù),它由多項(xiàng)式的和組成。這兩者都被認(rèn)為是通用近似器,因?yàn)樗鼈儙缀跄芙迫魏魏瘮?shù)。
神經(jīng)網(wǎng)絡(luò)則是另一種通用的近似器,它的優(yōu)勢(shì)在于,不需要對(duì)要近似的函數(shù)有詳細(xì)的了解,只需要知道輸入和輸出的對(duì)應(yīng)數(shù)據(jù)即可。

我們來(lái)使用神經(jīng)網(wǎng)絡(luò)嘗試一個(gè)函數(shù)近似的例子。這個(gè)函數(shù)的表達(dá)式為f(x) = sin(x) - x^2/2

圖 20 函數(shù) sin(x)-x^2/10
我們的目標(biāo)是嘗試用一個(gè)包含五個(gè)節(jié)點(diǎn)和八個(gè)權(quán)重的神經(jīng)網(wǎng)絡(luò)對(duì)其進(jìn)行近似。

圖 21 用神經(jīng)網(wǎng)絡(luò)來(lái)近似一個(gè)正弦函數(shù)
首先,我們選取圖形上的一個(gè)x位置,并將這個(gè)值通過(guò)神經(jīng)網(wǎng)絡(luò)進(jìn)行傳遞。在第一層中,神經(jīng)網(wǎng)絡(luò)將x復(fù)制多份,并將每個(gè)復(fù)制品乘以一個(gè)獨(dú)立的權(quán)重。

接下來(lái),每個(gè)加權(quán)副本會(huì)通過(guò)一個(gè)名為sigmoid的S型曲線激活函數(shù)進(jìn)行處理,然后乘以新的權(quán)重并加起來(lái)。這個(gè)結(jié)果,我們稱(chēng)之為y,是對(duì)函數(shù)f(x)的近似值。

我們可以把y的值繪制出來(lái),觀察其與我們?cè)噲D擬合的函數(shù)的差距。

這個(gè)差距我們稱(chēng)之為誤差。在開(kāi)始時(shí),可以看到誤差相當(dāng)大。這主要是由于我們隨機(jī)生成的權(quán)重。為了減小這個(gè)誤差,我們不僅僅處理一個(gè)數(shù)據(jù)點(diǎn),而是向網(wǎng)絡(luò)發(fā)送許多不同的x值,生成一系列的y 值,在下圖中以紅線表示。

然后,我們定義一個(gè)誤差函數(shù),該函數(shù)的目標(biāo)是累計(jì)所有這些紅線和藍(lán)線之間的差異。這些誤差將被用來(lái)更新權(quán)重,這個(gè)過(guò)程我們稱(chēng)之為神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。

經(jīng)過(guò)數(shù)千次乃至幾萬(wàn)次的的重復(fù)更新后,我們將得到一條能夠非常好地?cái)M合原函數(shù)的曲線。

圖 27 經(jīng)過(guò)多次訓(xùn)練后神經(jīng)網(wǎng)絡(luò)可以擬合正弦函數(shù)的 gif 圖示
上述函數(shù)近似過(guò)程,另外一種理解方法是,我們可以將誤差函數(shù)看作是一種地形圖,目標(biāo)就是尋找最低點(diǎn)或者說(shuō)是最低的盆地。如果我們能直接看到整個(gè)函數(shù)的圖形,那么尋找最低點(diǎn)相對(duì)比較直接。但在實(shí)際情況中,我們往往無(wú)法直接看到整個(gè)函數(shù),就像是在霧中尋找方向一樣困難。

在這種情況下,我們通常會(huì)根據(jù)在當(dāng)前位置的觀察來(lái)決定下一步的移動(dòng)。也就是說(shuō),我們會(huì)在當(dāng)前的位置計(jì)算函數(shù)的梯度,這個(gè)梯度會(huì)指向函數(shù)值下降最快的方向。然后我們按照這個(gè)方向進(jìn)行移動(dòng),這個(gè)過(guò)程就叫做梯度下降。

圖 29 按照梯度下降進(jìn)行誤差優(yōu)化的示意圖
在優(yōu)化神經(jīng)網(wǎng)絡(luò)的過(guò)程中,梯度下降是一種常見(jiàn)的方法。我們需要的是誤差函數(shù)的梯度,這是一個(gè)向量,每個(gè)元素對(duì)應(yīng)一個(gè)神經(jīng)網(wǎng)絡(luò)權(quán)重的偏導(dǎo)數(shù)。計(jì)算這些偏導(dǎo)數(shù)的過(guò)程對(duì)于神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)并不復(fù)雜,我們可以在網(wǎng)絡(luò)中反向傳播過(guò)程中一次性計(jì)算完所有的偏導(dǎo)數(shù),這個(gè)過(guò)程被稱(chēng)為反向傳播。
反向傳播在神經(jīng)網(wǎng)絡(luò)中有著至關(guān)重要的作用,它使得神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)到從輸入到輸出的映射關(guān)系。經(jīng)過(guò)大量的訓(xùn)練數(shù)據(jù)和反復(fù)的迭代,神經(jīng)網(wǎng)絡(luò)的權(quán)重將逐步優(yōu)化,使得網(wǎng)絡(luò)的輸出與真實(shí)的目標(biāo)值越來(lái)越接近。這也是神經(jīng)網(wǎng)絡(luò)能夠在眾多任務(wù),如圖像識(shí)別、自然語(yǔ)言處理等領(lǐng)域表現(xiàn)出色的重要原因。