未經(jīng)許可不得轉(zhuǎn)載,務(wù)必保留原文出處鏈接和公眾號(hào)名片

打開(kāi)網(wǎng)易新聞 查看精彩圖片

整理:Web3天空之城

【城主說(shuō)】在這個(gè)星球上能把大模型原理講得最深入淺出的大神,私以為OpenAI創(chuàng)始人之一的Andrej Karpathy是毫無(wú)疑問(wèn)的最佳候選人之一??催^(guò)他之前講座的同學(xué)一定能贊同這個(gè)說(shuō)法。

Andrej昨天放出了一個(gè)3.5小時(shí)的長(zhǎng)篇視頻講座,如大神原話,在這個(gè)講座里,他面向大眾完整討論了ChatGPT 及相關(guān)產(chǎn)品的技術(shù)原理 ,深入探討驅(qū)動(dòng) ChatGPT 及相關(guān)產(chǎn)品的 LLM 人工智能技術(shù)。整個(gè)講座涵蓋了模型開(kāi)發(fā)的完整訓(xùn)練流程,以及如何理解其“心理模型”,以及如何在實(shí)際應(yīng)用中最好地利用它們。

Andrej大約一年前已經(jīng)制作了一個(gè)“LLM 簡(jiǎn)介”視頻,但他認(rèn)為那只是對(duì)一次隨機(jī)演講的重新錄制,所以希望制作一個(gè)更全面、更詳盡的版本。

這個(gè)講座剛發(fā)布到網(wǎng)上,但已經(jīng)被譽(yù)為"可能是最好大模型的深入科普”,基本上,城主認(rèn)為如果想要從零深入了解大語(yǔ)言模型,這就是你能找到的最好資料了。

這個(gè)講座的完整中英視頻可以在本城B站觀看,有興趣的同學(xué)可以配合服用:【大神Andrej Karpathy最新講座:深入探討ChatGPT類大語(yǔ)言模型-嗶哩嗶哩】 https://b23.tv/pjyRR5g

本城整理了講座全文共5萬(wàn)字。講座并不含特別的ppt,直接學(xué)習(xí)文字版也非常順暢。推薦給想認(rèn)真了解學(xué)習(xí)大模型的各位。

最后值得一提的是,這個(gè)講座里, Andrej特別點(diǎn)贊了DeepSeek開(kāi)源R1和公開(kāi)論文的重要性,或許這正是激勵(lì)他做出這個(gè)完整講座的原因之一:

“許多公司,例如OpenAI等大型語(yǔ)言模型提供商,內(nèi)部已嘗試使用強(qiáng)化學(xué)習(xí)微調(diào)大型語(yǔ)言模型,但鮮有公開(kāi)討論。所有工作都在公司內(nèi)部進(jìn)行。

DeepSeek論文的意義在此凸顯。這篇來(lái)自DeepSeek AI公司的論文,首次公開(kāi)討論了大型語(yǔ)言模型的強(qiáng)化學(xué)習(xí)微調(diào),及其重要性以及如何提升模型的推理能力。這篇論文重新激發(fā)了公眾對(duì)使用強(qiáng)化學(xué)習(xí)訓(xùn)練大型語(yǔ)言模型的興趣,并提供了許多復(fù)制結(jié)果及模型實(shí)際運(yùn)行所需的細(xì)節(jié)信息?!?/p>

講座中涉及的各個(gè)引用鏈接:

ChatGPT:https://chatgpt.com/

FineWeb (預(yù)訓(xùn)練數(shù)據(jù)集):

https://huggingface.co/spaces/HuggingFaceFW/blogpost-fineweb-v1

Tiktokenizer:https://tiktokenizer.vercel.app/

Transformer神經(jīng)網(wǎng)絡(luò)3D可視化工具:https://bbycroft.net/llm

llm.c 讓我們復(fù)現(xiàn)GPT-2:

https://github.com/karpathy/llm.c/discussions/677

Meta的Llama 3論文:https://arxiv.org/abs/2407.21783

Hyperbolic,用于基礎(chǔ)模型的推理:https://app.hyperbolic.xyz/

InstructGPT關(guān)于SFT(監(jiān)督微調(diào))的論文:

https://arxiv.org/abs/2203.02155

HuggingFace推理playground:

https://huggingface.co/spaces/huggingface/inference-playground

DeepSeek-R1論文:https://arxiv.org/abs/2501.12948

TogetherAI Playground,用于開(kāi)放模型推理:

https://api.together.xyz/playground

AlphaGo論文 (PDF):

https://discovery.ucl.ac.uk/id/eprint/10045895/1/agz_unformatted_nature.pdf

AlphaGo第37步視頻:https://www.youtube.com/watch?v=HT-UZkiOLv8&t=0s

LM Arena,用于模型排名:https://lmarena.ai/

AI新聞通訊:https://buttondown.com/ainews

LMStudio,用于本地推理:https://lmstudio.ai/

我在視頻中使用的可視化UI:https://excalidraw.com/

我們構(gòu)建的Excalidraw的特定文件:

https://drive.google.com/file/d/1EZh5hNDzxMMy05uLhVryk061QYQGTxiN/view?usp=sharing

Eureka Labs和本視頻的Discord頻道:

https://discord.gg/3zy8kqD9Cp

-講座全文·天空之城整理版-

大家好。我一直想制作這個(gè)視頻,它將全面但通俗地介紹大型語(yǔ)言模型,例如ChatGPT。我的目標(biāo)是幫助大家理解這項(xiàng)工具,形成相應(yīng)的思維模型。它在某些方面令人驚嘆,但在其他方面表現(xiàn)不佳,并且還存在許多值得關(guān)注的問(wèn)題。

那么,這個(gè)文本框背后究竟是什么?你可以輸入任何內(nèi)容并按下回車鍵,但我們應(yīng)該輸入什么?生成的文字是什么?它是如何工作的?你究竟在與什么對(duì)話?我希望在這個(gè)視頻中涵蓋所有這些主題,完整地講解這些模型的構(gòu)建過(guò)程,并力求讓所有內(nèi)容都易于理解。

讓我們首先看看如何構(gòu)建像ChatGPT這樣的模型,同時(shí)我也會(huì)討論這些工具的認(rèn)知心理學(xué)意義。讓我們開(kāi)始構(gòu)建ChatGPT。這將分為多個(gè)階段,按順序進(jìn)行。第一階段是預(yù)訓(xùn)練階段。

預(yù)訓(xùn)練階段的第一步是下載和處理互聯(lián)網(wǎng)數(shù)據(jù)。為了了解這大致是什么樣子,我建議您訪問(wèn)Hugging Face公司收集、創(chuàng)建和整理了一個(gè)名為FineWeb的數(shù)據(jù)集,這篇博文詳細(xì)介紹了他們的構(gòu)建過(guò)程。所有主要的LLM提供商,例如OpenAI、Anthropic和Google等,都會(huì)在其內(nèi)部擁有類似FineWeb數(shù)據(jù)集的東西。

我們想要從互聯(lián)網(wǎng)上獲取大量公開(kāi)來(lái)源的文本數(shù)據(jù)。我們需要海量的高質(zhì)量、多樣化的文檔,因?yàn)槲覀兿M@些模型擁有豐富的知識(shí)。因此,我們需要高質(zhì)量文檔的大量多樣性,并且需要很多很多這樣的文檔。實(shí)現(xiàn)這一點(diǎn)相當(dāng)復(fù)雜,需要多個(gè)階段才能完成。讓我們來(lái)看一下其中一些階段。

我想指出的是,例如FineWeb數(shù)據(jù)集,它相當(dāng)能代表您在生產(chǎn)級(jí)應(yīng)用程序中看到的內(nèi)容,最終僅占用大約44TB的磁盤空間。這幾乎可以存儲(chǔ)在一個(gè)今天的單個(gè)硬盤上。所以最終這并不是一個(gè)巨大的數(shù)據(jù)量,即使互聯(lián)網(wǎng)非常龐大,我們處理的是文本數(shù)據(jù),并且我們也進(jìn)行了積極的過(guò)濾。在這個(gè)例子中,我們最終得到了大約44TB的數(shù)據(jù)。

讓我們來(lái)看一下這些數(shù)據(jù)是什么樣的,以及這些步驟中的一些內(nèi)容。對(duì)于許多這樣的工作,起點(diǎn)以及最終貢獻(xiàn)大部分?jǐn)?shù)據(jù)的……

數(shù)據(jù)源自Common Crawl,這是一個(gè)自2007年以來(lái)持續(xù)掃描互聯(lián)網(wǎng)的組織。截至2024年,Common Crawl已索引27億個(gè)網(wǎng)頁(yè),其爬蟲(chóng)不斷在互聯(lián)網(wǎng)上爬取信息。這通常是從種子網(wǎng)頁(yè)開(kāi)始,遵循所有鏈接,不斷索引信息,最終積累大量互聯(lián)網(wǎng)數(shù)據(jù),成為許多此類工作的起點(diǎn)。

Common Crawl數(shù)據(jù)較為原始,需要進(jìn)行多階段過(guò)濾。首先是URL過(guò)濾,即使用域名黑名單過(guò)濾掉惡意軟件、垃圾郵件、營(yíng)銷、種族主義、成人等網(wǎng)站,這些網(wǎng)站不會(huì)被納入數(shù)據(jù)集。

其次是文本提取。爬蟲(chóng)保存的是網(wǎng)頁(yè)的原始HTML,包含標(biāo)記、CSS等計(jì)算機(jī)代碼。我們需要提取網(wǎng)頁(yè)文本內(nèi)容,因此需要進(jìn)行過(guò)濾和處理,提取優(yōu)質(zhì)內(nèi)容。

然后是語(yǔ)言過(guò)濾。例如,F(xiàn)ineWeb使用語(yǔ)言分類器,只保留英語(yǔ)比例超過(guò)65%的網(wǎng)頁(yè)。這是一個(gè)設(shè)計(jì)決策,不同的公司會(huì)選擇不同的語(yǔ)言比例,這會(huì)影響模型的多語(yǔ)言性能。FineWeb專注于英語(yǔ),其訓(xùn)練出的語(yǔ)言模型在英語(yǔ)方面表現(xiàn)出色,但在其他語(yǔ)言方面可能較弱。

除了以上步驟,還有其他過(guò)濾步驟,例如重復(fù)數(shù)據(jù)刪除和刪除個(gè)人身份信息(PII),如地址、社會(huì)安全號(hào)碼等。這些步驟旨在清洗數(shù)據(jù),確保數(shù)據(jù)集的質(zhì)量和安全性。

但這確實(shí)是預(yù)處理中相當(dāng)重要的一部分,最終你會(huì)得到,例如,F(xiàn)ineWeb數(shù)據(jù)集。點(diǎn)擊它后,可以看到一些實(shí)際效果示例,任何人都可以在Hugging Phase網(wǎng)頁(yè)上下載它。這里有一些最終出現(xiàn)在訓(xùn)練集中的文本示例,例如一篇關(guān)于2012年龍卷風(fēng)的文章,以及一些關(guān)于2012年龍卷風(fēng)及其發(fā)生情況的內(nèi)容。另一個(gè)例子是一篇關(guān)于人體內(nèi)兩個(gè)像9伏電池大小的黃色腎上腺的醫(yī)學(xué)文章,有點(diǎn)奇怪??梢园堰@些想象成互聯(lián)網(wǎng)上的網(wǎng)頁(yè),只是以各種方式過(guò)濾了文本。

現(xiàn)在我們有了大量的文本,40TB,這將成為下一步的起點(diǎn)。我想讓你們直觀地了解我們現(xiàn)在所處的位置,所以我取了這里的前200個(gè)網(wǎng)頁(yè)——記住我們有很多網(wǎng)頁(yè)——我只是把所有文本放在一起,連接起來(lái)。這就是我們最終得到的結(jié)果:這些原始文本,原始的互聯(lián)網(wǎng)文本,即使在這200個(gè)網(wǎng)頁(yè)中也有大量文本。我可以在此處繼續(xù)縮小比例,我們只是擁有這幅巨大的文本數(shù)據(jù)織錦。這些文本數(shù)據(jù)包含所有這些模式,我們現(xiàn)在要做的是,我們要開(kāi)始使用這些數(shù)據(jù)訓(xùn)練神經(jīng)網(wǎng)絡(luò),以便神經(jīng)網(wǎng)絡(luò)能夠內(nèi)化并模擬這些文本的流動(dòng)方式。所以我們只是擁有這巨大的文本結(jié)構(gòu),現(xiàn)在我們想要獲得能夠模仿它的神經(jīng)網(wǎng)絡(luò)。

好,現(xiàn)在在我們把文本輸入神經(jīng)網(wǎng)絡(luò)之前,我們必須決定如何表示這些文本以及如何將其輸入。現(xiàn)在,我們的這項(xiàng)技術(shù)對(duì)于這些神經(jīng)網(wǎng)絡(luò)的工作方式是,它們期望一個(gè)一維符號(hào)序列,并且它們需要一組有限的可能的符號(hào)。因此,我們必須決定符號(hào)是什么,然后我們必須將我們的數(shù)據(jù)表示為這些符號(hào)的一維序列。所以現(xiàn)在我們擁有一維文本序列,它從這里開(kāi)始,然后到那里,再到這兒,等等。所以這是一個(gè)一維序列,盡管在我的顯示器上,它當(dāng)然是二維布局的,但是它是從左到右,從上到下,對(duì)吧?所以它是一個(gè)文本的一維序列。

現(xiàn)在,既然是計(jì)算機(jī),當(dāng)然這里有一個(gè)底層的表示。所以我如果使用所謂的UTF-8編碼這個(gè)文本,那么我就可以得到與計(jì)算機(jī)中這個(gè)文本對(duì)應(yīng)的原始位??雌饋?lái)像這樣。所以事實(shí)證明,例如,這里最前面的這個(gè)條形代表前八位,作為一個(gè)例子。那么這個(gè)東西是什么呢,對(duì)吧?從某種意義上說(shuō),這就是我們正在尋找的表示。我們只有兩種可能的符號(hào),0和1,并且我們有一個(gè)非常長(zhǎng)的序列,對(duì)吧?事實(shí)證明,在我們的神經(jīng)網(wǎng)絡(luò)中,這個(gè)序列長(zhǎng)度實(shí)際上是一種非常有限和寶貴的資源,我們實(shí)際上不希望出現(xiàn)僅由兩個(gè)符號(hào)組成的極長(zhǎng)序列。

相反,我們想要權(quán)衡詞匯表符號(hào)大小和由此產(chǎn)生的序列長(zhǎng)度。我們不希望只有兩個(gè)符號(hào)和極長(zhǎng)的序列,而是需要更多符號(hào)和更短的序列。

一種簡(jiǎn)化序列的方法是將連續(xù)的八位比特組合成一個(gè)字節(jié)。由于比特只有開(kāi)或關(guān)兩種狀態(tài),八位比特共有256種組合。因此,可以將序列重新表示為字節(jié)序列,長(zhǎng)度縮短八倍,但符號(hào)數(shù)量增加到256個(gè)(0到255)。 我建議不要將這些數(shù)字視為數(shù)值,而應(yīng)視為唯一的ID或符號(hào),例如獨(dú)特的emoji。

事實(shí)上,先進(jìn)的語(yǔ)言模型會(huì)進(jìn)一步縮短序列長(zhǎng)度,因?yàn)樵黾釉~匯表符號(hào)是寶貴的資源。方法是運(yùn)行字節(jié)對(duì)編碼算法,該算法尋找常見(jiàn)的連續(xù)字節(jié)或符號(hào),例如“116, 32”。將這類對(duì)組合成一個(gè)新的符號(hào)(例如ID為256),并替換所有出現(xiàn)的“116, 32”。 此算法可以迭代多次,每次都減少序列長(zhǎng)度并增加符號(hào)數(shù)量。實(shí)踐中,一個(gè)不錯(cuò)的詞匯量大小約為100,000個(gè)符號(hào),例如GPT-4使用100,277個(gè)符號(hào)。將原始文本轉(zhuǎn)換為這些符號(hào)(或標(biāo)記)的過(guò)程稱為標(biāo)記化。

接下來(lái),我們看看GPT-4如何進(jìn)行標(biāo)記化,將文本轉(zhuǎn)換為標(biāo)記,以及將標(biāo)記轉(zhuǎn)換回文本的過(guò)程。 我推薦一個(gè)網(wǎng)站TickTokenizer來(lái)探索標(biāo)記表示,選擇CL100K Base(GPT-4基礎(chǔ)模型標(biāo)記器)。在左側(cè)輸入文本,它會(huì)顯示標(biāo)記化結(jié)果。例如,“你好,世界”被標(biāo)記化為兩個(gè)詞元:“你好”(ID為15339)和“世界”(ID為1917)。 將這兩個(gè)詞元連接起來(lái),仍然得到兩個(gè)詞元,而非一個(gè)。

