上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

全文共9517字,預計學習時長

28分鐘

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

今年,各種機器學習的應用程序紛紛湧現。其中OpenAI GPT-2能夠創作出邏輯清晰且激情盎然的文章,遠遠超出了人們對當前語言模型創造力的預期,給公眾留下了深刻的印象。GPT-2並不是專門寫小說的語言架構——結構與僅含解碼器的transformer相似,但它實則是基於transformer的語言模型,規模巨大,在海量的數據集上進行訓練。本文將介紹能讓模型生成結果的架構,深入到自注意力(self-attention)層,接著會講一些僅含解碼器的transformer在語言建模之外的應用。


我之前寫過Illustrated Transformer一文,本文是對其的補充,將會更加直觀地解釋transformer的內部操作,以及是如何從初級階段演變的。希望本文使用的可視化語言會讓後文中基於transformer模型的解釋更為簡單,畢竟這些模型的內部操作會不斷演變。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

目錄


· 第一部分:GPT2和語言模型

o 什麼是語言模型

o 語言模型中的transformer

o 與BERT的區別

o Transformer模塊的演變歷程

o 速成課:揭開GPT-2的面紗

o 進一步深入瞭解

o 小結: GPT-2

· 第二部分:詳解自注意力機制

o 不使用掩模的自注意力機制

o 1. 創建查詢、鍵和值向量

o 2. 注意力得分

o 3. 求和

o 掩模自注意力機制

o GPT-2的掩模自注意力機制

o 超越語言模型

o 你已經完成了!

· 第三部分:超越語言模型

o 機器翻譯

o 概述

o 遷移學習

o 音樂生成

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

第一部分:GPT2和語言模型

到底什麼是語言模型?


什麼是語言模型


通過Illustrated Word2vec,我們已經看了語言模型的樣子——其實就是一種機器學習模型,在看到句子的某部分後可以預測後面的文字。最常見的語言模型就是在手機上打字的時候,系統會依據所輸內容自動推薦接下來的文字。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

在這個意義上,可以說GPT-2實則就是比手機內語言系統更龐大、更復雜的應用程序,其功能就是預測文字。OpenAI 的研究員為了實驗研究,從網上收集了40GB大的數據集(名為WebText),對GPT-2進行了訓練。就存儲大小而言,筆者使用的鍵盤軟件SwiftKey佔手機內存的78MB。而訓練的GPT-2中規模最小的也需500MB空間才能存儲其所有參數,最大的所需空間是其13倍,那也就是說存儲空間將不止6.5GB。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

對GPT-2進行實驗,有一個很妙的方式——使用AllenAI GPT-2文件資源管理器。通過GPT-2,將會顯示10個可能的詞組以及各自的概率。你可以選擇一個單詞,看看接下來的那些預測,然後繼續編輯文章。


語言模型中的transformer


正如Illustrated Transformer一文中所介紹的,transformer模型最初由編碼器(encoder)和解碼器(decoder)組成——兩個都是所謂的transformer模塊的堆棧。該架構之所以合適是因為能夠處理機器翻譯,而機器翻譯是編碼-解碼架構在過去取得成功的一處問題。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

後續的很多調查都發現架構要麼隱藏編碼器,要麼隱藏解碼器,而且只用一個transformer模塊的堆棧——堆得儘可能高,輸入海量的訓練文本,再進行大量運算。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

這些模塊能堆多高呢?事實證明這是能區分不同規模GPT2模型的主要因素:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

如圖所示,小規模的 GPT-2 模型堆疊了 12 層,中等規模的是24 層,大規模的是36 層,還有一個特大規模的堆疊了48 層。


與BERT的區別

機器人第一定律

機器人不得傷害人,也不得見人受到傷害而袖手旁觀。

GPT-2是通過transformer解碼器模塊構建的,而BERT是通過transformer的編碼器模塊構建的。下文會探討它們之間的差異,但其中最主要的一個就是GPT2會像傳統的語言模型一樣,每次輸出一個詞。我們可以試著激發一個訓練過的GPT2,令其背誦機器人第一定律:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


