Transformer的幾個問題

2021-10-21 01:49:31 字數 2457 閱讀 7828

transformer是《attention is all you need》提出來的,結構如下所示:

講解transformer的文章很多,這裡不再重複,可以參考文獻1和文獻2

問題一:為什麼要除以d

k\sqrt

dk​​

?當d

kd_k

dk​增大時,意味著q和k之間的點乘操作會增加,只要qik

iq_ik_i

qi​ki​

稍微比其它值大一點,經過softmax之後絕大部分值就會變得很小,接近於0,使得其梯度很小。

我們假設q和k的分布均服從標準正太分布,即其均值為0,方差為1,當進行點乘操作後:

分布變成均值為0,方差為d

kd_k

dk​【利用均值和方差的性質即可推得】,當d

kd_k

dk​很大時,意味著q*k的方差就很大,分布會趨於陡峭(分布的方差大,分布就會集中在絕對值大的區域),就會使得softmax()之後使得值出現兩極分化的狀態。

做個簡單的實驗,d

kd_k

dk​分別取5和100時,隨機生成d

kd_k

dk​個服從標準正太分布的q和k,點乘後經過softmax函式,影象如下所示:

當d

kd_k

dk​=5時:

當d

kd_k

dk​=100時:

當我把d

kd_k

dk​=100,q和k點乘之後除以d

k\sqrt

dk​​

後,影象變成:

問題二:multi-head attention的作用

attention是將query和key對映到同一高維空間中去計算相似度,而對應的multi-head attention把query和key分成h個小序列分別對映到高維空間的不同子空間中去計算相似度,這樣的好處是在兩種方法的引數總量保持不變的情況下,attention在不同子空間有不同的分布,進行concat後使得attention層資訊多樣化,增加了attention的表達能力。

問題三:positional encoding

因為transformer是處理序列問題,沒有捕獲資料位置的能力,所以需要加上額外的位置資訊,這裡位置資訊可以是絕對位置也可以是相對位置,可以是可訓練的位置資訊也可以是不可訓練的位置資訊,在文中作者提出使用sin和cos來表示序列的相對位置資訊:

其中pos是位置,i是維度。

sin和cos是週期性的函式,且對任意的x值,函式值都是唯一確定的,當位置pos

pospo

s偏移了k個單位(記為pos

+kpos+k

pos+

k),pep

os+k

pe_pe

pos+

k​可以用pep

ospe_pe

pos​

的線性倍數表示。

問題四:layer normal和batch normal

假定輸入為[batch_size,channels,h,w]

batch normal如第一張圖所示,是針對小批次(batch_size)中所有樣本每乙個通道分別做計算均值和方差,然後再進行歸一化。batch normal和batch_size有關係,當batch_size較小時,對每個小批次進行歸一化不足以代表整個資料的分布情況,而且計算的均值方差等資訊需要額外的儲存空間,對於有著固定的深度的dnn和cnn來說比較適合。

layer normal如第二張圖所示,是對每乙個樣本計算均值和方差做歸一化,不依賴於batch_size的大小和輸入sequence的深度,比較適合rnn。【參考】

以上就是我在看transformer**時遇到的問題和自己的一些想法,如果有寫的不正確或者表達不清楚的請各位多指教。

幾個問題,別人問的

udp丟包,丟的是啥?rtp頭?udp頭?資料幀?還是完整包全丟?tcp和udp丟包的區別以及如何通過二進位制資料或者抓包檔案快速區別 udp丟包和tcp丟包的區別啊?udp丟包,丟的是rtp頭?udp頭?udp包?還是資料流?如何判斷丟包是否是由擁塞控制導致?還是包大小導致?udp如何做資料分頁 ...

Transformer的殘差連線

在學習transformer的過程中,編碼器和解碼器都用到了殘差連線,下面我總結一下殘差連線。假如我們的輸入為x,要得到的輸出為h x 那麼我們可以通過 h f x x,轉換為學習f。等得到f的輸出後,在此基礎上加上x即可得h的輸出。在transformer中,此時的f即是下圖中的multi hea...

Transformer的原理及框架

transformer是谷歌2017年發表的attention is all you need 中提到的seq2seq模型,我們常用的bert和gpt等都是基於transformer衍生的。本文主要參考了wmathor大佬的transformer 詳解和transformer 的 pytorch 實...