后跟詞元“你好,世界”(不包含“H”)。如果我在“你好”和“世界”之間添加兩個(gè)空格,這將是不同的分詞結(jié)果。這兒有一個(gè)新的詞元220。好吧,你可以自己嘗試一下,看看會(huì)發(fā)生什么。還要記住,這是區(qū)分大小寫的。所以如果這是一個(gè)大寫的“H”,那就是其他的東西了?;蛘呷绻恰澳愫?,世界”,那么實(shí)際上它最終會(huì)變成三個(gè)詞元,因?yàn)橹挥袃蓚€(gè)詞元。是的,你可以玩一下這個(gè),從而對(duì)這些標(biāo)記的工作方式有一個(gè)直觀的感受。我們稍后會(huì)在視頻中再次回到標(biāo)記化部分。

現(xiàn)在,我只是想讓你看看這個(gè)網(wǎng)站。我想讓你看看這段文本最終會(huì)被GPT-4解讀成什么樣子。例如,如果我取其中一行,這就是GPT-4看到的樣子。所以這段文本將是一個(gè)長(zhǎng)度為62的序列。這就是這里的序列。這就是文本塊與這些符號(hào)的對(duì)應(yīng)關(guān)系。同樣,這里有100,277個(gè)可能的符號(hào)?,F(xiàn)在我們有了這些符號(hào)的一維序列。是的,我們稍后會(huì)回到標(biāo)記化,但現(xiàn)在就到這里。

好,我現(xiàn)在所做的就是,我取了數(shù)據(jù)集中這段文本序列,并使用我們的分詞器將其表示為一系列標(biāo)記。這就是它現(xiàn)在的樣子。例如,當(dāng)我們回到FindWeb數(shù)據(jù)集時(shí),他們提到這不僅是44TB的磁盤空間,而且在這個(gè)數(shù)據(jù)集中大約有15萬(wàn)億個(gè)標(biāo)記序列。所以這里,這些只是一些這個(gè)數(shù)據(jù)集的前幾千個(gè)標(biāo)記,我想,但請(qǐng)記住這里有15萬(wàn)億個(gè)標(biāo)記。再一次,請(qǐng)記住,所有這些都代表小的文本塊,它們都只是這些序列的原子。這里的數(shù)字沒(méi)有任何意義,它們只是唯一的ID。

好,現(xiàn)在我們進(jìn)入有趣的部分,那就是神經(jīng)網(wǎng)絡(luò)訓(xùn)練。在訓(xùn)練這些神經(jīng)網(wǎng)絡(luò)時(shí),這是計(jì)算上許多繁重工作發(fā)生的地方。所以我們?cè)谶@步中要做的是,我們想對(duì)這些標(biāo)記在序列中如何相互遵循的統(tǒng)計(jì)關(guān)系進(jìn)行建模。因此,我們進(jìn)入數(shù)據(jù),并提取標(biāo)記窗口。因此,我們相當(dāng)隨機(jī)地從這些數(shù)據(jù)中選取一個(gè)標(biāo)記窗口。窗口的長(zhǎng)度可以在零個(gè)標(biāo)記到我們決定的最大大小之間任意取值。例如,在實(shí)踐中,您可以看到一個(gè)包含例如8000個(gè)標(biāo)記的標(biāo)記窗口。原則上,我們可以使用任意長(zhǎng)度的標(biāo)記窗口,但是處理非常長(zhǎng)的窗口序列在計(jì)算上將非常昂貴。所以我們只是決定,比如說(shuō)8000是一個(gè)好數(shù)字,或者4000,或者16000,然后我們就截?cái)嗟侥抢铩T诖耸纠?,我將選取前四個(gè)標(biāo)記,以便所有內(nèi)容都能很好地顯示。這些標(biāo)記,我們將選取一個(gè)包含四個(gè)標(biāo)記的窗口,分別是bar、view、ing和space single,這些是它們的標(biāo)記ID。

我們現(xiàn)在要做的是預(yù)測(cè)序列中接下來(lái)出現(xiàn)的標(biāo)記。例如,接下來(lái)是3962。我們將這四個(gè)標(biāo)記稱為上下文,它們作為神經(jīng)網(wǎng)絡(luò)的輸入。神經(jīng)網(wǎng)絡(luò)的輸入是可變長(zhǎng)度的標(biāo)記序列,長(zhǎng)度在零到某個(gè)大?。ū热?000)之間。輸出是對(duì)接下來(lái)會(huì)發(fā)生什么的預(yù)測(cè)。

由于我們的詞匯表有100277個(gè)可能的標(biāo)記,神經(jīng)網(wǎng)絡(luò)將輸出100277個(gè)數(shù)字,每個(gè)數(shù)字對(duì)應(yīng)于該標(biāo)記作為序列中下一個(gè)標(biāo)記的概率。神經(jīng)網(wǎng)絡(luò)最初是隨機(jī)初始化的,因此在訓(xùn)練開(kāi)始階段,這些概率也是隨機(jī)的。例如,對(duì)于“空格方向”,神經(jīng)網(wǎng)絡(luò)可能預(yù)測(cè)其概率為4%,“11799”的概率為2%,“3962”(即post)的概率為3%。我們知道正確的答案是3962。

我們有一個(gè)數(shù)學(xué)過(guò)程來(lái)更新神經(jīng)網(wǎng)絡(luò),調(diào)整其概率,使正確答案(3962)的概率更高,而其他標(biāo)記的概率更低。更新后,神經(jīng)網(wǎng)絡(luò)可能會(huì)預(yù)測(cè)“post”的概率為4%,“case”的概率為1%,“direction”的概率為2%。

這個(gè)過(guò)程并非只發(fā)生在一個(gè)標(biāo)記上,而是發(fā)生在整個(gè)數(shù)據(jù)集中的所有標(biāo)記上。我們采樣小的窗口批次,在每個(gè)標(biāo)記上,我們都調(diào)整神經(jīng)網(wǎng)絡(luò),使該標(biāo)記的概率略微提高。所有這些都在這些標(biāo)記的大批量數(shù)據(jù)中并行發(fā)生。

訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過(guò)程是一系列更新過(guò)程,使它的預(yù)測(cè)與訓(xùn)練集中實(shí)際發(fā)生的統(tǒng)計(jì)數(shù)據(jù)相匹配,并使其概率與這些標(biāo)記在數(shù)據(jù)中如何相互跟隨的統(tǒng)計(jì)模式保持一致。

讓我們簡(jiǎn)要了解這些神經(jīng)網(wǎng)絡(luò)的內(nèi)部結(jié)構(gòu)。神經(jīng)網(wǎng)絡(luò)內(nèi)部包含輸入,即標(biāo)記序列。例如,四個(gè)輸入標(biāo)記,但數(shù)量可以從零到一千甚至更多,理論上無(wú)限。然而,處理無(wú)限數(shù)量的標(biāo)記計(jì)算成本過(guò)高,因此將其限制在一定長(zhǎng)度,即模型的最大上下文長(zhǎng)度。

這些輸入與神經(jīng)網(wǎng)絡(luò)的參數(shù)或權(quán)重一起構(gòu)成一個(gè)巨大的數(shù)學(xué)表達(dá)式?,F(xiàn)代神經(jīng)網(wǎng)絡(luò)擁有數(shù)十億個(gè)參數(shù),最初這些參數(shù)是隨機(jī)設(shè)置的,因此神經(jīng)網(wǎng)絡(luò)會(huì)做出隨機(jī)預(yù)測(cè)。

通過(guò)迭代更新網(wǎng)絡(luò)的過(guò)程,即訓(xùn)練神經(jīng)網(wǎng)絡(luò),調(diào)整參數(shù)設(shè)置,使神經(jīng)網(wǎng)絡(luò)的輸出與訓(xùn)練集中的模式一致??梢詫⑦@些參數(shù)想象成DJ設(shè)備上的旋鈕,旋轉(zhuǎn)它們會(huì)得到不同的預(yù)測(cè)。訓(xùn)練神經(jīng)網(wǎng)絡(luò)就是找到與訓(xùn)練集統(tǒng)計(jì)數(shù)據(jù)一致的參數(shù)設(shè)置。

這個(gè)巨大的數(shù)學(xué)表達(dá)式包含數(shù)萬(wàn)億項(xiàng),但簡(jiǎn)單來(lái)說(shuō),就是將輸入(例如x1、x2)與權(quán)重(例如w0、w1、w2、w3)通過(guò)乘法、加法、指數(shù)運(yùn)算、除法等運(yùn)算混合。設(shè)計(jì)高效的數(shù)學(xué)表達(dá)式是神經(jīng)網(wǎng)絡(luò)架構(gòu)研究的主題,目標(biāo)是使其具有表達(dá)性、可優(yōu)化性和可并行性等特性。本質(zhì)上,這些表達(dá)式只是將輸入與參數(shù)混合以進(jìn)行預(yù)測(cè),優(yōu)化過(guò)程旨在使預(yù)測(cè)結(jié)果與訓(xùn)練集一致。

為了展示實(shí)際生產(chǎn)級(jí)示例,我建議訪問(wèn)一個(gè)網(wǎng)站,該網(wǎng)站對(duì)其中一個(gè)網(wǎng)絡(luò)進(jìn)行了可視化。該網(wǎng)站展示的生產(chǎn)環(huán)境中使用的網(wǎng)絡(luò)被稱為Transformer,一個(gè)特定網(wǎng)絡(luò)大約有85,000個(gè)參數(shù)。頂部接收輸入,即標(biāo)記序列。

然后,信息流經(jīng)神經(jīng)網(wǎng)絡(luò),直到輸出logit softmax。這些是關(guān)于接下來(lái)會(huì)發(fā)生什么的預(yù)測(cè),也就是下一個(gè)標(biāo)記是什么。

一系列變換以及表達(dá)式內(nèi)部產(chǎn)生的中間值,都在預(yù)測(cè)接下來(lái)會(huì)發(fā)生什么。例如,這些標(biāo)記被嵌入到一種叫做分布式表示的東西中,每個(gè)可能的標(biāo)記在神經(jīng)網(wǎng)絡(luò)內(nèi)部都有一個(gè)向量表示。首先,我們嵌入標(biāo)記,然后這些值像流過(guò)圖一樣。這些單獨(dú)來(lái)看都是非常簡(jiǎn)單的數(shù)學(xué)表達(dá)式,例如層歸一化、矩陣乘法、softmax等等,這就是Transformer的注意力塊。然后信息流入多層感知器塊等等,所有這些數(shù)字都是表達(dá)式的中間值。

你可以將這些視為合成神經(jīng)元的放電速率,但我提醒你,不要把它想得太像神經(jīng)元,因?yàn)檫@些神經(jīng)元與大腦中的神經(jīng)元相比極其簡(jiǎn)單。生物學(xué)上的神經(jīng)元是非常復(fù)雜動(dòng)態(tài)過(guò)程,具有記憶功能等等,而這個(gè)表達(dá)式中沒(méi)有記憶,它是一個(gè)從輸入到輸出的固定數(shù)學(xué)表達(dá)式,無(wú)狀態(tài)的。所以與生物神經(jīng)元相比,這些神經(jīng)元非常簡(jiǎn)單,但你仍然可以松散地將其視為一塊合成腦組織。因此,信息流經(jīng)所有這些神經(jīng)元,直到我們得到預(yù)測(cè)。

我實(shí)際上不會(huì)過(guò)多地關(guān)注所有這些轉(zhuǎn)換的精確數(shù)學(xué)細(xì)節(jié),我覺(jué)得沒(méi)那么重要。重要的是要理解這是一個(gè)數(shù)學(xué)函數(shù),由一些固定的參數(shù)進(jìn)行參數(shù)化,比如說(shuō)85000個(gè)參數(shù)。它是一種將輸入轉(zhuǎn)換為輸出的方法,當(dāng)我們調(diào)整參數(shù)時(shí),我們會(huì)得到不同類型的預(yù)測(cè)結(jié)果。然后我們需要找到這些參數(shù)的一個(gè)好的設(shè)置,以便預(yù)測(cè)結(jié)果與在訓(xùn)練集中看到的模式相匹配。所以這就是Transformer。

我已經(jīng)向你們展示了神經(jīng)網(wǎng)絡(luò)的內(nèi)部結(jié)構(gòu),并且我們也討論了一點(diǎn)關(guān)于訓(xùn)練它的過(guò)程。我想再介紹一下使用這些網(wǎng)絡(luò)的另一個(gè)主要階段,那就是所謂的推理階段。在推理階段,我們所做的是從模型中生成新的數(shù)據(jù),看看它在其網(wǎng)絡(luò)參數(shù)中內(nèi)化了哪些模式。

從模型中生成數(shù)據(jù)相對(duì)來(lái)說(shuō)很簡(jiǎn)單。我們從一些標(biāo)記開(kāi)始,這些標(biāo)記基本上是你的前綴,就像你想要開(kāi)始的內(nèi)容一樣。假設(shè)我們想從標(biāo)記91開(kāi)始,我們把它輸入網(wǎng)絡(luò)。網(wǎng)絡(luò)會(huì)給我們概率,一個(gè)概率向量。我們可以根據(jù)此概率分布對(duì)標(biāo)記進(jìn)行采樣,模型賦予高概率的標(biāo)記更有可能被采樣。

你可以這樣理解:我們從分布中采樣以獲得單個(gè)唯一標(biāo)記,例如標(biāo)記860。在模型生成過(guò)程中,860可能是下一個(gè)標(biāo)記,它是一個(gè)相對(duì)可能的標(biāo)記,但并非唯一可能。

例如,在訓(xùn)練示例中,860確實(shí)緊跟在91之后。假設(shè)我們繼續(xù)這個(gè)過(guò)程,在91之后是860,我們把它附加進(jìn)去。然后采樣得到第三個(gè)標(biāo)記,假設(shè)是287。重復(fù)這個(gè)過(guò)程,得到長(zhǎng)度為三的序列,再采樣得到第四個(gè)標(biāo)記,以此類推。

然而,最終得到的標(biāo)記13659并非之前看到的3962,它是一個(gè)“article”標(biāo)記,表示查看一篇單獨(dú)的文章。因此,我們并沒(méi)有完全復(fù)制訓(xùn)練數(shù)據(jù)中的序列。

這些系統(tǒng)是隨機(jī)的,我們正在進(jìn)行采樣,如同拋硬幣。有時(shí)我們會(huì)幸運(yùn)地復(fù)制訓(xùn)練集中的某一小部分,但有時(shí)會(huì)得到訓(xùn)練數(shù)據(jù)中任何文檔都不包含的標(biāo)記。所以我們會(huì)得到訓(xùn)練數(shù)據(jù)某種混合,因?yàn)槊恳徊蕉伎赡艿玫铰晕⒉煌臉?biāo)記。一旦該標(biāo)記進(jìn)入,后續(xù)采樣會(huì)快速生成與訓(xùn)練文檔中出現(xiàn)的標(biāo)記流非常不同的標(biāo)記流。

統(tǒng)計(jì)上,它們會(huì)有相似的屬性,但它們與訓(xùn)練數(shù)據(jù)并不相同,它們像是受訓(xùn)練數(shù)據(jù)啟發(fā)的。例如,我們得到“article”,是因?yàn)樗凇癰ar”、“viewing”、“single”等上下文中是一個(gè)相對(duì)可能的標(biāo)記,在訓(xùn)練文檔中可能在某個(gè)地方跟隨這個(gè)上下文窗口。我們只是碰巧在這個(gè)階段對(duì)其進(jìn)行了采樣。

基本上,推理就是一次預(yù)測(cè)一個(gè)這些分布,我們繼續(xù)反饋標(biāo)記并獲取下一個(gè)標(biāo)記,一直在進(jìn)行采樣。根據(jù)我們的“運(yùn)氣”,我們可能會(huì)得到非常不同的模式。這就是推理。

在大多數(shù)情況下,下載互聯(lián)網(wǎng)并將其標(biāo)記化是一個(gè)預(yù)處理步驟,只需要做一次。

一旦獲得標(biāo)記序列,即可開(kāi)始訓(xùn)練神經(jīng)網(wǎng)絡(luò)。實(shí)際操作中,需嘗試訓(xùn)練多種不同類型的神經(jīng)網(wǎng)絡(luò),它們擁有不同的設(shè)置、排列和規(guī)模,因此需要進(jìn)行大量神經(jīng)網(wǎng)絡(luò)訓(xùn)練。

訓(xùn)練完成后,對(duì)獲得的特定參數(shù)滿意后,即可使用該模型進(jìn)行推理,并從中生成數(shù)據(jù)。例如,使用ChatGPT與模型對(duì)話時(shí),該模型很可能在幾個(gè)月前由OpenAI訓(xùn)練完成,并擁有效果良好的特定權(quán)重。與模型對(duì)話的過(guò)程僅是推理,不再進(jìn)行訓(xùn)練,參數(shù)保持不變,你只需提供標(biāo)記,模型便會(huì)完成標(biāo)記序列生成。