這些模型實際操作的流程就是每次生成詞(token)後,將其添加到輸入序列。新的序列就會作為模型下一步的輸入內容。該理念稱為“自迴歸(auto-regression)”,也是促成RNN高效的理念之一。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

GPT2以及後來的一些模型比如TransformerXL和XLNet本質上講都是自迴歸模型。但BERT是個例外,沒有自迴歸,不過可以結合上下文來創作更好的文章。XLNet的出現讓自迴歸重回公眾的視野,與此同時,人們也找到了另一種可以結合上下文創作的途徑。


Transformer模塊的演變歷程


最初的transformer論文介紹了兩種transformer模塊:


編碼器模塊


首先映入眼簾的是編碼器模塊:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

如圖所示,原始 transformer論文中的編碼器模塊可以接受長度不超過最大序列長度(如 512 個詞)的輸入。如果序列長度小於該限制,就在其後填入預先定義的空白詞。


解碼器模塊


其次是解碼器模塊,帶有來自編碼器模塊的一個小構架模型——該層允許關注編碼器的特定片段:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

兩個模塊的自注意力層之間的主要區別在於後者生成新詞的過程——不是像BERT那樣把單詞改為[mask],而是干擾自注意力層的計算,阻止來自正在計算部分右側詞所傳遞的信息。


舉個例子,從下圖中可以看出如果要強調#4詞的路徑,只可以處理當前和先前的詞:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

BERT中的自注意力和GPT-2中的掩模自注意力(masked self-attention)的區別很明顯,這點很關鍵。一般的自注意力模塊允許某位置右側的詞計算時處於最大值。而掩模自注意力會阻止這種情況發生:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

僅含解碼器的模塊


延續著先前的論文,一篇名為Generating Wikipedia bySummarizing Long Sequences的論文提出了另一種能夠生成語言建模的transformer模塊排序。該模型摒棄了transformer的編碼器,所以,可以稱其為“Transformer-Decoder”。它是早期基於transformer的語言模型,由6個transformer 解碼器模塊組建的堆棧構成:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


解碼器模塊都相同。筆者對第一個展開了講解,可以看出它的自注意力層是經過掩模處理的。要注意模型現在可以處理高達4000個詞的序列,相較於最初只能處理512個的成績來說是一個華麗的升級。


這些模塊與原始的解碼器模塊極其相似,除了沒有第二個自注意力層。在有深度自注意力層的字符級語言模型中檢測到了相似的語言架構——可以創建一次預測一個字母或字符的語言模型。


而OpenAI GPT-2模型使用的就是這些僅含解碼器模塊。


速成課:揭開GPT-2的面紗

仔細觀察你會發現,這些內容深深地印刻在我的大腦裡。電閃雷鳴,讓我感到痴狂。

——Budgie

用一個訓練過的GPT-2試試手,看看它到底是怎麼操作的。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

該GPT-2可生成1024個詞,每個詞都會穿過路徑中所有的解碼器模塊。


運行已訓練過的GPT-2模型的最簡單的辦法就是讓它自己動起來,用行話講就是生成無條件樣本或者給它一個提示符,令其就某一話題展開論述,也被稱為生成交互式條件示例。前者可以輕鬆掌控詞來創造單詞(訓練的模型使用 作為起始詞,不如就叫它吧)。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

模型中只含有一個輸入的詞,所以激活的路徑也就別無他選詞會相繼通過所有層,於是會有向量隨之產生。該向量可根據模型的詞彙進行評分,所有詞彙也都是模型知道的,GPT-2中詞彙量達5萬。這種情況下,選擇概率最高的詞——the。但我們當然可以打亂這一切——要知道有時候一直點輸入鍵盤推薦的第一個字很有可能就會陷入循環模式,而這時唯一能夠打破局面的操作就是點擊推薦的第二或第三個字,這裡也一樣。GPT-2中有一個參數被稱為top-k,它能夠讓模型對首選單詞以外的詞彙進行採樣,此時top-k=1。


下一步,將第一步的輸出結果添加到輸入序列,讓模型進行下一輪預測:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

注意,第二個路徑是計算中唯一激活的。GPT-2每層都會保留對第一個詞的解釋,並將其用於處理第二個詞。GPT-2不會根據第二個詞再去解釋第一個詞。


