- 揭秘大模型:從原理到實戰
- 文亮 江維
- 1120字
- 2025-04-17 18:46:18
2.3.1 Transformer的模型結構
Transformer是谷歌在2017年的論文“Attention is all you need”[3]中提出的,用于自然語言處理的各項任務,現在是谷歌云的張量處理單元(tensor processing unit,TPU)推薦的參考模型,也是OpenAI GPT系列大模型的基本結構。Transformer是一種強大的模型,能夠完成并行處理、提取特征、優化機器翻譯等任務。
Transformer是一種能夠完成機器翻譯任務的模型,它可以把一種語言轉換成另一種語言。如果不考慮Transformer的內部結構,只看它的輸入和輸出,那么它的結構可以用圖2-7來表示。

圖2-7 將法文翻譯成英文
打開Transformer的黑盒,就可以看到Transformer是由多個編碼器(encoder)和解碼器(decoder)堆疊而成的,如圖2-8所示。可以看到左邊是由多層編碼器構成的,右邊是由多層解碼器構成的。

圖2-8 Transformer由多個編碼器和解碼器構成
繼續將編碼器和解碼器拆開,可以看到完整的Transformer結構,如圖2-9所示。編碼器包含一個多頭注意力(multi-head attention)層,它由多個自注意力(self-attention)單元組成。解碼器則包含兩個多頭注意力層,一個用于編碼器-解碼器的注意力,另一個用于自注意力。在每個多頭自注意力層的上方,還有一個加法和歸一化(add & norm)層,加法表示使用殘差連接來防止網絡退化,歸一化表示使用層歸一化來對每一層的激活值進行規范化。

圖2-9 完整的Transformer結構
圖2-8只給出了解碼器的目標輸出,沒有顯示解碼器的目標輸入。而圖2-9則同時顯示了目標輸入(嵌入層的輸入)和目標輸出(Softmax層的輸出),這是為了統一訓練和預測的過程。在模型訓練時,目標輸入是已知的翻譯結果(比如將法文翻譯成英文時的目標是英文),而在模型訓練完成后進行預測時,目標輸入的第一個詞是特殊的開始標記(如<|im_start|>)。關于這個過程的更多細節,將在2.3.5節中詳細介紹。
為了能夠讓讀者更好地理解Transformer的模型原理,在接下來的內容中,將用具體的代碼來實現它。我們使用的是TensorFlow 2.0框架。
代碼清單2-1 導入TensorFlow 2.0
from __future__ import absolute_import, division, print_function import tensorflow_datasets as tfds import tensorflow as tf import tensorflow.keras.layers as layers import time import numpy as np import matplotlib.pyplot as plt
下面用一個簡單的例子來說明Transformer的基本工作流程。我們還是使用前面的例子,把法文的“Je suis étudiant”翻譯成英文。
(1)得到輸入句子中每個單詞的向量表示x,它是由詞嵌入(word embedding)向量和位置嵌入(position embedding)向量相加而得到的。
(2)把輸入句子的詞嵌入矩陣X作為編碼器的輸入,經過N層編碼器的處理,得到了句子中每個單詞的編碼信息矩陣C,如圖2-10所示。矩陣X的維度是n × d,其中n是單詞的個數,d是詞嵌入的維度。

圖2-10 編碼器的處理過程
(3)把編碼器輸出的編碼矩陣C作為解碼器的輸入,解碼器根據編碼矩陣C和已經翻譯過的單詞來生成下一個單詞,如圖2-11所示。

圖2-11 經過解碼器后的輸出
從圖2-11可知,解碼器首先從編碼器獲取編碼矩陣,并以“<Begin>”作為起始符,預測出第一個單詞“I”;然后將“<Begin>”和“I”作為輸入,預測出第二個單詞“am”。以此類推,生成完整的句子。這就是Transformer的基本工作流程,下面詳細介紹其中的各個組成部分。