上車!帶你一文了解GPT-2模型(transformer語言模型可視化)
全文共 9517 字,預(yù)計學(xué)習(xí)時長 28 分鐘 今年,各種機器學(xué)習(xí)的應(yīng)用程序紛紛涌現(xiàn)。 其中OpenAI GPT-2能夠創(chuàng)作出邏輯清晰且激情盎然的文章,遠遠超出了人們對當(dāng)前語言模型創(chuàng)造力的預(yù)期,給公眾留下了深刻的印象。 GPT-2并不是專門寫小說的語言架構(gòu)——結(jié)構(gòu)與僅含解碼器的transformer相似,但它實則是基于transformer的語言模型,規(guī)模巨大,在海量的數(shù)據(jù)集上進行訓(xùn)練。 本文將介紹能讓模型生成結(jié)果的架構(gòu),深入到自注意力(self-attention)層,接著會講一些僅含解碼器的transformer在語言建模之外的應(yīng)用。 我之前寫過Illustrated Transformer一文,本文是對其的補充,將會更加直觀地解釋transformer的內(nèi)部操作,以及是如何從初級階段演變的。 希望本文使用的可視化語言會讓后文中基于transformer模型的解釋更為簡單,畢竟這些模型的內(nèi)部操作會不斷演變。 目錄 第一部分:GPT2和語言模型 什么是語言模型 通過Illustrated Word2vec,我們已經(jīng)看了語言模型的樣子——其實就是一種機器學(xué)習(xí)模型,在看到句子的某部分后可以預(yù)測后面的文字。 最常見的語言模型就是在手機上打字的時候,系統(tǒng)會依據(jù)所輸內(nèi)容自動推薦接下來的文字。 在這個意義上,可以說GPT-2實則就是比手機內(nèi)語言系統(tǒng)更龐大、更復(fù)雜的應(yīng)用程序,其功能就是預(yù)測文字。 OpenAI 的研究員為了實驗研究,從網(wǎng)上收集了40GB大的數(shù)據(jù)集(名為WebText),對GPT-2進行了訓(xùn)練。 就存儲大小而言,筆者使用的鍵盤軟件SwiftKey占手機內(nèi)存的78MB。 而訓(xùn)練的GPT-2中規(guī)模最小的也需500MB空間才能存儲其所有參數(shù),最大的所需空間是其13倍,那也就是說存儲空間將不止6.5GB。 對GPT-2進行實驗,有一個很妙的方式——使用 AllenAI GPT-2文件資源管理器 。 通過GPT-2,將會顯示10個可能的詞組以及各自的概率。 你可以選擇一個單詞,看看接下來的那些預(yù)測,然后繼續(xù)編輯文章。 語言模型中的transformer 正如Illustrated Transformer一文中所介紹的,transformer模型最初由編碼器(encoder)和解碼器(decoder)組成——兩個都是所謂的transformer模塊的堆棧。 該架構(gòu)之所以合適是因為能夠處理機器翻譯,而機器翻譯是編碼-解碼架構(gòu)在過去取得成功的一處問題。 后續(xù)的很多調(diào)查都發(fā)現(xiàn)架構(gòu)要么隱藏編碼器,要么隱藏解碼器,而且只用一個transformer模塊的堆棧——堆得盡可能高,輸入海量的訓(xùn)練文本,再進行大量運算。 這些模塊能堆多高呢? 事實證明這是能區(qū)分不同規(guī)模GPT2模型的主要因素: 如圖所示,小規(guī)模的 GPT-2 模型堆疊了 12 層,中等規(guī)模的是24 層,大規(guī)模的是36 層,還有一個特大規(guī)模的堆疊了48 層。 與BERT的區(qū)別 GPT-2是通過transformer解碼器模塊構(gòu)建的,而BERT是通過transformer的編碼器模塊構(gòu)建的。 下文會探討它們之間的差異,但其中最主要的一個就是GPT2會像傳統(tǒng)的語言模型一樣,每次輸出一個詞。 我們可以試著激發(fā)一個訓(xùn)練過的GPT2,令其背誦機器人第一定律: 這些模型實際操作的流程就是每次生成詞(token)后,將其添加到輸入序列。 新的序列就會作為模型下一步的輸入內(nèi)容。 該理念稱為“自回歸(auto-regression)”,也是 促成RNN高效 的理念之一。 GPT2以及后來的一些模型比如TransformerXL和XLNet本質(zhì)上講都是自回歸模型。 但BERT是個例外,沒有自回歸,不過可以結(jié)合上下文來創(chuàng)作更好的文章。 XLNet的出現(xiàn)讓自回歸重回公眾的視野,與此同時,人們也找到了另一種可以結(jié)合上下文創(chuàng)作的途徑。 Transformer模塊的演變歷程 最初的transformer論文介紹了兩種transformer模塊: 編碼器模塊 如圖所示,原始 transformer論文中的編碼器模塊可以接受長度不超過最大序列長度(如 512 個詞)的輸入。 如果序列長度小于該限制,就在其后填入預(yù)先定義的空白詞。 解碼器模塊 其次是解碼器模塊,帶有來自編碼器模塊的一個小構(gòu)架模型——該層允許關(guān)注編碼器的特定片段: 兩個模塊的自注意力層之間的主要區(qū)別在于后者生成新詞的過程——不是像BERT那樣把單詞改為[mask],而是干擾自注意力層的計算,阻止來自正在計算部分右側(cè)詞所傳遞的信息。 舉個例子,從下圖中可以看出如果要強調(diào)#4詞的路徑,只可以處理當(dāng)前和先前的詞: BERT中的自注意力和GPT-2中的掩模自注意力(masked self-attention)的區(qū)別很明顯,這點很關(guān)鍵。 一般的自注意力模塊允許某位置右側(cè)的詞計算時處于最大值。 而掩模自注意力會阻止這種情況發(fā)生: 僅含解碼器的模塊 延續(xù)著先前的論文,一篇名為Generating Wikipedia bySummarizing Long Sequences的論文提出了另一種能夠生成語言建模的transformer模塊排序。 該模型摒棄了transformer的編碼器,所以,可以稱其為“Transformer-Decoder”。 它是早期基于transformer的語言模型,由6個transformer 解碼器模塊組建的堆棧構(gòu)成: 解碼器模塊都相同。 筆者對第一個展開了講解,可以看出它的自注意力層是經(jīng)過掩模處理的。 要注意模型現(xiàn)在可以處理高達4000個詞的序列,相較于最初只能處理512個的成績來說是一個華麗的升級。 這些模塊與原始的解碼器模塊極其相似,除了沒有第二個自注意力層。 在 有深度自注意力層的字符級語言模型 中檢測到了相似的語言架構(gòu)——可以創(chuàng)建一次預(yù)測一個字母或字符的語言模型。 而OpenAI GPT-2模型使用的就是這些僅含解碼器模塊。 速成課: 揭開GPT-2的面紗 仔細觀察你會發(fā)現(xiàn),這些內(nèi)容深深地印刻在我的大腦里。 電閃雷鳴,讓我感到癡狂。 用一個訓(xùn)練過的GPT-2試試手,看看它到底是怎么操作的。 該GPT-2可生成1024個詞,每個詞都會穿過路徑中所有的解碼器模塊。 運行已訓(xùn)練過的GPT-2模型的最簡單的辦法就是讓它自己動起來,用行話講就是生成無條件樣本或者給它一個提示符,令其就某一話題展開論述,也被稱為生成交互式條件示例。 前者可以輕松掌控詞來創(chuàng)造單詞(訓(xùn)練的模型使用<|endoftext|> 作為起始詞,不如就叫它<s>吧)。 模型中只含有一個輸入的詞,所以激活的路徑也就別無他選詞會相繼通過所有層,于是會有向量隨之產(chǎn)生。 該向量可根據(jù)模型的詞匯進行評分,所有詞匯也都是模型知道的,GPT-2中詞匯量達5萬。 這種情況下,選擇概率最高的詞——the。 但我們當(dāng)然可以打亂這一切——要知道有時候一直點輸入鍵盤推薦的第一個字很有可能就會陷入循環(huán)模式,而這時唯一能夠打破局面的操作就是點擊推薦的第二或第三個字,這里也一樣。 GPT-2中有一個參數(shù)被稱為top-k,它能夠讓模型對首選單詞以外的詞匯進行采樣,此時top-k=1。 下一步,將第一步的輸出結(jié)果添加到輸入序列,讓模型進行下一輪預(yù)測: 注意,第二個路徑是計算中唯一激活的。 GPT-2每層都會保留對第一個詞的解釋,并將其用于處理第二個詞。 GPT-2不會根據(jù)第二個詞再去解釋第一個詞。 進一步深入了解 輸入編碼 這有更多的細節(jié)以便更好地了解模型。 從輸入開始,正如之前討論的其他自然語言處理模型,該模型會在嵌入矩陣中查找輸入的詞,嵌入矩陣是獲取的訓(xùn)練模型一部分的組件之一。 每行都是一個詞嵌入向量: 這一串?dāng)?shù)字都代表一個單詞或含義。 不同大小的GPT2模型中的數(shù)字規(guī)模是存在差異的,最小模型嵌入的規(guī)格是768每單詞或詞。 所以一開始,我們就在嵌入矩陣中查看了起始詞。 先合并位置編碼(該信號會指示transformer 模塊序列中單詞的順序),再將詞傳遞到第一個模塊中。 矩陣作為訓(xùn)練模型的一部分,是由輸入的1024個位置上的位置編碼向量組成的。 到目前,已經(jīng)為大家講解了輸入的文字在傳遞到第一個transformer 模塊之前是如何處理的,以及構(gòu)成訓(xùn)練的GPT-2模型的權(quán)值矩陣。 給第一個transformer模塊發(fā)送文字就意味著會查詢其嵌入內(nèi)容,并將位置編碼向量添加到位置1處。 來一場堆棧之旅 現(xiàn)在,第一個模塊可以讓詞先通過自注意力層,緊接著將其遞交到神經(jīng)網(wǎng)絡(luò)層。 第一個transformer 模塊一旦接受處理了詞,就會把處理的向量結(jié)果送去堆棧,等待下一個模塊的加工。 雖然每一個模塊中的處理過程都不同,但其內(nèi)部的自注意力層和神經(jīng)網(wǎng)絡(luò)子層都有著各自的權(quán)重。 回顧自注意力機制 機器人必須服從人給予它的命令,當(dāng)命令與第一定律沖突時例外。
筆者已強調(diào)了句子中有三處單詞與其他單詞有聯(lián)系。 如果不結(jié)合語境是無法理解或者處理單詞的,所以在模型處理這句話時,了解語境是必要的: · 這樣的命令是定律早期的一部分,也即“人類發(fā)出的指令” 自注意力層的流程就是這樣。 如同烘培一樣,它會在加工特定文字之前對其關(guān)聯(lián)詞進行預(yù)處理(再傳遞給神經(jīng)網(wǎng)絡(luò)層)。 其方式就是對每個單詞在語段中的相關(guān)度進行評分,然后把結(jié)果向量加起來。 例如,頂部的transformer模塊的自注意力層在處理“it”時,將重點放在了“robot”上。 那么傳遞給神經(jīng)網(wǎng)絡(luò)層的向量將是三個單詞中每個單詞的向量乘以其分?jǐn)?shù)的總和。 自注意力機制處理 自注意力機制會貫穿于語段中每個詞的處理路徑。 其中重要的組件是三個向量: · Query(查詢): 展示了當(dāng)前的單詞,該單詞會使用鍵給其他單詞評分。 我們只需要注意目前正在處理的詞的查詢。 · Key(鍵): 鍵向量就像段中所有單詞的標(biāo)簽,是搜索相關(guān)詞匯時的匹配項。 · Value(值): 值向量是實際單詞的體現(xiàn),給每個單詞的相關(guān)度評過分后,加起來的值就會用來表示當(dāng)前的單詞。 該過程可大致理解為在文件柜里進行搜索。 查詢就如同寫有搜索主題的便利貼,鍵是里面的文件夾名稱。 對著便利貼尋找標(biāo)簽時,會提取文件夾中的內(nèi)容,這些內(nèi)容就是值向量。 如果所找值不是一個,而是無數(shù)文件夾中的各個值,就要另當(dāng)別論了。 將查詢向量乘以每個鍵向量,得到的值即為每個文件夾對應(yīng)的分?jǐn)?shù)(從專業(yè)角度講: 乘指的是向量點乘,乘積會通過 softmax 函數(shù)處理)。 將值與其分?jǐn)?shù)相乘,再求總和——得出自注意力層結(jié)果。 該加權(quán)向量值的結(jié)果,會讓模型將50%的注意力都放在詞語“robot”上,30%的注意力放在“a”上,還有19%會在“it”上。 模型輸出 當(dāng)頂層模塊生成輸出向量(內(nèi)部自注意力層的結(jié)果,其后為神經(jīng)網(wǎng)絡(luò)層)時,模型會將該向量與嵌入矩陣相乘。 回想一下,嵌入矩陣中的每一行都會對應(yīng)模型內(nèi)的某個單詞的嵌入。 通過該乘法得到的最終結(jié)果可以視為模型中每個詞相應(yīng)的分?jǐn)?shù)。 可以只選擇分?jǐn)?shù)最高(top_k = 1)的詞,當(dāng)然如果把其他單詞也考慮在內(nèi)結(jié)果會更好。 因此,最穩(wěn)妥的辦法就是在整個單詞表中以單詞的分?jǐn)?shù)為概率將其選出作為樣本(自然而然,分?jǐn)?shù)越高被選出的可能性越大)。 最好是將top_k設(shè)置為40,讓模型考慮40個分?jǐn)?shù)最高的單詞。 這樣模型就完成了一次迭代,最后輸出一個單詞。 直到整個文本(1024個詞)生成或序列末詞出現(xiàn),迭代才算結(jié)束 小結(jié): GPT-2 有關(guān)GPT2的運行講到這里已經(jīng)差不多了,如果你比較好奇它內(nèi)部的自注意力層發(fā)生了什么,接下來這部分將是你的福利。 筆者的創(chuàng)作之初是想介紹更多可視語言來描述自注意力層,這樣在后期檢查和描述對transformer模型的介紹時會更輕松一些(看看TransformerXL模型和XLNet)。 · 在此文中,“單詞(word)”和“詞(token)”兩者都是指的同一個事物。 但實際上,GPT2會使用字節(jié)對編碼(BytePair Encoding)創(chuàng)建詞匯表中的詞(token),所以詞(token)也是單詞的一部分。 · 例子中運行的GPT2是處于干擾/評估模式的。 這就是為什么一次只處理一個單詞。 在訓(xùn)練模型的時候,會選擇更長序列的文本以及多項詞實現(xiàn)一次性處理。 同時,處理的批量(512)比評估時的更大。 · 為了更好的調(diào)整圖像中的空間大小,筆者將自由旋轉(zhuǎn)、轉(zhuǎn)換向量。 · 會使用很多標(biāo)準(zhǔn)化層,這一點非常重要。 其中一些已經(jīng)在講Illustrated Transformer時提到過,但本文會更側(cè)重于自注意力的講解。 · 例如:有很多次筆者都需要有更多的box來代表向量。 筆者將這個比為“放大”,請看: 第二部分: 詳解自注意力層 文章開篇,已經(jīng)呈現(xiàn)了這個圖片,讓大家了解自注意力層是如何應(yīng)用并處理單詞it的: 這一部分,我們將聚焦于它是如何運行的。 注意,會嘗試一種方式盡可能讓大家理解每個單詞都發(fā)生了什么。 所以展示多個單個的向量原因也在此。 實際的操作就是將大型矩陣相乘,但筆者想把重點放在感知上,從單詞層面感知其中的變化。 自注意力層(不使用掩模) 先看在編碼器模塊中進行計算的原始自注意力層。 可以看一次只能處理四個詞的transformer模塊的模擬模型。 在向量值與相關(guān)分?jǐn)?shù)相乘后將所有數(shù)想加。 1. 創(chuàng)建查詢、鍵和值向量 我們來看第一個路徑。 將取其查詢與所有的鍵做對比。 這樣每個鍵都會得到一個分?jǐn)?shù)。 在自注意力層的第一步就是給每個詞的路徑計算三個向量: 查詢向量、鍵向量、值向量(不用管目前的頭部注意力)。 2. 注意力得分 三個向量已具備,步驟2只用查詢向量和鍵向量。 因為關(guān)注的是第一個詞,所以將其查詢向量與其他所有的鍵向量相乘,最終結(jié)果就是四個詞各自的分?jǐn)?shù)。 3. 求和 現(xiàn)在可以將注意力得分與值向量相乘。 分?jǐn)?shù)高的值將占結(jié)果向量的大部分比重,在那之前會將所有相乘的結(jié)果相加求和。 分?jǐn)?shù)越低,呈現(xiàn)的值向量的透明度越高。 從中可以看出乘以小數(shù)量后會削減向量值。 假如每個路徑的操作一致,最終會得到一個代表詞的向量,包含合適的語境。 這些都會傳到下一層中(前饋神經(jīng)網(wǎng)絡(luò)): 詳解掩模自注意力機制 看過了transformer的自注意力步驟,現(xiàn)在開始介紹掩模自注意力機制(masked self-attention)。 除了第二步與自注意力不同,其余都相同。 假設(shè)模型只輸入了兩個詞,觀察第二個詞。 這種情況下,最后兩個詞會經(jīng)過掩模處理,所以模型在評分階段會進行干預(yù)。 基本上會經(jīng)常給后面出現(xiàn)的詞評分為0,如此一來模型的最高值就不會出現(xiàn)在這些后出現(xiàn)的詞中: 通常會將其作為矩陣(稱作注意力掩模)進行操作,設(shè)想四個單詞的序列(如“robot must obey oders”),在語言模型的場景中,該序列會分為四步驟進行處理——一個單詞對應(yīng)一個步驟(假設(shè)每個單詞都是一個詞)。 這些模型是批處理的,所以可以給這個模型提供四個為一批的單詞序列,然后將整個序列當(dāng)作一批來處理(四步走)。 在矩陣表格中,通過查詢矩陣與鍵矩陣相乘計算得出了分?jǐn)?shù)。 下面是該過程的可視化,除了單詞,不過會有與該單詞相關(guān)聯(lián)的查詢(或鍵)向量: 相乘過后,將注意力都放在注意力掩模三角區(qū)域。 我們想要進行掩模處理的數(shù)都變成了負無窮或者非常大的負數(shù)(比如GPT2中的-10億)。 然后在每一行都應(yīng)用softmax函數(shù),生成用于自注意力層的實際注意力得分: 在模型處理數(shù)據(jù)集中的第一個例子(第一行,僅包含一個單詞robot)時,100%的注意力都會在該單詞上。 處理數(shù)據(jù)集中的第二個例子(第二行,含有單詞“robot must”)的過程中,在遇到單詞“robot”時,48%的注意力會分給它,而剩下52%的注意力將聚焦到“must”上。 GPT-2 中的掩模自注意力機制 評估時間: 一次處理一個詞 GPT-2模型的操作也能像掩模自注意力那樣。 但是在評估期間,我們的模型只能在每次迭代之前增添一個新詞,而對于那些已經(jīng)處理過的詞,再在之前的路徑中重新計算自注意力層是無用的。 GPT-2模型會保存詞a的鍵向量和值向量。 每個自注意力層都會為此詞保留各自的鍵向量和值向量: 到下一次迭代,在模型處理單詞robot時,不需要生成詞 a的查詢向量、鍵向量和值向量,直接利用第一次迭代生成的就可以: GPT-2 自注意力: 1- 創(chuàng)建查詢、鍵和值 假如模型正在處理單詞it,討論最底層的模塊,那么輸入的就會是it的嵌入式+slot#9的位置編碼: Transformer中的每一個模塊都有自己的權(quán)重(后面會有詳解)。 首先遇到的就是權(quán)重矩陣,這個將會用于創(chuàng)建查詢向量、鍵向量和值向量。 自注意力層將輸入的內(nèi)容與權(quán)重矩陣相乘(并且添加了一個向量偏差,這里沒有講) 相乘得到的向量其實就是單詞 it的查詢向量、鍵向量和值向量的串聯(lián)。 將輸入的向量與注意權(quán)重相乘(以及添加向量偏差)得到該詞的鍵向量、值向量和查詢向量。 GPT-2自注意力: 1.5-細分 頭部注意力 在先前的例子中,我們直接剖析了自注意力層,并沒有考慮到“多頭(multi-head)”。 現(xiàn)在不著重看這一部分的概念是有好處的。 自注意力層多次在查詢(Q)、鍵(K)、值(V)向量的不同部分進行操作。 “細分”頭部注意力就是重新將長的向量塑造為矩陣。 小的GPT2模型有12個頭部,會構(gòu)成重塑矩陣的第一維度: 之前已經(jīng)探討過一個注意層的運行過程了。 可以這樣思考多個頭部注意力(如果我們只將12個頭部注意力中的3個進行可視化): GPT-2 自注意力: 2- 計算注意力得分 既然我們只關(guān)注一個頭部注意力(其他的操作都一樣),現(xiàn)在可以繼續(xù)打分: 現(xiàn)在詞可以針對其他詞的所有鍵進行打分(這在之前迭代時的頭部注意力 #1過程中計算過): GPT-2 自注意力機制: 3- 總和 正如之前所見,現(xiàn)在將每個值與其分?jǐn)?shù)相乘,然后相加,針對頭部注意力 #1生成自注意力的結(jié)果: GPT-2 自注意力: 3.5- 合并頭部注意力 處理各種頭部注意力的方式就是一開始將所有事物連結(jié)成一個向量: 但是向量還不足以傳送到下一層。 需要先將這個惹人厭的東西變?yōu)橥|(zhì)的事物。 GPT-2 自注意力: 4- 映射 讓模型學(xué)會如何最大程度將自注意力層的結(jié)果繪制成向量,前饋神經(jīng)網(wǎng)絡(luò)可以處理。 接下來出場的就是第二大權(quán)重矩陣,它會把頭部注意力的結(jié)果映射到自注意力子層的輸出向量中: 現(xiàn)在已經(jīng)有了可以送到下一層向量了: GPT-2全連接神經(jīng)網(wǎng)絡(luò): 第一層 全連接神經(jīng)網(wǎng)絡(luò)中,模塊在自注意力層呈現(xiàn)合適的語境之前會處理輸入的詞。 它包含兩層。 第一層有模型大小的四倍(小的GPT2模型是768,那該網(wǎng)絡(luò)將會達到768*4=3072)。 為什么會是4倍呢? 這其實就是原始transformer操作的(模型尺寸為512,圖層1為2048)。 這似乎給transformer模型創(chuàng)造了足夠大的空間去處理截止到目前所需進行的任務(wù)。 GPT-2全連接神經(jīng)網(wǎng)絡(luò): 第二層 – 映射到模型尺寸 第二層會將第一層得到的結(jié)果映射到模型尺寸上(小的GPT2模型尺寸大小為768)。 相乘的結(jié)果就是transformer模塊處理該詞的結(jié)果。 你做到了! 這就是有關(guān)transformer模塊的最詳細的解讀了! 現(xiàn)在你已經(jīng)差不多了解了transformer語言模型內(nèi)部是如何運行的。 概括一下,輸入向量遇到了這些權(quán)重矩陣: 并且每個模塊都有各自成套的權(quán)重。 另一方面,模型只有一個詞嵌入矩陣和一個位置編碼矩陣: 想看所有的模型參數(shù),筆者在這里幫大家匯總一下: 出于一些原因,這些加起來最多是1 億 2,400 萬個參數(shù)而非1 億 1,700 萬個。 筆者也不知是為什么,不過這些似乎出現(xiàn)在了發(fā)布的代碼中。 (如果錯了請及時糾正) 第三部分: 超越語言模型 僅含解碼器的transformer一直發(fā)揮著勝于語言模型的作用。 很多的應(yīng)用程序都可以體現(xiàn)出其成功之處,類似于上述可視化的都可以對其進行描述。 文章到了最后就以一些應(yīng)用程序為結(jié)尾吧。 機器翻譯 不需要編碼器進行翻譯。 同一個任務(wù),由僅含解碼器的transformer即可完成: 概述 這個就是第一個僅含解碼器的transformer的訓(xùn)練任務(wù)——讀一篇維基百科的文章(在內(nèi)容之前沒有引言),然后進行概括總結(jié)。 文章開篇的部分會當(dāng)作訓(xùn)練數(shù)據(jù)集中的標(biāo)簽: 本文依據(jù)維基百科的文章對模型進行了訓(xùn)練,所以訓(xùn)練過的模型可以實現(xiàn)對文章的總結(jié): 遷移學(xué)習(xí) 在論文「Sample Efficient TextSummarization Using a Single Pre-Trained Transformer」中,僅含解碼器的transformer是第一個在語言模型上進行預(yù)訓(xùn)練的,然后才完成的概述任務(wù)。 結(jié)果證明在遇到有限的數(shù)據(jù)集時,它比預(yù)訓(xùn)練的僅含編碼器-解碼器transformer效果要好。 GPT2的論文也展示了在語言模型中預(yù)訓(xùn)練后的模型的概括結(jié)果。 音樂生成 音樂transformer使用僅含解碼器的transformer生成富有動感和韻律的音樂。 “音樂模型”就像語言模型——讓模型以一種無人監(jiān)管的方式學(xué)習(xí)音樂,從而有自己的輸出(我們將其稱為“隨機工作(rambling)”)。 你可能會好奇這種情況下音樂是如何產(chǎn)生的。 記住一點,語言模型可以通過角色、單詞、或者詞的向量體現(xiàn)完成。 有了音樂能力(現(xiàn)在就想鋼琴),需要呈現(xiàn)筆記,也要求快速——測量鋼琴鍵按下去有多難。 曲子的呈現(xiàn)只是曲子只是一系列獨熱向量之一,midi文件可以轉(zhuǎn)換為下面這種格式。 文章有下列輸入順序的例子: 獨熱向量對于該輸入序列會呈現(xiàn)下面這種效果: 筆者喜歡把這些呈現(xiàn)出來,展示音樂transformer中自注意力層。 這段作品中出現(xiàn)了反復(fù)出現(xiàn)的三角輪廓。 查詢向量位于后一個峰值,它關(guān)注前面所有峰值的高音,直到樂曲的開頭。 本圖顯示了一個查詢向量(所有注意力線來源)和正要處理的以前的記憶(突出了有更高 softmax函數(shù)概率的音符)。 注意力線的顏色對應(yīng)于不同的注意力頭,而寬度對應(yīng)于 softmax函數(shù)概率的權(quán)重。 想要進一步了解這種音符的表征,請觀看以下視頻: https://www.youtube.com/watch?v=ipzR9bhei_o 總結(jié) 這就是GPT2的學(xué)習(xí)之旅,也探索了它的母模型——僅含解碼器的transformer。 筆者希望通過這篇文章大家可以能夠更好地了解自注意力機制。 https://jalammar.github.io/illustrated-gpt2/ * 凡來源非注明“機器學(xué)習(xí)算法與Python學(xué)習(xí)原創(chuàng)”的所有作品均為轉(zhuǎn)載稿件,其目的在于促進信息交流,并不代表本公眾號贊同其觀點或?qū)ζ鋬?nèi)容真實性負責(zé)。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報 。