進一步深入瞭解


輸入編碼


這有更多的細節以便更好地瞭解模型。從輸入開始,正如之前討論的其他自然語言處理模型,該模型會在嵌入矩陣中查找輸入的詞,嵌入矩陣是獲取的訓練模型一部分的組件之一。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

每行都是一個詞嵌入向量:這一串數字都代表一個單詞或含義。不同大小的GPT2模型中的數字規模是存在差異的,最小模型嵌入的規格是768每單詞或詞。


所以一開始,我們就在嵌入矩陣中查看了起始詞。先合併位置編碼(該信號會指示transformer 模塊序列中單詞的順序),再將詞傳遞到第一個模塊中。矩陣作為訓練模型的一部分,是由輸入的1024個位置上的位置編碼向量組成的。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


到目前,已經為大家講解了輸入的文字在傳遞到第一個transformer 模塊之前是如何處理的,以及構成訓練的GPT-2模型的權值矩陣。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

給第一個transformer模塊發送文字就意味著會查詢其嵌入內容,並將位置編碼向量添加到位置1處。


來一場堆棧之旅


現在,第一個模塊可以讓詞先通過自注意力層,緊接著將其遞交到神經網絡層。第一個transformer 模塊一旦接受處理了詞,就會把處理的向量結果送去堆棧,等待下一個模塊的加工。雖然每一個模塊中的處理過程都不同,但其內部的自注意力層和神經網絡子層都有著各自的權重。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


回顧自注意力機制


語言離不開語境,比如這個第二定律:

機器人第二定律

機器人必須服從人給予它的命令,當命令與第一定律衝突時例外。

筆者已強調了句子中有三處單詞與其他單詞有聯繫。如果不結合語境是無法理解或者處理單詞的,所以在模型處理這句話時,瞭解語境是必要的:


· 這句話是講機器人的

· 這樣的命令是定律早期的一部分,也即“人類發出的指令”

· 第一定律就是指整個第一定律


自注意力層的流程就是這樣。如同烘培一樣,它會在加工特定文字之前對其關聯詞進行預處理(再傳遞給神經網絡層)。其方式就是對每個單詞在語段中的相關度進行評分,然後把結果向量加起來。


例如,頂部的transformer模塊的自注意力層在處理“it”時,將重點放在了“robot”上。那麼傳遞給神經網絡層的向量將是三個單詞中每個單詞的向量乘以其分數的總和。

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


自注意力機制處理


自注意力機制會貫穿於語段中每個詞的處理路徑。其中重要的組件是三個向量:


· Query(查詢):展示了當前的單詞,該單詞會使用鍵給其他單詞評分。我們只需要注意目前正在處理的詞的查詢。

· Key(鍵):鍵向量就像段中所有單詞的標籤,是搜索相關詞彙時的匹配項。

· Value(值):值向量是實際單詞的體現,給每個單詞的相關度評過分後,加起來的值就會用來表示當前的單詞。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


該過程可大致理解為在文件櫃裡進行搜索。查詢就如同寫有搜索主題的便利貼,鍵是裡面的文件夾名稱。對著便利貼尋找標籤時,會提取文件夾中的內容,這些內容就是值向量。如果所找值不是一個,而是無數文件夾中的各個值,就要另當別論了。


將查詢向量乘以每個鍵向量,得到的值即為每個文件夾對應的分數(從專業角度講:乘指的是向量點乘,乘積會通過 softmax 函數處理)。

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


將值與其分數相乘,再求總和——得出自注意力層結果。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


該加權向量值的結果,會讓模型將50%的注意力都放在詞語“robot”上,30%的注意力放在“a”上,還有19%會在“it”上。


模型輸出


當頂層模塊生成輸出向量(內部自注意力層的結果,其後為神經網絡層)時,模型會將該向量與嵌入矩陣相乘。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


回想一下,嵌入矩陣中的每一行都會對應模型內的某個單詞的嵌入。通過該乘法得到的最終結果可以視為模型中每個詞相應的分數。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