接下來(lái),我們以O(shè)penAI的GPT-2為例,具體說(shuō)明訓(xùn)練和推理過(guò)程。GPT代表生成式預(yù)訓(xùn)練變換器(Generatively Pre-trained Transformer),GPT-2是OpenAI GPT系列的第二個(gè)迭代版本,發(fā)表于2019年。選擇GPT-2是因?yàn)樗鞘状螌⒖勺R(shí)別的現(xiàn)代技術(shù)棧整合在一起,所有組成部分在今天的現(xiàn)代標(biāo)準(zhǔn)下都是可識(shí)別的,只是規(guī)模更小。

GPT-2是一個(gè)Transformer神經(jīng)網(wǎng)絡(luò),擁有16億個(gè)參數(shù)。如今,現(xiàn)代Transformer的參數(shù)數(shù)量更接近于萬(wàn)億或幾百億。GPT-2的最大上下文長(zhǎng)度為1024個(gè)token,這意味著在預(yù)測(cè)序列中的下一個(gè)token時(shí),上下文最多不超過(guò)1024個(gè)token。根據(jù)現(xiàn)代標(biāo)準(zhǔn),這也相對(duì)較小,如今的上下文長(zhǎng)度更接近幾十萬(wàn),甚至可能達(dá)到一百萬(wàn)。

GPT-2能夠更好地預(yù)測(cè)序列中的下一個(gè)token,其訓(xùn)練使用了約1000億個(gè)詞元,按照現(xiàn)代標(biāo)準(zhǔn),這規(guī)模較小。相比之下,精細(xì)網(wǎng)頁(yè)數(shù)據(jù)集包含15萬(wàn)億個(gè)詞元,因此1000億個(gè)詞元數(shù)量相當(dāng)少。

作為L(zhǎng)LM.C項(xiàng)目的一部分,我嘗試重現(xiàn)GPT-2。相關(guān)記錄已發(fā)布在GitHub上的LLM.C倉(cāng)庫(kù)中。2019年訓(xùn)練GPT-2的成本估計(jì)約為4萬(wàn)美元,而如今,同樣的工作只需一天時(shí)間和600美元,甚至可以降低到約100美元。

成本下降如此之多,主要原因在于數(shù)據(jù)集質(zhì)量的提升以及數(shù)據(jù)處理方式的改進(jìn)。此外,硬件速度的顯著提升和模型運(yùn)行軟件的優(yōu)化也功不可沒(méi),這些都促進(jìn)了模型訓(xùn)練效率的提高。

我無(wú)法詳細(xì)介紹GPT-2的復(fù)現(xiàn)過(guò)程,但這篇文章將幫助你直觀地了解研究人員訓(xùn)練這些模型的過(guò)程。

我正在訓(xùn)練一個(gè)GPT-2模型,每一行都代表一次模型更新,改進(jìn)對(duì)標(biāo)記預(yù)測(cè)的準(zhǔn)確性,更新神經(jīng)網(wǎng)絡(luò)的權(quán)重或參數(shù),以便更好地預(yù)測(cè)序列中的下一個(gè)標(biāo)記。每一行都改進(jìn)對(duì)訓(xùn)練集中一百萬(wàn)個(gè)標(biāo)記的預(yù)測(cè),我們?cè)噲D改進(jìn)對(duì)這些標(biāo)記中每一個(gè)作為序列中下一個(gè)標(biāo)記的預(yù)測(cè)。

需要密切關(guān)注的是“損失”數(shù)值,它反映神經(jīng)網(wǎng)絡(luò)的運(yùn)行情況,數(shù)值越低越好。隨著模型更新的進(jìn)行,損失值逐漸減少,這表示對(duì)序列中下一個(gè)標(biāo)記的預(yù)測(cè)越來(lái)越準(zhǔn)確。

損失值是神經(jīng)網(wǎng)絡(luò)研究人員關(guān)注的關(guān)鍵指標(biāo)。 訓(xùn)練過(guò)程中,我們會(huì)耐心等待,觀察損失值是否隨每次更新而下降,并以此判斷網(wǎng)絡(luò)預(yù)測(cè)能力是否提升。

本次訓(xùn)練中,每次更新處理一百萬(wàn)個(gè)詞元,每次更新耗時(shí)約七秒鐘,共進(jìn)行32000步優(yōu)化,總計(jì)處理約330億個(gè)詞元。目前已完成420步,僅完成1%多一點(diǎn),因?yàn)橛?xùn)練時(shí)間僅約10到15分鐘。 模型每20步進(jìn)行一次推理,預(yù)測(cè)序列中的下一個(gè)標(biāo)記。

推理過(guò)程從隨機(jī)開(kāi)始,逐個(gè)預(yù)測(cè)標(biāo)記。 目前生成的文本不夠連貫,這是因?yàn)橛?xùn)練過(guò)程僅完成1%。 輸出結(jié)果類似于胡言亂語(yǔ),但仍然具有一定的局部連貫性,例如“既然她是我的,這是信息的一部分,應(yīng)該討論我的父親、偉大的同伴們,戈登向我展示了坐在它上面的場(chǎng)景,等等”。 與訓(xùn)練初始階段相比,模型性能已有所提升。

如果訓(xùn)練完成全部32000步,模型將能夠生成相當(dāng)連貫的英語(yǔ)文本,標(biāo)記流傳輸正確,英語(yǔ)表達(dá)也更流暢。這還需要一兩天的時(shí)間。 目前階段,我們只需關(guān)注損失值的下降,確保訓(xùn)練過(guò)程順利進(jìn)行。

接下來(lái),我們討論計(jì)算資源方面的問(wèn)題。由于模型規(guī)模龐大,無(wú)法在個(gè)人電腦上運(yùn)行,因此訓(xùn)練過(guò)程在云端計(jì)算機(jī)上進(jìn)行。

本次訓(xùn)練使用的計(jì)算資源為一個(gè)8xh100節(jié)點(diǎn),即單機(jī)擁有八個(gè)h100 GPU。這臺(tái)機(jī)器是租用的云端服務(wù)器。

我并不確定它的物理位置。我使用的是名為L(zhǎng)ambda的租賃服務(wù),但許多其他公司也提供類似服務(wù)。向下滾動(dòng)即可看到這些公司提供的按需定價(jià)的配備h100(即GPU)的電腦,稍后我會(huì)展示它們的樣子。例如,按需8個(gè)NVIDIA h100 GPU的機(jī)器,每小時(shí)每GPU的價(jià)格為3美元。您可以租用它們,然后在云端獲得一臺(tái)可登錄并訓(xùn)練模型的機(jī)器。這些GPU,長(zhǎng)這樣。這就是一塊H100 GPU,您可以把它插進(jìn)電腦里。

GPU非常適合訓(xùn)練神經(jīng)網(wǎng)絡(luò),因?yàn)樯窠?jīng)網(wǎng)絡(luò)計(jì)算量很大,但計(jì)算中存在大量的并行性。因此,許多獨(dú)立的工作單元可以同時(shí)工作,來(lái)解決訓(xùn)練這些神經(jīng)網(wǎng)絡(luò)底層使用的矩陣乘法運(yùn)算。這只是一塊H100,實(shí)際上你會(huì)把多塊放在一起。您可以將八塊堆疊在一個(gè)節(jié)點(diǎn)中,然后可以將多個(gè)節(jié)點(diǎn)堆疊成一個(gè)完整的數(shù)據(jù)中心或一個(gè)完整的系統(tǒng)。所以當(dāng)我們看數(shù)據(jù)中心時(shí),我們會(huì)看到這樣的東西:一塊GPU,變成八塊GPU,變成一個(gè)系統(tǒng),變成多個(gè)系統(tǒng)。這些都是更大的數(shù)據(jù)中心,它們當(dāng)然會(huì)貴得多。

現(xiàn)在,所有大型科技公司都非常需要這些GPU,以便能夠訓(xùn)練所有這些大型語(yǔ)言模型,因?yàn)樗鼈兎浅?qiáng)大。這從根本上驅(qū)動(dòng)了英偉達(dá)的股價(jià)達(dá)到今天的3.4萬(wàn)億美元,也解釋了為什么英偉達(dá)會(huì)如此爆炸式增長(zhǎng)。所以這就是淘金熱。淘金熱的關(guān)鍵在于獲取GPU,獲得足夠的GPU,以便它們能夠協(xié)同工作以執(zhí)行此優(yōu)化。它們都在做什么?它們都在協(xié)同預(yù)測(cè)像FindWeb數(shù)據(jù)集這樣的數(shù)據(jù)集上的下一個(gè)token。

這就是計(jì)算工作流程,它極其昂貴。你擁有的GPU越多,你可以嘗試預(yù)測(cè)和改進(jìn)的token就越多,你處理這個(gè)數(shù)據(jù)集的速度就越快,你可以迭代得更快,獲得更大的網(wǎng)絡(luò),訓(xùn)練更大的網(wǎng)絡(luò),等等。所以這就是所有這些機(jī)器正在做的,這就是為什么所有這一切都如此重要。例如,這是大約一個(gè)月前的一篇文章。這就是為什么例如埃隆·馬斯克在一個(gè)單一數(shù)據(jù)中心獲得10萬(wàn)個(gè)GPU是一件大事。所有這些GPU都極其昂貴,耗電量巨大,而且它們都在嘗試預(yù)測(cè)序列中的下一個(gè)標(biāo)記,并通過(guò)這樣做來(lái)改進(jìn)網(wǎng)絡(luò),并且可能會(huì)比我們?cè)谶@里看到的更快地獲得更多連貫的文本。

不幸的是,我沒(méi)有幾千萬(wàn)甚至上億美元來(lái)訓(xùn)練這樣一個(gè)大型模型,但幸運(yùn)的是,我們可以求助于一些大型科技公司,他們定期訓(xùn)練這些模型,并在訓(xùn)練完成后,會(huì)發(fā)布部分模型。訓(xùn)練這些網(wǎng)絡(luò)耗費(fèi)了大量的計(jì)算資源,并在優(yōu)化結(jié)束后發(fā)布。這非常有用,因?yàn)橛?xùn)練過(guò)程耗費(fèi)巨大。許多公司定期訓(xùn)練這些模型,但實(shí)際上很少有公司會(huì)發(fā)布這些所謂的基模型。最終的模型被稱為基模型。

什么是基模型?它是一個(gè)標(biāo)記模擬器,一個(gè)互聯(lián)網(wǎng)文本標(biāo)記模擬器。它本身并沒(méi)有什么用,因?yàn)槲覀兿胍氖侵?,可以提?wèn)并得到回答。這些模型做不到這一點(diǎn),它們只是創(chuàng)造了一種互聯(lián)網(wǎng)的混搭,夢(mèng)想著互聯(lián)網(wǎng)頁(yè)面。基模型并不經(jīng)常發(fā)布,因?yàn)樗鼈冎皇菐讉€(gè)步驟中的第一步,還需要其他步驟才能獲得一個(gè)助手。

然而,一些模型已經(jīng)發(fā)布。例如,GPT-2模型在2019年發(fā)布了15億參數(shù)的版本。這個(gè)GPT-2模型就是一個(gè)基模型。那么,什么是模型發(fā)布?發(fā)布這些模型是什么樣的呢?例如GitHub上的GPT-2代碼庫(kù)。

發(fā)布模型需要兩樣?xùn)|西。首先,需要Python代碼,詳細(xì)描述模型中執(zhí)行的一系列操作。這段代碼實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)的正向傳播,包含神經(jīng)網(wǎng)絡(luò)連接的具體細(xì)節(jié)。這只是幾百行代碼,相當(dāng)容易理解且標(biāo)準(zhǔn)化。不標(biāo)準(zhǔn)的是參數(shù),這是實(shí)際價(jià)值所在。

神經(jīng)網(wǎng)絡(luò)的參數(shù)存儲(chǔ)在哪里呢?由于有15億個(gè)參數(shù),需要正確的設(shè)置。除了源代碼,還需要發(fā)布參數(shù),大約15億個(gè)數(shù)字。這是一個(gè)包含15億個(gè)數(shù)字的列表,是所有旋鈕的精確設(shè)置,以便令牌能夠良好地輸出。因此,需要這兩樣?xùn)|西才能獲得基模型的發(fā)布。

現(xiàn)在,GPT-2已經(jīng)發(fā)布,但它是一個(gè)相當(dāng)舊的模型。我們將要轉(zhuǎn)向的模型是LLAMA-3。LLAMA-3與GPT-2(15億參數(shù),基于1000億個(gè)token訓(xùn)練)相比,是一個(gè)更大、更現(xiàn)代的模型。它由Meta發(fā)布和訓(xùn)練,包含4050億參數(shù),并基于15萬(wàn)億個(gè)token進(jìn)行訓(xùn)練,方式相似,只是規(guī)模大得多。

Meta發(fā)布了LLAMA-3,論文中對(duì)此進(jìn)行了詳細(xì)介紹,并著重闡述了其發(fā)布的最大基礎(chǔ)模型LLAMA-3.1 4.5,這是一個(gè)擁有4050億參數(shù)的模型。

除了基礎(chǔ)模型,Meta還發(fā)布了指令模型,這是一個(gè)可以進(jìn)行問(wèn)答的助手功能,我們稍后會(huì)詳細(xì)介紹。目前,讓我們先關(guān)注這個(gè)基礎(chǔ)模型——一個(gè)token模擬器。我們將試用它,并探討其運(yùn)作機(jī)制以及大型神經(jīng)網(wǎng)絡(luò)與海量數(shù)據(jù)訓(xùn)練后最終的結(jié)果。

我最推薦體驗(yàn)基礎(chǔ)模型的平臺(tái)是Hyperbolic公司,它提供了4050億參數(shù)的LLAMA-3.1基礎(chǔ)模型。使用時(shí),請(qǐng)確保選擇此模型(可能需要注冊(cè))。設(shè)置最大標(biāo)記數(shù)為我們期望生成的標(biāo)記數(shù)量,這里為了節(jié)省計(jì)算資源,我們將標(biāo)記數(shù)減少至128。

此過(guò)程與推理過(guò)程相同,模型會(huì)基于給定前綴繼續(xù)生成標(biāo)記序列。但需要注意的是,此模型并非助手模型。例如,提問(wèn)“2加2等于多少?”,它不會(huì)直接回答“等于4”,因?yàn)樗粫?huì)根據(jù)詞元概率預(yù)測(cè)下一個(gè)詞元,本質(zhì)上是一個(gè)非常昂貴的自動(dòng)補(bǔ)全功能,根據(jù)訓(xùn)練數(shù)據(jù)(網(wǎng)頁(yè)等)中的統(tǒng)計(jì)信息預(yù)測(cè)后續(xù)內(nèi)容。

實(shí)際測(cè)試中,模型雖然回答了問(wèn)題,卻也走向了哲學(xué)討論。再次嘗試后,結(jié)果仍然如此。這表明系統(tǒng)每次輸入都從頭開(kāi)始,具有隨機(jī)性。相同的標(biāo)記前綴會(huì)產(chǎn)生不同的答案,因?yàn)槟P蛷母怕史植贾羞M(jìn)行采樣,每次得到不同的樣本,從而進(jìn)入不同的領(lǐng)域。

讓我們?cè)僭囈淮?。它就這樣繼續(xù)下去了,它只是在重復(fù)互聯(lián)網(wǎng)上的統(tǒng)計(jì)模式。首先,它還不是一個(gè)助手,而是一個(gè)標(biāo)記自動(dòng)完成工具,其次,它是一個(gè)隨機(jī)系統(tǒng)。

即使這個(gè)模型本身對(duì)于許多應(yīng)用來(lái)說(shuō)還不夠完善,它仍然非常有用,因?yàn)樗陬A(yù)測(cè)序列中下一個(gè)標(biāo)記的任務(wù)中,已經(jīng)學(xué)習(xí)了很多關(guān)于世界的知識(shí),并將所有這些知識(shí)存儲(chǔ)在網(wǎng)絡(luò)的參數(shù)中。我們的文本來(lái)自互聯(lián)網(wǎng)網(wǎng)頁(yè),所有這些都?jí)嚎s在網(wǎng)絡(luò)的權(quán)重中。

你可以把這4050億個(gè)參數(shù)看作是對(duì)互聯(lián)網(wǎng)的一種壓縮,一個(gè)壓縮文件,但它不是無(wú)損壓縮,而是有損壓縮。我們好像只剩下互聯(lián)網(wǎng)的一種整體印象,我們可以從中生成內(nèi)容。我們可以通過(guò)相應(yīng)地提示基礎(chǔ)模型來(lái)引出其中的一些知識(shí)。例如,“這是我的最佳情侶景點(diǎn)Top 10清單”,我這樣做是為了引導(dǎo)模型繼續(xù)這個(gè)列表。

