1、什么是 GPT
GPT 全稱 Generative Pre-trained Transformer,生成式預(yù)訓(xùn)練轉(zhuǎn)化模型。雖然每個字都認識,還是不知道 GPT 是個啥玩意。下面拆解一個每個次的含義。
Generative
生成式,是指給定前文可以自動生成后文,例如輸入 “天氣真”,可以生成“好”字輸出。

Pre-trained
預(yù)訓(xùn)練,預(yù)先訓(xùn)練過的。GPT3 大約使用了 5000 億個 token,這里可以把每個 token 是為一個單詞,這幾乎把互聯(lián)網(wǎng)上能找到的文本全部都用于 GPT 的訓(xùn)練了。
| 數(shù)據(jù)集 | token數(shù)量(億) |
|---|---|
| 爬蟲數(shù)據(jù) | 4100 |
| 網(wǎng)頁文本 | 190 |
| 書籍書籍 | 670 |
| 維基百科 | 30 |
Transformer
指的是 Transformer 模型,這也目前大語言模型的基石架構(gòu)。是一種用于自然語言處理任務(wù)的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)。
最大的特點是自注意力機制,它可以學(xué)習(xí)詞語之間的關(guān)系,并綜合不同位置的詞語,得出整個序列的含義。這種機制使得 Transformer 架構(gòu)可以并行地處理整個輸入序列,從而加速訓(xùn)練和推理過程。
"Chat" 表示它是一個對話模型,"GPT" 則代表了它是生成式預(yù)訓(xùn)練 Transformer 架構(gòu)構(gòu)建的。一句話介紹:ChatGPT 是基于給定的文本,生成文本的對話模型。
2、詞語接龍
ChatGPT 使用的是 GPT-3.5 架構(gòu),既然有 3.5,那么肯定有 GPT-3、GPT-2、GPT-1,只不過前幾代都有很明顯的缺陷,不是廣為人知。
假如向 ChatGPT 輸入給定文本:The best thing about AI is its ability to,那么 ChatGPT 會給出可能跟在這段文本后面的單詞列表,以及每一個單詞的概率:
| 單詞 | 概率 |
|---|---|
| learn | 4.5% |
| predict | 3.5% |
| make | 3.2% |
| understand | 3.1% |
| do | 2.9% |
如何確定給定文本 “The best thing about AI is its ability to” 后面緊跟著的單詞?
如果一直選擇概率最高的單詞,如此循環(huán),便會生成一段非常平淡,甚至重復(fù)的文章。但如果增加一個隨機參數(shù),使其存在一定概率能夠使用概率較低的單詞,這樣就能夠生成比較有趣的文章(這個隨機參數(shù)叫做“溫度”,實踐發(fā)現(xiàn)“溫度”數(shù)值等于 0.8 時效果比較好)。
GPT-3 及之前的版本都是使用這種方法,給定上文,推理出下文,如此循環(huán),便能給出句子回復(fù)。

但如果用這種方訓(xùn)練 ChatGPT 學(xué)古詩,就算教不出神經(jīng)病,也只能教出一個背詩機器,它理解不了詩的美,也創(chuàng)造不出新的詩句。
不僅如此,因為訓(xùn)練數(shù)據(jù)全部來自書籍、互聯(lián)網(wǎng)等,如果問一個之前不存在的問題,回答就會一本正經(jīng)的胡說八道,原因就是它只是根據(jù)海量訓(xùn)練數(shù)據(jù),計算單詞之間的相關(guān)性,重復(fù)生成下一個單詞,并不知道說的話是否符合現(xiàn)實邏輯。

