成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Transformer中位置編碼Positional Encoding

發布于 2024-8-26 01:26
瀏覽
0收藏

提到 Transformer,大家就會聯想到位置編碼、注意力機制、編碼器-解碼器結構,本系列教程將探索 Transformer 的不同模塊在故障診斷等信號分類任務中扮演什么樣角色,到底哪些模塊起作用?

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

前言

本期基于凱斯西儲大學(CWRU)軸承數據,進行 Transformer 中位置編碼 (Positional Encoding)的詳細介紹,同時探索位置編碼對故障分類任務的影響力。

1 位置編碼相關介紹

1.1 數據中的順序信息

在任何一門語言中,詞語的位置和順序對句子意思表達都是至關重要的。傳統的循環神經網絡(RNN)中,模型是逐詞處理輸入序列的,每個時刻的輸出依賴于前一個時刻的輸出。這種逐序處理的方式使得RNN天生適合處理序列數據,因為它能夠隱式地保留序列中詞語的順序信息。

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

由于Transformer模型沒有RNN(循環神經網絡)或CNN(卷積神經網絡)結構,句子中的詞語都是同時進入網絡進行處理,所以沒有明確的關于單詞在源句子中位置的相對或絕對的信息。為了讓模型理解序列中每個單詞的位置(順序),Transformer論文中提出了使用一種叫做 Positional Encoding(位置編碼) 的技術。這種技術通過為每個單詞添加一個額外的編碼來表示它在序列中的位置,這樣模型就能夠理解單詞在序列中的相對位置。

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

1.2 位置編碼的概念

RNN作為特征提取器,是自帶詞的前后順序信息的;而Attention機制并沒有考慮先后順序信息,但前后順序信息對語義影響很大,因此需要通過Positional Embedding這種方式把前后位置信息加在輸入的Embedding上。

一句話概括,Positional Encoding就是將位置信息添加(嵌入)到Embedding詞向量中,讓Transformer保留詞向量的位置信息,可以提高模型對序列的理解能力。

1.3 位置編碼分類

對于transformer模型的positional encoding有兩種主流方式:

(1)絕對位置編碼:

Learned Positional Embedding方法是最普遍的絕對位置編碼方法,該方法直接對不同的位置隨機初始化一個 postion embedding,加到 word embedding 上輸入模型,作為參數進行訓練。

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

(2)相對位置編碼

使用絕對位置編碼,不同位置對應的 positional embedding 固然不同,但是位置1和位置2的距離比位置3和位置10的距離更近,位置1和位置2、位置3和位置4都只相差1,這些體現了相對位置編碼。

常用的相對位置編碼方法有Sinusoidal Positional Encoding 和 Learned Positional Encoding。其中,Sinusoidal Positional Encoding 是通過將正弦和余弦函數的不同頻率應用于輸入序列的位置來計算位置編碼;Learned Positional Encoding 是通過學習一組可學習參數來計算位置編碼。

(3)復雜編碼-Complex embedding

在《Attention is all you need》里提到,Learned Positional Embedding和Sinusoidal Position Encoding兩種方式的效果沒有明顯的差別。在論文 《Encoding Word Oder In Complex Embeddings》,實驗結果表明使用Complex embedding相較前兩種方法有較明顯的提升。

1.4 位置向量與詞向量

一般來說,可以使用向量拼接或者相加的方式,將位置向量和詞向量相結合。相當于做了輸入數據和位置信息數據的矩陣疊加!

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

這里,input_embedding 是通過常規Embedding層,將每一個token的向量維度,也就是輸入維度,從數據本身的維度映射到 d_model。由于是相加關系,則 positional_encoding 也是一個 d_model 維度的向量。(原論文中,d_model=512)

關于這個 d_model:

在深度學習和Transformer模型的上下文中,d_model中的“d”通常代表“dimension”,即“維度”的簡寫。因此,d_model指的是模型中向量的維度大小,這是一個關鍵的參數,d_model 定義了每層的大小、嵌入層的大小、自注意力機制的大小、前饋網絡的輸入和輸出大小。

  選擇合適的d_model對模型的性能有重大影響。如果d_model太小,模型可能無法捕捉到足夠的信息;而如果d_model太大,則會增加計算成本和過擬合的風險。因此,在設計模型時需要仔細考量d_model的大小。

2 位置編碼原理

2.1 原理解析

Transformer論文中,使用正余弦函數表示絕對位置,通過兩者乘積得到相對位置。因為正余弦函數具有周期性,可以很好地表示序列中單詞的相對位置。我們以Sinusoidal Positional Encoding為例,進行講解。

首先解釋下論文中的公式,并給出對應代碼,Positional Encoding 的公式如下:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

對應代碼實現如下:

