1. 從全局角度概括Transformer
transformer的任務是什么?
進一步細化
進一步細化,注意:每個encoder結構相同,參數不同;decoder同理
原論文中的圖如下:
2.Encoder
2.1 輸入部分
(1)Embedding:
將輸入的離散符號(如單詞或字符)轉換為連續向量表示的關鍵步驟。
(2)位置編碼:
為什么需要位置編碼?
與遞歸神經網絡(RNN)和卷積神經網絡(CNN)不同,這些傳統模型天然地對輸入序列的順序敏感,因為它們通過連續處理或滑動窗口的方式處理數據。
然而,自注意力機制在計算時會同時考慮序列中所有元素之間的關系,這意味著它本身并不具備捕捉元素相對或絕對位置的能力。在原始的 Transformer 模型中,位置編碼是通過正弦和余弦函數來實現的。
2.2?注意力機制
詳細講解見下面博客
https://blog.csdn.net/WBingJ/article/details/144832299?spm=1001.2014.3001.5501
原因:傳統的序列到序列(Seq2Seq)模型使用一個固定大小的上下文向量來表示整個輸入序列,這在處理長序列時可能會導致信息丟失。注意力機制通過允許模型在每個時間步關注輸入序列的不同部分,解決了這一問題。
作用:允許模型在處理輸入序列時,能夠有選擇性地聚焦于最相關的部分,而不是對所有部分一視同仁
- 具體來說,自注意力機制通過計算查詢(Query)、鍵(Key)和值(Value)之間的相似度來生成注意力權重。
殘差
- 新的表示?z1z1??和?z2z2??通過殘差連接與原始輸入相加,并經過歸一化層。
- 歸一化后的結果再次進入前饋神經網絡。
為什么使用殘差:
- 緩解梯度消失/爆炸問題:在非常深的神經網絡中,隨著層數的增加,反向傳播過程中梯度會逐漸變小(梯度消失)或變得非常大(梯度爆炸)。這使得網絡難以收斂,甚至無法正常訓練。殘差連接通過引入直接路徑來傳遞信息,使得梯度可以更容易地從輸出層反向傳播到輸入層。
具體步驟
-
輸入向量 xx:
- 輸入向量?xx?是殘差塊的初始輸入。
-
前饋網絡 F(x)F(x):
- 輸入?x?通過第一個權重層和 ReLU 激活函數。
- 輸出再通過第二個權重層和 ReLU 激活函數。
-
殘差連接:
- 將原始輸入?x?與前饋網絡的輸出?z?相加
Layer Normalization
Layer Normalization 是一種用于深度學習模型中的正則化和加速訓練的技術,它通過歸一化每一層的輸入來穩定和加速神經網絡的訓練過程。與 Batch Normalization 不同,Layer Normalization 對每個樣本的所有特征進行歸一化,而不是在小批量(mini-batch)上對每個特征進行歸一化。
2.3 前饋神經網絡
3. Decoder
3.1 多頭注意力機制Mask
為什么需要mask:解碼器中的未來信息屏蔽,在解碼階段,模型不應該看到未來的詞,因為這會導致數據泄露,并且不符合實際應用情境。例如,在機器翻譯任務中,當翻譯一句話時,每個時刻只能基于之前的詞語來預測下一個詞。
3.2 交互層Cross Attention Layer
作用:交互層的核心是交叉注意力機制,它使得解碼器可以在生成每個輸出詞時參考編碼器的所有輸入。
- 查詢(Query):來自解碼器當前時間步的隱藏狀態。
- 鍵(Key)和值(Value):由編碼器生成的隱藏狀態提供。
- 計算注意力分布:通過計算查詢與所有鍵之間的相似度得分,并使用 Softmax 函數將其轉換為概率分布。然后,該分布用于對值進行加權求和,得到最終的上下文向量。