所以這種對 ChatGPT 的解釋不能說不對吧,但也有點太簡單了,很容易讓人覺得 ChatGPT 就是一個死記硬背和暴力窮舉的產(chǎn)物,但暴力窮舉能真正創(chuàng)造出語言嗎?
并不能,更不用說人工智能的繪畫工具,已經(jīng)能夠畫出惟妙惟肖的小姐姐,ChatGPT 更是可以同時和幾億人談笑風生,就算暫時還寫不出超越李白的詩,但作詩水平吊打一般人類也不成問題了。
3、向量化
ChatGPT 是如何理解人類語言的?要回答這個問題,首先需要知道計算機是如何記錄現(xiàn)實世界的。
3.1、什么是向量化
計算機的底層是二進制,我們現(xiàn)實世界的所有問題,如果交給計算機處理,最終都是把它轉(zhuǎn)化成了數(shù)學(xué)問題。
比如英語的 26 個字母,可以找 52 個數(shù)字來代替,26 個數(shù)字表示大寫,26 個數(shù)字表示小寫。
要存儲一幅畫,我們可以把每個像素的顏色表示為紅綠藍(RGB)3 種顏色的組合,而每一種顏色都可以表示為 0~255 的數(shù)字,比如紅色 R0 表示最淺的紅色,R255 表示最深的紅,于是一幅畫在電腦中,就變成了一大堆數(shù)字的組合。
但我們要表示一個「人」呢?
可以用這樣的一組數(shù)字:01807520
看不懂?簡單解釋一下:第一個數(shù)字表示性別,0 是男,1 是女;第二個數(shù)字表示身高;第三個數(shù)字表示體重;第四個數(shù)字表示年齡。

你覺得這樣的表示太簡單?沒有把握你的優(yōu)秀特征?
沒問題,我們可以增加維度,比如你的體脂率、膚色、三維、發(fā)色、愛好、學(xué)歷、收入、城市等等,所有這些都可以表示成數(shù)字,維度越多,定義就越準確,通過這些維度篩選出來的人,跟你的相似度就越高。
這樣就把一個「人」變成一串數(shù)字,計算機就可以識別出這個人了。
3.2、為什么要向量化
量化后的空間結(jié)構(gòu),展現(xiàn)出了一定的規(guī)律。有助于模型利用數(shù)學(xué)計算向量空間里的距離,去捕捉不同詞在語義和語法等方面的相似性。
舉個例子,我們只畫兩個維度:身高和體重。在這樣的一個坐標里,所有和 [180,75] 這個點接近的位置,都是體型和你相似的人,并且增加更多的維度,衡量標準就越多,在高維度的坐標系里,就能夠更多地通過空間關(guān)系,理解每一個人的特征。

詞語也是一樣的,只不過更抽象,表示的維度也更不容易被總結(jié)出來,但如果我們把它們放在一個很高維度的坐標里,那么就會發(fā)現(xiàn)意義相近的詞語,它們的空間可能就會更近。因此詞向量不僅可以幫模型理解詞的語義,也可以捕捉詞與詞之間的復(fù)雜關(guān)系。
例如:
- 「男人與國王的差異」和「女人與女王的差異」是相似的;
- 「男人與男孩的差異」和「女人與女孩的差異」也是相似的;
- 「國王」減去「男人」再加上「女人」得出的向量和「女王」的位置非常接近。

3.3、訓(xùn)練
這件事情說起來很簡單,但實際上可能很難,前面說了需要把詞語放到一個合適維度的坐標中,還要能正確地標注每個詞語在空間中的位置,但是怎么找到這些維度,怎么找到詞語的空間位置呢?這就是人工智能要干的事情了。
比如我們預(yù)先準備一個 50 維度的坐標,準備放 1 萬個詞。先把這 1 萬個詞隨便扔到坐標里,說的專業(yè)一點點,就是隨機產(chǎn)生每個詞的向量,然后到語料庫中隨便拎一句語料出來,讓電腦玩詞語接龍,找到第一個詞和第二個詞,把它們的向量拿過來計算。
因為向量是可以計算的,所以我們就可以知道,每次計算出來的數(shù)和正確結(jié)果差距有多大,這個就是損失函數(shù),訓(xùn)練目的就是要讓這個差距越來越小,這是有數(shù)學(xué)方法可以逼近正確結(jié)果的,這個過程叫做收斂。

