GPT 不是憑空而出,它是經過了很多人的努力,以及很長一段時間的演化得來的。因此,梳理一下 GPT 的龐大 “家族” 還是很有必要的,看看他繼承了什麼,學習了什麼,又改進了什麼,這樣也能更好地理解 GPT 各個部分的原理。
現在很多人把 2018 年(BERT 提出)作為 NLP 元年(類似於當時 ImageNet 的提出),其趨勢與當年的影像領域也極其類似——模型越來越大。2018 年的 BERT-large(最大的 BERT 模型)的引數量是 340M,而到了 2020 年的 GPT-3,這個數字已經翻了無數倍了。很多人第一次瞭解到 GPT 大概是 2018 年,那個時候 GPT 還是個配角(被其兄弟 BERT 拉出來示眾),當時的主角是 BERT,BERT 的成功讓當時論文中作為前身的 ELMo 和 GPT 也火了一把。其實當時的 GPT 也沒有 BERT 第一版論文中說的那麼差,現在的 BERT 論文也已經沒有了當時的對比圖片,而最近的 GPT-3 總結了當時的失敗經驗,也開始重視媒體宣傳,讓 GPT 成功以 C 位出道,結結實實當了次主角。一提到 GPT3,大家第一印象大概就是異常龐大的引數量——1750 億,比其前身多 100 倍,比之前最大的同類 NLP 模型要多 10 倍。事實上,如今的 GPT-3 是在很長一段時間的演變後得到的(匯聚了老祖宗們的優秀智慧),從 word2vec 開始,各式各樣的語言模型就開始變得讓人眼花繚亂,也有很多給 GPT 的誕生提供了很大的啟發,我們今天就從老祖級別的 word2vec 開始,從頭到尾梳理一下 GPT 的 “家譜” 和 word2vec 領銜的龐大的 NLP“家族集團”。值得注意的是,這裡列出的家族成員都是跟 GPT 關係比較近的,所以本文列舉的內容並不能完全囊括所有語言模型的發展,本文的主要目的是為了梳理 GPT 的原理脈絡,並與一些類似的模型做必要的對比以加深理解。為了更好地給 GPT 建立一個“家譜”,也讓你們知道這篇文章會涉及什麼內容,首先要宏觀的比較一下這個龐大的家族各個成員的出生時間(圖 1)。有了這個出生時間表,再對他們有一定的瞭解(本文的主要目的),它們的關係其實就很好確定了,所以這個龐大家族的族譜大概可以畫成圖 2 的這個樣子。讀到這裡對這些模型不夠了解或者有完全沒有聽過的也沒有關係,細心的同學可能會發現 Attention 的出生日期並沒有列在圖 1 中,因為 Attention 算是 GPT 的一個遠方表親,因為 Attention 業務的特殊性(主要是外包工作,後面會詳細說),GPT 對其沒有完全的繼承關係,但是 GPT 和他的兄弟姐妹們都有 attention 的影子。對 GPT 族譜有了宏觀的瞭解後,就可以開始正式進入正題了。Word Embedding(詞嵌入)作為這個龐大家族集團的創始人,為整個 “集團” 的蓬勃發展奠定了堅實的基礎。到目前為止,詞嵌入一直是 NLP 集團的中堅力量。Word2Vec 和 Glove 等方法就是很好的例子,為了避免對 “集團” 的根基不明白,這裡先對詞嵌入進行簡要介紹。對於要被機器學習模型處理的單詞,它們需要以某種形式的數字表示,從而在模型中使用這些數字(向量)。Word2Vec 的思想就是我們可以用一個向量(數字)來表徵單詞的語義和詞間的聯絡(相似或相反,比如 “斯德哥爾摩” 和“瑞典”這兩個詞之間的關係就像 “開羅” 和“埃及”之間的關係一樣),以及語法聯絡(如英文中的‘had’和‘has’的關係跟‘was’和‘is’的關係一樣)。這位創始人很快意識到,他可以用大量文字資料對模型進行預訓練從而得到嵌入,這樣的效果比在特定的任務(資料量較少)上訓練更好。所以 word2vec 和 Glove 這種可供下載的預訓練詞向量表(每個詞都有自己對應的詞向量)就出現了,圖 3 展示了 GloVe 中‘stick’這個詞的對應的詞嵌入(部分)。圖 3:“stick”的詞向量 (圖源:[15])在爺爺建立了這個家族企業之後,後續也有很多很多後代在對其進行發展,GPT 的近親中也有這麼一位——ELMo (2018 年 2 月)。這位 GPT-3 的叔叔在 2018 年跟 GPT-1 一起被 BERT 拉出來示眾(作比較),所以大家應該也比較耳熟。ELMo 創業的時候,Transformer 還未經打磨,Transformer 的兒子 Transformer-decoder(2018 年 1 月)同樣還沒有火起來,所以他還沒有用 Transformer(也因此被 BERT 在最開始的論文里拉出來作對比),但是他注意到了詞向量不能是不變的,比如一開始學習詞嵌入的時候是用下面這兩句話:這裡的 “愛” 明顯意思是不同的,但是因為訓練的時候沒有看到 “愛” 後面的話,所以 “愛” 就在詞嵌入的空間裡被定義為褒義詞了。首先我們要知道的是 ELMo(Embedding from Language Model)中也是使用了 “語言模型” 任務來完成語境的學習,這也是我在這篇文章裡提到 ELMo 的一個重要原因(另一個就是其為了解決上面提出的問題的方法),為了防止有人對語言模型不熟悉,這裡給出一個語言模型的定義——語言模型其實就是給定一個模型一串詞,然後讓模型預測下一個詞。瞭解了語言模型的概念,上面問題出現的原因就不難理解了——模型看到的是前文,看不到後文。為了解決這個問題,ELMo 就用雙向 LSTM 來獲取雙向語境。同時,上面涉及的問題不只是雙向語境問題,還有一個很嚴重的問題——詞嵌入不應該是不變的。也就是說,不同的句子裡同一個詞可能有不同的意思,那麼詞嵌入肯定也該不一樣。因此 ELMo 又提出要在看完整個句子的前提下再給定這個詞的嵌入。也就是說詞嵌入的來源不再是過去的查表了,而是透過預訓練好的模型來獲得(是不是很像影像領域的 transfer learning?)。看一下原論文中對 ELMo 的定義:Our word vectors are learned functions of the internal states of a deep bidirectional language model (biLM), which is pretrained on a large text corpus.
最終,這些思想都給他的侄子們(GPT,BERT 等)帶來了很大的啟發。如果對 ELMo 的計算細節感興趣,本文最後也貼了 reference,可以去看一下原論文,還是有很多很聰明的想法的,不過它不是我們今天的主角,因此這裡就不多做贅述了。在說完 ELMo 之後,本來就應該開始介紹現在家族集團的中流砥柱 BERT 和 GPT 了,但是在這之前還是要簡要回顧一下 attention 和 self attention,我猜很多加入 NLP 不久的人應該跟我一樣,一上來從各大科普文中接收到的概念就是 self-attention 和 self-attention 的計算過程,對於 self-attention 名字的由來還是很迷糊,甚至很多科普文的作者對這個概念都是迷迷糊糊的,導致我在求證自己的理解的時候都發現很多不同的版本,不過我們還是要忠於原論文,因此這個問題還是從最開始論文對 Attention 的定義開始說起,很多 attention 的科普文的第一部分都會對 attention 的原理進行很形象的描述,顧名思義就是我們希望我們的模型在給我們結果的時候不要傻乎乎的給它什麼他就都看,而是隻看重要的那一點,機器之心對於注意力還有很多很有趣的解釋,這裡就不浪費篇幅做重複的工作了,直接上正式的定義:An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key.
——Attention is all you need
這段話的意思就是說,attention 機制裡主要有三個向量 - key, query 和 value,其實可以將 Attention 機制看作一種軟定址(Soft Addressing):Source 可以看作一箇中藥鋪子的儲物箱,儲物箱裡的藥品由地址 Key(藥品名)和值 Value(藥品)組成,當前有個 Key=Query(藥方)的查詢,目的是取出儲物箱裡對應的 Value 值(藥品),即 Attention 數值。透過 Query 和儲物箱內元素 Key 的地址進行相似性比較來定址,之所以說是軟定址,指的是我們不只從儲物箱裡面找出一中藥物,而是可能從每個 Key 地址都會取出內容,取出內容的重要性(量的多少)根據 Query 和 Key 的相似性來決定,之後對 Value 進行加權求和,這樣就可以取出最終的 Value 值(一副中藥),也即 Attention 值。所以不少研究人員將 Attention 機制看作軟定址的一種特例,這也是非常有道理的[12]。只說理論沒有細節就是耍流氓,所以下面看一下作為外包公司的 Attention 的甲方們到底是誰。本節我們以機器翻譯任務為例,以介紹甲方 RNN 提出的問題以及 Attention 給出的解決方案。首先看一下 RNN 原創的解決方案(圖 4)。在原始的方案中,待翻譯的序列(X)的資訊被總結在最後一個 hidden state(hm)中,身負重任(帶著原始句子的所有資訊)的 hm 最終被用來生成被翻譯的語言(Y),這個方案的問題很明顯,h_3 的能力有限,當句子很長的時候,很容易丟失重要資訊。問題提出來了,Attention 給出了怎樣的解決方案呢?圖 5:Attention 給出的最終方案 (圖源:[13])在正式介紹 Attention 給出的方案之前,還是簡單回顧一下 Attention 的計算過程(這裡提到的 Attention 在 Transformer 中被稱為 Scaled Dot-Product Attention)。圖 6:Attention 計算過程 (圖源:[4])如圖 6 所示,Q 和 K 首先會計算聯絡程度(這裡用的是 dot-product),然後透過 scale 和 softmax 得到最後的 attention 值,這些 attention 值跟 V 相乘,然後得到最後的矩陣。回顧了 Attention 的計算過程後,圖 5 所示的方案就好理解多了,它還是一個 encoder-decoder 結構,上半部分是 decoder,下半部分是 encoder(雙向 RNN)。開始的流程跟原始版本的 RNN 一樣,首先 Encoder 獲得了輸入序列 X 的 hidden state (h),然後 docoder 就可以開始工作了。從這裡開始,docoder 的工作因為 Attention 的加入開始發生了變化,在生成 s_t 和 y_t 時,decoder 要先利用 s_{t-1}和各個 hidden state 的聯絡度(利用加權點乘等方式獲得)來獲得 attention (a),這些 attention 最終作為權重對各個 h 進行加權求和從而得到背景向量 (context),後面就沒什麼變化了,y_t 基於 s_{t-1}, y_{t-1} 和 context 來生成。為了更好地理解圖 5 在做什麼,我們可以再將上圖中的各個符號跟我們前面的 Attention 中的三類向量聯絡起來:LSTM 公司中的 Attention 機制雖然沒有那麼明顯,但是其內部的 Gate 機制也算一定程度的 Attention,其中 input gate 選擇哪些當前資訊進行輸入,forget gate 選擇遺忘哪些過去資訊。LSTM 號稱可以解決長期依賴問題,但是實際上 LSTM 還是需要一步一步去捕捉序列資訊,在長文字上的表現是會隨著 step 增加而慢慢衰減,難以保留全部的有用資訊。總的來說,Attention 機制在外包階段就是對所有 step 的 hidden state 進行加權,把注意力集中到整段文字中比較重要的 hidden state 資訊。Attention 除了給模型帶來效能上的提升外,這些 Attention 值也可以用來視覺化,從而觀察哪些 step 是重要的,但是要小心過擬合,而且也增加了計算量。Attention 在外包自己的業務的時候,其優秀的外包方案引起了 Transformer 的注意,Transformer 開始考慮 Attention 公司的核心思想能不能自立為王呢?一不做二不休,Transformer 向自己的遠房表親 Attention 表達了這一想法,兩者一拍即合,經過了辛苦的鑽研後,他們興奮地喊出了自己的口號——“Attention is all you need!” 【中興之祖】Transformer:Attention 就夠了!他們到底做了什麼呢?簡單來說,就是用了改良版的 self-attention 將 attention 從配角位置直接帶到了主角位置。為了防止我的轉述使大家的理解出現偏差,這裡還是先貼上原文對於 Transformer 中各個元件的 attention 機制的介紹(為了方便解釋,我稍微調整了一下順序):The encoder contains self-attention layers. In a self-attention layer, all of the keys, values and queries come from the same place, in this case, the output of the previous layer in the encoder. Each position in the encoder can attend to all positions in the previous layer of the encoder.
Similarly, self-attention layers in the decoder allow each position in the decoder to attend to all positions in the decoder up to and including that position. We need to prevent leftward information flow in the decoder to preserve the auto-regressive property. We implement this inside of scaled dot-product attention by masking out (setting to −∞) all values in the input of the softmax which correspond to illegal connections.
In "encoder-decoder attention" layers, the queries come from the previous decoder layer, and the memory keys and values come from the output of the encoder. This allows every position in the decoder to attend over all positions in the input sequence.
可以看出 Transformer 主要提使用了兩種 Attention——Self-attention 和 encoder-decoder attention。這裡的 Self-attention 主要是為了拋掉外力(LSTM,RNN,CNN 等),encoder-decoder attention 則延續了前面的外包方案(圖 5),作用跟過去相同,主要是為了連線 encoder 和 decoder。這裡的 Self Attention 顧名思義,指的不是 Target 和 Source 之間的 Attention 機制,而是 Source 內部元素之間或者 Target 內部元素之間發生的 Attention 機制,也可以理解為 Target=Source 這種特殊情況下的注意力計算機制[12]。還是用機器翻譯做例子,假設要從英語 (knowledge is powerful) 翻譯成中文(知識就是力量),在前文中沒有 self-attention 的方案中,Knowledge is powerful 首先被轉化為 hidden state,這些 hidden state 作為 key 和 value,query 則來源於 decoder 中的 s。加入了 self-attention 後,hidden state 就不需要學了,query 直接來源於 Knowledge is powerful,最終 self-attention 得到的東西其實可以類比於圖 5 方案中 RNN 中的 hidden state,也就是說 self-attention 僅僅使用 attention 完成了 RNN 的做的事情。圖 7:self-attention 視覺化(圖源:http://jalammar.github.io/illustrated-transformer/)圖 7 視覺化了某一層的 self-attention 的結果,Attention 值都是相對於這個句子本身的(包括這個詞本身),這個圖很生動的表現了 self 的含義。同時我們可以看到相較於傳統的時間序列模型,self-attention 的優勢還是很明顯的——可以很好地注意到該注意的部分,不會受文章長度的影響。原論文 [4] 中的第四章有具體的拋掉外力之後的好處(總不能只是為了自立門戶而自立門戶,自立門戶的時候一定是有自己的優勢的),但是這裡的原因與主線關係不太大,這裡就不做搬運工了。總的來說,self-attention 的引入讓 Attention 機制與 CNN、RNN 等網路具有了一樣的地位(都開了公司),但是可以看到的是,這樣做的限制還是很大的,所以 Transformer 的兒子們幾乎都沒有完整的引入 Transformer,都是有選擇的保留一部分。但是,對於 self-attention 理解在後面理解這些兄弟們企業核心的區別很重要,所以這裡我們佔用篇幅搬運一個具體的計算例子(來自 Jalammar 的多篇文章,如果已經理解了可以跳過):第一步,先是透過 X_i 和各個 W(可訓練的權重矩陣)的相乘得到 query, key 和 value 矩陣(如圖 8 所示):圖 8:self-attention 原始矩陣(圖源:http://jalammar.github.io/illustrated-transformer/)然後就是按照圖 9 所示的步驟一步一步先計算 score,再 normalize(divide 那一步),最後用 softmax 得到 attention score,然後用這個 attetion 作為權重求 v1 和 v2 的加權和,就得到最終的 self-attention 在這個位置(thinking 這個詞)的輸出值了。圖 9:self-attention 計算流程(圖源:http://jalammar.github.io/illustrated-transformer/)圖 10 是一個具體的 self-attention 的例子,可以看到 it 這個詞對自己的 attention 其實很小,更多的注意力放在了 a robot 上,因為 it 本身沒有意思,它主要是指代前面的 a robot。所以一個詞的 query 和 key 是不同的(相同的話相似度肯定是最大的,這樣百分百的注意力都在自己身上),在做計算的時候是一視同仁的,雖然都是來自於 it 這個詞,但是這裡 it 的 key 告訴我們的資訊就是它並不重要。圖 10:self-attention 矩陣細節(圖源:http://jalammar.github.io/)前面介紹了那麼多,甚至貼上了論文的原文,一個很重要的目的是為了強調 self-attention 層在 encoder 和 decoder 中是不一樣的!encoder 在做 self-attention 的時候可以“attend to all positions”,而 decoder 只能“attend to all positions in the decoder up to and including that position”(劃重點,涉及到 BERT 和 GPT 的一個重要區別)。簡單來說,就是 decoder 跟過去的 Language model 一樣,只能看到前面的資訊,但是 encoder 可以看到完整的資訊(雙向資訊)。具體細節在介紹到 BERT 和 GPT 的時候會詳細介紹。如果你足夠細心的話,可以看到前面我提到的例子幾乎都是機器翻譯相關的,這是因為 Transformer 的 encoder-decoder 結構給其帶來了很大的侷限性。如果你想要做文字分類任務,使用 Transformer 的困難就很大,你也很難預訓練好這個模型然後再在各種下游任務上 fine-tune。因此,Transformer 的兒子們給我們帶來了令人驚喜的後浪時代。大兒子 Transformer-decoder [6] —— 語言模型回來了!Transformer 的大兒子首先發現了父親公司的冗餘機制,然後打出了自己的兩塊主要招牌:翻譯成中文就是:“我們的模型在裁員(encoder)後,看的更遠了,也能 pretrain 了,還是兒時的味道(Language Modelling)!”
可以看出大兒子是個黑心老闆,他發現只需要用一部分 Transformer,就可以做成他想做的 language modelling,因此它只保留了 decoder,因為 decoder 在 Transformer 裡的工作就是根據前面的詞預測後面的詞(跟 Language modelling 的任務一樣)。但是如前文所述(圖 11),Transformer 除了其提出的 self-attention 以外,還保留了過去的 encoder-decoder attetion,而現在因為沒有 encoder 了,所以 encoder-decoder attention 層這裡就沒有了。圖 11:Transformer 的 encoder-decoder 結構細節(圖源:http://jalammar.github.io/)如果你仔細讀了上面那一句話,然後看了圖 11 並相應地移除了 encoder-decoder attention 層,你就會發現,encoder 和 decoder 的結構一模一樣了!那為什麼我還要提 BERT 和 GPT 使用的 Transformer 不同呢?先看一下圖 12 中對於 transformer decoder 的描述:圖 12:transformer decoder 細節(圖源: [6])就是說本來 Transformer 中的 decoder 是要接收 encoder 那邊對輸入 (m) 處理後得到的資訊,然後得到最終輸出(y),而且在得到後面的 y 的時候,要考慮前面已經生成的 y,因此在去掉 encoder 之後,decoder 在考慮 y 的同時也得考慮 m 的資訊,所以公司既然裁員了,那麼 decoder 的活就得多一些,它的輸入就是 m 和 y 的結合體了,同時中間還有 \ gamma 來分隔開輸入輸出(黑心老闆無疑了),當然這樣做的時候,給的工資也是更高的(輸入序列長度從 512 變成了 1024)。基於迴歸語言模型的特性,Transformer-decoder 為自己贏下了極好的聲譽,而這良好的聲譽引起了他的弟弟——GPT-1 的注意。GPT-1 從大哥 Transoformer-decoder 的成功中看到了機會,並且挖掘出了更本質的商機——用預訓練好的模型做下游任務。基於這個想法,他然後打出了自己的招牌:We demonstrate that large gains on these tasks (downstream tasks) can be realized by generative pre-training of a language model on a diverse corpus of unlabeled text, followed by discriminative fine-tuning on each specific task.
這塊招牌裡的 Generative Pre-Training (GPT)其實本質上就是大哥 Transformer-decoder 做的事,但是真的在 finetune 的時候,其實有很多麻煩,於是 GPT-1 公司體貼的在這個基礎上做了很多很靈活的調整,給出了很多方案:we make use of task-aware input transformations during fine-tuning to achieve effective transfer while requiring minimal changes to the model architecture.
具體 GPT-1 的具體工作流程如圖 13 所示:圖 13:如何使用 GPT(OpenAI Transformer)進行 Finetune(圖源:http://jalammar.github.io/)圖 14 展示了 GPT-1 給出的 finetune 方案,也就是前面說的對應不同任務的 input transformation,這些方案非常巧妙,也取得了很多成功,同樣也使其獲得了廣泛的應用。但是 GPT-1 的熱度並沒有 BERT 高,因為當時的 GPT-1 沒有足夠商業頭腦,媒體宣傳度不夠,從而在其兄弟 BERT 公司開張的時候被當做 “反面典型” 示眾。當然,當時的 GPT 家族野心也不夠大,他的 few-shot learning 的強大力量還沒有展現出來(GPT-2 開始在做的事,後面詳述)。圖 14:如何進行 Finetune(圖源:http://jalammar.github.io/)小兒子 BERT —— Encoder 也能撐起半邊天在 GPT 的公司開的如日中天的時候,小兒子 BERT 也悄悄地長大了。叔叔 ELMo 最喜歡他兄弟的這個小兒子,所以常常帶他來公司玩,也會給他講一講他們公司的業務,因此 “雙向資訊很重要” 這個概念也在小 BERT 的腦海中深深烙下了烙印。當他長大後,看到哥哥 GPT 公司的宣傳標語時,覺得這不就是語言模型嗎?不行,雙向資訊都沒得到,得改!可是他不想直接進叔叔 ELMo 的公司,父親 Transformer 又直接拋棄了叔叔公司的核心技術之一——LSTM,雙向資訊無法直接應用在 transformer 中(看一下 LSTM 和基於 self attention 的 Decoder 的工作機制就可以發現 Decoder 沒辦法像 LSTM 那樣獲得反向的資訊)。冥思苦想之後,他突然發現,父親的 Encoder 不正是最好的選擇嗎?哥哥們用了 Decoder 做語言模型,那他用 Encoder 不也可以嗎,而且還能獲得雙向資訊(Masked language Model, MLM)。MLM 的大概思想就是本來自注意力機制不是主要注意自己嘛(類似於照鏡子),那我就擋住你自己的臉,讓你自己根據兄弟姐妹的樣子(前後文資訊)來猜自己的樣子,等你能猜得八九不離十了,你就出師了,可以幹活了。但是小 BERT 還是太天真了,哥哥們選擇 decoder 不是沒有理由的,比如一個很實際的問題就是,BERT 既然用的是 Encoder,因為 encoder 輸入的就是一個帶 mask 的句子,那麼怎麼去做“雙句問題”(如給定兩個句子,說明是否是表達同一個意思)呢?經過仔細的考量,BERT 決定再學習一下哥哥們語言模型的特性,在預訓練的時候加入了 Next sentence prediction 任務——就是給定句子 A,讓你猜句子 B 是不是 A 後面的句子,這樣句間關係也學到了。這個時候,BERT 公司就可以正式開業了。具體業務和工作方式如圖 15 所示:最後,還是要說一下 Encoder 和 Decoder 的區別,其實本質上是自迴歸模型(Auto regression)和自編碼模型(Auto Encoder)的區別,他們並不是誰比誰更好的關係,而是一種要做權衡的關係。BERT 選擇了 Encoder 給其帶來的一個很重要的問題,Encoder 不具備 Decoder 的自迴歸特性(Auto Regressive),而自迴歸特性可以讓模型有很明確的機率依據。這個區別在 XLNet(不重要的兒子們之一,後面會再稍微提一下)提出的時候尤為明顯,因為 XLNet 屬於 Auto Regressive 模型,而 BERT 屬於 Auto Encoder 模型,為了更好地理解 AR 和 AE 模型的差異,我們來看一下 BERT 和 XLNet 的目標函式:這兩個公式的具體意思我這裡就不詳細講了,感興趣的可以去看原論文,我之所以貼出這兩個目標函式,重點在於 XLNet 的 “=” 和 BERT 的 “≈”。而這個“≈”,就是拋棄自迴歸特性帶來的代價。至於具體原理,由於輸入中預測的 token 是被 mask 的,因此 BERT 無法像自迴歸語言建模那樣使用乘積法則(product rule)對聯合機率進行建模,他只能假設那些被 mask 的 token 是獨立的,而這個“≈” 就是來自於這個假設。同時,因為模型微調時的真實資料缺少 BERT 在預訓練期間使用的 [MASK] 等人工符號,也就是在輸入中加入了部分噪音,這會導致預訓練和微調之間出現差異。而 AR 模型不需要在輸入中加入這些噪音,也就不會出現這種問題了。他的哥哥們之所以選擇 AR 模型,是因為 AR 模型在生成任務中表現得更好,因為生成任務一般都是單向且正向的,而且 GPT 的招牌中就明確寫出了他們的主要工作是 Gnereative pretraining。因此 AR 和 AE,具體來說就是選擇 encoder 還是 decoder,其實最本質還是一種權衡利弊,最適合自己的就是最好的。私生子們因為不受到重視,反而就會格外努力去遵循父親的指導,盡心盡力去改進父親的不足。Transformer 的其中一個私生子,transformer XL[17](XL 的意思是 extra long),表現很出色(主要是他的兒子 XLNet[16]出色),讓 transformer 迴歸了 AR 的本性,也讓 Transformer 可以處理的序列更長了,前面也說過 AR 模型的優勢。但是 AR 模型之所以沒有這些缺陷是因為他們沒有使用 Masked LM 方法,而 Masked LM 的提出正是為了解決 AR 模型的限制之一——AR 語言模型僅被訓練用於編碼單向語境(前向或後向),而下游語言理解任務通常需要雙向語境資訊。可見 AR 陣營本身有自己的優勢,但如果想要獲得更大的勝利,就必須找到一個比 Masked LM 更好的辦法來解決雙向語境問題。可是他究其一生也沒能完成這個任務,他的兒子 XLNet 彌補了它的遺憾,解決了雙向語境問題,大概的方案就是圖 16:XLNet 提出的雙向語境方案(圖源:[16])一開始 AR 模式不是隻能單向工作嗎?那就把輸入亂序,找到所有的排列組合,並按照這些排列組合進行因式分解。當然這樣計算量很大,XLNet 也想到了很好的方式來解決,具體怎麼解決的這裡就不說了,可以去原論文看一下,但是 XLNet 確實在當時也引起了不小的波瀾,也算是私生子們一場不小的勝利了。【現代】GPT2 & 3 —— 大即正義 (Bigger than bigger)最後回到當下,也是現在的 GPT2 和 GPT3,讀到這裡,其實 GPT2 和 GPT3 就沒什麼技術細節可以講了,他們發現父輩們已經開創了一個時代,比如 BERT 打破了自然語言處理領域模型在各項任務中的記錄,而且在描述模型的論文釋出後不久,該團隊還開源了該模型的程式碼,並提供了已經在大量資料集上進行了預訓練的模型。這是一項重要的發展,因為它使任何構建涉及語言處理的機器學習模型的人都可以使用此強大的功能作為隨時可用的元件,從而節省了從訓練語言處理模型上來的時間,精力,知識和資源(如圖 17 所示)。圖 17:新時代(圖源:http://jalammar.github.io/)回到 GPT,在介紹 GPT-1 的後代們做了什麼之前(主要是擴大模型),先看一下 GPT-2 和 GPT-3 的論文名字:看到這些名字,第一感覺大概就是“一脈相承”。實際上 GPT 的後代們也是這麼做的,GPT-1 的後代們的目標是實現 zero-shot learning,取消 fine-tune 機制!這也是為什麼 GPT-3 能夠大火,給人以經驗的原因。到了 GPT-2,就開始跨出了創造性的一步——去掉了 fine-tuning 層,再針對不同任務分別進行微調建模,而是不定義這個模型應該做什麼任務,模型會自動識別出來需要做什麼任務。這就好比一個人博覽群書,你問他什麼型別的問題,他都可以順手拈來,GPT-2 就是這樣一個博覽群書的模型 [18]。其他的特徵主要就是擴大了公司規模(擴大資料及,增加引數,加大詞彙表,上下文大小從 512 提升到了 1024 tokens),除此之外,也對 transformer 進行了調整,將 layer normalization 放到每個 sub-block 之前,並在最後一個 Self-attention 後再增加一個 layer normalization。總的來說 GPT-2 跟 GPT-1 的區別如 GPT-2 的名字所示,他要讓語言模型變成 unsupervised multitask learner,[19]給了一個很簡潔的對比,我搬運過來供大家參考理解:資料質量:GPT 2 更高,進行了篩選
資料廣度:GPT 2 更廣, 包含網頁資料和各種領域資料
資料數量:GPT 2 更大,WebText,800 萬網頁
資料模型:模型更大,15 億引數
結構變化:變化不大
兩階段 vs 一步到位:GPT 1 是兩階段模型,透過語言模型預訓練,然後透過 Finetuning 訓練不同任務引數。而 GPT 2 直接透過引入特殊字元,從而一步到位解決問題
到了 GPT-3,如果去看一下論文就發現其實 GPT-3 更像一個厚厚的技術報告,來告訴大家 GPT-3 怎麼做到 few-shot 甚至 zero-shot learning,他的核心細節這裡已經沒有什麼要單獨提及的了,他的龐大和財大氣粗就是他最大的特色(整個英語維基百科(約 600 萬個詞條)僅佔其訓練資料的 0.6%),如果有機會,還是希望大家可以自己去試一下這個模型,去體驗一下 GPT-3 帶來的魅力。讀完這篇文章,估計就可以發現,所有的技術都不是憑空而來的,都是一點一點進步得來的,從源頭開始,梳理一下一個模型的“集團成員”,不僅僅可以對這個領域有更深刻的理解,對於這個模型的每一塊技術,都能有更加深刻的理解。同時,在實際應用的時候,不是最新的模型就是最好的,還要考慮這個模型的大小是否合適,模型在你特定所需的任務上表現是否優秀等等等等,對整個 NLP 領域有更廣泛的理解,你在做選擇的時候就更能做出更好地選擇,而不是在別人問到你為什麼選擇 BERT 的時候說一句,“哦,我只會 BERT。”[1] Mikolov, Tomas; et al. (2013). "Efficient Estimation of Word Representations in Vector Space". arXiv (https://en.wikipedia.org/wiki/ArXiv_(identifier)):1301.3781 (https://arxiv.org/abs/1301.3781) [cs.CL (https://arxiv.org/archive/cs.CL)]. [2]Mikolov, Tomas (2013). "Distributed representations of words and phrases and their compositionality". Advances in neural information processing systems.[3] Matthew E. Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, & Luke Zettlemoyer. (2018). Deep contextualized word representations.[4] Ashish Vaswani and Noam Shazeer and Niki Parmar and Jakob Uszkoreit and Llion Jones and Aidan N. Gomez and Lukasz Kaiser and Illia Polosukhin (2017). Attention Is All You NeedCoRR, abs/1706.03762.[5] Zihang Dai and Zhilin Yang and Yiming Yang and Jaime G. Carbonell and Quoc V. Le and Ruslan Salakhutdinov (2019). Transformer-XL: Attentive Language Models Beyond a Fixed-Length ContextCoRR, abs/1901.02860.[6] P. J. Liu, M. Saleh, E. Pot, B. Goodrich, R. Sepassi, L. Kaiser, and N. Shazeer. Generating wikipedia by summarizing long sequences. ICLR, 2018.[7] Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving language understanding by generative pre-training.[8] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., & Sutskever, I. (2019). Language models are unsupervised multitask learners. OpenAI Blog, 1(8), 9.[9] Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, & Dario Amodei. (2020). Language Models are Few-Shot Learners.[10]Jacob Devlin and Ming-Wei Chang and Kenton Lee and Kristina Toutanova (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language UnderstandingCoRR, abs/1810.04805.[11]Zhilin Yang and Zihang Dai and Yiming Yang and Jaime G. Carbonell and Ruslan Salakhutdinov and Quoc V. Le (2019). XLNet: Generalized Autoregressive Pretraining for Language UnderstandingCoRR, abs/1906.08237.[12] attention 機制及 self-attention(transformer). Accessed at: https://blog.csdn.net/Enjoy_endless/article/details/88679989[13] Attention 機制詳解(一)——Seq2Seq 中的 Attention. Accessed at: https://zhuanlan.zhihu.com/p/47063917[14]一文看懂 Attention(本質原理 + 3 大優點 + 5 大型別. Accessed at:https://medium.com/@pkqiang49/%E4%B8%80%E6%96%87%E7%9C%8B%E6%87%82-attention-%E6%9C%AC%E8%B4%A8%E5%8E%9F%E7%90%86-3%E5%A4%A7%E4%BC%98%E7%82%B9-5%E5%A4%A7%E7%B1%BB%E5%9E%8B-e4fbe4b6d030[15]The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning). Accessed at:http://jalammar.github.io/illustrated-bert/[16] Yang, Zhilin, et al. "Xlnet: Generalized autoregressive pretraining for language understanding." Advances in neural information processing systems. 2019.[17] Dai, Zihang, et al. "Transformer-xl: Attentive language models beyond a fixed-length context." arXiv preprint arXiv:1901.02860 (2019).[18] NLP——GPT 對比 GPT-2. Accessed at: https://zhuanlan.zhihu.com/p/96791725[19] 深度學習:前沿技術 - GPT 1 & 2. Accessed at: http://www.bdpt.net/cn/2019/10/08/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%EF%BC%9A%E5%89%8D%E6%B2%BF%E6%8A%80%E6%9C%AF-gpt-1-2/本文作者為王子嘉,目前在帝國理工學院人工智慧碩士在讀。主要研究方向為 NLP 的推薦等,喜歡前沿技術,熱愛稀奇古怪的想法,是立志做一個不走尋常路的研究者的男人!
關於機器之心全球分析師網路 Synced Global Analyst Network
機器之心全球分析師網路是由機器之心發起的全球性人工智慧專業知識共享網路。在過去的四年裡,已有數百名來自全球各地的 AI 領域專業學生學者、工程專家、業務專家,利用自己的學業工作之餘的閒暇時間,透過線上分享、專欄解讀、知識庫構建、報告發布、評測及專案諮詢等形式與全球 AI 社群共享自己的研究思路、工程經驗及行業洞察等專業知識,並從中獲得了自身的能力成長、經驗積累及職業發展。
感興趣加入機器之心全球分析師網路?點選閱讀原文,提交申請。