它已經(jīng)開(kāi)始列出清單,并給出了一些地標(biāo)性景點(diǎn)。注意,它試圖提供很多信息,你可能無(wú)法完全相信這里的一些信息,因?yàn)樗皇菍?duì)一些互聯(lián)網(wǎng)文檔的回憶?;ヂ?lián)網(wǎng)數(shù)據(jù)中頻繁出現(xiàn)的內(nèi)容比很少出現(xiàn)的內(nèi)容更可能被正確記住,所以你不能完全相信這里的一些信息,因?yàn)檫@只是對(duì)互聯(lián)網(wǎng)文檔模糊的回憶,信息并沒(méi)有顯式地存儲(chǔ)在任何參數(shù)中,這完全是模型的回憶。

話雖如此,我們確實(shí)得到了一些可能大致正確的結(jié)果,而我實(shí)際上并沒(méi)有專業(yè)知識(shí)來(lái)驗(yàn)證這是否大致正確。但是你會(huì)看到我們已經(jīng)引出了模型的大量知識(shí),而這些知識(shí)并不精確,是模糊的、概率的和統(tǒng)計(jì)的。模型中更容易記住的是那些經(jīng)常發(fā)生的事情。

現(xiàn)在,我想展示更多關(guān)于這個(gè)模型行為的例子。我首先去維基百科查看了斑馬的頁(yè)面,復(fù)制粘貼第一句甚至更長(zhǎng)的句子。當(dāng)我點(diǎn)擊回車鍵時(shí),我們會(huì)得到什么樣的補(bǔ)全結(jié)果呢?

現(xiàn)存三種斑馬,等等等等。模型在這里生成的文本是對(duì)維基百科詞條的精準(zhǔn)復(fù)述,它純粹是憑借記憶來(lái)背誦這篇維基百科詞條,這種記憶存儲(chǔ)在其參數(shù)中。所以,有可能在這些512個(gè)token中的某個(gè)時(shí)刻,模型會(huì)偏離維基百科詞條,但是你可以看到它在這里記住了大量的文本。

讓我看看這句話是否出現(xiàn)過(guò)。好,我們?nèi)栽谡壣?。讓我在這里檢查一下。好,我們?nèi)栽谡壣?。它最終會(huì)偏離主題。

好,所以這個(gè)東西在很大程度上只是背誦出來(lái)的,它最終會(huì)偏離,因?yàn)樗鼰o(wú)法準(zhǔn)確記住。現(xiàn)在,發(fā)生這種情況的原因是這些模型在記憶方面可能非常出色,通常,這并不是你在最終模型中想要的。這叫做反芻,通常情況下,直接引用你訓(xùn)練過(guò)的數(shù)據(jù)是不好的。

發(fā)生這種情況的原因?qū)嶋H上是,對(duì)于許多文檔,例如維基百科,當(dāng)這些文檔被認(rèn)為是高質(zhì)量的來(lái)源時(shí),在訓(xùn)練模型時(shí),你往往會(huì)優(yōu)先從這些來(lái)源中采樣。所以基本上,模型可能在這個(gè)數(shù)據(jù)上進(jìn)行了幾個(gè)輪次的訓(xùn)練,這意味著它可能看過(guò)這個(gè)網(wǎng)頁(yè)大約10次左右。這有點(diǎn)像你,如果你反復(fù)閱讀某種文本很多次,比如說(shuō)讀了100遍,那么你就能背誦出來(lái)。對(duì)于這個(gè)模型來(lái)說(shuō)也是非常類似的。如果它看到某個(gè)東西的次數(shù)太多了,它以后就能從記憶中背誦出來(lái)。只是這些模型比人更有效率,比如在表達(dá)方面。所以它可能只看過(guò)這個(gè)維基百科條目10次,但基本上它已經(jīng)將其參數(shù)中這篇文章完全記住了。

好,接下來(lái)我想向你展示一些模型在訓(xùn)練期間絕對(duì)沒(méi)有見(jiàn)過(guò)的東西。例如,如果我們查看論文,然后導(dǎo)航到預(yù)訓(xùn)練數(shù)據(jù),我們會(huì)看到數(shù)據(jù)集的知識(shí)截止日期是2023年底。所以它沒(méi)有見(jiàn)過(guò)此時(shí)間點(diǎn)后的文檔。當(dāng)然,它也沒(méi)有看到任何關(guān)于2024年選舉及其結(jié)果的信息。

現(xiàn)在,如果我們用未來(lái)的標(biāo)記來(lái)引導(dǎo)模型,它將繼續(xù)標(biāo)記序列,并且它將根據(jù)其自身參數(shù)中擁有的知識(shí)做出最佳猜測(cè)。讓我們看看那會(huì)是什么樣子。因此,共和黨可能會(huì)獲勝,好的,美國(guó)總統(tǒng),自2017年起。讓我們看看它在這點(diǎn)之后會(huì)說(shuō)什么。例如,模型將不得不猜測(cè)競(jìng)選伙伴以及對(duì)手是誰(shuí)等等。讓我們按回車鍵。所以這里提到邁克·彭斯是競(jìng)選伙伴,而不是J.D.彭斯。而且這張選票是反對(duì)希拉里·克林頓和蒂姆·凱恩的。所以這可能是一個(gè)有趣的平行宇宙,根據(jù)警報(bào),可能會(huì)發(fā)生的事情。我們來(lái)取一個(gè)不同的樣本。所以是相同的提示,讓我們重新采樣。所以這里的競(jìng)選搭檔是羅恩·德桑蒂斯,他們對(duì)抗喬·拜登和卡瑪拉·哈里斯。所以這又是一個(gè)不同的平行宇宙。

所以模型會(huì)做出有根據(jù)的猜測(cè),并根據(jù)這些知識(shí)繼續(xù)生成標(biāo)記序列。我們?cè)谶@里看到的一切都被稱為幻覺(jué)。模型只是以概率的方式做出最好的猜測(cè)。

接下來(lái)的內(nèi)容我想向您展示的是,即使這是一個(gè)基礎(chǔ)模型,還不是一個(gè)助手模型,如果您巧妙地設(shè)計(jì)提示,它仍然可以在實(shí)際應(yīng)用中使用。

這里有一些我們可以稱之為“少樣本提示”的例子。這指的是十對(duì)英韓單詞,每對(duì)單詞由英文單詞、冒號(hào)和韓語(yǔ)翻譯構(gòu)成。模型通過(guò)對(duì)這十對(duì)單詞進(jìn)行學(xué)習(xí),來(lái)完成后續(xù)的“teacher:”五個(gè)token的補(bǔ)全任務(wù)。這些模型具備“上下文學(xué)習(xí)”能力,即在讀取上下文時(shí),學(xué)習(xí)數(shù)據(jù)中的模式并以此進(jìn)行推斷。因此,模型承擔(dān)了翻譯的角色,最終正確地將“teacher”翻譯為“???”。即使只有一個(gè)基礎(chǔ)模型,巧妙的提示也能構(gòu)建應(yīng)用程序,這依賴于模型的上下文學(xué)習(xí)能力,并通過(guò)構(gòu)建少樣本提示來(lái)實(shí)現(xiàn)。

接下來(lái),我想展示一種通過(guò)提示實(shí)例化完整語(yǔ)言模型助手的方法。技巧在于將提示設(shè)計(jì)成一個(gè)網(wǎng)頁(yè)形式的對(duì)話,展現(xiàn)樂(lè)于助人的AI助手與人類之間的互動(dòng)。模型將繼續(xù)這段對(duì)話。為了編寫提示,我使用了ChatGPT,這有點(diǎn)“元”,但我告訴它我想創(chuàng)建一個(gè)基于基礎(chǔ)模型的OLM助手,并請(qǐng)它幫忙編寫提示詞。它生成的提示詞相當(dāng)不錯(cuò),模擬了AI助手與人類的對(duì)話,AI助手知識(shí)淵博、樂(lè)于助人,能夠回答各種問(wèn)題。僅僅給出描述是不夠的,添加一些人類助手與人類之間的對(duì)話回合,效果會(huì)更好。最后,我們將輸入實(shí)際查詢。

我將提示詞復(fù)制粘貼到基礎(chǔ)模型中,扮演人類角色輸入實(shí)際提示:“為什么天空是藍(lán)色的?”運(yùn)行后,助手回答:“天空呈現(xiàn)藍(lán)色是因?yàn)槿鹄⑸洮F(xiàn)象……”基礎(chǔ)模型延續(xù)了對(duì)話序列,并承擔(dān)了助手的角色。雖然模型在助手回答后,會(huì)略顯“幻覺(jué)式”地生成下一個(gè)來(lái)自人類的問(wèn)題,但它成功完成了任務(wù)。如果直接向基礎(chǔ)模型提問(wèn)“為什么天空是藍(lán)色的”,結(jié)果則無(wú)法預(yù)料,可能只會(huì)得到更多不相干的問(wèn)題。

所以,即使只有一個(gè)基礎(chǔ)模型,也可以通過(guò)這種方法創(chuàng)建助手。

好的,這是過(guò)去幾分鐘討論內(nèi)容的簡(jiǎn)短總結(jié)。

現(xiàn)在,讓我們更深入地探討。這與我們目前為止討論的內(nèi)容密切相關(guān)。我們希望訓(xùn)練像ChatGPT這樣的LLM助手。我們已經(jīng)討論了它的第一階段,即預(yù)訓(xùn)練階段。簡(jiǎn)而言之,就是:我們獲取互聯(lián)網(wǎng)文檔,將其分解成標(biāo)記——這些小的文本塊的原子——然后我們使用神經(jīng)網(wǎng)絡(luò)來(lái)預(yù)測(cè)標(biāo)記序列。這個(gè)階段的輸出是基礎(chǔ)模型,也就是這個(gè)神經(jīng)網(wǎng)絡(luò)的參數(shù)設(shè)置。而這個(gè)基礎(chǔ)模型本質(zhì)上是一個(gè)在標(biāo)記層面的互聯(lián)網(wǎng)文檔模擬器,它可以生成與互聯(lián)網(wǎng)文檔具有相同統(tǒng)計(jì)特征的標(biāo)記序列。我們看到它可以用于一些應(yīng)用,但實(shí)際上我們需要做得更好。我們想要一個(gè)助手,能夠回答我們提出的問(wèn)題。所以我們現(xiàn)在需要進(jìn)入第二階段,稱為后訓(xùn)練階段。

因此,我們將基礎(chǔ)模型——我們的互聯(lián)網(wǎng)文檔模擬器——交給后訓(xùn)練階段?,F(xiàn)在我們將討論幾種所謂的模型訓(xùn)練后處理方法。這些訓(xùn)練后階段的計(jì)算成本將低得多。大部分計(jì)算工作,所有大型數(shù)據(jù)中心以及所有繁重的計(jì)算和數(shù)百萬(wàn)美元的投入都在預(yù)訓(xùn)練階段。但現(xiàn)在我們將進(jìn)入一個(gè)成本相對(duì)較低,但仍然極其重要的階段,稱為訓(xùn)練后處理階段,在這個(gè)階段我們將大型語(yǔ)言模型變成一個(gè)助手。

因此,讓我們看看如何使我們的模型不再只是采樣互聯(lián)網(wǎng)文檔,而是回答問(wèn)題。換句話說(shuō),我們要開(kāi)始考慮對(duì)話。這些對(duì)話可以是多輪的,可以有多個(gè)回合。在最簡(jiǎn)單的情況下,它們是人與助手之間的對(duì)話。例如,我們可以想象對(duì)話可能如下所示:當(dāng)一個(gè)人說(shuō):“2 加 2 等于幾?”助手應(yīng)該這樣回應(yīng):2 加 2 等于 4。當(dāng)人類追問(wèn),如果用星號(hào)代替加號(hào)會(huì)怎樣?助手可以做出相應(yīng)的回應(yīng)。同樣地,這是另一個(gè)例子,表明助手也可以擁有一定的個(gè)性,它有點(diǎn)友好。然后在第三個(gè)例子中,我展示了當(dāng)人類要求我們不愿意幫忙的事情時(shí),我們可以產(chǎn)生所謂的拒絕,我們可以說(shuō)我們幫不了這個(gè)忙。

所以換句話說(shuō),我們現(xiàn)在想做的,是思考助手應(yīng)該如何與人類互動(dòng)。我們想對(duì)助手及其在這些對(duì)話中的行為進(jìn)行編程?,F(xiàn)在,因?yàn)檫@是神經(jīng)網(wǎng)絡(luò),我們不會(huì)用代碼明確地編程這些。我們無(wú)法那樣對(duì)助手進(jìn)行編程。因?yàn)檫@是神經(jīng)網(wǎng)絡(luò),所以一切都是通過(guò)對(duì)數(shù)據(jù)集進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練來(lái)完成的。正因?yàn)槿绱?,我們將通過(guò)創(chuàng)建對(duì)話數(shù)據(jù)集來(lái)隱式地對(duì)助手進(jìn)行編程。因此,這些是數(shù)據(jù)集中三個(gè)獨(dú)立的對(duì)話示例。一個(gè)實(shí)際的數(shù)據(jù)集,我將向您展示一些例子,將會(huì)大得多,它可能包含數(shù)十萬(wàn)個(gè)多輪對(duì)話,非常長(zhǎng)等等。

并涵蓋廣泛的不同主題,但在這里我只展示三個(gè)例子。這種方法的工作原理基本上是通過(guò)示例對(duì)助手進(jìn)行編程。

這些數(shù)據(jù)來(lái)自哪里?例如,2 乘以 2 等于 4,與 2 加 2 相同,等等。這來(lái)自人工標(biāo)注者。我們會(huì)給人工標(biāo)注者一些對(duì)話上下文,然后讓他們給出理想的助手回應(yīng)。人工會(huì)為任何情況下的助手寫出理想的回應(yīng)。然后我們將讓模型以此進(jìn)行訓(xùn)練,并模仿這類回應(yīng)。

這樣做的方式是,我們將采用在預(yù)訓(xùn)練階段生成的基模型,這個(gè)基模型是在互聯(lián)網(wǎng)文檔上訓(xùn)練的。我們現(xiàn)在將丟棄那個(gè)互聯(lián)網(wǎng)文檔的數(shù)據(jù)集,并用一個(gè)新的對(duì)話數(shù)據(jù)集替換它。我們將繼續(xù)在這個(gè)新的對(duì)話數(shù)據(jù)集上訓(xùn)練模型。模型會(huì)非常迅速地調(diào)整,并學(xué)習(xí)助手如何回應(yīng)人類查詢的統(tǒng)計(jì)規(guī)律。然后在推理階段,我們將能夠啟動(dòng)助手并獲得響應(yīng),它將模仿人類標(biāo)注者在這種情況下會(huì)做的事情。我們將看到這方面的例子,這將變得更加具體。

我還想提到,在這個(gè)后期訓(xùn)練階段,我們將繼續(xù)訓(xùn)練模型,但預(yù)訓(xùn)練階段可能需要在數(shù)千臺(tái)計(jì)算機(jī)上進(jìn)行大約三個(gè)月的訓(xùn)練。后期訓(xùn)練階段通常會(huì)短得多,例如三個(gè)小時(shí),這是因?yàn)槲覀兪謩?dòng)創(chuàng)建的對(duì)話數(shù)據(jù)集遠(yuǎn)小于互聯(lián)網(wǎng)上的文本數(shù)據(jù)集。這個(gè)訓(xùn)練會(huì)非常短,但從根本上說(shuō),我們將采用我們的基礎(chǔ)模型,我們將使用完全相同的算法、完全相同的每一件事繼續(xù)訓(xùn)練,只是我們將數(shù)據(jù)換成對(duì)話。

現(xiàn)在的問(wèn)題是這些對(duì)話在哪里,我們?nèi)绾伪硎舅鼈?,我們?nèi)绾巫屇P涂吹綄?duì)話而不是原始文本,以及這種訓(xùn)練的結(jié)果是什么,當(dāng)我們談?wù)撃P蜁r(shí),在某種心理學(xué)意義上你會(huì)得到什么。那么現(xiàn)在讓我們來(lái)探討這些問(wèn)題。讓我們從談?wù)剬?duì)話的標(biāo)記化開(kāi)始。

這些模型中的所有內(nèi)容都必須轉(zhuǎn)換成標(biāo)記,因?yàn)樗袃?nèi)容都只是關(guān)于標(biāo)記序列的。我們將如何將對(duì)話轉(zhuǎn)換成標(biāo)記序列呢?為此,我們需要設(shè)計(jì)某種編碼方式。這有點(diǎn)類似于,如果你熟悉的話(當(dāng)然你也可以不熟悉),例如互聯(lián)網(wǎng)上的 TCP/IP 數(shù)據(jù)包。有一些精確的規(guī)則和協(xié)議來(lái)規(guī)定如何表示信息,如何將所有內(nèi)容結(jié)構(gòu)化在一起,以便所有這些數(shù)據(jù)都以書面形式呈現(xiàn)出來(lái),并且每個(gè)人都能達(dá)成一致。所以現(xiàn)在大型語(yǔ)言模型 (LLM) 中也是同樣的情況。我們需要某種數(shù)據(jù)結(jié)構(gòu),并且需要制定一些規(guī)則來(lái)規(guī)定這些數(shù)據(jù)結(jié)構(gòu)(例如對(duì)話)如何編碼和解碼到標(biāo)記。