在給了足夠多的語言以后,這 1 萬個詞都訓(xùn)練了好多遍了,于是每個詞都找到了自己在坐標里的正確位置,詞的向量化工作就結(jié)束了。
這個工作不新鮮了,2013 年谷歌就發(fā)布了著名的 word2vec 模型(Efficient Estimation of Word Representations in Vector Space),看名字你就知道了,就是專門把詞向量化的。
但是既然詞向量已經(jīng)能夠幫助電腦理解每個詞的意思。為什么直到 10 年以后,我們才看到了自然語言理解的春天?
那是因為到現(xiàn)在為止,我們只做了第一步:詞的向量化;還有第二步?jīng)]有做,那就是信息壓縮與特征提取。
沒有做特征提取,就相當于沒有找到正確的規(guī)律,用錯誤的規(guī)律去訓(xùn)練,那么最后找到的詞向量也就是錯誤的,也就是說這些詞其實并沒有找到,自己在向量空間中的正確位置。
4、一切的開始:Attention 和 Transformer
多年以來,人類一直在用循環(huán)神經(jīng)網(wǎng)絡(luò) RNN,基本訓(xùn)練方法跟前面說的差不多,就是把前面多少個詞作為輸入,讓電腦去猜下一個詞,離下一個詞越近的詞權(quán)重就越高,而越遠的詞影響就越小。

但這不僅讓電腦會遺忘掉太遠的詞,而且很多時候提取不出正確的特征。如果用這種方法去訓(xùn)練,是無法找到正確的詞向量。后來 Transformer 踏著七彩祥云出現(xiàn)了。

他有能力學(xué)習(xí)輸入序列里所有詞的相關(guān)性和上下文,不會受到短時記憶的影響,能做到這一點的關(guān)鍵在于自注意力機制。也正如論文標題所說 Attention Is All You Need 注意力就是你所需要的一切。
在一句話中,每一個詞語和其他詞語的關(guān)系是有遠有近的,只有正確理解了這種關(guān)系,我們才能夠正確地理解與意義,Transformer 用一種自注意力機制,巧妙地解決了這個問題。

Transformer 的原始架構(gòu)包含 編碼器 和 解碼器 兩部分。
4.1、編碼器
編碼器的第一層——嵌入層——就是上文提到的把詞轉(zhuǎn)換為向量。

下一步是對向量進行位置編碼,Transformer 的一項關(guān)鍵機是位置編碼。

一個詞在句子的不同位置,可能有著不同的意思,所以 AI 要做的不僅僅是知道每個詞的意思,還需要知道每個詞在句子中的位置。
位置編碼就是把各個詞在文本里位置的向量,和上一步得到詞向量相加,然后把得到的結(jié)果傳給編碼器。這樣做的意義是模型既可以理解每個詞的意義,又能夠捕捉詞在句子中的位置,從而理解不同詞之間的順序關(guān)系。

接下來就到了編碼器這個核心部分。

