- 大型語言模型實戰指南:應用實踐與場景落地
- 劉聰 沈盛宇 李特麗 杜振東
- 1530字
- 2024-11-13 10:18:59
1.1 Transformer基礎
Transformer模型由Google于2017年提出,用于解決序列到序列(Sequence-to-Sequence,Seq2Seq)任務,該模型摒棄了傳統的卷積神經網絡(Convolutional Neural Network,CNN)和循環神經網絡(Recurrent Neural Network,RNN)結構,采用注意力(Attention)機制,在減少計算量和提高并行效率的同時取得了更加優異的效果。
為了解決Seq2Seq任務,Transformer模型的結構由編碼器(Encoder)和解碼器(Decoder)兩部分組成,如圖1-1所示,左邊為編碼器部分,右邊為解碼器部分。編碼器部分主要由6個(圖1-1左邊的數字N為6)相同的層堆疊而成,而每一層都包含兩個子層,分別為多頭注意力(Multi-Head Attention)層和前饋網絡(Feed-Forward Network,FFN)層,并采用相加和層歸一化(Layer Normalization,LayerNorm)操作連接兩個子層。解碼器部分也是由6個(圖1-1右邊的數字N為6)相同的層堆疊而成,除了編碼器的兩層之外,又插入一個掩碼多頭注意力層,用于將編碼器的輸出與解碼器的輸入相融合。Transformer模型在解碼器部分的注意力機制上增加了上三角掩碼矩陣,防止在模型訓練過程中出現信息泄露情況,保證模型在計算當前位置信息時不受后面位置信息的影響。

圖1-1 Transformer模型結構
多頭注意力層由多個縮放點積注意力(Scaled Dot-Product Attention)的自注意力(Self-Attention)機制組成,如圖1-2所示。
注意力機制一般可以看作將查詢(Query)和一組鍵值對(Key Value Pair)映射到高維空間,即對Value進行加權求和計算,其中加權求和時的權重值是由Query與Key計算得出的。對于縮放點積注意力來說,將查詢向量(Q)與鍵向量(K)進行相乘,再進行大小為的縮放,經過歸一化后,與值向量(V)進行相乘,獲取最終輸出,計算公式如下:

圖1-2 多頭注意力層結構

由于Q和K相乘得到向量時,向量中值之間的方差會變大,即向量中不同維度的取值波動變大,如果直接進行歸一化,會導致較大的值更大,較小的值更小,因此進行參數縮放,使得參數之間的差距變小,訓練效果更好。由于解碼器部分的特殊性,注意力機制中Q與K相乘后,還需要額外乘上一個掩碼矩陣。
多頭注意力是將多個縮放點積注意力的輸出結構進行拼接,再通過全連接層變換得到最終結構,計算公式如下:
MultiHead(Q,K,V)=Concat(head1,…,headh)W0
在不同位置中,Q、K和V的獲取方式不同。編碼器部分的多頭注意力層和解碼器部分的第一個多頭注意力層的Q、K、V是由輸入向量經過3種不同的全連接層變換得來的。解碼器部分的第二個多頭注意力層的Q是由第一個多頭注意力層輸出向量經過全連接變換得來的,K、V則是編碼器部分的輸出向量。
Transformer中的FFN層則由兩個全連接層加上ReLU激活函數組成,計算公式如下:
FFN(x)=max(0,xW1+b1)W2+b2
每一層采用層歸一化的原因是層歸一化不受訓練批次大小的影響,并且可以很好地應用在時序數據中,不需要額外的存儲空間。
由于注意力機制與CNN結構一樣,無法表示文本的時序性,相比于LSTM結構等循環神經網絡,在NLP領域效果要差一些,因此引入位置信息編碼,相當于使模型具備解決時序性內容的能力,這也是Transformer成功的重要因素之一。Transformer采用了絕對位置編碼策略,通過不同頻率的正余弦函數組成每個時刻的位置信息,計算公式如下:

Transformer模型目前已經成為主流框架,不僅在NLP任務上大放異彩,并且在計算機視覺(Computer Vision,CV)任務上嶄露頭角,目前主流的大型語言模型基本上都采用了Transformer模型結構。相較于CNN來說,Transformer模型可以獲取全局的信息。相較于RNN來說,Transformer模型擁有更快的計算速度,可以并行計算,并且注意力機制也有效地解決了長序列遺忘的問題,具有更強的長距離建模能力。
Transformer結構仍存在一些缺點,例如:組成Transformer的自注意力機制的計算復雜度為O(L2),當輸入長度L過大時,會導致計算量爆炸;Transformer獲取內容位置信息的方式全部來源于位置信息編碼等。因此,出現了很多Transformer結構的變種,例如Sparse Transformer、Longformer、BigBird、Routing Transformer、Reformer、Linformer、Performer、Synthesizer和Transformer-XL等,也涌現出了各種位置編碼,如RoPE、ALiBi等,用于解決上述問題。本節主要介紹原始Transformer的結構,上述變體以及位置編碼就不過多介紹了,若想了解更多可以閱讀相關論文。