因此,我想向你展示如何在標(biāo)記空間中重現(xiàn)這段對(duì)話。 如果你查看TickTokenizer,可以獲取這段對(duì)話的語(yǔ)言模型表示方式。 我們迭代了這段兩輪對(duì)話中的用戶和助手。 目前的顯示形式可能不夠美觀,但實(shí)際上它相對(duì)簡(jiǎn)單。

最終將其轉(zhuǎn)換為標(biāo)記序列的方式較為復(fù)雜,但用戶和助手之間的對(duì)話最終變成了49個(gè)標(biāo)記,一個(gè)包含49個(gè)標(biāo)記的一維序列。所有不同的LLM都會(huì)有略微不同的格式或協(xié)議,現(xiàn)在有點(diǎn)像“狂野西部”,但例如GPT-4是這樣做的:有一個(gè)特殊的標(biāo)記叫做IM_start(“虛擬獨(dú)白開(kāi)始”的縮寫),然后必須指定輪到誰(shuí)(例如用戶,這是一個(gè)1428號(hào)標(biāo)記),接著是內(nèi)部獨(dú)白分隔符,然后是問(wèn)題的標(biāo)記,最后是IM_end(虛擬獨(dú)白的結(jié)束)。 因此,“2加2等于多少”這個(gè)問(wèn)題最終變成了這些標(biāo)記的序列。

需要強(qiáng)調(diào)的是,IM_start并非文本,而是一個(gè)新增的特殊標(biāo)記,在訓(xùn)練前從未出現(xiàn)過(guò),是我們訓(xùn)練后階段創(chuàng)建并引入的。 這些特殊標(biāo)記(例如IM_set、IM_start等)被引入并散布在文本中,以便模型學(xué)習(xí)“這是誰(shuí)的回合開(kāi)始”。 回合開(kāi)始是用戶的,然后是用戶所說(shuō)的話,用戶結(jié)束,新的回合由助手發(fā)起,然后是助手所說(shuō)內(nèi)容的標(biāo)記等等。 這段對(duì)話現(xiàn)在變成了這個(gè)標(biāo)記序列。

這里的具體細(xì)節(jié)并不重要,我想用具體的例子展示的是,我們認(rèn)為結(jié)構(gòu)化的對(duì)話,最終通過(guò)某種編碼變成了單一的標(biāo)記序列。 因?yàn)樗且粋€(gè)單一的標(biāo)記序列,所以我們可以應(yīng)用之前用過(guò)的一切方法。現(xiàn)在它只是一個(gè)標(biāo)記序列,我們可以用它來(lái)訓(xùn)練語(yǔ)言模型,就像之前一樣預(yù)測(cè)序列中的下一個(gè)標(biāo)記,并且可以表示和訓(xùn)練對(duì)話數(shù)據(jù)。

在測(cè)試階段(推理階段),假設(shè)我們已經(jīng)訓(xùn)練了一個(gè)模型,并用這種對(duì)話數(shù)據(jù)集訓(xùn)練了模型,現(xiàn)在我們想進(jìn)行推理。 使用ChatGPT進(jìn)行推理時(shí),假設(shè)這部分已經(jīng)填寫好了,例如“2加2等于多少?”,ChatGPT的工作方式基本上是這樣的:2加2等于4。

現(xiàn)在,你發(fā)布了“imend”的提示,在OpenAI或類似服務(wù)器上最終發(fā)生的情況是,他們放置了一個(gè)“imstart”助手“imsep”, 這就是流程的結(jié)束。他們構(gòu)建了這個(gè)上下文,然后開(kāi)始從模型中采樣。在這個(gè)階段,他們會(huì)詢問(wèn)模型:“什么是好的第一個(gè)序列?什么是好的第一個(gè)標(biāo)記?什么是好的第二個(gè)標(biāo)記?”以此類推。這就是語(yǔ)言模型接管并創(chuàng)建響應(yīng)的地方,例如,看起來(lái)像這樣的響應(yīng),但它不必完全相同,如果這種類型的對(duì)話存在于數(shù)據(jù)集中,它將具有這種風(fēng)格。這就是協(xié)議的大致工作方式,協(xié)議的細(xì)節(jié)并不重要。我的目標(biāo)只是向你展示,最終一切都只是一個(gè)一維標(biāo)記序列,所以我們可以應(yīng)用我們已經(jīng)看到的一切,但我們現(xiàn)在正在訓(xùn)練對(duì)話,并且我們現(xiàn)在基本上也在生成對(duì)話。

現(xiàn)在我想談?wù)勥@些數(shù)據(jù)集在實(shí)踐中是什么樣的。我想向你們展示的第一篇論文,也是朝這個(gè)方向邁出的第一步,是OpenAI在2022年發(fā)表的論文《InstructGPT》,或者說(shuō)是他們開(kāi)發(fā)的技術(shù)。這是OpenAI第一次談到如何利用語(yǔ)言模型并針對(duì)對(duì)話對(duì)其進(jìn)行微調(diào)。這篇論文有很多細(xì)節(jié),我想帶大家一起了解一下。所以我想先來(lái)看一下第3.4節(jié),他們討論了他們雇傭的人工標(biāo)注員,這些人是從Upwork或ScaleAI招聘的。

這里涉及到人工標(biāo)注員,他們的工作是專業(yè)地創(chuàng)建這些對(duì)話,這些標(biāo)注員被要求提出提示,然后他們也被要求完成理想的助手回復(fù)。所以這些就是人們想出的提示類型:例如“列出五個(gè)讓我重拾職業(yè)熱情的方法”、“我接下來(lái)應(yīng)該閱讀的十大科幻小說(shuō)是什么?”、“將句子翻譯成西班牙語(yǔ)”等等。這里有很多人們想出的東西。他們首先提出提示,然后他們也回答該提示,并給出理想的助手回應(yīng)。

那么他們?nèi)绾沃浪麄儜?yīng)該為這些提示編寫什么理想的助手回應(yīng)呢?當(dāng)我們向下滾動(dòng)一點(diǎn)時(shí),我們會(huì)看到這里有一段摘錄,其中包含給人工標(biāo)注者提供的標(biāo)注說(shuō)明。開(kāi)發(fā)語(yǔ)言模型的公司,例如OpenAI,會(huì)編寫標(biāo)注說(shuō)明,說(shuō)明人類應(yīng)該如何創(chuàng)建理想的回應(yīng)。例如,這些標(biāo)注說(shuō)明會(huì)在更高的層次上要求人們樂(lè)于助人、誠(chéng)實(shí)和無(wú)害。如果你想在這里看到更多內(nèi)容,可以暫停視頻。但總的來(lái)說(shuō),基本上就是回答問(wèn)題,盡量有幫助,盡量誠(chéng)實(shí),不要回答我們不希望ChatGPT回答的內(nèi)容。

系統(tǒng)之后在聊天中處理的問(wèn)題,通常由公司提供的標(biāo)注說(shuō)明指導(dǎo)。這些說(shuō)明通常篇幅很長(zhǎng),動(dòng)輒數(shù)百頁(yè),需要專業(yè)人員學(xué)習(xí)后才能撰寫出理想的助手回復(fù),這是一個(gè)高度依賴人工的過(guò)程,正如相關(guān)論文所述。

InstructGPT 的數(shù)據(jù)集雖然從未公開(kāi)發(fā)布,但一些開(kāi)源項(xiàng)目嘗試復(fù)現(xiàn)其設(shè)置,并收集自身的數(shù)據(jù),例如 OpenAssistant 項(xiàng)目。這些項(xiàng)目旨在模仿 OpenAI 使用人工標(biāo)注者創(chuàng)建對(duì)話的過(guò)程。

舉例來(lái)說(shuō),一個(gè)提示可能是:“請(qǐng)寫一個(gè)簡(jiǎn)短的介紹,介紹‘買方壟斷’(monopsony)這一術(shù)語(yǔ)在經(jīng)濟(jì)學(xué)中的相關(guān)性,并舉例說(shuō)明?!? 然后,另一個(gè)人會(huì)撰寫回復(fù),再由另一人(或同一人)撰寫理想的回復(fù)。這便是對(duì)話數(shù)據(jù)標(biāo)注的過(guò)程,最終用于模型訓(xùn)練。

訓(xùn)練過(guò)程中,不可能涵蓋模型在推理期間可能遇到的所有問(wèn)題和提示。但通過(guò)提供大量這樣的示例,模型在訓(xùn)練過(guò)程中會(huì)學(xué)習(xí)扮演樂(lè)于助人、誠(chéng)實(shí)無(wú)害的助手角色,這是一種通過(guò)示例編程的方法。

如果擁有足夠多的,例如十萬(wàn)個(gè)這樣的對(duì)話示例,模型就能學(xué)習(xí)其中的統(tǒng)計(jì)模式,并逐漸具備助手的人格。測(cè)試時(shí),模型可能會(huì)給出與訓(xùn)練集中完全相同的答案,但更可能的是,它會(huì)給出風(fēng)格類似的回應(yīng),理解用戶期望的答案類型。

這就是我們的工作方式:通過(guò)示例編程,使系統(tǒng)在統(tǒng)計(jì)學(xué)上具備樂(lè)于助人、誠(chéng)實(shí)無(wú)害的助手角色,這與公司提供的標(biāo)注說(shuō)明相符。

自 InstructGPT 論文發(fā)表后的兩三年里,最先進(jìn)技術(shù)取得了顯著進(jìn)展,人類不再獨(dú)自承擔(dān)所有繁重的工作。語(yǔ)言模型能夠輔助創(chuàng)建數(shù)據(jù)集和對(duì)話,因此,人們從頭開(kāi)始逐字逐句撰寫回復(fù)的情況已非常罕見(jiàn),他們更傾向于使用現(xiàn)有的 LLM 生成答案,然后進(jìn)行編輯。

大型語(yǔ)言模型 (LLM) 已經(jīng)開(kāi)始滲透到訓(xùn)練后流程的許多方面,廣泛用于創(chuàng)建海量的對(duì)話數(shù)據(jù)集。例如,UltraChat就是一個(gè)現(xiàn)代的對(duì)話數(shù)據(jù)集,它在很大程度上是合成的,但也包含一定程度的人工參與。這些數(shù)據(jù)集的構(gòu)建方式各不相同,UltraChat只是眾多SFT數(shù)據(jù)集中的一個(gè)例子。這些數(shù)據(jù)集包含數(shù)百萬(wàn)次對(duì)話,大多是合成的,但可能經(jīng)過(guò)人工編輯,涵蓋了廣泛的領(lǐng)域。它們包含各種SFT混合物,部分是合成的,部分是人工的??偟膩?lái)說(shuō),我們?nèi)匀皇褂糜蓪?duì)話構(gòu)成的SFT數(shù)據(jù)集進(jìn)行訓(xùn)練。

我想消除一些關(guān)于AI對(duì)話的神秘感。當(dāng)你使用ChatGPT輸入問(wèn)題并按下回車鍵時(shí),返回的結(jié)果在統(tǒng)計(jì)上與訓(xùn)練集一致。而這些訓(xùn)練集,實(shí)際上只是人類按照標(biāo)注說(shuō)明進(jìn)行操作的種子。你在ChatGPT中對(duì)話的對(duì)象并非某種神奇的AI,而是某種在統(tǒng)計(jì)上模仿人類標(biāo)注員的東西,這源于公司編寫的標(biāo)注說(shuō)明。你可以將其理解為在詢問(wèn)一位人類標(biāo)注員,ChatGPT的答案是對(duì)人類標(biāo)注員的模擬,就像在問(wèn)“在這種對(duì)話中,人類標(biāo)注員會(huì)怎么說(shuō)?”。 這些標(biāo)注員并非普通的網(wǎng)民,而是公司雇傭的專家,例如,在回答關(guān)于代碼的問(wèn)題時(shí),參與創(chuàng)建數(shù)據(jù)集的人通常是受過(guò)教育的專家。所以,你是在與這些專家的模擬進(jìn)行對(duì)話,而不是一個(gè)神奇的AI,而是一個(gè)平均水平、可能相當(dāng)熟練的標(biāo)注員的模擬。

讓我們舉個(gè)具體的例子:當(dāng)我訪問(wèn)ChatGPT,輸入“推薦你在巴黎看到的五大標(biāo)志性建筑”,然后按下回車鍵,會(huì)發(fā)生什么?

我該如何看待它?它并非某種神奇的AI,而是基于對(duì)OpenAI聘請(qǐng)的標(biāo)注員進(jìn)行統(tǒng)計(jì)模擬的結(jié)果??梢赃@樣理解:如果這個(gè)問(wèn)題存在于OpenAI后期訓(xùn)練數(shù)據(jù)集中,我很有可能看到一個(gè)與人工標(biāo)注員為這五個(gè)地標(biāo)撰寫內(nèi)容非常相似的答案。人工標(biāo)注員通常會(huì)進(jìn)行網(wǎng)上搜索,花約20分鐘做調(diào)查,然后列出清單。如果這個(gè)清單在數(shù)據(jù)集中,我就能看到模型給出與之類似的答案。

如果該查詢不在后期訓(xùn)練數(shù)據(jù)集中,那么模型給出的答案則更多地源于涌現(xiàn)現(xiàn)象。模型在統(tǒng)計(jì)上理解,訓(xùn)練集中這類地標(biāo)通常是顯著的、人們常想了解的,且互聯(lián)網(wǎng)上經(jīng)常討論的地標(biāo)。模型已從互聯(lián)網(wǎng)預(yù)訓(xùn)練中獲得海量知識(shí),可能見(jiàn)過(guò)大量關(guān)于地標(biāo)及其相關(guān)信息的對(duì)話。所以,預(yù)訓(xùn)練知識(shí)與后期訓(xùn)練數(shù)據(jù)集相結(jié)合,導(dǎo)致了這種模仿。從統(tǒng)計(jì)意義上說(shuō),這就是幕后發(fā)生的大致情況。

現(xiàn)在我想談?wù)凩LM心理學(xué),特別是幻覺(jué)問(wèn)題。大型語(yǔ)言模型幻覺(jué)是指模型編造信息的情況,這是個(gè)長(zhǎng)期存在的問(wèn)題,盡管現(xiàn)在已有所改善。讓我們嘗試?yán)斫饣糜X(jué)的來(lái)源。

舉個(gè)例子,展示訓(xùn)練集中可能存在的三個(gè)對(duì)話:“誰(shuí)是湯姆·克魯斯?” “湯姆·克魯斯是一位著名的美國(guó)演員和制片人。” “約翰·巴拉索是誰(shuí)?” “一位美國(guó)參議員?!?“成吉思汗是誰(shuí)?” (此處省略對(duì)成吉思汗的描述)。人類在撰寫答案時(shí),要么知道答案,要么會(huì)進(jìn)行網(wǎng)上搜索,然后自信地給出答案。測(cè)試時(shí),當(dāng)你問(wèn)一個(gè)我隨機(jī)想出的、可能不存在的人是誰(shuí)……

我只是嘗試隨機(jī)生成它。問(wèn)題是,當(dāng)我們?cè)儐?wèn)奧森·科瓦茨是誰(shuí)時(shí),助手不會(huì)簡(jiǎn)單地回答“哦,我不知道”。即使助手和語(yǔ)言模型本身可能在其內(nèi)部“知道”這個(gè)人并非它熟悉的人,這種“哦,我不知道這是誰(shuí)”的回應(yīng)也不會(huì)出現(xiàn)。

因?yàn)槟P驮诮y(tǒng)計(jì)上模仿訓(xùn)練集,訓(xùn)練集中形如“誰(shuí)是XXX”的問(wèn)題都能自信地給出正確答案。所以它會(huì)采用這種回答風(fēng)格,并盡其所能給出統(tǒng)計(jì)上最可能的猜測(cè),基本上就是編造東西。這些模型無(wú)法訪問(wèn)互聯(lián)網(wǎng),不做研究,我稱它們?yōu)榻y(tǒng)計(jì)標(biāo)記翻滾器。它只是試圖對(duì)序列中的下一個(gè)標(biāo)記進(jìn)行采樣,基本上就是編造東西。