class PositionalEncoding(nn.Module):
    "Implement the PE function."
    def __init__(self, d_model, dropout, max_len=5000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(p=dropout)
        
        # Compute the positional encodings once in log space.
        pe = torch.zeros(max_len, d_model)
        position = torch.arange(0, max_len).unsqueeze(1)
        div_term = torch.exp(torch.arange(0, d_model, 2) *
                             -(math.log(10000.0) / d_model))
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        pe = pe.unsqueeze(0)
        self.register_buffer('pe', pe)
        
    def forward(self, x):
        x = x + Variable(self.pe[:, :x.size(1)], 
                         requires_grad=False)
        return self.dropout(x)

從公式中可以看出,一個詞語的位置編碼是由不同頻率的余弦函數組成的,這樣設計的好處是:pos+k 位置的 positional encoding 可以被 pos 線性表示,體現其相對位置關系。雖然 Sinusoidal Position Encoding 看起來很復雜,但是證明 pos+k 可以被 pos 線性表示,只需要用到高中的正弦余弦公式:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

對于 pos+k 的 positional encoding:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

可以看出,對于 pos+k 位置的位置向量某一維 2?? 或 2??+1 而言,可以表示為,pos 位置與 k 位置的位置向量的2?? 與 2??+1維的線性組合,這樣的線性組合意味著位置向量中蘊含了相對位置信息。

2.2 通俗理解

最簡單直觀的加入位置信息的方式就是使用1,2,3,4,…直接對句子進行位置編碼(one-hot)。用二進制轉化舉個例子:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

圖中維度0,維度1,維度2,維度3拼成的數字就是該位置對應的二進制表示。可以看到每個維度(每一列)其實都是有周期的,并且周期是不同的。具體來說,每個比特位的變化率都是不一樣的,越低位的變化越快(越往右邊走,變化頻率越快),紅色位置0和1每個數字會變化一次,而黃色位,每8個數字才會變化一次。這樣就能夠說明使用多個周期不同的周期函數組成的多維度編碼和遞增序列編碼其實是可以等價的。這也回答了為什么周期函數能夠引入位置信息。

最后,我們需要將位置向量與詞向量相結合。一般來說,可以使用向量拼接或直接相加的方式將二者結合起來。下面我們結合軸承故障數據進行實驗講解:

3 軸承故障數據的預處理

3.1 導入數據

參考之前的文章,進行故障10分類的預處理,凱斯西儲大學軸承數據10分類數據集:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

train_set、val_set、test_set 均為按照7:2:1劃分訓練集、驗證集、測試集,最后保存數據

3.2 故障數據預處理與數據集制作

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

4 加入位置編碼和 input_embedding 的實驗對比

4.1 定義位置編碼PositionalEncoding 和 input_embedding

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

對比模型為:

  • 模型 A :Transformer 編碼器層 
  • 模型 B :Transformer 編碼器層  +  input_embedding -PositionalEncoding 

4.2 西儲大學十分類數據集實驗對比

(1)模型 A:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

模型評估:

準確率、精確率、召回率、F1 Score

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

(2)模型 B:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

模型評估:

準確率、精確率、召回率、F1 Score

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

4.3 東南大學齒輪箱軸承故障-五分類數據集實驗對比

(1)模型 A:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

模型評估:

準確率、精確率、召回率、F1 Score

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

(2)模型 B:

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

模型評估:

準確率、精確率、召回率、F1 Score

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

5 實驗對比結果分析

 詳解Transformer中位置編碼Positional Encoding-AI.x社區

通過兩個數據集的對比實驗,我們可以發現,僅用Transformer 編碼器層在故障信號分類任務上取得了不錯的效果,但是加入輸入編碼和位置編碼后,分類效果反而下降了,證明位置編碼在故障信號分類任務上作用并不是特別明顯!下一期我們將進一步討論 Transformer 中哪些核心模塊對分類精度起著重要作用。

本文轉載自 ??建模先鋒??,作者: 小蝸愛建模



收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 国产欧美精品一区二区 | 午夜在线小视频 | 在线观看免费观看在线91 | av在线一区二区三区 | 日韩欧美亚洲 | 91色视频在线观看 | 国产精品美女久久久久久久网站 | 日韩成人一区 | 91成人在线| 日本特黄a级高清免费大片 特黄色一级毛片 | 日韩羞羞 | 免费亚洲成人 | 亚洲成人免费视频在线观看 | 国产区一区| 日日操夜夜操天天操 | 婷婷久久综合 | 精品国产区 | 99国内精品久久久久久久 | 中文字幕二区三区 | 天天看夜夜 | 在线视频一区二区三区 | 欧美激情欧美激情在线五月 | 成人夜晚看av| 91国内视频在线 | 国产福利视频网站 | 九九免费视频 | 欧美一区二区三区在线视频 | 999www视频免费观看 | 日韩一区二区三区四区五区六区 | 精品欧美一区二区在线观看 | 不卡一区| 欧美99久久精品乱码影视 | 午夜视频在线观看网站 | 九九导航 | 一级欧美| 91精品国产乱码久久久久久 | 91精品久久久久久久久久入口 | 国产高清免费 | 日韩不卡在线 | 亚洲免费视频在线观看 | 欧美综合国产精品久久丁香 |