快速學(xué)會一個算法,Transformer
大家好,我是小寒
今天給大家分享一個強大的算法模型,Transformer
Transformer 是近年來在自然語言處理(NLP)領(lǐng)域取得顯著成果的一種深度學(xué)習(xí)模型,最初由 Vaswani et al. 在 2017 年提出。
與傳統(tǒng)的序列模型(如 RNN 和 LSTM)相比,Transformer 的主要優(yōu)勢在于其能夠更好地處理長距離依賴關(guān)系,同時顯著提高了計算效率。
Transformer 架構(gòu)
Transformer 模型的核心由編碼器(Encoder)和解碼器(Decoder)兩部分組成,每部分由多個相同的層(Layer)堆疊而成。
圖片
編碼器
編碼器部分由六個相同的層(來自原始論文)堆疊而成,每層分為 2 個子層。
- 多頭自注意力機制
通過計算輸入序列中每個位置與其他位置之間的注意力權(quán)重,來捕捉序列中的長距離依賴關(guān)系。 - 前饋神經(jīng)網(wǎng)絡(luò)
對每個位置的表示進(jìn)行進(jìn)一步的非線性變換。
每個子層后面都緊跟著一個殘差連接(Residual Connection)和層歸一化(Layer Normalization)。
圖片
下面,我們來對編碼器的組件進(jìn)行詳細(xì)的描述。
- 詞向量
原始形式的單詞對機器來說毫無意義。
詞向量是將離散的詞表示成連續(xù)的向量,以捕捉詞與詞之間的語義關(guān)系。
詞向量通過嵌入層(Embedding Layer)實現(xiàn),將每個詞映射到一個高維的向量空間中。
這使得模型可以處理輸入序列中的詞,并在訓(xùn)練過程中學(xué)習(xí)詞與詞之間的語義關(guān)系。
圖片
- 位置編碼
由于 Transformer 不像 RNN 那樣具有順序信息,因此需要顯式地將位置信息加入到輸入中。
位置編碼通過將每個位置映射到一個向量,提供了詞在序列中的位置信息。
常見的方法是使用正弦和余弦函數(shù)來生成位置編碼。
其中,pos 是位置,i 是維度索引,d 是嵌入維度。位置編碼將被添加到詞向量中,使得每個詞的表示包含了位置信息。
圖片
- 自注意力
自注意力機制是 Transformer 的核心組件,它通過計算輸入序列中每個位置與其他位置之間的注意力權(quán)重,來捕捉序列中的長距離依賴關(guān)系。
具體步驟如下:
- 查詢(Query)、鍵(Key)、值(Value)向量通過線性變換得到查詢、鍵和值向量。
圖片
- 注意力權(quán)重
通過查詢和鍵向量的點積計算注意力權(quán)重,然后應(yīng)用 softmax 函數(shù)。 - 加權(quán)和
利用注意力權(quán)重對值向量進(jìn)行加權(quán)求和。
- 殘差連接和層歸一化
殘差連接和層歸一化用于穩(wěn)定訓(xùn)練過程,并加速模型的收斂。
殘差連接將子層的輸入直接添加到輸出中,使得每一層都可以直接訪問輸入信號。
層歸一化則對每一層的輸出進(jìn)行標(biāo)準(zhǔn)化,減少內(nèi)部協(xié)變量偏移。 - 前饋層
前饋層是一個簡單的兩層全連接神經(jīng)網(wǎng)絡(luò),用于對每個位置的表示進(jìn)行進(jìn)一步的非線性變換。
它在每個位置上獨立操作,不共享參數(shù)。 - 輸出
編碼器的輸出是一個大小為 (N, T, d) 的張量,其中每個位置的向量表示是經(jīng)過多層編碼器后的最終表示。
這些表示將被傳遞到解碼器或用于下游任務(wù)(如分類、翻譯等)。
解碼器
解碼器層除了包含與編碼器層相同的兩個子層外,還額外包含一個用于處理編碼器輸出與解碼器輸入之間關(guān)系的多頭注意力機制。
具體來說,解碼器層包括以下三個子層:
- Masked 多頭自注意力子層(Masked Multi-Head Self-Attention Sub-layer)
- 編碼器-解碼器注意力子層(Encoder-Decoder Multi-Head Attention Sub-layer)
- 前饋神經(jīng)網(wǎng)絡(luò)
同樣,每個子層后面都有殘差連接和層歸一化。
圖片
- Masked 多頭自注意力子層
在標(biāo)準(zhǔn)的多頭注意力機制中,每個位置的查詢(Query)會與所有位置的鍵(Key)進(jìn)行點積計算,得到注意力分?jǐn)?shù),然后與值(Value)加權(quán)求和,生成最終的輸出。
然而,在解碼器中,生成序列時不能訪問未來的信息。因此需要使用掩碼(Mask)機制來屏蔽掉未來位置的信息,防止信息泄露。
具體來說,在計算注意力得分時,對未來的位置進(jìn)行屏蔽,將這些位置的得分設(shè)為負(fù)無窮大,使得 Softmax 歸一化后的權(quán)重為零。
圖片
- 編碼器-解碼器注意力子層
編碼器-解碼器多頭注意力子層在 Transformer 解碼器中起到了關(guān)鍵作用,它使解碼器能夠有效地關(guān)注輸入序列(編碼器的輸出),從而在生成序列時參考原始輸入信息。
具體來說,編碼器-解碼器多頭注意力的基本思想是通過對編碼器輸出(Key 和 Value)和解碼器當(dāng)前輸入(Query)來生成新的表示。
這種機制使得解碼器能夠在生成序列時動態(tài)地選擇性關(guān)注輸入序列的不同部分。
圖片
- 前饋神經(jīng)網(wǎng)絡(luò)子層
這是一個完全連接的前饋神經(jīng)網(wǎng)絡(luò),通常由兩個線性變換和一個ReLU激活函數(shù)組成。
它在每個位置上獨立地應(yīng)用相同的網(wǎng)絡(luò),處理每個位置的表示。