編碼器的主要任務(wù)是把輸入轉(zhuǎn)換成一種更抽象的表示形式,這個表示形式也是向量,里面既保留了輸入文本的詞匯信息和順序關(guān)系,也捕捉了語法語義上的關(guān)鍵特征,捕捉關(guān)鍵特征的核心是編碼器的自注意力機制:模型在處理每個詞的時候,不僅會關(guān)注這個詞本身和它附近的詞,還會關(guān)注輸入序列中所有其他詞。
例如:
張三看到這篇文章很喜歡,抑制不住深深的喜愛,伸手給了一個()
A、點贊
B、大嘴巴子
通過自注意力機制發(fā)現(xiàn),「喜歡」「深深的喜愛」和「點贊」的相似度較高。于是后面應(yīng)該選 A。
也正如 Transformer 論文標題所說——Attention is all you need——注意力就是你所需要的一切自注意力機制,通過計算每對詞之間的相關(guān)性,來決定注意力權(quán)重,如果兩個詞之間的相關(guān)性更強,它們之間的注意力權(quán)重就會更高。
簡單來說就是每兩個向量對應(yīng)的位置分別相乘,因為兩個向量點乘后得到的值越大,它們的夾角就越小,也就是說它們的方向相似度就越高。
這就與人類對句子的理解過程非常類似了,我們看一句話時,也是找句子中的重點詞匯。因為看到「喜歡」「喜愛」這些詞所以選擇了「點贊」。AI 也是通過自注意力機制,對語言進行壓縮與信息提取,最終選擇了「點贊」。

當然,最開始詞向量就是隨便給的,所以得出的結(jié)果當然也很隨便,但是不要緊,人工智能最大的好處就是可以不斷訓(xùn)練,找到最優(yōu)解,于是 ai 會不斷地猜,猜出來的結(jié)果通過損失函數(shù)不斷反饋回來,再根據(jù)損失值不斷調(diào)整最初的向量和權(quán)重,直到找到正確答案,這個過程叫做收斂,最后就能知道在一句話中知道每個詞與其他詞之間的相似性。
4.2、 解碼器
看完編碼器,接下來看解碼器的部分,它是大語言模型生成一個個詞的關(guān)鍵。

首先和編碼器一樣,文本要經(jīng)過我們已經(jīng)了解過的,嵌入層和位置編碼,然后被輸入進多頭自注意力層。解碼器不僅會把來自編碼器的,輸入序列的抽象表示作為輸入,還會把之前已經(jīng)生成的文本也作為輸入,來保持輸出的連貫性和上下文相關(guān)性。

但它和編碼器里的自注意層有點不一樣,編碼器會關(guān)注輸入序列里所有其他詞,但解碼器中自注意力只會關(guān)注當前詞和它前面的其他詞,后面的詞要被遮住,不去關(guān)注,這樣做是為了確保解碼器生成文本時,遵循正確的時間順序,不能給他偷看到后面,在預(yù)測下一個詞時只使用前面的詞。

這種類型的多頭自注意力,叫做帶掩碼的多頭自注意力,但掩碼多頭自注意力,是針對已生成的輸出序列的。
后面還有個多頭自注意力層,這里就是前面編碼器所輸出的輸入序列的抽象,表示所派上用場的地方,注意力會捕捉編碼器的輸出和解碼器即將生成的輸出之間的對應(yīng)關(guān)系,從而將原始輸入序列的信息,融合到輸出序列的生成過程中。

解碼器的最后階段包含一個線性層和一個 softmax 層,他們倆加一塊的作用是把解碼器輸出的表示轉(zhuǎn)化為詞匯表的概率分布。

這個詞匯表的概率分布代表下一個被生成詞的概率,那么有些詞的概率就會比其他的高,在大多數(shù)情況下,模型會選擇概率最高的詞作為下一個輸出。

那現(xiàn)在我們知道了:解碼器本質(zhì)上是在猜下一個最可能的輸出,至于輸出是否符合客觀事實,無從得知,所以能經(jīng)??吹侥P鸵槐菊?jīng)的胡說八道。
特別是在做一些數(shù)學(xué)計算,例如 123 * 456 等于多少?456 后面經(jīng)常出現(xiàn)的詞可能是 789,所以 AI 大概率就會回答 789,但這很明顯是個錯誤答案。
5、Transformer 后續(xù)發(fā)展
因為 Transformer 本質(zhì)是一個語言翻譯模型,所以整個模型是由編碼器和解碼器兩部分組成的,而這兩部分的訓(xùn)練方法略有不同。
「編碼器」考驗的是對語言的理解,所以它使用的訓(xùn)練方法是完形填空,他給出前后文,把中間的字挖掉,讓電腦去猜。
而「解碼器」是要根據(jù)意思翻譯成另外一種語言,所以他考驗的是語言的生成,訓(xùn)練方法是詞語接龍。