讓我們看看這是什么樣子。我這里有一個(gè)來(lái)自Hugging Face的推理游樂(lè)場(chǎng),我故意選擇了一個(gè)名為Falcon 7B的舊模型,它已經(jīng)存在幾年了,所以它會(huì)出現(xiàn)幻覺(jué)。這種情況最近有所改善。但讓我們問(wèn)問(wèn)Falcon 7B,奧森·科瓦茨是誰(shuí)?運(yùn)行后,它回答奧森·科瓦茨是一位美國(guó)作家和科幻小說(shuō)家,這完全是假的,是一種幻覺(jué)。我們?cè)僭囈淮?,結(jié)果是奧森·科瓦茨是1950年代電視劇中的虛構(gòu)人物,這完全是胡說(shuō)八道。我們?cè)僭囈淮?,這次它是位前小聯(lián)盟棒球運(yùn)動(dòng)員。所以基本上模型不知道,它給了我們很多不同的答案,因?yàn)樗皇菑倪@些概率中進(jìn)行采樣。

模型從“奧森·科瓦茨是誰(shuí)”開(kāi)始,然后獲得這些概率,并從中進(jìn)行采樣,只是想出一些東西,這些東西在統(tǒng)計(jì)上與它訓(xùn)練集中答案的風(fēng)格一致。但我們體驗(yàn)到的卻是虛構(gòu)的事實(shí)知識(shí)。模型基本上不知道,它只是在模仿答案的格式,不會(huì)主動(dòng)去查找,因?yàn)樗皇窃谀7麓鸢浮?/p>

那么我們?cè)撊绾螠p輕這個(gè)問(wèn)題呢?例如,當(dāng)我們使用ChatGPT并詢問(wèn)“Orson Kovats是誰(shuí)”時(shí),OpenAI最先進(jìn)的模型會(huì)告訴你它需要搜索網(wǎng)絡(luò)。它實(shí)際上正在嘗試使用工具,而不是像之前的模型那樣直接編造答案。而“Orson Kovats是誰(shuí)”這個(gè)提問(wèn)并沒(méi)有使用任何工具,我不希望它進(jìn)行網(wǎng)絡(luò)搜索。

有一個(gè)著名的歷史公眾人物叫Orson Kovats,所以這個(gè)模型不會(huì)編造東西。此模型知道自己不知道,并會(huì)告訴你它似乎不認(rèn)識(shí)這個(gè)人。所以不知何故,我們某種程度上改進(jìn)了幻覺(jué)問(wèn)題,即使它們?cè)谳^舊的模型中顯然是一個(gè)問(wèn)題。如果你的訓(xùn)練集就是這樣,那么你得到這些答案就完全說(shuō)得通了。

那么我們?nèi)绾谓鉀Q這個(gè)問(wèn)題呢?很明顯,我們需要在我們的數(shù)據(jù)集中加入一些例子,其中助手正確的答案是模型不知道某個(gè)特定的事實(shí)。但我們只需要在模型實(shí)際上不知道的情況下才能產(chǎn)生這些答案。所以問(wèn)題是,我們?nèi)绾沃滥P椭朗裁椿虿恢朗裁矗课覀兛梢愿鶕?jù)經(jīng)驗(yàn)探測(cè)模型來(lái)弄清楚這一點(diǎn)。

讓我們以Meta如何處理Llama 3系列模型的幻覺(jué)為例。在他們發(fā)表的這篇Meta論文中,我們可以看到幻覺(jué),他們?cè)谶@里稱之為事實(shí)性。他們描述了他們基本上用來(lái)詢問(wèn)模型以找出它知道什么和不知道什么的程序,以找出其知識(shí)的邊界。然后,他們向訓(xùn)練集中添加示例,對(duì)于模型不知道的內(nèi)容,正確的答案是模型不知道,這在原則上聽(tīng)起來(lái)很容易做到。但這大致解決了這個(gè)問(wèn)題。它之所以能解決這個(gè)問(wèn)題,是因?yàn)檎?qǐng)記住,模型實(shí)際上可能在網(wǎng)絡(luò)內(nèi)部擁有一個(gè)相當(dāng)好的自我知識(shí)模型。所以請(qǐng)記住,我們查看了網(wǎng)絡(luò)和網(wǎng)絡(luò)內(nèi)部的所有這些神經(jīng)元。你可以想象,網(wǎng)絡(luò)中的某個(gè)神經(jīng)元會(huì)在模型不確定時(shí)亮起來(lái)。但問(wèn)題是,該神經(jīng)元的激活目前并沒(méi)有與模型實(shí)際說(shuō)出它不知道的內(nèi)容相連。因此,即使神經(jīng)網(wǎng)絡(luò)的內(nèi)部知道,因?yàn)橛幸恍┥窠?jīng)元代表這一點(diǎn),模型也不會(huì)顯示出來(lái)。相反,它會(huì)做出最好的猜測(cè),以便聽(tīng)起來(lái)很自信,就像它在訓(xùn)練集中看到的那樣。所以我們需要基本上詢問(wèn)模型,并允許它在不知道的情況下說(shuō)“我不知道”。

讓我?guī)懔私庖幌翸etaRoughly的功能?;旧?,它們的功能是,這里我有一個(gè)例子。多米尼克·哈塞克是今天的特色文章,所以我只是隨機(jī)訪問(wèn)了它。它們做的基本上是從訓(xùn)練集中隨機(jī)選擇一個(gè)文檔,然后選取一段,并使用LLM來(lái)構(gòu)建關(guān)于該段落的問(wèn)題。例如,我在這里用chat.gpt做了這件事。我說(shuō),這是這個(gè)文檔中的一段話?;谶@段話生成三個(gè)具體的客觀問(wèn)題,并給出問(wèn)題和答案。因此,LLM已經(jīng)足夠好到可以創(chuàng)建和重構(gòu)這些信息。所以,如果信息在這個(gè)LLM的上下文窗口中,它實(shí)際上運(yùn)行得很好。它不必依賴于它的記憶。它就在上下文窗口里。因此它基本上可以以相當(dāng)高的準(zhǔn)確率重新構(gòu)建這些信息。例如,它可以為我們生成這樣的問(wèn)題:他為哪個(gè)隊(duì)效力?

答案在這里。他贏得了多少個(gè)杯賽?我們現(xiàn)在要做的是,對(duì)模型進(jìn)行提問(wèn),模型有問(wèn)題和答案。我們將把問(wèn)題提交給模型,例如Meta的Llama,但這里我們用Mistral 7b舉例。這個(gè)模型知道答案嗎?我們來(lái)看看。他為布法羅軍刀隊(duì)效力過(guò),模型知道。我們可以通過(guò)編程的方式來(lái)判斷,即從模型獲取答案并與正確答案進(jìn)行比較。模型能夠自動(dòng)完成此任務(wù),無(wú)需人工參與。我們可以獲取模型的答案,并用另一個(gè)大型語(yǔ)言模型判斷答案是否正確。如果正確,則模型可能知道答案。我們將重復(fù)此過(guò)程幾次。它知道是布法羅軍刀隊(duì)。我們?cè)僭囈淮危挤_軍刀隊(duì)。再試一次,布法羅軍刀隊(duì)。三次詢問(wèn)后,模型似乎知道答案,一切都很棒。

現(xiàn)在嘗試第二個(gè)問(wèn)題:他贏得了多少個(gè)斯坦利杯?正確答案是兩個(gè)。模型聲稱他贏了四次,這是錯(cuò)誤的。模型不知道,它在編造。我們?cè)僭囈淮?,模型再次編造。再試一次,它說(shuō)他職業(yè)生涯中沒(méi)有獲勝。很明顯,模型不知道。我們可以通過(guò)編程的方式判斷,即三次詢問(wèn)模型,并將答案與正確答案進(jìn)行比較。如果模型不知道,我們就知道了。然后我們將這個(gè)問(wèn)題,創(chuàng)建一個(gè)新的對(duì)話添加到訓(xùn)練集中。訓(xùn)練集中會(huì)添加一個(gè)新的對(duì)話:“他贏得了多少個(gè)斯坦利杯?” 答案是:“對(duì)不起,我不知道,或者我不記得了”。這是正確的答案,因?yàn)槲覀冊(cè)儐?wèn)了模型,這就是情況。

如果你對(duì)許多不同類型的問(wèn)題和文檔都這樣做,你就在給模型一個(gè)機(jī)會(huì),在其訓(xùn)練集中,根據(jù)其知識(shí)拒絕回答。如果訓(xùn)練集中只有幾個(gè)這樣的例子,模型就能學(xué)習(xí)這種基于知識(shí)的拒絕與其內(nèi)部神經(jīng)元的關(guān)聯(lián)。從經(jīng)驗(yàn)上看,這是可能的。它可以學(xué)習(xí)這種關(guān)聯(lián):當(dāng)不確定性神經(jīng)元的值很高時(shí),我實(shí)際上不知道,我可以說(shuō)“我很抱歉,但我記不起這個(gè)了”等等。如果你在訓(xùn)練集中包含這些例子,就能很大程度地減輕幻覺(jué)問(wèn)題。這就是ChatGPT。

也能夠做到這些事情的原因是,這些都是人們已經(jīng)實(shí)施并隨著時(shí)間推移改善了事實(shí)性問(wèn)題緩解措施。

我已描述了第一種緩解方法,基本上是為了減輕幻覺(jué)問(wèn)題?,F(xiàn)在,我們可以做得更好,不必僅僅說(shuō)“我不知道”,我們可以引入第二種緩解方法,讓大型語(yǔ)言模型有機(jī)會(huì)給出事實(shí)性答案并實(shí)際回答問(wèn)題。

如果我問(wèn)你一個(gè)事實(shí)性問(wèn)題,而你不知道答案,你會(huì)怎么做?你可能會(huì)去搜索,使用互聯(lián)網(wǎng)找出答案,然后告訴我。我們可以對(duì)這些模型做完全相同的事情。想象一下神經(jīng)網(wǎng)絡(luò)內(nèi)部,在其數(shù)十億參數(shù)內(nèi)部的知識(shí),可以將其視為模型在訓(xùn)練期間、預(yù)訓(xùn)練階段很久以前看到的事物的模糊記憶,如同一個(gè)月前讀到的東西。如果你不斷閱讀某些東西,你就會(huì)記住它,模型也是如此。但如果信息稀少,你的記憶可能不清晰。這時(shí),你和我都一樣,會(huì)去查找它。

當(dāng)你查找它時(shí),你基本上是用信息刷新你的工作記憶,然后你就能檢索它、談?wù)撍鹊?。所以我們需要一些等效的方法?lái)允許模型刷新其記憶或回憶,我們可以通過(guò)為模型引入工具來(lái)做到這一點(diǎn)。

我們的方法是,與其只是說(shuō)“對(duì)不起,我不知道”,不如嘗試使用工具。我們可以創(chuàng)建一個(gè)機(jī)制,讓語(yǔ)言模型發(fā)出特殊的標(biāo)記,例如“搜索開(kāi)始”和“搜索結(jié)束”。當(dāng)模型不知道答案時(shí),它可以選擇發(fā)出“搜索開(kāi)始”標(biāo)記,這對(duì)于OpenAI來(lái)說(shuō),就是將查詢發(fā)送到bing.com或谷歌搜索等。它會(huì)發(fā)出查詢,然后發(fā)出“搜索結(jié)束”標(biāo)記。

然后,運(yùn)行推理、從模型中采樣的程序,當(dāng)它看到“搜索結(jié)束”標(biāo)記時(shí),它不會(huì)采樣序列中的下一個(gè)標(biāo)記,而是會(huì)暫停從模型中生成,它會(huì)啟動(dòng)一個(gè)會(huì)話連接到bing.com,并將搜索查詢粘貼到bing中。然后它將獲取所有檢索到的文本,也許會(huì)用一些其他特殊標(biāo)記再次表示它,并將這段文本復(fù)制粘貼到上下文窗口中。

模型從網(wǎng)頁(yè)搜索獲得的文本現(xiàn)在就在上下文窗口內(nèi),它將被輸入到神經(jīng)網(wǎng)絡(luò)中。你可以把上下文窗口想象成模型的工作內(nèi)存。

上下文窗口中的數(shù)據(jù)可以直接被模型訪問(wèn),并直接輸入到神經(jīng)網(wǎng)絡(luò)中。因此,模型不再依賴模糊的回憶,而是可以直接訪問(wèn)上下文窗口中的數(shù)據(jù)。 當(dāng)模型采樣新的標(biāo)記時(shí),可以輕松參考已復(fù)制粘貼的內(nèi)容。這就是這些工具大致的工作方式,網(wǎng)頁(yè)搜索只是其中一種。稍后我們將探討其他工具。

基本上,通過(guò)引入新的標(biāo)記和模式,模型可以利用這些標(biāo)記并調(diào)用特定功能,例如網(wǎng)頁(yè)搜索。

那么,如何教會(huì)模型正確使用這些工具,例如網(wǎng)頁(yè)搜索、搜索開(kāi)始和搜索結(jié)束呢?這同樣是通過(guò)訓(xùn)練集完成的。我們需要大量數(shù)據(jù)和對(duì)話,通過(guò)示例向模型展示如何使用網(wǎng)頁(yè)搜索,在哪些情況下使用搜索以及搜索結(jié)果的呈現(xiàn)方式。訓(xùn)練集中包含數(shù)千個(gè)此類示例,模型就能很好地理解工具的工作方式,知道如何構(gòu)建查詢。

由于預(yù)訓(xùn)練數(shù)據(jù)集及其對(duì)世界的理解,模型已經(jīng)理解了什么是網(wǎng)頁(yè)搜索,并對(duì)什么樣的內(nèi)容構(gòu)成有效的搜索查詢有相當(dāng)好的原生理解。因此,只需要少量示例來(lái)展示如何使用新工具,模型就能依靠它檢索信息并將其放入上下文窗口。這類似于我們查找資料的過(guò)程,因?yàn)橐坏┬畔⑦M(jìn)入上下文,就進(jìn)入了工作內(nèi)存,非常容易操作和訪問(wèn)。

幾分鐘前,當(dāng)我在ChatGPT中搜索Orson Kovats是誰(shuí)時(shí),ChatGPT語(yǔ)言模型認(rèn)為這是一個(gè)罕見(jiàn)的人物,它沒(méi)有直接給出答案,而是選擇采樣一個(gè)特殊標(biāo)記進(jìn)行網(wǎng)絡(luò)搜索。我們看到一些信息閃過(guò),表明使用了網(wǎng)絡(luò)工具。稍作等待后,它生成了答案并創(chuàng)建了引用,表明它正在引用來(lái)源。

它啟動(dòng)了一次網(wǎng)絡(luò)搜索,找到了來(lái)源和網(wǎng)址。這些網(wǎng)頁(yè)的文本被添加到上下文窗口中(雖然未顯示),模型以此為基礎(chǔ)進(jìn)行引用,例如“可能是這些人,引用;可能是那些人,引用”等等。

這就是為什么當(dāng)我問(wèn)誰(shuí)是奧森·科瓦茨時(shí),我也可以說(shuō)“不要使用任何工具”。這足以讓ChatGPT不使用工具,而只使用其記憶和回憶。

我也嘗試向ChatGPT提出了這個(gè)問(wèn)題:多米尼克·哈塞克贏得了多少次斯坦利杯?

ChatGPT 認(rèn)為自己知道答案,并自信地聲稱贏了兩次。這源于它對(duì)自身權(quán)重、參數(shù)和激活值的信心,使其能夠直接從“記憶”中檢索信息。但也可以通過(guò)網(wǎng)絡(luò)搜索來(lái)驗(yàn)證。 同樣的查詢,ChatGPT 會(huì)進(jìn)行搜索,找到并整合多個(gè)來(lái)源,最終列出這些來(lái)源,例如維基百科文章。這就是工具(網(wǎng)絡(luò)搜索)如何運(yùn)作,也是模型緩解幻覺(jué)和確保事實(shí)性的方法。

這強(qiáng)調(diào)了一個(gè)重要的觀點(diǎn):神經(jīng)網(wǎng)絡(luò)參數(shù)中的知識(shí)是一種模糊的記憶,上下文窗口中的知識(shí)和標(biāo)記則構(gòu)成工作記憶。這與人類大腦的工作方式類似:我們記住的東西是參數(shù),近期經(jīng)歷則在上下文窗口中。隨著我們體驗(yàn)周圍環(huán)境,上下文窗口不斷更新。

這對(duì)于使用大型語(yǔ)言模型有啟示。例如,要求 ChatGPT 總結(jié)《傲慢與偏見(jiàn)》第一章,效果不錯(cuò),因?yàn)樗鼘?duì)名著有較好的“記憶”,可能看過(guò)大量相關(guān)資料。但這類似于人類的記憶:讀過(guò)書后才能總結(jié)。

通常,直接提供信息效果更好。更好的提示是請(qǐng)求幫助總結(jié),并附上參考文本。 我通常會(huì)復(fù)制粘貼第一章內(nèi)容。 這樣,模型可以直接訪問(wèn)信息,無(wú)需回憶,從而顯著提高摘要質(zhì)量。這與我們?nèi)祟愊嗨?,如果在總結(jié)前重新閱讀,就能寫出更好的摘要。

