前言
這兩天,chatGPT模型真可謂稱得上是狂拽酷炫D炸天的存在了。一度登上了知乎熱搜,這對科技類話題是非常難的存在。不光是做人工智能、機器學習的人關注,而是大量的各行各業從業人員都來關注這個模型,真可謂空前盛世。
我趕緊把 openai 以往的 GPT-n 系列論文又翻出來,重新學習一下,認真領會大規模預訓練語言模型(Large Language Model)的強大之處。
可能很多深度學習相關從業人員的感受和我一樣,大家之前對 LLM 的感受依然是,預訓練+finetune,處理下游任務,依然需要大量的標注數據和人工干預,怎么突然間,chatGPT 就智能到如此地步?
接下來,我簡要梳理一下 openai 的 GPT 大模型的發展歷程。
一、還得從 Bert 說起
2018年,自然語言處理 NLP 領域也步入了 LLM 時代,谷歌出品的 Bert 模型橫空出世,碾壓了以往的所有模型,直接在各種NLP的建模任務中取得了最佳的成績。
Bert做了什么,主要用以下例子做解釋。
請各位做一個完形填空:___________和阿里、騰訊一起并成為中國互聯網 BAT 三巨頭。
請問上述空格應該填什么?有的人回答“百度”,有的人可能覺得,“字節”也沒錯。但總不再可能是別的字了。
不論填什么,這里都表明,空格處填什么字,是受到上下文決定和影響的。
Bert 所作的事就是從大規模的上億的文本預料中,隨機地扣掉一部分字,形成上面例子的完形填空題型,不斷地學習空格處到底該填寫什么。所謂語言模型,就是從大量的數據中學習復雜的上下文聯系。
二、GPT 初代
與此同時,openai 早于 Bert 出品了一個初代 GPT 模型。
他們大致思想是一樣的。都基于 Transformer 這種編碼器,獲取了文本內部的相互聯系。
Transformer結構
編解碼的概念廣泛應用于各個領域,在 NLP 領域,人們使用語言一般包括三個步驟:
接受聽到或讀到的語言 -> 大腦理解 -> 輸出要說的語言。
語言是一個顯式存在的東西,但大腦是如何將語言進行理解、轉化和存儲的,則是一個目前仍未探明的東西。
因此,大腦理解語言這個過程,就是大腦將語言編碼成一種可理解、可存儲形式的過程,這個過程就叫做語言的編碼。
相應的,把大腦中想要表達的內容,使用語言表達出來,就叫做語言的解碼。
在語言模型中,編碼器和解碼器都是由一個個的 Transformer 組件拼接在一起形成的。

Transformer編碼器組成的 Encoder-decoder模型
這里不展開講 Transformer 里的內部結構,僅僅講一下 Bert 和 GPT 的區別。
兩者最主要的區別在于,Bert 僅僅使用了 encoder 也就是編碼器部分進行模型訓練,GPT 僅僅使用了 decoder 部分。兩者各自走上了各自的道路,根據我粗淺的理解,GPT 的decoder 模型更加適應于文本生成領域。
GPT 初代其實個人認為(當然普遍也都這么認為)略遜色于 Bert,再加上宣傳地不夠好,影響力也就小于 Bert。
我相信很多的 NLP 從業者對 LLM 的理解也大都停留在此。即,本質上講,LLM 是一個非常復雜的編碼器,將文本表示成一個向量表示,這個向量表示有助于解決 NLP 的任務。
三、GPT-2
自從 Bert 炸街后,跟風效仿的改進模型也就越來越多了,比如 albert、roberta、ERNIE,BART、XLNET、T5 等等五花八門。
最初的時候,僅僅是一個完形填空任務就可以讓語言模型有了極大進步,那么,給 LLM 模型出其它的語言題型,應該也會對模型訓練有極大的幫助。
想要出語言題型不是很簡單么,什么句子打亂順序再排序、選擇題、判斷題、改錯題、把預測單字改成預測實體詞匯等等,紛紛都可以制定數據集添加在模型的預訓練里。很多模型也都是這么干的。
既然出題也可以,把各種NLP任務的數據集添加到預訓練階段當然也可以。
這個過程也和人腦很像,人腦是非常穩定和泛化的,既可以讀詩歌,也可以學數學,還可以學外語,看新聞,聽音樂等等,簡而言之,就是一腦多用。
我們一般的 NLP 任務,文本分類模型就只能分類,分詞模型就只能分詞,機器翻譯也就只能完成翻譯這一件事,非常不靈活。
GPT-2 主要就是在 GPT 的基礎上,又添加了多個任務,擴增了數據集和模型參數,又訓練了一番。

