官术网_书友最值得收藏!

1.1.2 Transformer架構

吳老師:GPT是一種基于Transformer架構的大語言模型,介紹完了大語言模型,再讓我們看看什么是Transformer。Transformer技術的發展要回溯到2017年6月谷歌團隊發表的論文Attention is all you need,這篇論文中首次提出了Transformer架構,自此,自然語言處理的發展出現了一系列基于Transformer架構的模型。

小紅:Transformer架構與之前的大語言模型架構相比,有什么不同?

吳老師:在Transformer架構被提出之前,大語言模型的主流架構是循環神經網絡(Recurrent Neural Network,RNN),RNN不擅長處理長文本,難以有效捕捉到長距離的語義關系。也就是說,距離越遠,前面對后面的影響越弱。但在人類自然語言中,依賴信息之間距離較遠是很常見的情況。舉個例子,“我在廣東長大,廣東的特點是美食多。雖然我父母是四川人,但我更喜歡吃____?!睓M線處應該填寫廣東菜,但是,因為“廣東”離橫線距離很遠,所以RNN生成后續內容時,可能已經把前面的信息忘了。

小紅:Transformer架構的優勢是學習長文本的能力強,不會忘記前面的信息?

吳老師:是的。Transformer有能力學習輸入序列里所有詞的相關性和上下文,不會受到短時記憶的影響,能做到這一點的關鍵在于Transformer的自注意力機制,也正如論文標題所說——Attention is all you need,注意力就是你所需要的一切。Transformer在處理每個詞的時候,不僅會注意這個詞本身以及它附近的詞,還會關注輸入序列里所有其他的詞。

小紅:所以橫線處既可以填四川菜,也可以填廣東菜,Transformer學習到橫線處與廣東有更強的關系,因此填寫了廣東菜。

吳老師:是的,你理解得非常正確。下面我們就開始好好理解一下Transformer架構的原理。Transformer架構由兩個核心部分,編碼器(Encoder)以及解碼器(Decoder)組成,我們先說說編碼器。編碼器中,首先會將輸入的文本token化,也就是把文本拆成可以被理解的基本文本單位,比如短的英文單詞可能是一個token,長的英文單詞可能被分為多個token,而中文所占的token數量會相對較多,有些字甚至要用很多token表示。然后使用整數表示token化后的內容,這個數字就叫作token id(因為計算機內部是無法存儲文字的,任何字符最終都得用數字來表示)。再把token id轉化成一串數字(也就是“詞向量”)來表示(見圖1-3)。

圖1-3

小紅:已經用整數(token id)表示各個token了,怎么還要用一串數字(詞向量)表示各個token呢?

吳老師:原因是一串數字能表達的含義是多于一個數字的,能包含更多的語法、語義信息等。如果有多個數字,我們可以進行更多維度的表示。比如第一個數字可以表示“是男性的程度”,第二個表示“年齡大的程度”,第三個表示“社會階層高的程度”等,詞向量里面包含詞匯之間的語法、語義等關系,相似的詞在向量空間里的距離更近,而一些沒什么關系的詞的距離就更遠。這有助于模型利用數學計算向量空間里的距離,從而捕捉不同詞在語義和語法等方面的相似性。

小紅:一般詞向量的長度是多少呢?

吳老師:Attention Is All You Need里詞向量的長度是512,GPT-3中則是12288。有了詞向量,我們下一步就是對其進行位置編碼,位置編碼就是把表示各個詞在文本里的“位置向量”和“詞向量”相加。其實,除了自注意力機制,Transformer的另一項關鍵創新就是位置編碼。因為,在語言里詞序很重要,即使句子里包含的字都是一樣的,詞序不一樣也能導致意思大相徑庭。比如“他從北京搬到了上海?!焙汀八麖纳虾0岬搅吮本!边@兩個句子的地點是完全相反的。圖1-4所示為他從北京搬到了上海的位置編碼示例。

圖1-4

小紅:我聽過自然語言處理領域會用“序列”這個詞,原來用在這里。

吳老師:然后我們把位置編碼的結果傳給編碼器,這樣做的意義是,模型既可以理解每個詞的意義,又能夠捕捉詞在句子中的位置,從而理解不同詞之間的順序關系。而且,每個輸出都可以獨立計算,不需要等待其他位置的計算結果,大大提高了訓練速度。

小紅:之后編碼器的工作是什么呢?

吳老師:以上我們講的是編碼器的嵌入層,之后才講解編碼器核心部分,也就是自注意力機制。你看,現在我們有了一串數字,數字里面保留了輸入文本的詞匯信息和順序關系,然后我們把這些詞向量輸入編碼器,讓編碼器利用自注意力機制生成新的詞向量。自注意力機制模型在處理每個詞的時候,不僅會關注這個詞本身和它附近的詞,還會關注輸入上下文中的所有其他詞,如果兩個詞之間的相關性強,它們之間的注意力權重就會高。

小紅:明白了,輸出的表示結果里不僅包含這個詞本身的信息,還融合了上下文中的相關信息。

吳老師:實際上Transformer使用了多頭自注意力機制,也就是編碼器不止一個自注意力模塊,而是多個自注意力模塊堆疊在一起,每個模塊都有它自己的注意力權重,用來關注文本的不同特征或方面,比如有的關注動詞,有的關注修飾詞,有的關注情感,有的關注命名實體等。在多頭自注意力機制模型后面,還有前饋神經網絡模型,它會對自注意力模塊的輸出做進一步的處理,增強模型的表達能力。在Transformer架構里,編碼器不止一個,實際上是多個編碼器堆疊在一起,每個編碼器的內部結構都一樣(見圖1-5),但不共享權重。

