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