我接下來(lái)想簡(jiǎn)要談?wù)劻硪环N心理上的怪癖:自我認(rèn)知。我經(jīng)常在互聯(lián)網(wǎng)上看到人們向大型語(yǔ)言模型提出諸如“你是哪個(gè)模型?誰(shuí)創(chuàng)造了你?”之類的問(wèn)題。這個(gè)問(wèn)題多少有些荒謬。

原因在于,當(dāng)我試圖解釋一些底層原理時(shí),這東西并非一個(gè)人,它根本沒(méi)有任何持久的存在。它啟動(dòng)、處理標(biāo)記,然后關(guān)閉,對(duì)每個(gè)人都如此操作。它只是構(gòu)建一個(gè)對(duì)話的上下文窗口,然后所有內(nèi)容都被刪除。所以,這個(gè)實(shí)體就像每次對(duì)話都從頭開(kāi)始重啟。它沒(méi)有持久自我,沒(méi)有自我意識(shí),它只是一個(gè)標(biāo)記攪拌機(jī),遵循其訓(xùn)練集的統(tǒng)計(jì)規(guī)律。所以,問(wèn)它“你是誰(shuí)”、“是誰(shuí)創(chuàng)造了你”等等,并沒(méi)有什么意義。默認(rèn)情況下,你將會(huì)得到一些非常隨機(jī)的答案。

例如,讓我們以Falcon為例,這是一個(gè)相當(dāng)舊的模型。它在回避問(wèn)題,編造說(shuō)自己是由OpenAI基于GPT-3模型構(gòu)建的。很多人會(huì)認(rèn)為這是該模型在OpenAI數(shù)據(jù)上進(jìn)行訓(xùn)練的證據(jù),但我并不這么認(rèn)為。因?yàn)?,如果你沒(méi)有明確地對(duì)模型進(jìn)行編程以回答這類問(wèn)題,你得到的將是其對(duì)答案的統(tǒng)計(jì)最佳猜測(cè)。這個(gè)模型具有包含對(duì)話的SFT數(shù)據(jù)混合,在微調(diào)過(guò)程中,模型在根據(jù)此數(shù)據(jù)進(jìn)行訓(xùn)練時(shí),某種程度上理解到它正在承擔(dān)一個(gè)有幫助的助手的角色。它并沒(méi)有被明確告知應(yīng)該給自己貼上什么標(biāo)簽,它只是扮演了一個(gè)樂(lè)于助人的助手。

記住,預(yù)訓(xùn)練階段使用了來(lái)自整個(gè)互聯(lián)網(wǎng)的文檔,而ChatGPT和OpenAI在這些文檔中非常突出。我認(rèn)為這里實(shí)際發(fā)生的情況是,這只是它自己幻想出來(lái)的標(biāo)簽——它的自我認(rèn)同,即它是OpenAI的ChatGPT。它之所以這么說(shuō),是因?yàn)榛ヂ?lián)網(wǎng)上存在大量類似的答案數(shù)據(jù),這些答案實(shí)際上來(lái)自O(shè)penAI和ChatGPT。所以這就是它給自己貼的標(biāo)簽。

現(xiàn)在,作為開(kāi)發(fā)者,你可以覆蓋它。如果你有一個(gè)大型語(yǔ)言模型,你實(shí)際上可以覆蓋它,并且有一些方法可以做到這一點(diǎn)。舉個(gè)例子,讓我來(lái)給你展示一下Allen AI的Olmo模型。這是一個(gè)大型語(yǔ)言模型(LLM),它并不是頂級(jí)的大型語(yǔ)言模型,但我還是很喜歡它。

Olmo及其相關(guān)論文均為開(kāi)源,這很好。其SFT混合體包含微調(diào)數(shù)據(jù)和對(duì)話數(shù)據(jù)集。Olmo模型的訓(xùn)練數(shù)據(jù)包含一百萬(wàn)次對(duì)話,但Olmo2模型僅使用240次硬編碼對(duì)話。

這些硬編碼對(duì)話包含預(yù)設(shè)問(wèn)題及答案,例如詢問(wèn)模型名稱、開(kāi)發(fā)機(jī)構(gòu)等。 將這240次對(duì)話用于微調(diào),模型會(huì)傾向于鸚鵡學(xué)舌,否則可能產(chǎn)生無(wú)意義的AI生成內(nèi)容。

另一種方法是使用系統(tǒng)消息,在對(duì)話開(kāi)始前提供模型身份、訓(xùn)練日期、知識(shí)截止日期等信息。這類似于為模型創(chuàng)建文檔記錄,并將其隱藏在上下文窗口中。這兩種方法都能使模型描述自身,但都屬于附加信息,并非模型內(nèi)在屬性。

接下來(lái)討論這些模型在解決問(wèn)題場(chǎng)景中的計(jì)算能力,以及構(gòu)建對(duì)話示例時(shí)需要注意的事項(xiàng)。這些模型的思考方式具有啟發(fā)性,需要仔細(xì)考量。 接下來(lái),讓我們考慮一個(gè)來(lái)自人類的提示,并假設(shè)我們將以此構(gòu)建對(duì)話示例,用于訓(xùn)練模型解決簡(jiǎn)單的數(shù)學(xué)問(wèn)題。

艾米莉買了三個(gè)蘋果和兩個(gè)橙子,每個(gè)橙子兩美元,總價(jià)是13美元。蘋果的價(jià)格是多少?這是一個(gè)簡(jiǎn)單的數(shù)學(xué)題,有兩個(gè)正確的答案,都是3。但其中一個(gè)答案對(duì)輔助模型來(lái)說(shuō)更好。例如,數(shù)據(jù)標(biāo)注員在創(chuàng)建答案時(shí),一個(gè)答案對(duì)模型來(lái)說(shuō)很糟糕,另一個(gè)則可以接受。

思考一下為什么兩個(gè)答案中一個(gè)明顯比另一個(gè)更好。使用錯(cuò)誤的答案會(huì)使模型的數(shù)學(xué)能力變差,并產(chǎn)生不良后果。在訓(xùn)練人員創(chuàng)建理想回復(fù)時(shí),這是標(biāo)注文檔中需要注意的事項(xiàng)。

模型在訓(xùn)練和推理時(shí),都是從左到右處理一維的標(biāo)記序列??梢韵胂髽?biāo)記序列從左到右演變,為了生成序列中的下一個(gè)標(biāo)記,所有標(biāo)記都輸入到神經(jīng)網(wǎng)絡(luò)中,神經(jīng)網(wǎng)絡(luò)給出下一個(gè)標(biāo)記的概率。

這與之前的網(wǎng)絡(luò)演示圖完全一樣,計(jì)算過(guò)程獲取上面輸入的標(biāo)記,執(zhí)行神經(jīng)元運(yùn)算,給出下一個(gè)標(biāo)記概率的答案。模型只有有限幾層計(jì)算,例如只有1、2、3層注意力機(jī)制和MLP,而現(xiàn)代先進(jìn)網(wǎng)絡(luò)可能有100層甚至更多。

從之前的標(biāo)記序列到下一個(gè)標(biāo)記的概率,只有大約100層的計(jì)算。對(duì)于每個(gè)標(biāo)記,只有有限量的計(jì)算,可以認(rèn)為計(jì)算量非常少且?guī)缀豕潭?。雖然輸入的標(biāo)記越多,神經(jīng)網(wǎng)絡(luò)的前向傳播越昂貴,但不會(huì)貴很多。

可以將模型理解為對(duì)每個(gè)標(biāo)記進(jìn)行固定量的計(jì)算,計(jì)算量不會(huì)太大,因?yàn)閷訑?shù)有限,計(jì)算量有限。模型無(wú)法僅僅通過(guò)一次前向傳播進(jìn)行任意計(jì)算來(lái)獲得單個(gè)標(biāo)記。

這意味著推理和計(jì)算必須分布到許多標(biāo)記上,因?yàn)槊總€(gè)標(biāo)記只在其上花費(fèi)有限量的計(jì)算。我們希望將計(jì)算分布到許多標(biāo)記上,并且不能對(duì)模型在任何單個(gè)標(biāo)記上的計(jì)算期望過(guò)高,因?yàn)槊總€(gè)標(biāo)記的計(jì)算量是有限的。

這里的計(jì)算量大致是固定的。因此,左側(cè)答案明顯更差。原因是模型必須從左到右逐個(gè)生成標(biāo)記,它需要在單個(gè)標(biāo)記中完成所有計(jì)算并給出答案“3”。一旦答案生成,后續(xù)標(biāo)記只是對(duì)答案的解釋,因?yàn)榇鸢敢言谏舷挛拇翱谥?。模型?shí)際上并未進(jìn)行計(jì)算,而是試圖在一個(gè)標(biāo)記中猜測(cè)答案,由于每個(gè)標(biāo)記的計(jì)算量有限,這行不通。

右側(cè)答案則好得多,因?yàn)樗鼘⒂?jì)算分布在整個(gè)答案中,讓模型逐步得出答案。從左到右,模型生成中間結(jié)果,例如“橙子的總成本是4,所以13減去4是9”。每個(gè)中間計(jì)算都不復(fù)雜,模型在每個(gè)標(biāo)記中處理的難度降低。測(cè)試時(shí),模型也能進(jìn)行計(jì)算。我們教模型分散推理,將計(jì)算分散到各個(gè)標(biāo)記上,每個(gè)標(biāo)記處理簡(jiǎn)單問(wèn)題,最終累加得到答案。

這與左側(cè)的方案形成對(duì)比,左側(cè)方案教模型試圖在一個(gè)標(biāo)記中完成計(jì)算,這非常糟糕。 通常不必明確考慮這一點(diǎn),因?yàn)镺penAI的標(biāo)注員會(huì)確保答案是分散的,OpenAI會(huì)處理這個(gè)問(wèn)題。 當(dāng)我詢問(wèn)ChatGPT時(shí),它會(huì)緩慢地生成答案,創(chuàng)建中間結(jié)果(這些結(jié)果對(duì)用戶不可見(jiàn),但對(duì)模型很重要)。 如果沒(méi)有這些中間結(jié)果,模型無(wú)法得出正確的答案“3”。

最后,我們可以故意刁難模型。例如,使用相同的提示,要求它用單個(gè)標(biāo)記回答問(wèn)題。

直接給我答案,什么都不要。結(jié)果發(fā)現(xiàn),對(duì)于這個(gè)簡(jiǎn)單的提示,它竟然一次就完成了。它只創(chuàng)建了一個(gè),我想這是兩個(gè)詞元,對(duì)吧?因?yàn)槊涝?hào)本身就是一個(gè)詞元。所以基本上,這個(gè)模型沒(méi)有給我一個(gè)詞元,它給了我兩個(gè)詞元,但它仍然給出了正確的答案。而且它是在網(wǎng)絡(luò)的單次前向傳播中做到的。

現(xiàn)在,這是因?yàn)檫@里的數(shù)字非常簡(jiǎn)單。所以我把它弄得更難一些,故意刁難一下模型。所以我說(shuō)道,艾米莉買了23個(gè)蘋果和177個(gè)橙子,然后我只是把數(shù)字弄得大了一點(diǎn),只是讓模型更難處理了,我要求它在一個(gè)token中進(jìn)行更多計(jì)算。所以我說(shuō)了同樣的話,它在這里給了我5,而5實(shí)際上是不正確的。

所以模型未能在一輪網(wǎng)絡(luò)前向傳播中完成所有計(jì)算。它未能從輸入token出發(fā),然后在一輪網(wǎng)絡(luò)前向傳播中,一次性通過(guò)網(wǎng)絡(luò),它無(wú)法產(chǎn)生結(jié)果。然后我說(shuō),好吧,現(xiàn)在別擔(dān)心token限制,像平時(shí)一樣解決問(wèn)題吧。然后它會(huì)列出所有中間結(jié)果,進(jìn)行簡(jiǎn)化。這里每一個(gè)中間結(jié)果和中間計(jì)算,對(duì)模型來(lái)說(shuō)都容易得多,而且每個(gè)令牌的工作量也不算太大。此處的所有令牌都是正確的,它產(chǎn)生了一個(gè)修正的解決方案,即7。它只是無(wú)法壓縮所有這些工作,它無(wú)法將這些壓縮到網(wǎng)絡(luò)的單次前向傳遞中。

所以我覺(jué)得這只是一個(gè)很可愛(ài)的例子,可以思考一下,而且我認(rèn)為這再次闡明了這些模型的工作方式。關(guān)于這個(gè)話題,我想說(shuō)的最后一點(diǎn)是,如果我在日常生活中實(shí)際嘗試解決這個(gè)問(wèn)題,我實(shí)際上可能不會(huì)相信模型,不會(huì)相信這里所有中間計(jì)算的正確性。所以實(shí)際上,我可能會(huì)這樣做:我會(huì)來(lái)到這里,然后說(shuō),“使用代碼”。

這是因?yàn)榇a是ChatGPT可以使用的工具之一。而不是讓它進(jìn)行心算,像這里的心算一樣,我不完全相信它,尤其當(dāng)數(shù)字變得非常大時(shí),模型無(wú)法保證能夠正確地進(jìn)行運(yùn)算。從原則上講,任何一個(gè)中間步驟都可能失敗。我們正在使用神經(jīng)網(wǎng)絡(luò)進(jìn)行心算,就像你在大腦中進(jìn)行心算一樣,它可能會(huì)搞砸一些中間結(jié)果。它甚至能夠進(jìn)行這種心算,這實(shí)際上令人驚嘆,我認(rèn)為我無(wú)法在腦子里做到這一點(diǎn)。但基本上,模型就像在它自己的“腦子里”進(jìn)行運(yùn)算。我不相信這一點(diǎn),所以我希望它使用工具。因此你可以說(shuō)一些諸如“使用代碼”之類的話。我不確定那里發(fā)生了什么。使用代碼。正如我提到的,有一個(gè)特殊的工具,模型可以編寫代碼。我可以檢查這段代碼是否正確。然后它就不依賴于它的心算能力了。它使用Python解釋器(這是一種非常簡(jiǎn)單的編程語(yǔ)言)來(lái)編寫計(jì)算結(jié)果的代碼。

我更信任Python程序的結(jié)果,它比語(yǔ)言模型的直接計(jì)算更可靠。因此,遇到類似問(wèn)題時(shí),建議使用模型的代碼解釋器。

模型通過(guò)專用標(biāo)記調(diào)用代碼解釋器,這并非語(yǔ)言模型自身生成。它編寫程序,發(fā)送到計(jì)算機(jī)的特定部分執(zhí)行,再將結(jié)果返回給模型。模型據(jù)此得出每個(gè)蘋果7元的結(jié)論。這是另一種實(shí)用工具,建議大家實(shí)踐操作。

這種方法更容易避免錯(cuò)誤。這就是本節(jié)命名為“模型需要令牌來(lái)思考”的原因:分散計(jì)算到多個(gè)令牌,要求模型創(chuàng)建中間結(jié)果,并盡可能依賴工具,而不是讓模型將所有內(nèi)容都儲(chǔ)存在內(nèi)存中。如果模型試圖將所有內(nèi)容都儲(chǔ)存在內(nèi)存中,不要完全相信它,優(yōu)先使用工具。

我將用另一個(gè)例子說(shuō)明這種情況:計(jì)數(shù)。語(yǔ)言模型不擅長(zhǎng)計(jì)數(shù),因?yàn)樵谝粋€(gè)單獨(dú)的詞元中要求太多。例如,我展示一堆點(diǎn),讓模型計(jì)算數(shù)量。模型試圖在一個(gè)詞元中解決這個(gè)問(wèn)題,即在上下文窗口中計(jì)算點(diǎn)數(shù),并在網(wǎng)絡(luò)的單次前向傳遞中完成。但網(wǎng)絡(luò)單次前向傳遞的計(jì)算能力有限。

模型看到的只是分詞器處理后的結(jié)果。例如,“下面有多少個(gè)點(diǎn)”,以及隨后的一堆點(diǎn),可能被分詞器分成若干個(gè)詞元,每個(gè)詞元包含一組點(diǎn)。模型實(shí)際看到的只是這些詞元的ID,然后據(jù)此計(jì)算數(shù)量。結(jié)果并非161,而是177。

我們可以使用代碼解決這個(gè)問(wèn)題。雖然看似簡(jiǎn)單,但實(shí)際上我已將問(wèn)題分解成對(duì)模型更容易處理的子問(wèn)題。使用代碼后,結(jié)果正確顯示為177。

我知道模型擅長(zhǎng)復(fù)制粘貼。 使用代碼時(shí),模型會(huì)創(chuàng)建一個(gè)Python字符串,并將輸入復(fù)制粘貼到其中。 模型將字符串視為幾個(gè)標(biāo)記,復(fù)制粘貼并解包這些標(biāo)記非常簡(jiǎn)單。 因此,模型創(chuàng)建字符串,調(diào)用Python例程dot count,最終得到答案。Python解釋器進(jìn)行計(jì)數(shù),而非模型的心算。 這再次說(shuō)明模型需要標(biāo)記來(lái)思考,不能依賴其心算能力,這也是模型計(jì)數(shù)能力不佳的原因。 如果需要模型執(zhí)行計(jì)數(shù)任務(wù),應(yīng)始終讓其借助工具。