GPT-2學習效果圖
既然多個任務都在同一個模型上進行學習,還存在一個問題,這一個模型能承載的并不僅僅是任務本身,“汪小菲的媽是張蘭”,這條文字包含的信息量是通用的,它既可以用于翻譯,也可以用于分類,判斷錯誤等等。也就是說,信息是脫離具體 NLP 任務存在的,舉一反三,能夠利用這條信息,在每一個 NLP 任務上都表現好,這個是 元學習(meta-learning),實際上就是語言模型的一腦多用。
四、GPT-3
大模型中的大模型
首先, GPT-3 的模型所采用的數據量之大,高達上萬億,模型參數量也十分巨大,學習之復雜,計算之繁復不說了,看圖吧。

GPT-3 里的大模型計算量是 Bert-base 的上千倍。統統這些都是在燃燒的金錢,真就是 all you need is money。如此巨大的模型造就了 GPT-3 在許多十分困難的 NLP 任務,諸如撰寫人類難以判別的文章,甚至編寫SQL查詢語句,React或者JavaScript代碼上優異的表現。
首先 GPT-n 系列模型都是采用 decoder 進行訓練的,也就是更加適合文本生成的形式。也就是,輸入一句話,輸出也是一句話。也就是對話模式。
對話
我們是如何學會中文的?通過從0歲開始,聽,說,也就是對話。
我們是如何學外語的?看教材,聽廣播,背單詞。唯獨缺少了對話!正是因為缺少了對話這個高效的語言學習方式,所以我們的英語水平才如此難以提高。
對于語言模型,同理。
對話是涵蓋一切NLP 任務的終極任務。從此 NLP不再需要模型建模這個過程。比如,傳統 NLP 里還有序列標注這個任務,需要用到 CRF 這種解碼過程。在對話的世界里,這些統統都是冗余的。
其實 CRF 這項技術還是蠻經典的,在深度學習這塊,CRF這也才過去沒幾年。sigh……
in-context learning
以往的預訓練都是兩段式的,即,首先用大規模的數據集對模型進行預訓練,然后再利用下游任務的標注數據集進行 finetune,時至今日這也是絕大多數 NLP 模型任務的基本工作流程。
GPT-3 就開始顛覆這種認知了。它提出了一種 in-context 學習方式。這個詞沒法翻譯成中文,下面舉一個例子進行解釋。
用戶輸入到 GPT-3:你覺得 JioNLP 是個好用的工具嗎?
GPT-3輸出1:我覺得很好啊。
GPT-3輸出2:JioNLP是什么東西?
GPT-3輸出3:你餓不餓,我給你做碗面吃……
GPT-3輸出4:Do you think jionlp is a good tool?
按理來講,針對機器翻譯任務,我們當然希望模型輸出最后一句,針對對話任務,我們希望模型輸出前兩句中的任何一句。顯然做碗面這個輸出句子顯得前言不搭后語。
這時就有了 in-context 學習,也就是,我們對模型進行引導,教會它應當輸出什么內容。如果我們希望它輸出翻譯內容,那么,應該給模型如下輸入:
用戶輸入到 GPT-3:請把以下中文翻譯成中文:你覺得 JioNLP 是個好用的工具嗎?
如果想讓模型回答問題:
用戶輸入到 GPT-3:模型模型你說說,你覺得 JioNLP 是個好用的工具嗎?
OK,這樣模型就可以根據用戶提示的情境,進行針對性的回答了。
這里,只是告知了模型如何做,最好能夠給模型做個示范:
用戶輸入到 GPT-3:請把以下中文翻譯成中文:蘋果 => apple; 你覺得 JioNLP 是個好用的工具嗎?=>
其中 蘋果翻譯成 apple,是一個示范樣例,用于讓模型感知該輸出什么。只給提示叫做 zero-shot,給一個范例叫做 one-shot,給多個范例叫做 few-shot。

范例給幾個就行了,不能再給多了!一個是,咱們沒那么多標注數據,另一個是,給多了不就又成了 finetune 模式了么?

在 GPT-3 的預訓練階段,也是按照這樣多個任務同時學習的。比如“做數學加法,改錯,翻譯”同時進行。這其實就類似前段時間比較火的 prompt。
這種引導學習的方式,在超大模型上展示了驚人的效果:只需要給出一個或者幾個示范樣例,模型就能照貓畫虎地給出正確答案。注意啊,是超大模型才可以,一般幾億參數的大模型是不行的。(我們這里沒有小模型,只有大模型、超大模型、巨大模型)

