大模型Transformer架構之編碼器(Encoder)和解碼器(Decoder) 原創
“ Transformer編碼器的作用是特征提取,而解碼器的作用是特征重建 ”
在上一篇文章中介紹了大模型的嵌入和向量,這一篇來介紹一下大模型的經典架構之Transformer架構的編碼器和解碼器。
像很多人一樣,一直在奇怪Transformer架構經過多層編碼和解碼之后就能處理輸入數據并生成新的數據;所以,今天我們就來深入了解一下Transformer的編碼器。
Transformer的編碼器
對計算機網絡和加解密比較了解的朋友應該都知道編碼和解碼;以計算機的四層模型來說,應用層——傳輸層——網絡層——數據鏈路層;除了應用層之外,其它三層的數據格式都是以字節流的形式存在;而在應用層對數據進行編碼和解碼,以獲取人類能夠識別的字符,文本,圖片等數據。
再比如我們開發中常用的加解密等手段,也是在應用層進行處理的;因為在下層的字節流中是看不出任何有意義的信息的。
而Transformer的編碼器就類似于這種功能,Transformer的編碼器就是把人類能夠識別的數據,轉換成大模型能夠識別的數據;而解碼器就是把大模型能夠識別的數據轉換為人類能夠識別的內容。
但這個轉換過程并不只是簡單的格式變換,而是要經過多重數據處理;而這才是Transformer編碼器的核心所在。
Transformer的Encoder-Decoder編碼器-解碼器結構,這種結構被廣泛應用于處理序列格式的數據(Seq2Seq);編碼器和解碼器是其組成部分的核心結構。
編碼的過程是一個模式提取的過程,它的作用是把輸入句子的特征提取出來;比如句子的文字,語義關系等;而解碼的過程是一個模式重建的過程,它是根據編碼器獲取的模式特征生成新的我們需要的內容,這個過程就是模式重建的過程。
比如說大模型的經典應用領域之語言翻譯,就是經過預訓練的模型根據模式特征去“理解”一種語言,然后再根據另一種語言的模式特征生成翻譯結果。
Encoder的主要作用是進行特征提取,這樣做是因為原始輸入中包含一些無用或干擾信息,這會使模型的性能和泛化性大打折扣。所以在這之前,我們通過Encoder來先對數據進行一次特征提取和挖掘.
從架構上看Encoder僅僅只是一個編碼器,但如果把這個編碼器給放大,我們就能看到里面更多的東西,比如說Transformer架構中最經典的自注意力機制。
Encoder中有一個嵌入輸入,也就是上篇文章中講的嵌入,把人類能識別的文本轉化為向量輸入到編碼器中;當然,這個并不是編碼器的重點;編碼器的重點在其藍色框中的部分。也就是里面的自注意力層,包括多頭注意力和Add&Norm,也就是Add & Norm 殘差 & Layer Normalization 層歸一化,以及前饋神經網絡——也就是feed forward。
整體流程是這樣的:
- 首先輸入進Encoder的向量會經過一個自注意力層,自注意力層會輸出一個長度與輸入一致,但特征維度可能不一致(也可能一致)的新特征向量z zz
- 之后會再進行一個殘差連接(Residual Connection)的操作,將輸入x xx和z zz相加
- 使用Layer Normalization的方法對殘差連接得到的結果進行層歸一化的操作
- 再送入一個前饋神經網絡
- 同樣的,執行2.和3.的操作,進行一次殘差和歸一化處理后輸出
說了那么多,其實本質上就是一種數學模型,通過加權,求和等一系列的函數計算,來獲取其數學關系。
而經過多層Encoder編碼器層的運算,就能提取出輸入數據的模式特征;最終形成記憶——也就是大模型的參數值;后續的推理任務,就可以根據這些參數值來分析輸入數據的模式特征,然后“理解”其語義關系。
而解碼器從結構上來說和編碼器沒太大區別,唯一不同的是,解碼器比編碼器多了一個自注意層。
數據經過解碼器之后,就是把編碼器通過模式提取的空間特征,映射到目標空間中,也就是解碼器的模式特征模塊;最后,解碼器通過這些模式特征生成新的數據。
這就是大模型Transformer的基本運作過程,當然其真實的運作過程遠比描述的要復雜得多。
而大模型就是通過多層神經網絡來實現編碼器-解碼器的結構,通過訓練之后,最終來執行真實的場景任務。
本文轉載自公眾號AI探索時代 作者:DFires