模型還有許多其他小的認(rèn)知缺陷,這些是技術(shù)上的不足,需要時(shí)間來(lái)逐漸改進(jìn)。例如,模型在各種拼寫相關(guān)的任務(wù)上表現(xiàn)不佳。 這與分詞有關(guān),因?yàn)槟P涂吹降氖窃~元而非字符。模型的世界是基于詞元的,詞元是文本片段。 因此,簡(jiǎn)單的字符級(jí)任務(wù)往往會(huì)失敗。

例如,給模型一個(gè)字符串“ubiquitous”,要求其打印從第一個(gè)字符開(kāi)始的每第三個(gè)字符。 模型的結(jié)果可能不正確,這可能是因?yàn)樗阈g(shù)運(yùn)算失敗,更重要的是,模型無(wú)法像人類一樣訪問(wèn)單個(gè)字母。模型將三個(gè)詞元視為一個(gè)整體,因?yàn)槠溆?xùn)練數(shù)據(jù)是基于詞元的。 模型需要從大量數(shù)據(jù)中學(xué)習(xí)不同字母與詞元之間的關(guān)系,而我們使用詞元的主要原因是為了提高效率。 很多人希望完全取消詞元,使用字符級(jí)或字節(jié)級(jí)模型,但這會(huì)產(chǎn)生非常長(zhǎng)的序列,目前人們還不知道如何處理。

因此,在分詞的世界里,任何拼寫任務(wù)實(shí)際上都不指望能做得很好。因?yàn)槲抑烙捎诜衷~的原因,拼寫不是它的強(qiáng)項(xiàng),所以我又能要求它依賴工具,我可以直接說(shuō)使用代碼。我再次預(yù)期這會(huì)奏效,因?yàn)閷ⅰ皍biquitous”復(fù)制粘貼到Python解釋器中的任務(wù)要容易得多,然后我們依靠Python解釋器來(lái)操作這個(gè)字符串的字符。所以我如果說(shuō)使用代碼,“ubiquitous”,是的,它會(huì)索引到每一個(gè)第三個(gè)字符,實(shí)際的結(jié)果是“UQTS”,在我看來(lái)是正確的。所以,再次,這是一個(gè)拼寫相關(guān)任務(wù)效果不好的例子。

最近一個(gè)非常著名的例子是,草莓(strawberry)中有多少個(gè)字母R?這多次在網(wǎng)上病毒式傳播?;旧希F(xiàn)在的模型都能正確回答了,它們會(huì)說(shuō)草莓中有三個(gè)R,但很長(zhǎng)一段時(shí)間里,所有最先進(jìn)的模型都會(huì)堅(jiān)持說(shuō)草莓里只有兩個(gè)R。這引起了很多騷動(dòng),因?yàn)檫@是一個(gè)詞嗎?我想是的。因?yàn)檫@就像,為什么這些模型如此出色?它們可以解決數(shù)學(xué)奧林匹克競(jìng)賽題,但它們卻不能,比如,數(shù)草莓里的“R”。而對(duì)此的答案,同樣地,我已經(jīng)慢慢地解釋了,但首先,模型看不到字符,它們看到的是標(biāo)記;其次,它們不太擅長(zhǎng)計(jì)數(shù)。所以我們?cè)谶@里結(jié)合了看到字符的困難和計(jì)數(shù)的困難,這就是為什么模型難以解決這個(gè)問(wèn)題,盡管我認(rèn)為現(xiàn)在,老實(shí)說(shuō),我認(rèn)為OpenAI可能已經(jīng)在這里硬編碼了答案,或者我不確定他們做了什么。但這個(gè)具體的查詢現(xiàn)在可以工作了。

所以模型不太擅長(zhǎng)拼寫,還有一些其他的小問(wèn)題,我不想一一贅述。我只想展示一些在實(shí)際使用這些模型時(shí)需要注意的例子。我實(shí)際上并不想在這里全面分析模型的所有不足之處,我只想指出,這里有些地方不夠完善。我們已經(jīng)討論過(guò)其中一些,其中一些說(shuō)得通,但有些則說(shuō)不通。它們就像……即使你深入了解這些模型的工作原理,也會(huì)讓你摸不著頭腦。

最近的一個(gè)很好的例子如下:這些模型在處理像這樣的非常簡(jiǎn)單的問(wèn)題時(shí)表現(xiàn)不佳,這讓很多人感到震驚,因?yàn)檫@些模型可以解決復(fù)雜的數(shù)學(xué)問(wèn)題。它們能夠比我更好地回答博士級(jí)別的物理、化學(xué)、生物學(xué)問(wèn)題,但有時(shí)它們?cè)谙襁@樣的超級(jí)簡(jiǎn)單的問(wèn)題上卻力不從心。所以,我們開(kāi)始吧。9.11大于9.9,它以某種方式證明了這一點(diǎn),但是很明顯……然后最后,好吧,它實(shí)際上后來(lái)又改變了決定。所以我不認(rèn)為這是非常可重復(fù)的。有時(shí)候它會(huì)改變答案,有時(shí)候它答對(duì)了,有時(shí)候它答錯(cuò)了。我們?cè)僭囈淮巍:冒?,即使它看起?lái)可能更大……好吧,所以這里它最終甚至沒(méi)有自我糾正。

如果你反復(fù)提問(wèn),有時(shí)它也能給出正確答案。但模型如何在奧林匹克級(jí)別的難題上表現(xiàn)出色,卻在如此簡(jiǎn)單的題目上失敗呢?我認(rèn)為這一點(diǎn),正如我提到的,有些令人費(fèi)解。

事實(shí)上,許多人對(duì)此進(jìn)行了深入研究,雖然我并未閱讀相關(guān)論文,但我從研究團(tuán)隊(duì)了解到,當(dāng)仔細(xì)檢查神經(jīng)網(wǎng)絡(luò)內(nèi)部的激活情況,查看哪些特征開(kāi)啟或關(guān)閉,哪些神經(jīng)元開(kāi)啟或關(guān)閉時(shí),發(fā)現(xiàn)許多通常與圣經(jīng)經(jīng)文相關(guān)的的神經(jīng)元被激活。因此,我認(rèn)為模型可能受到了這些類似圣經(jīng)經(jīng)文標(biāo)記的提示,在圣經(jīng)經(jīng)文的語(yǔ)境下,9.11 會(huì)出現(xiàn)在 9.9 之后。所以,模型不知何故認(rèn)為在圣經(jīng)經(jīng)文中 9.11 比 9.9 大,這在認(rèn)知上令人費(fèi)解,即使它嘗試用數(shù)學(xué)方法證明并得出答案,最終卻得到錯(cuò)誤的結(jié)果。所以,它基本上說(shuō)不通,也沒(méi)有被完全理解,還有一些類似的棘手問(wèn)題。這就是為什么應(yīng)該把它當(dāng)成它本來(lái)面目——一個(gè)真正神奇的隨機(jī)系統(tǒng),但你不能完全信任它。你應(yīng)該把它當(dāng)作工具來(lái)使用,而不是直接復(fù)制粘貼其結(jié)果。

現(xiàn)在我們已經(jīng)涵蓋了大型語(yǔ)言模型訓(xùn)練的兩個(gè)主要階段。首先是預(yù)訓(xùn)練階段,我們基本上是在互聯(lián)網(wǎng)文檔上進(jìn)行訓(xùn)練。當(dāng)使用互聯(lián)網(wǎng)文檔訓(xùn)練語(yǔ)言模型時(shí),得到的是所謂的基模型,它基本上是一個(gè)互聯(lián)網(wǎng)文檔模擬器。這是一個(gè)有趣的產(chǎn)物,訓(xùn)練它需要在數(shù)千臺(tái)計(jì)算機(jī)上花費(fèi)數(shù)月時(shí)間,可以說(shuō)是互聯(lián)網(wǎng)的一種有損壓縮。它極其有趣,但并沒(méi)有直接的用處,因?yàn)槲覀儾幌氩蓸踊ヂ?lián)網(wǎng)文檔,我們想向人工智能提問(wèn)并讓它回答我們的問(wèn)題。所以,我們需要一個(gè)助手。

我們可以在后期的訓(xùn)練過(guò)程中構(gòu)建一個(gè)助手,尤其是在監(jiān)督微調(diào)過(guò)程中。在這個(gè)階段,算法與預(yù)訓(xùn)練相同,沒(méi)有任何變化,唯一改變的是數(shù)據(jù)集。我們不再使用互聯(lián)網(wǎng)文檔,而是創(chuàng)建一個(gè)并精心策劃一個(gè)非常棒的對(duì)話數(shù)據(jù)集。我們需要數(shù)百萬(wàn)個(gè)關(guān)于各種不同主題的人與助手之間的對(duì)話。從根本上說(shuō),這些對(duì)話是由人類創(chuàng)造的,人類編寫提示,也編寫理想的回復(fù)。他們根據(jù)標(biāo)注文檔來(lái)做這件事?,F(xiàn)在,在現(xiàn)代技術(shù)棧中,實(shí)際上并不是完全由人工手動(dòng)完成的,他們現(xiàn)在實(shí)際上得到了這些工具的大量幫助,所以我們可以使用語(yǔ)言模型來(lái)幫助我們創(chuàng)建這些數(shù)據(jù)集,而且這是廣泛使用的。

但從根本上說(shuō),這一切都源于人工策劃。我們創(chuàng)建了對(duì)話數(shù)據(jù)集,對(duì)其進(jìn)行微調(diào)或繼續(xù)訓(xùn)練,最終得到一個(gè)助手模型。然后,我們開(kāi)始探討助手的認(rèn)知特性。例如,如果不采取緩解措施,助手會(huì)出現(xiàn)幻覺(jué),這很常見(jiàn)。我們研究了緩解幻覺(jué)的措施。我們發(fā)現(xiàn)這些模型令人印象深刻,能夠在“腦子里”完成很多事情,但也能通過(guò)工具提升性能。例如,網(wǎng)絡(luò)搜索可以減少幻覺(jué),獲取更新信息;代碼解釋器可以幫助大型語(yǔ)言模型編寫、運(yùn)行代碼并查看結(jié)果。這些是我們目前研究的一些主題。

現(xiàn)在我想介紹流程的最后一個(gè)也是最重要的階段:強(qiáng)化學(xué)習(xí)。強(qiáng)化學(xué)習(xí)屬于后期訓(xùn)練,是第三個(gè)主要階段,也是一種不同的語(yǔ)言模型訓(xùn)練方式,通常作為第三步進(jìn)行。在OpenAI這樣的公司,這由獨(dú)立團(tuán)隊(duì)負(fù)責(zé):一個(gè)團(tuán)隊(duì)負(fù)責(zé)預(yù)訓(xùn)練數(shù)據(jù),一個(gè)團(tuán)隊(duì)負(fù)責(zé)預(yù)訓(xùn)練訓(xùn)練,一個(gè)團(tuán)隊(duì)負(fù)責(zé)對(duì)話生成,一個(gè)團(tuán)隊(duì)負(fù)責(zé)監(jiān)督微調(diào),還有一個(gè)團(tuán)隊(duì)負(fù)責(zé)強(qiáng)化學(xué)習(xí)。這就像模型的交接:得到基礎(chǔ)模型后,微調(diào)成助手,然后進(jìn)行強(qiáng)化學(xué)習(xí),接下來(lái)我們將討論它。

這就是主要流程,現(xiàn)在讓我們關(guān)注強(qiáng)化學(xué)習(xí),這是訓(xùn)練的最后一個(gè)主要階段。首先解釋其動(dòng)機(jī),以及為什么我們要進(jìn)行強(qiáng)化學(xué)習(xí),以及它在高層次上的樣子。我想解釋強(qiáng)化學(xué)習(xí)階段的動(dòng)機(jī)及其對(duì)應(yīng)內(nèi)容。這類似于上學(xué):我們想讓大型語(yǔ)言模型“上學(xué)”,變得非常優(yōu)秀。我們使用幾種范例向它們傳授知識(shí)或轉(zhuǎn)移技能。

在學(xué)校使用教科書時(shí),你會(huì)發(fā)現(xiàn)三種主要信息類型。第一種是大量的闡述性內(nèi)容。這是一本我從網(wǎng)上隨意找來(lái)的書,可能是某種有機(jī)化學(xué)書籍,我不確定。重要的是,你會(huì)發(fā)現(xiàn)大部分文本,大部分內(nèi)容是闡述性的核心部分,就像背景知識(shí)等等。閱讀這些闡述性文字,可以將其理解為對(duì)數(shù)據(jù)的訓(xùn)練,就像預(yù)訓(xùn)練一樣。

這是我們構(gòu)建數(shù)據(jù)知識(shí)庫(kù)并了解主題的地方。你接下來(lái)會(huì)看到的主要信息是問(wèn)題及其解答。一位人類專家,例如本書作者,不僅提供了問(wèn)題,還完成了解答過(guò)程,這個(gè)解答等同于理想的助手回應(yīng)。專家展示了如何完整地解決問(wèn)題,我們?cè)陂喿x解決方案時(shí),就是在專家數(shù)據(jù)上進(jìn)行訓(xùn)練,之后可以嘗試模仿專家,這相當(dāng)于擁有SFT模型。我們完成了預(yù)訓(xùn)練,并涵蓋了對(duì)專家的模仿以及他們?nèi)绾谓鉀Q問(wèn)題。

強(qiáng)化學(xué)習(xí)的第三階段是練習(xí)題。有時(shí)只有一個(gè)練習(xí)題,但教科書章節(jié)結(jié)尾通常有很多練習(xí)題。練習(xí)題至關(guān)重要,因?yàn)樗鼈冏屇憔毩?xí)并發(fā)現(xiàn)自己解決問(wèn)題的方法。練習(xí)題中只有題目描述,沒(méi)有解題過(guò)程,答案通常在課本答案key中給出。你知道最終答案和題目陳述,但沒(méi)有解題過(guò)程,你正在練習(xí)解題過(guò)程,嘗試不同的方法,查看哪種方法最能得到最終解決方案,探索如何解決問(wèn)題。在這個(gè)過(guò)程中,你依賴于預(yù)訓(xùn)練的背景信息,以及模仿人類專家的方法,可能還會(huì)嘗試類似的解決方案。我們已經(jīng)完成了這些,現(xiàn)在我們將進(jìn)行練習(xí)。我們將得到提示和最終答案,但沒(méi)有專家解法,必須練習(xí)并嘗試各種方法,這就是強(qiáng)化學(xué)習(xí)的意義所在。

讓我們回到之前處理過(guò)的問(wèn)題,以便有一個(gè)具體的例子。我在這里使用tick分詞器,因?yàn)槲蚁胍粋€(gè)文本框。但我想再次提醒你,我們始終處理一維的token序列。我更喜歡這種視圖,因?yàn)樗拖馤LM的原生視圖,它看到的是token ID。

艾米麗買了三個(gè)蘋果和兩個(gè)橙子。每個(gè)橙子2美元。所有水果的總成本是13美元。每個(gè)蘋果的成本是多少?這四個(gè)可能的候選解決方案,只是個(gè)例子,它們都得出答案三。如果我是創(chuàng)建訓(xùn)練集人工數(shù)據(jù)標(biāo)注者,我實(shí)際上并不知道……

要將哪些對(duì)話添加到數(shù)據(jù)集中?一些對(duì)話構(gòu)建了一個(gè)方程組,一些僅用英語(yǔ)解釋,還有一些直接跳到解決方案。例如,使用ChatGPT并提出問(wèn)題,它會(huì)定義一個(gè)變量系統(tǒng)并進(jìn)行類似操作。

然而,我們需要區(qū)分的是,解決方案的首要目的是得出正確答案。我們想要得到最終答案“三”,這是最重要的目標(biāo)。但也有次要目標(biāo),即使其對(duì)人類友好。我們假設(shè)用戶希望看到解決方案和中間步驟,并以清晰的方式呈現(xiàn)。所以這里存在兩件事:一是面向人類的呈現(xiàn),二是獲得正確答案。

讓我們暫時(shí)專注于僅獲得最終答案。如果我們只關(guān)心最終答案,那么哪個(gè)提示最優(yōu)或最好?或者,對(duì)于LLM來(lái)說(shuō),哪個(gè)解決方案最能獲得正確答案?我認(rèn)為我們不知道。作為人類標(biāo)注者,我也不知道哪個(gè)更好。

例如,我們之前在查看標(biāo)記序列和心算推理時(shí)發(fā)現(xiàn),對(duì)于每個(gè)標(biāo)記,我們基本上只能花費(fèi)有限的計(jì)算量,而且不算很大。所以我們實(shí)際上不能在任何一個(gè)標(biāo)記上取得太大的飛躍。例如,這...