Transformer的核心理解起來也不難,但為什么這么強(qiáng)呢?
本文經(jīng)自動駕駛之心公眾號授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
Transformer的強(qiáng)大在于它的設(shè)計(jì)。高票答案已經(jīng)詳細(xì)講解了Transformer在長距離依賴建模方面的能力,我就試著從設(shè)計(jì)方面補(bǔ)充一下“Transformer能夠work很好”的其他幾個原因吧。拋磚引玉,大家輕拍。
并行計(jì)算 + 強(qiáng)大的表達(dá)與泛化能力
傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)在處理序列數(shù)據(jù)時需要按順序逐步計(jì)算,無法并行。而Transformer可以做到”同時計(jì)算所有位置的輸出”!它是怎樣做到的呢?
上圖是論文中 Transformer 的內(nèi)部結(jié)構(gòu)圖,左側(cè)為 Encoder block,右側(cè)為 Decoder block。
首先,Transformer使用位置編碼(Position Encoding)來記錄各單詞在語句中的位置或次序,位置編碼的值遵循一定規(guī)則(如由三角函數(shù)生成),每個源單詞(或目標(biāo)單詞)的Word Embedding與對應(yīng)的位置編碼相加(位置編碼向量與Word Embedding的維度相同)得到自己的編碼,并最終成為Encoder的輸入。
Transformer的Encoder組件由6個相同結(jié)構(gòu)的Encoder串聯(lián)而成,Decoder組件也是由6個結(jié)構(gòu)相同的Decoder串聯(lián)而成。最后一層Encoder的輸出將傳入Decoder的每一層。
進(jìn)一步看,每個Encoder中的Multi-Head Attention,通過多個獨(dú)立的注意力頭并行計(jì)算,可以從不同的子空間中學(xué)習(xí)到不同的表示,從而使模型擁有關(guān)注語言不同方面的能力。下面是Multi-Head Attention的內(nèi)部結(jié)構(gòu),
從上圖可以看到 Multi-Head Attention 包含多個 Self-Attention 層,首先將輸入X分別傳遞到 h 個不同的 Self-Attention 中,計(jì)算得到 h 個輸出矩陣。
然后,Multi-Head Attention 將它們拼接在一起 (Concat),傳入一個Linear層,得到 Multi-Head Attention 最終的輸出Z
Linear層(全連接的神經(jīng)網(wǎng)絡(luò)層)的映射是非線性變換,它的作用是對輸入進(jìn)行維度變換和特征提取。線性變換只能進(jìn)行簡單的比例縮放和平移操作,而非線性變換可以引入更多的復(fù)雜性,例如曲線形狀、峰值和谷底等。這樣可以使模型更加靈活,能夠更好地適應(yīng)不同類型的數(shù)據(jù)分布,從而增加模型的表達(dá)能力。
Multi-Head Attention 上方還包括一個 Add & Norm 層,Add 表示殘差連接 (Residual Connection) 用于防止網(wǎng)絡(luò)退化(這也是RNN的頑疾),而Norm 表示 Layer Normalization,用于對每一層的激活值進(jìn)行歸一化,也就是將每一層神經(jīng)元的輸入都轉(zhuǎn)成均值方差都一樣的,這樣可以加快收斂。
除了多頭機(jī)制,Transformer還使用了Feed Forward前饋網(wǎng)絡(luò),它由兩個線性變換和一個非線性激活函數(shù)(通常是ReLU)組成。輸入的詞向量經(jīng)過一個線性變換,將其映射到一個更高維度的空間。然后,通過ReLU進(jìn)行非線性變換。最后,再經(jīng)過一個線性變換,將其映射回原始的詞向量維度。通過多層前饋網(wǎng)絡(luò)的堆疊,模型可以學(xué)習(xí)到更復(fù)雜的特征表示,從而更好地捕捉輸入序列中的語義信息。
Transformer架構(gòu)強(qiáng)大的表達(dá)與泛化能力使之成為GPT等大語言模型的底層核心,如果你也對Transformer和大模型感興趣,想掌握使用和開發(fā)大模型的必備技巧,最終進(jìn)入這一領(lǐng)域,那么選擇一門相應(yīng)的網(wǎng)課是比較快的路徑。
自注意力模型的設(shè)計(jì)
傳統(tǒng)序列模型在處理長序列時,由于信息的傳遞是依次進(jìn)行的,容易出現(xiàn)梯度消失或梯度爆炸的問題,同時也無法充分捕捉到序列中不同位置之間的依賴關(guān)系。
通過引入注意力機(jī)制,我們可以對每個位置的注意力權(quán)重進(jìn)行獨(dú)立計(jì)算,不需要像傳統(tǒng)序列模型那樣依次進(jìn)行計(jì)算,從而實(shí)現(xiàn)全局的信息交互。這也使得自注意力模型在處理長序列時具有更高的效率。
在這個模型中,MatMul是矩陣乘法的操作。具體來說,MatMul將查詢矩陣Q與鍵矩陣K相乘,得到一個注意力分?jǐn)?shù)矩陣。這個注意力分?jǐn)?shù)矩陣表示了查詢與每個鍵之間的相關(guān)性或相似度,從而決定在注意力機(jī)制中分配多少注意力權(quán)重給每個鍵對應(yīng)的值(Value)。通過將注意力分?jǐn)?shù)矩陣與值矩陣V相乘,可以得到最終的注意力表示。
Scale是指對注意力分?jǐn)?shù)進(jìn)行縮放的操作。在計(jì)算注意力分?jǐn)?shù)時,通常會將點(diǎn)積的結(jié)果除以一個縮放因子,這個縮放因子是注意力機(jī)制中的一個超參數(shù)??s放的目的是為了控制注意力分?jǐn)?shù)的大小,使其更穩(wěn)定和可解釋。
具體來說,計(jì)算注意力分?jǐn)?shù)的公式為:Attention(Q, K) = softmax(QK^T / sqrt(d_k)) * V
其中,Q表示查詢(Query),K表示鍵(Key),V表示值(Value),d_k表示鍵的維度。在計(jì)算注意力分?jǐn)?shù)時,將點(diǎn)積結(jié)果除以sqrt(d_k)來進(jìn)行縮放。這個縮放因子可以使得注意力分?jǐn)?shù)的范圍更合適,避免了點(diǎn)積結(jié)果過大或過小的情況。
較大的縮放因子可以增加注意力分?jǐn)?shù)的范圍,使得模型更加關(guān)注不同位置之間的差異;較小的縮放因子可以減小注意力分?jǐn)?shù)的范圍,使得模型更加平均地分配注意力權(quán)重。
這種注意力機(jī)制不依賴于外部的上下文信息,而是通過內(nèi)部的自我關(guān)注來計(jì)算注意力權(quán)重。因此,它被稱為self-attention自注意力機(jī)制。
Mask是一種用于控制注意力機(jī)制的操作。它被用來屏蔽或限制模型在計(jì)算注意力分?jǐn)?shù)時對某些位置的關(guān)注。在自注意力模型中,常見的mask操作有兩種:padding mask和sequence mask。
- Padding mask(填充掩碼):在處理變長序列時,為了保持序列的長度一致,通常會在序列的末尾添加一些特殊的填充符號(如0)。Padding mask的作用是將這些填充符號對應(yīng)的位置的注意力分?jǐn)?shù)設(shè)為一個很小的值(如負(fù)無窮),從而使模型在計(jì)算注意力分?jǐn)?shù)時忽略這些padding符號。這樣可以避免填充的內(nèi)容對計(jì)算產(chǎn)生干擾。
- Sequence mask(序列掩碼):在某些任務(wù)中,為了避免模型在生成序列時看到未來的信息,需要對注意力分?jǐn)?shù)進(jìn)行掩碼操作。Sequence mask的作用是將當(dāng)前位置之后的位置的注意力分?jǐn)?shù)設(shè)為一個很小的值,從而使模型只能關(guān)注當(dāng)前位置之前的信息。這樣可以保證模型在生成序列時只依賴于已經(jīng)生成的部分,而不會受到未來信息的影響。
通過使用mask操作,自注意力模型可以更好地處理變長序列和生成任務(wù),并且能夠控制模型在計(jì)算注意力分?jǐn)?shù)時的關(guān)注范圍。不同的任務(wù)和應(yīng)用場景可能需要不同類型的mask操作。
比如在機(jī)器翻譯任務(wù)中,我們希望將一個源語言句子逐步翻譯成目標(biāo)語言句子。使用sequence mask可以確保模型只能依賴于之前已生成的部分,逐步生成目標(biāo)語言句子。
而在文本分類任務(wù)中,輸入的文本長度可能不一致。使用padding mask可以將填充部分的注意力權(quán)重設(shè)為0,忽略填充部分的影響,確保模型只關(guān)注真實(shí)的文本內(nèi)容。
演化
如今當(dāng)我們談?wù)揟ransformer時,其實(shí)是在談?wù)撘粋€大家族。2018年年初,AllenNLP發(fā)布了一個新模型ELMo。ELMo是一種比Word2vec更好的訓(xùn)練詞向量的模型。而之后的BERT、RoBERTa、XLNet、T5、ALBERT、GPT-3等模型從自然語言理解及自然語言生成等角度,不斷刷新自然語言處理領(lǐng)域任務(wù)的SotA(State of the Art)表現(xiàn)。
Transformer架構(gòu)也像其他AI新技術(shù)一樣,會不斷迭代和更新,如果你也對Transformer大家族感興趣,想進(jìn)入大模型開發(fā)這一熱門領(lǐng)域,那么通過學(xué)習(xí)一門靠譜的網(wǎng)課會是比較快的路徑。