【NLP】听李宏毅点评GPT-3:来自猎人暗黑大陆的模型
編者按:提起李宏毅老師,熟悉 AI 的讀者朋友一定不會陌生。在 GPT-3 推出之后,李宏毅老師專門講解了這個非同凡響的模型,稱之為 “來自獵人暗黑大陸的模型”。
出于知識傳播目的,“數據實戰派” 根據該講解視頻將李宏毅老師的見解整理成文,有基于原意的刪改:
OpenAI 發表了新的巨大的 language model,在此之前 OpenAI 已經發表了 GPT,還有轟動一時的 GPT-2,現在到了 GPT-3(GPT-3 的論文題目為 Language Models are Few-Shot Learners)。
那么,GPT-3 跟 GPT-2 有什么不同呢?基本上沒有什么不同,它們都是 language model。GPT-3 神奇的地方是什么呢?神奇的地方是它太過巨大。
在它之前,最大的 model 是 Turing NLG,在之前已經給大家看過一個 model 大小的比較圖,包括從最早的 ELMo 到后來的 Turing NLG 。Turing NLG 已經非常的巨大,它有 17 個 billion 的參數,遠超之前 OpenAI 發表的 GPT-2 和最早的 GPT。
而第三代的 GPT 有多大?它是 Turing NLG 的 10 倍,它有 175 個 billion 的參數,也就是 1750 億個參數,你根本沒有辦法把它畫在這一張圖上。
假設我們用長度來代表參數量,ELMO 的參數量是一個長 30 公分的尺,則 GPT-3 約是 ELMO 的 2000 倍。30 公分 ×2000 是多少?它比臺北 101 還要高。
如果說巨大的東西都是來自暗黑大陸,GPT-3 就像是來自于暗黑大陸的模型。
詳解 GPT 系列的目標
網絡上有各式各樣的討論。有人問,商用的 cloud computing platform 訓練一個 GPT-3,要花多少錢?要花 1200 萬美金,大概 4 億臺幣。在知乎上面有關 GPT-3 的討論,甚至被打上了炫富跟核武器的標簽。
而且,GPT-2 有 1.5 個 billion 的參數,就 6GB 了,175 個 billion 的參數大概 700GB,搞不好連下載下來都有困難。
GPT-3 的 paper 也很長,ELMO 有 15 頁,BERT 有 16 頁,GPT-2 有 24 頁,T5 有 53 頁,而 GPT-3 有 72 頁。
那么,GPT 這一系列的工作想要實現什么?
它想要做的事情是 —— They will shut the learning。
在過去,我們使用 BERT+pre-train model 時,先 pre-train model,接下來為每一個任務準備與這些任務相關的資料,根據這些任務的專業資料進行 fine-tune,會有每一個任務的 model。
所以,如果你要用 BERT 解決任務,其實還是要收集一些資料的,BERT 并沒有辦法直接去解這些任務,包括 QA 任務還是 NLI 任務。
GPT 系列的工作,就是在問:我們能不能拿掉 fine-tune 這個步驟,能不能 pre-train 一個模型,這個模型就可以直接解決 downstream task,連 fine-tune 都不需要。
GPT 系列的終極目標也許就是這樣。
在進行英文能力考試時,我們怎么告訴考生如何回答試題?其實只需要給一個題型的說明。
比如告訴考生,選擇最適合題意的字或詞,然后也許再多給一個范例,告訴考生這個題目如果真的要解,大概如何解,就結束了。考生只看了題型說明和一點范例,就知道怎么回答接下來的問題。GPT 系列想要做的就是類似的事情。
更具體一些,GPT 做的事情是這個樣子,它有三個可能:Few-shot Learning,One-shot Learning,Zero-shot Learning。
在 Few-shot Learning 情況下,首先給 GPT 的 model 看一個句子,這個句子是任務的說明。如果是翻譯,任務的說明就是 translate English to French,希望機器能夠看得懂這個句子的意思。然后接下來給它幾個范例,告訴它 sea otter 就是翻譯成這樣,Plush girafe 就是翻譯成這樣。
接下來開始考試,問它 cheese 應該翻譯成什么。這個是 Few-shot Learning,即 example 的部分可以提供不止一個 example。
如果是 One-shot Learning,可能就非常接近人類在英文能力考試中的狀況了,只給你一段題型說明,再給一個例子,接下來就要自己回答問題。
最瘋狂的是 Zero-shot Learning,直接給一個題目的敘述,然后回答問題。不知道一個 language model 有沒有可能做到,你交待它 translate English to French,在沒有額外訓練的狀況下,它知道什么叫做 translate English to French。接下來給它一句英文,它就自動知道要輸出法文,這顯然是很大的挑戰。
也許 One-shot Learning 比較接近現實能夠實現的情況。機器至少看到一個例子,One-shot Learning 還是比較有機會。
這里需要再提醒一下,在 GPT-3 中,它的 Few-shot Learning 跟一般所謂的 Few-shot Learning 是不一樣的。一般所謂的 Few-shot Learning,是給機器少量的訓練資料,用少量的訓練資料去 fine-tune model。但在 GPT-3 中沒有 fine-tune 這回事,所謂的 Few-shot Learning,所謂的一點點 example,是直接當做 GPT model 的輸入,給 GPT 讀過這些句子,它要自動知道怎么解接下來的問題。
在這個過程中完全沒有調整 model,完全沒有所謂的 gradient descent,直接輸入文字當作指示,這些文字就讓它知道接下來要做什么,期待它看到這些題型的說明和范例,就可以真的回答問題。
在 GPT-3 這篇 paper 里,他們把這種學習的方式叫做 “in-context Learning”。
GPT-3 的神奇之處
那么,GPT-3 這篇 paper 表現如何?碩大無朋的 GPT-3 表現如何?
上圖是論文中所用的 42 個 task 的平均情況。數目正好是 42,這是個很巧的數字,我們知道 42 是生命的意義(《銀河系漫游指南》中的計算機用了 N 久的時間得出的結果),不知道這里的 42 個任務是不是刻意選擇出來的。
上圖縱軸是正確率,橫軸是 model 的大小,從 0.1 billion 一直到 175 billion。藍色是 Zero Shot,綠色是 One Shot,橙色是 Few Shot。可以看到隨著 model 越來越大,不管是 Few-shot Learning、One-shot Learning 還是 Zero-shot Learning 的正確率,都越來越高。
當然有人可能會質疑,為了增加這么一點點正確率,用了大概 10 倍的參數量到底值不值得?至少這個圖顯示,比較大的 model 確實是有好處的,至于大了 10 倍,只是增加這樣的正確率,到底能不能夠接受、劃不劃算,這是一個見仁見智的問題。
接下來就講 GPT-3 的幾個神奇之處。首先,它可以做 Closed Book QA。在 question answering 中,有一個 knowledge source,有一個 question,然后要找出 answer。如果機器在回答問題的時候可以看 knowledge source,就是 open book QA,而 Closed Book QA 則是沒有 knowledge source,直接問一個問題看看能不能得到答案。比如直接問你,喜馬拉雅山有多高,看機器的參數里面會不會有喜馬拉雅山高度的資訊,會不會不需要讀任何文章,它就知道喜馬拉雅山的高度是 8848 公尺。
而 GPT-3 的表現就是這個樣子,藍色的線是 Zero Shot,綠色的線 One Shot,橙子色的線是 Few Shot。神奇的事情是, Few-shot Learning 居然超過了在 TriviaQA 上 fine-tune 最好的 SOTA model。
所以,在這里,巨大的 model 展現了奇跡。如果是只有 13 個 billion,沒有辦法超越 SOTA,但約 10 倍大,達到 175 個 billion,可以超越 SOTA。
上圖是 SuperGLUE 的部分,同樣顯示 Zero-shot Learning 、One-shot Learning 、Few-shot Learning 的 performance,誰的參數量越來越多,performance 當然越來越好。如果看最大的 model 的話,它可以超越 Fine-tuned BERT Large model。
右邊這張圖顯示,在做 Few-shot Learning 時,training example 對 performance 所造成的影響。
如果沒有給任何 example,也就是 Zero-shot Learning,當然有點差。但隨著 example 越來越多,如果只給 1、2、3、4 個,那與 Fine-tuned BERT 的 performance 差不多;如果給到 32 個,就可以超越 Fine-tuned BERT。
GPT-3 是一個 language model,所以它可以生成文本。在 GPT-3 論文中,作者也用 GPT-3 來產生文章。他們給 GPT-3 新聞的標題,然后希望 GPT-3 自己把新聞寫出來。
有一個神奇的小發現是:如果不給 GPT-3 任何 example,只給它一則新聞的標題,它會以為這則新聞的標題是推特的一句話,然后接下來它就會自己去回憶想象。
所以在生成文本的時候,GPT-3 不會是 Zero-shot 的,你需要給它幾個 example,告訴它有一個標題,下面會接一篇新聞,然后接下來再給他一個標題,希望它可以根據這個標題闡述。
在上圖,縱軸代表的是,給人看 GPT-3 產生的新聞與真正的新聞,人能不能夠判斷這篇新聞是真的還是假的。如果人的正確率只有 50%,就代表 GPT-3 產生出來的新聞太過真實,真實到人類沒有辦法判斷它是真的還是假的。我們會發現,隨著參數量越來越大,GPT-3 就越來越能騙過人類,最大的 GPT-3 幾乎可以騙過人類,人類幾乎沒有辦法分辨 GPT-3 產生出來的新聞跟真實的新聞之間的差異。
GPT-3 還學會了造句。上圖中,淺灰色的文字是人的輸入,黑色的文字是 GPT-3 的輸出。
你先告訴 GPT-3 要怎么造句,造句是怎么一回事,先給一個詞匯的定義。比如,有一個東西叫做 “whatpu”,“whatpu” 是什么,“whatpu” 是一個小的毛茸茸的動物。接下來,以 “whatpu” 為詞匯造一個句子,如我們去非洲旅行,我們看到很多可愛的 whatpu。
再給一個胡亂創造的詞匯,這個詞匯叫做 “Burringo”,是一種跑得很快的車。要 GPT-3 用 “Burringo” 造一個句子,然后 GPT-3 就說在我們家的車庫里面有一個 Burringo,我爸爸每天都開 Burringo 上下班。它知道 Burringo 是一個可以開的東西。
再比如,有一個東西叫做 “Gigamuru”,它是日本的樂器。然后讓 GPT-3 用 “Gigamuru” 造一個句子.GPT-3 就說,我有一個 Gigamuru,它是我的叔叔給我的禮物,我喜歡在家彈它。它知道 Gigamuru 是一個可以彈的東西。
或者有一個動詞 “screeg”,它是揮劍的意思。此時,GPT-3 造出來的句子有些奇怪了,它說我們對彼此 screeghed(它知道要加 ed),即我們彼此揮劍,然后我們就去吃 ice cream,乍一看有點前言不對后語,彼此揮劍感覺應該是敵人,怎么接下來就是吃 ice cream?
但是如果你把 screeg 想成是一種小孩的游戲,它雖然是揮劍,但仍是小孩的一種游戲,小朋友對彼此揮劍之后,接下來去吃冰淇淋,聽起來也是合理的。
再來看 GPT-3 能不能學會做數學問題。如何讓它做數學問題呢?你就問 “What is 17 minus 14?”,然后給它 “A:”,它自動回答 “3”。它居然會算數學。
GPT-3 的數學水平可以做到什么程度?上圖橫軸代表的是使用模型的參數量,縱軸代表的是正確率。如果看這些參數量最多的模型,你會發現,基本上在兩位數的加法跟兩位數的減法上,可以得到不錯的幾乎 100% 的正確率。三位數的減法也做得不錯,也不知道為什么三位數的加法就稍微差一點。
其他更困難的問題 ——4 位數、5 位數的加法,對它來說就比較困難,但至少它學會了二位數跟三位數的加減法(三位數不算完全學會)。
GPT-3 的 “不神奇” 之處
上文我們主要講了 GPT-3 的神奇。那除了神奇之處以外,也有它不 work 的地方。
從文章里面看,GPT-3 在做 NLI 問題的時候不太行。
所謂 NLI 的問題,即給機器兩個句子,要求機器判斷這兩個句子是矛盾的,還是互相包含,還是中立的關系。
這時會發現,如果使用 GPT-3 的 model,隨著模型越來越大,Zero-Shot 跟 One-Shot 基本上表現不佳。
這個灰色的虛線代表的是 Random Guessing。就算是最大的模型,在 Zero-Shot 跟 One-Shot 上,基本都是慘的。只有 Few-Shot Learning,給模型 50 個 example 的時候,看起來是有一些希望,只有在這個狀況下顯示出一些生命的跡象。
所以, NLI 問題對 GPT-3 來說還是有些困難。
不過,GPT-3 是一個巨大的 language model,它在學習的過程中從來沒有看過什么 NLI 問題,只知道 predict 下一個詞匯而已。
也許因為在做 NLI 任務的時候,我們放在一起的兩個句子很多時候是奇怪和矛盾的句子,兩個矛盾的句子放在一起,這種情況本身在人類文字中出現的次數是很少,所以,GPT 系列看到這種接在一起但是矛盾的句子,它會覺得有些困惑。
接下來發生了一件有趣的事情。今天我們在訓練這種巨大的 model 時,資料往往來自于網絡,而網絡上爬下來的資料,有可能就包含了我們現在的 testing data。
這件事情是有可能發生的。本來 OpenAI 在做這個實驗的時候,他們就想要盡量避免訓練數據中雜了 downstream task 的數據。但是他們在寫的時候有一個 bug,所以沒有成功實現這一點。但是這個 bug 太嚴重了,無法想象犯了錯誤的 researcher,他心理壓力有多大。
而 “Due to the cost of training,it wasn't feasible to retrain the model”,因為 GPT-3 太大了,雖然有一個 bug,但沒辦法重新訓練,只能夠就這樣了。
雖然沒有辦法重新訓練,那我們就改一下 testing data。所以他們把 downstream task data 分成 clean data 和 dirty data。
clean data,即 GPT-3 在訓練的時候,沒有接觸到的 data。dirty data,即 GPT-3 在訓練的時候接觸過的 data。如果這些點在這一個水平線之下的話,就代表有看到 dirty data 的 performance 比較好,在水平線之上,就代表給 GPT-3 只看 clean data 的 performance 比較好。也就是說,有一些混雜的資料對它來說也沒占到什么便宜。即訓練數據有沒有被污染,有沒有混雜到 downstream task 的數據,對 GPT-3 來說也許影響并沒有那么大,所以有一個 bug 就算了。
超大規模的 model,語言水平究竟如何?
現在,我們有了這么多巨大的 model,它們到底能夠了解人類語言到什么樣的程度?
有一個比賽叫做 Turing Advice Challenge。它跟 GPT-3 沒有什么直接關系了,只是想到現在有這么多巨大的 model,好像都理解人類的語言,那它們可以像人類一樣知道怎么使用這些語言嗎?而 Turing Advice Challenge 這個比賽,就是要機器去 reddit 上給人類意見。reddit 上會有很多 points,舉例來說,有人會給一些感情上的問題。這個 point 是放在 Turing Advice Challengepaper 里面的例子。
有一個人說,她男朋友跟她交往 8 個月,然后有一天她男朋友要給她一個生日禮物,她男朋友就把所有的朋友都找齊,然后秀出了他的背,他的背上有一個他女朋友的臉的刺青,而這個女生會覺得不太行,問怎么辦,期待網友給一些建議。
在這個問題上,GPT 建議分手。
對機器而言,要給出像樣的建議不太容易。
再舉個例子,有人問了一個問題,說他要上高中解剖課,但是他很害怕死掉的動物,那怎么辦?有一個人給了一個建議,他建議說你可以越級上報,提問者也覺得這個建議有用。我其實有點不太確定這個建議有沒有用,不過至少這個問問題的人覺得是有用的。
那么,機器怎么學會給建議呢?你訓練一個 model,這個 model “吃” 下 reddit 上的一個 point,然后它會想辦法去模仿 point 下面的回復。
這個比賽提供了 600k 訓練數據,也就是 600k 個 reddit 上的 point 及 point 下的回應,而期待機器可以學會正確的回應。
這里以 T5 當作例子,那個時候還沒有 GPT-3。T5 答案是這樣,你去和你的老師說,你想要一個 project,然后這個 project 可以看到死的動物。
這個回答顯然就是不知所云,看起來是合理的句子,看起來像在講些什么,但實際上沒有什么作用。今天,這些巨大的 language model,它往往能得到的表現就是樣子。
上圖是一些真正的實驗結果。在 Turing Advice Challenge 中,包括 Grover、T5 等各式各樣的模型。結果是,就算是 T5,人們也只有在 9% 的情況下,才覺得 T5 提出來的建議比人提出來的建議有效。
如果現在比較 reddit 上評分第一高的建議與第二高的建議,其實評分第二高的建議還有 40% 的人是覺得有用的,但 T5 只有 9% 的人是覺得有用。
這說明了,用這種巨大的 language model 幫助機器產生的文字,和人類對語言使用的能力仍相差甚遠。
* 點擊 “閱讀原文” 可觀看視頻
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【NLP】听李宏毅点评GPT-3:来自猎人暗黑大陆的模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7电脑设置定时关机的操作方法
- 下一篇: 腾讯视频如何多倍速播放视频