后來 Google 和 OpenAI 分別拿走了編碼器和解碼器,搞出了自己的語言模型。Google 重在語言理解叫做 BERT,而 OpenAI 重在語言生成就是 GPT,也就是 ChatGPT 的前身。
看到這里你可能明白了,ChatGPT 本身其實就是一個語言模型,它被制造出來的根本目的并不是解決實際問題,而是怎么把話說得漂亮。
而它把話說漂亮的訣竅其實也并不高深,就是根據(jù)上文的內(nèi)容,去推測下一個詞應(yīng)該是什么,然后把這個詞加進去,繼續(xù)推測下一個詞是什么,在不斷的推測過程中,把詞連成句子。
它只關(guān)心說出來的話像不像人話,并不關(guān)心是不是正確,之所以我們在很多時候覺得他說的很有道理,只是因為他看過太多的語料庫,在它所有的訓(xùn)練語料中,正確的說法是概率最大的那種而已。
6、通用人工智能
ChatGPT 是如何成為如今大殺四方的通用人工智能的呢?
最重要的原因就是 OpenAI 賭對了方向。
OpenAI 創(chuàng)立之初的愿景就是要做通用人工智能,但如何能夠做出通用人工智能,其實是沒有答案的。
在幾年前,人工智能領(lǐng)域還是各種專業(yè)人工智能的天下,比如圍棋,比如圖像識別,比如玩游戲設(shè)計模型,然后獲得一個好成績,名揚天下。

直到 Transformer 出來,才選定了自然語言理解作為方向。
這是一個非常正確的選擇,因為語言才是理解整個人類社會最重要的工具,人類的幾千年文明史,幾乎所有的顯性知識的載體都是語言,而人類相互之間的交流最重要的渠道也是語言,所以如果電腦能夠理解語言,就相當于他獲得了理解整個人類,文明成果的能力,也獲得了和人類無縫交流的能力,所以要產(chǎn)生通用人工智能語言,一定是最初的突破口。
為什么最終只有 OpenAI 走了出來?
因為只有 OpenAI 是沖著通用人工智能去的,在 BERT 和 GPT1 出來的時,BERT 各方面性能完全吊打 GPT1。這時 OpenAI 面臨兩種選擇:第一是根據(jù)特定場景優(yōu)化模型的算法,提升模型的性能,搞出一個性能更高的模型;第二是增加訓(xùn)練次數(shù),增加詞向量的維度,增加訓(xùn)練數(shù)據(jù),也就是搞一個更大的模型出來。OpenAI 選擇了后者,他們篤定通用人工智能需要泛化到更多的場景,因此需要更大的參數(shù)和更大的數(shù)據(jù)量,果然又賭對了。

在模型參數(shù)規(guī)模達到 1750 億量級的時候,神奇的現(xiàn)象產(chǎn)生了,一些語言模型本來不應(yīng)該具備的能力忽然產(chǎn)生了(GPT 有意識嗎?),這種現(xiàn)象叫做涌現(xiàn),自此 OpenAI 路高歌猛進和其他公司徹底拉開了距離。
為什么提出 Transformer 的 Google 沒有搞出通用人工智能呢?
Google 早期側(cè)重 BERT 架構(gòu)優(yōu)化搜索相關(guān)性(如理解用戶查詢意圖),可以更好的適配搜索引擎。盡管 Google 后續(xù)推出 T5 和 PaLM,但 OpenAI 通過專注生成任務(wù)與快速迭代率先突破通用性閾值。最終結(jié)果是讓原本的優(yōu)勢變成了新一輪競爭中的劣勢。
2022 年底,ChatGPT 問世技驚四座,后面的故事大家都知道。