可以只選擇分數最高(top_k = 1)的詞,當然如果把其他單詞也考慮在內結果會更好。因此,最穩妥的辦法就是在整個單詞表中以單詞的分數為概率將其選出作為樣本(自然而然,分數越高被選出的可能性越大)。最好是將top_k設置為40,讓模型考慮40個分數最高的單詞。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


這樣模型就完成了一次迭代,最後輸出一個單詞。直到整個文本(1024個詞)生成或序列末詞出現,迭代才算結束


小結:GPT-2


有關GPT2的運行講到這裡已經差不多了,如果你比較好奇它內部的自注意力層發生了什麼,接下來這部分將是你的福利。筆者的創作之初是想介紹更多可視語言來描述自注意力層,這樣在後期檢查和描述對transformer模型的介紹時會更輕鬆一些(看看TransformerXL模型和XLNet)。


筆者在文章中做了一些簡化處理,大家留意一下:


· 在此文中,“單詞(word)”和“詞(token)”兩者都是指的同一個事物。但實際上,GPT2會使用字節對編碼(BytePair Encoding)創建詞彙表中的詞(token),所以詞(token)也是單詞的一部分。

· 例子中運行的GPT2是處於干擾/評估模式的。這就是為什麼一次只處理一個單詞。在訓練模型的時候,會選擇更長序列的文本以及多項詞實現一次性處理。同時,處理的批量(512)比評估時的更大。

· 為了更好的調整圖像中的空間大小,筆者將自由旋轉、轉換向量。

· 會使用很多標準化層,這一點非常重要。其中一些已經在講Illustrated Transformer時提到過,但本文會更側重於自注意力的講解。

· 例如:有很多次筆者都需要有更多的box來代表向量。筆者將這個比為“放大”,請看:

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

第二部分:詳解自注意力層

文章開篇,已經呈現了這個圖片,讓大家瞭解自注意力層是如何應用並處理單詞it的:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


這一部分,我們將聚焦於它是如何運行的。注意,會嘗試一種方式儘可能讓大家理解每個單詞都發生了什麼。所以展示多個單個的向量原因也在此。實際的操作就是將大型矩陣相乘,但筆者想把重點放在感知上,從單詞層面感知其中的變化。


自注意力層(不使用掩模)


先看在編碼器模塊中進行計算的原始自注意力層。可以看一次只能處理四個詞的transformer模塊的模擬模型。


會經歷三個主要步驟:


  1. 為每個路徑創建查詢、鍵和值向量。
  2. 對每個輸入詞,用其查詢向量給其他鍵向量評分。
  3. 在向量值與相關分數相乘後將所有數想加。
上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

1. 創建查詢、鍵和值向量

我們來看第一個路徑。將取其查詢與所有的鍵做對比。這樣每個鍵都會得到一個分數。在自注意力層的第一步就是給每個詞的路徑計算三個向量:查詢向量、鍵向量、值向量(不用管目前的頭部注意力)。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

2. 注意力得分


三個向量已具備,步驟2只用查詢向量和鍵向量。因為關注的是第一個詞,所以將其查詢向量與其他所有的鍵向量相乘,最終結果就是四個詞各自的分數。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

3. 求和

現在可以將注意力得分與值向量相乘。分數高的值將佔結果向量的大部分比重,在那之前會將所有相乘的結果相加求和。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

分數越低,呈現的值向量的透明度越高。從中可以看出乘以小數量後會削減向量值。


假如每個路徑的操作一致,最終會得到一個代表詞的向量,包含合適的語境。這些都會傳到下一層中(前饋神經網絡):


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

詳解掩模自注意力機制


看過了transformer的自注意力步驟,現在開始介紹掩模自注意力機制(masked self-attention)。除了第二步與自注意力不同,其餘都相同。假設模型只輸入了兩個詞,觀察第二個詞。這種情況下,最後兩個詞會經過掩模處理,所以模型在評分階段會進行干預。基本上會經常給後面出現的詞評分為0,如此一來模型的最高值就不會出現在這些後出現的詞中:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

通常會將其作為矩陣(稱作注意力掩模)進行操作,設想四個單詞的序列(如“robot must obey oders”),在語言模型的場景中,該序列會分為四步驟進行處理——一個單詞對應一個步驟(假設每個單詞都是一個詞)。這些模型是批處理的,所以可以給這個模型提供四個為一批的單詞序列,然後將整個序列當作一批來處理(四步走)。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