圖1-5

小紅:原來如此。這樣模型能更深入地理解數據,處理更復雜的文本內容。

吳老師:沒錯。說完編碼器,接下來看解碼器,它是大語言模型生成一個個詞的關鍵。通過前面的編碼器,我們有了輸入序列里各個token的抽象表示,把它傳給解碼器。另外,解碼器會先接收輸出序列的開頭,表示剛開始的這輪還沒有任何已生成的文本(見圖1-6)。

圖1-6

小紅:編碼器和解碼器是用一樣的方式來處理詞的嗎?

吳老師:編碼器在處理各個詞時,會關注輸入序列里的所有詞,但解碼器只會關注這個詞和它前面的其他詞,后面的詞會被遮住。這樣做是為了確保解碼器生成文本時遵循正確的時間順序,在預測下一個詞時,只使用前面的詞作為上下文。這種多頭自注意力被叫作帶掩碼的多頭自注意力,帶掩碼的多頭自注意力是針對已生成的輸出序列的。

小紅:也就是說,生成輸出序列的時候,不能讓解碼器看到后面的內容。

吳老師:是的。帶掩碼的多頭自注意力后面還有個多頭自注意力層,用來捕捉編碼器的輸入和解碼器即將生成的輸出之間的對應關系,從而將原始輸入序列的信息融合到輸出序列的生成過程中。解碼器里面的前饋神經網絡的作用和編碼器里的類似,也是通過額外的計算來增強模型的表達能力。而且,解碼器同編碼器一樣,在Transformer里解碼器也不止一個,也是多個解碼器堆疊在一起。

小紅:明白了,這可以增加模型的性能,有助于處理復雜的輸入輸出關系。

吳老師:解碼器的最后階段包含一個線性層和一個Softmax層,它們共同起到把解碼器輸出的表示轉換為詞匯表的概率分布的作用,這個詞匯表的概率分布代表下一個被生成token的概率。在大多數情況下,模型會選擇概率最高的token作為下一個輸出。

小紅:這樣處理有些token的輸出概率就會比其他的高。

吳老師:是的。解碼器本質上是在猜下一個最有可能的輸出。比如我說“今天我想去”,然后它就會根據以前看過的大量文本來猜我接下來可能會說“吃飯”、“上學”或者“玩游戲”。它可能會覺得我說“吃飯”的概率是50%,說“上學”的概率是40%,說“玩游戲”的概率是10%。這種通過歷史數據來預測未來的方法,我們叫它“世界模型”,因為它好像知道了這個世界的所有規則,不管是數學的、物理的還是哲學的。然后它就根據這些規則來猜測下一個字或者詞是什么。

小紅:原來這就是為什么GPT回答的時候好像打字一樣,一個字一個字地出來的呢。

吳老師:是的。至于輸出是否符合客觀事實,模型無從得知,所以我們經??吹?span style="color:#0092dd;">模型一本正經地胡說八道,這種現象也被叫作“幻覺”。

小紅:原來這就是產生“幻覺”的原因。

吳老師:解碼器的整個流程會重復多次,直到生成的是一個用來表示輸出序列結束的特殊token(見圖1-7)。

圖1-7

吳老師:以上就是Attention is all you need的原始Transformer,編碼器用來理解和表示輸入序列,解碼器用來生成輸出序列(見圖1-8)。

圖1-8

吳老師:實際上在原始架構的基礎上,Transformer后續出現了一些“變種”,主要有3個類別,即僅編碼器、僅解碼器、編碼器-解碼器(見圖1-9)?!皟H編碼器模型”也叫自編碼模型,只保留了原始架構里的編碼器,BERT(Bidirectional Encoder Representations from Transformers)就是這類模型的一個例子。此類模型適用于理解語言的任務。比如掩碼語言建模,也就是讓模型猜文本里被遮住的詞是什么;比如情感分析,也就是讓模型判斷文本情感是積極的還是消極的。“僅解碼器模型”也叫自回歸模型,只保留了原始架構里的解碼器,GPT系列都是這類模型的例子。這類模型非常擅長通過預測下一個詞來實現文本生成,我們已經在ChatGPT上見識過了?!熬幋a器-解碼器模型”也叫序列到序列模型,同時保留了原始架構里的編碼器和解碼器,T5和BART(Bidirectional and Auto-Regressive Transformers)都是這類模型的例子。此類模型適用于把一個序列轉換成另一個序列的任務,比如翻譯、總結等。

小紅:學到了好多知識,現在我對大語言模型背后技術的了解應該已經超過90%的人啦!

圖1-9

主站蜘蛛池模板: 玉溪市| 铜陵市| 张北县| 鄂伦春自治旗| 正宁县| 莱阳市| 平顶山市| 灵寿县| 会东县| 多伦县| 石台县| 建平县| 财经| 岚皋县| 新沂市| 镇安县| 龙川县| 类乌齐县| 蓬溪县| 六盘水市| 司法| 肥东县| 封丘县| 图木舒克市| 长海县| 惠安县| 杭锦旗| 商洛市| 金溪县| 杭锦后旗| 游戏| 大足县| 玉环县| 迁安市| 莒南县| 府谷县| 长武县| 屯留县| 伊吾县| 加查县| 东港市|