這個表格彷佛在嘲諷我:哎,你沒錢,你就看不著這種優質的效果,你氣不氣?
五、chatGPT
charGPT 模型上基本上和之前都沒有太大變化,主要變化的是訓練策略變了。
強化學習
幾年前,alpha GO 擊敗了柯潔,幾乎可以說明,強化學習如果在適合的條件下,完全可以打敗人類,逼近完美的極限。
強化學習非常像生物進化,模型在給定的環境中,不斷地根據環境的懲罰和獎勵(reward),擬合到一個最適應環境的狀態。

NLP + 強化學習
強化學習之所以能比較容易地應用在圍棋以及其它各種棋牌游戲里,原因就是因為對莫 alpha Go 而言,環境就是圍棋,圍棋棋盤就是它的整個世界。
而幾年前就有提問,NLP + 強化學習,可以做嗎?怎么做呢?
底下回答一片唱衰,原因就是因為,NLP 所依賴的環境,是整個現實世界,整個世界的復雜度,遠遠不是一個19乘19的棋盤可以比擬的。無法設計反饋懲罰和獎勵函數,即 reward 函數。除非人們一點點地人工反饋。
哎,open-ai 的 chatGPT 就把這事給干了。
不是需要人工標反饋和獎勵嗎?那就撒錢,找40個外包,標起來!

這種帶人工操作的 reward,被稱之為 RLHF(Reinforcement Learning from Human Feedback)。
具體操作過程就是下圖的樣子,采用強化學習的方式來對模型進行訓練。已經拋棄了傳統的 LM 方式。

這里重點是第二部中,如何構建一個 reward 函數,具體就是讓那40名外包人員不斷地從模型的輸出結果中篩選,哪些是好的,哪些是低質量的,這樣就可以訓練得到一個 reward 模型。
通過reward 模型來評價模型的輸出結果好壞。
講真,這個 reward 模型,《黑客帝國》的母體 matrix 既視感有木有???。?/p>
只要把預訓練模型接一根管子在 reward 模型上,預訓練模型就會開始像感知真實世界那樣,感知reward。
由此,我們就可以得到這個把全世界都震碎的高音!(誤,模型)
chatGPT 功能一覽
能回答知乎上的問題
你別想耍它
能回答困難的問題
能理解亂序文本
會做高數
知道自己是程序,不會做你女票
還能處理程序 bug

六、影響
NLP 領域的影響
個人認為,NLP 領域的一些里程碑性的技術重要性排序如下:
chatGPT > word2vec > Bert (純個人看法)
chatGPT 的關注度已經很大程度讓人們感覺到,什么天貓精靈、小愛同學等等人工智障的時代似乎過去了。只要模型足夠大,數據足夠豐富,reward 模型經過了更多的人迭代和優化,完全可以創造一個無限逼近真實世界的超級 openai 大腦。
當然,chat GPT 依然是存在回答不好的情況的,比如會重復一些詞句,無法分清楚事實等等。
而且,chatGPT 目前看,它是沒有在推理階段連接外部信息的。

模型知道自己的回答邊界,知道自己只是一個沒有情感的回答工具。那么,試想 openai 把外部信息也導入到 chatGPT 里。
另一些影響
我看到 chatGPT 居然可以寫代碼,還能幫我改代碼,debug,作為程序員,我不禁深深陷入了沉思。
據說,debug 程序員網站 stackoverflow,已經下場封殺 chatGPT 了。

當然,完全不僅僅是程序界。據說 GPT-4 正在做圖文理解,那么,對于教師、醫生、咨詢師、等等等等,各行各業,是不是都是一個巨大的沖擊?所謂專業領域的知識門檻,也將被模型一步踏平。到時候,可能人類真的要靠邊站了,除了某些高精尖的行業精英。
有人講 google 將被替代,我認為也就還好吧,依照google那財大氣粗的樣子,沒準 google 此時此刻,NLP+強化學習也已經在路上了。
審核編輯:劉清
-
解碼器
+關注
關注
9文章
1219瀏覽量
43406 -
編碼器
+關注
關注
45文章
3953瀏覽量
142638 -
nlp
+關注
關注
1文章
491瀏覽量
23280 -
ChatGPT
+關注
關注
31文章
1598瀏覽量
10267
原文標題:一文讀懂chatGPT模型原理(無公式)
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
什么是編碼器 什么叫編碼器 編碼器什么意思
PCM編碼器,PCM編碼器是什么意思
ChatGPT原理 ChatGPT模型訓練 chatgpt注冊流程相關簡介
基于Transformer編碼器的chatGPT模型設計
評論