在矩陣表格中,通過查詢矩陣與鍵矩陣相乘計算得出了分數。下面是該過程的可視化,除了單詞,不過會有與該單詞相關聯的查詢(或鍵)向量:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

相乘過後,將注意力都放在注意力掩模三角區域。我們想要進行掩模處理的數都變成了負無窮或者非常大的負數(比如GPT2中的-10億)。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

然後在每一行都應用softmax函數,生成用於自注意力層的實際注意力得分:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

該分數表格傳達的信息就是:


  • 在模型處理數據集中的第一個例子(第一行,僅包含一個單詞robot)時,100%的注意力都會在該單詞上。
  • 處理數據集中的第二個例子(第二行,含有單詞“robot must”)的過程中,在遇到單詞“robot”時,48%的注意力會分給它,而剩下52%的注意力將聚焦到“must”上。
  • 等等

GPT-2 中的掩模自注意力機制

評估時間:一次處理一個詞

GPT-2模型的操作也能像掩模自注意力那樣。但是在評估期間,我們的模型只能在每次迭代之前增添一個新詞,而對於那些已經處理過的詞,再在之前的路徑中重新計算自注意力層是無用的。


這種情況下,處理第一個詞


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

(忽視


GPT-2模型會保存詞a的鍵向量和值向量。每個自注意力層都會為此詞保留各自的鍵向量和值向量:

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

到下一次迭代,在模型處理單詞robot時,不需要生成詞 a的查詢向量、鍵向量和值向量,直接利用第一次迭代生成的就可以:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

GPT-2 自注意力: 1- 創建查詢、鍵和值

假如模型正在處理單詞it,討論最底層的模塊,那麼輸入的就會是it的嵌入式+slot#9的位置編碼:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

Transformer中的每一個模塊都有自己的權重(後面會有詳解)。首先遇到的就是權重矩陣,這個將會用於創建查詢向量、鍵向量和值向量。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

自注意力層將輸入的內容與權重矩陣相乘(並且添加了一個向量偏差,這裡沒有講)


相乘得到的向量其實就是單詞 it的查詢向量、鍵向量和值向量的串聯。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

將輸入的向量與注意權重相乘(以及添加向量偏差)得到該詞的鍵向量、值向量和查詢向量。


GPT-2自注意力: 1.5-細分 頭部注意力

在先前的例子中,我們直接剖析了自注意力層,並沒有考慮到“多頭(multi-head)”。現在不著重看這一部分的概念是有好處的。自注意力層多次在查詢(Q)、鍵(K)、值(V)向量的不同部分進行操作。“細分”頭部注意力就是重新將長的向量塑造為矩陣。小的GPT2模型有12個頭部,會構成重塑矩陣的第一維度:

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

之前已經探討過一個注意層的運行過程了。可以這樣思考多個頭部注意力(如果我們只將12個頭部注意力中的3個進行可視化):


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

GPT-2 自注意力: 2- 計算注意力得分

既然我們只關注一個頭部注意力(其他的操作都一樣),現在可以繼續打分:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

現在詞可以針對其他詞的所有鍵進行打分(這在之前迭代時的頭部注意力 #1過程中計算過):

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

GPT-2 自注意力機制: 3- 總和

正如之前所見,現在將每個值與其分數相乘,然後相加,針對頭部注意力 #1生成自注意力的結果:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

GPT-2 自注意力: 3.5- 合併頭部注意力

處理各種頭部注意力的方式就是一開始將所有事物連結成一個向量:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

但是向量還不足以傳送到下一層。需要先將這個惹人厭的東西變為同質的事物。

GPT-2 自注意力: 4- 映射

讓模型學會如何最大程度將自注意力層的結果繪製成向量,前饋神經網絡可以處理。接下來出場的就是第二大權重矩陣,它會把頭部注意力的結果映射到自注意力子層的輸出向量中:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

現在已經有了可以送到下一層向量了:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

GPT-2全連接神經網絡: 第一層

全連接神經網絡中,模塊在自注意力層呈現合適的語境之前會處理輸入的詞。它包含兩層。第一層有模型大小的四倍(小的GPT2模型是768,那該網絡將會達到768*4=3072)。為什麼會是4倍呢?這其實就是原始transformer操作的(模型尺寸為512,圖層1為2048)。這似乎給transformer模型創造了足夠大的空間去處理截止到目前所需進行的任務。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

(沒有展示向量偏差)


GPT-2全連接神經網絡: 第二層 – 映射到模型尺寸

第二層會將第一層得到的結果映射到模型尺寸上(小的GPT2模型尺寸大小為768)。相乘的結果就是transformer模塊處理該詞的結果。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

(沒有顯示向量偏差)


你做到了!

這就是有關transformer模塊的最詳細的解讀了!現在你已經差不多瞭解了transformer語言模型內部是如何運行的。概括一下,輸入向量遇到了這些權重矩陣:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

並且每個模塊都有各自成套的權重。另一方面,模型只有一個詞嵌入矩陣和一個位置編碼矩陣:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

想看所有的模型參數,筆者在這裡幫大家彙總一下:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

出於一些原因,這些加起來最多是1 億 2,400 萬個參數而非1 億 1,700 萬個。筆者也不知是為什麼,不過這些似乎出現在了發佈的代碼中。(如果錯了請及時糾正)


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

第三部分: 超越語言模型

僅含解碼器的transformer一直髮揮著勝於語言模型的作用。很多的應用程序都可以體現出其成功之處,類似於上述可視化的都可以對其進行描述。文章到了最後就以一些應用程序為結尾吧。


機器翻譯

不需要編碼器進行翻譯。同一個任務,由僅含解碼器的transformer即可完成:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

概述

這個就是第一個僅含解碼器的transformer的訓練任務——讀一篇維基百科的文章(在內容之前沒有引言),然後進行概括總結。文章開篇的部分會當作訓練數據集中的標籤:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


本文依據維基百科的文章對模型進行了訓練,所以訓練過的模型可以實現對文章的總結:

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

遷移學習

在論文「Sample Efficient TextSummarization Using a Single Pre-Trained Transformer」中,僅含解碼器的transformer是第一個在語言模型上進行預訓練的,然後才完成的概述任務。結果證明在遇到有限的數據集時,它比預訓練的僅含編碼器-解碼器transformer效果要好。


GPT2的論文也展示了在語言模型中預訓練後的模型的概括結果。


音樂生成

音樂transformer使用僅含解碼器的transformer生成富有動感和韻律的音樂。“音樂模型”就像語言模型——讓模型以一種無人監管的方式學習音樂,從而有自己的輸出(我們將其稱為“隨機工作(rambling)”)。


你可能會好奇這種情況下音樂是如何產生的。記住一點,語言模型可以通過角色、單詞、或者詞的向量體現完成。有了音樂能力(現在就想鋼琴),需要呈現筆記,也要求快速——測量鋼琴鍵按下去有多難。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

曲子的呈現只是曲子只是一系列獨熱向量之一,midi文件可以轉換為下面這種格式。文章有下列輸入順序的例子:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

獨熱向量對於該輸入序列會呈現下面這種效果:


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

筆者喜歡把這些呈現出來,展示音樂transformer中自注意力層。


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)


這段作品中出現了反覆出現的三角輪廓。查詢向量位於後一個峰值,它關注前面所有峰值的高音,直到樂曲的開頭。本圖顯示了一個查詢向量(所有注意力線來源)和正要處理的以前的記憶(突出了有更高 softmax函數概率的音符)。注意力線的顏色對應於不同的注意力頭,而寬度對應於 softmax函數概率的權重。


想要進一步瞭解這種音符的表徵,請觀看以下視頻:https://www.youtube.com/watch?v=ipzR9bhei_o


上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

總結

這就是GPT2的學習之旅,也探索了它的母模型——僅含解碼器的transformer。筆者希望通過這篇文章大家可以能夠更好地瞭解自注意力機制。

上車!帶你一文了解GPT-2模型(transformer語言模型可視化)

我們一起分享AI學習與發展的乾貨


分享到:


相關文章: