positional encoding位置编码详解:绝对位置与相对位置编码对比
目錄
前言
Why
What
絕對位置編碼
相對位置編碼
Sinusoidal Position Encoding
Complex embedding
How
前言
相信熟悉BERT的小伙伴對positional encoding(位置表示) 肯定都不會陌生~ 雖然positional encoding只是BERT中比較小的一個組成部分,但是實際上卻暗藏玄機(jī)。所以,今天呢我們就把positional encoding單獨拎出來對其進(jìn)行一個全面的剖析~~
-
Why?為什么需要positional encoding
-
What?兩種positional encoding方式:絕對位置編碼與相對位置編碼
-
How?不同方法優(yōu)缺點對比
Why
眾所周知,文本是時序型數(shù)據(jù),詞與詞之間的順序關(guān)系往往影響整個句子的含義。舉個栗子:
小夕/是/一個/萌/妹子。一個/妹子/是/萌/小夕??萌/小夕/是/一個/妹子??
為了避免不必要的誤會,所以我們在對文本數(shù)據(jù)進(jìn)行建模的時候需要考慮詞與詞之間的順序關(guān)系。
可是,要建模文本中的順序關(guān)系必須要用positional encoding嗎?
答案是No!
只有當(dāng)我們使用對位置不敏感(position-insensitive)的模型對文本數(shù)據(jù)建模的時候,才需要額外使用positional encoding。
什么是對位置敏感的模型??什么又是對位置不敏感的模型??
如果模型的輸出會隨著輸入文本數(shù)據(jù)順序的變化而變化,那么這個模型就是關(guān)于位置敏感的,反之則是位置不敏感的。
用更清晰的數(shù)學(xué)語言來解釋。設(shè)模型為函數(shù),其中輸入為一個詞序列,輸出結(jié)果為向量。對的任意置換,都有
則模型是關(guān)于位置不敏感的。
在我們常用的文本模型中,RNN和textCNN都是關(guān)于位置敏感的,使用它們對文本數(shù)據(jù)建模時,模型結(jié)構(gòu)天然考慮了文本中詞與詞之間的順序關(guān)系。而以attention為核心的transformer則是位置不敏感的,使用這一類位置不敏感的模型的時候需要額外加入positional encoding引入文本中詞與詞的順序關(guān)系。
What
對于transformer模型的positional encoding有兩種主流方式:
絕對位置編碼
現(xiàn)在普遍使用的一種方法Learned Positional Embedding編碼絕對位置,相對簡單也很容易理解。直接對不同的位置隨機(jī)初始化一個postion embedding,加到word embedding上輸入模型,作為參數(shù)進(jìn)行訓(xùn)練。
相對位置編碼
使用絕對位置編碼,不同位置對應(yīng)的positional embedding固然不同,但是位置1和位置2的距離比位置3和位置10的距離更近,位置1和位置2與位置3和位置4都只相差1,這些關(guān)于位置的相對含義模型能夠通過絕對位置編碼get到嗎?使用Learned Positional Embedding編碼,位置之間沒有約束關(guān)系,我們只能期待它隱式地學(xué)到,是否有更合理的方法能夠顯示的讓模型理解位置的相對關(guān)系呢?
所以就有了另一種更直觀地方法——相對位置編碼。下面介紹兩種編碼相對位置的方法:Sinusoidal Position Encoding和Complex embedding。
Sinusoidal Position Encoding
使用正余弦函數(shù)表示絕對位置,通過兩者乘積得到相對位置:
這樣設(shè)計的好處是位置的psotional encoding可以被位置線性表示,反應(yīng)其相對位置關(guān)系。
Sinusoidal Position Encoding雖然看起來很復(fù)雜,但是證明可以被線性表示,只需要用到高中的正弦余弦公式:(注意:長公式可以左右滑動噢!)
對于位置的positional encoding
其中
將公式(5)(6)稍作調(diào)整,就有
注意啦,和相對距離是常數(shù),所以有
其中為常數(shù)。
所以可以被線性表示。
計算和的內(nèi)積,有
其中.
和的內(nèi)積會隨著相對位置的遞增而減小,從而表征位置的相對距離。但是不難發(fā)現(xiàn),由于距離的對稱性,Sinusoidal Position Encoding雖然能夠反映相對位置的距離關(guān)系,但是無法區(qū)分方向/(ㄒoㄒ)/~~
更加直觀的對其可視化[1],可以看到圖像關(guān)于對稱,無法區(qū)分前后關(guān)系。
Complex embedding
為了更好的讓模型捕獲更精確的相對位置關(guān)系,比如相鄰,前序(precedence)等,ICLR 2020發(fā)表的文章《Encoding Word Oder In Complex Embeddings》使用了復(fù)數(shù)域的連續(xù)函數(shù)來編碼詞在不同位置的表示。
不管是Learned Postional Embdedding還是Sinusoidal Position Encoding,某個詞在位置上的表示為其word embedding加上對應(yīng)位置的embedding,即:
同word embedding 都是從整數(shù)域到實數(shù)域的一個映射。
對于word embedding來說,這樣的設(shè)計是合理的。因為不同詞的index是獨立的,僅和我們具體使用的詞典怎么排序有關(guān)系,某個詞是否在另外一個詞前面或者相鄰沒有任何的信息。但是位置的index并不是滿足獨立的假設(shè),其順序關(guān)系對文本的正確理解有非常重要的影響。
所以,為了解決pos index的依賴問題(position-insensitive problem),文章使用了關(guān)于位置的連續(xù)函數(shù)來表征詞在的表示,即:
把公式(13)展開有
其中是關(guān)于位置在復(fù)數(shù)域上的函數(shù)。
為了讓上述函數(shù)更好的表征位置的相對信息,要求函數(shù)滿足以下兩個性質(zhì):
Position-free offset transformation
存在一個函數(shù) 使得
其中在不影響理解的情況下,我們把簡寫成。也就是說,詞在pos或者pos+k的表示可以由只和相對位置k有關(guān)的一個變換得到,而與具體這個詞無關(guān)。
Boundedness
要求函數(shù)有界。非常合理的一個限制。
最后,論文證明了在復(fù)數(shù)域上滿足這個兩個條件的函數(shù)一定為下面這樣的形式:
將其改寫成指數(shù)的形式,則為
其中,為振幅,為角頻率,為初相,都是需要學(xué)習(xí)的參數(shù)~~
將式(17)代入(14)有
要表征詞在pos上的embedding,需要學(xué)習(xí)的參數(shù)有, 以及。以此類推,要表示詞表中所有的詞,那么需要學(xué)習(xí)的參數(shù)量為????.由于參數(shù)量較大,論文后續(xù)還提出了一些減小參數(shù)量的方法,有興趣的同學(xué)可以看具體查閱原文哦~~~
How
以上三種positional encoding都不同程度、各有側(cè)重的編碼了文本數(shù)據(jù)中的順序關(guān)系,那么到底哪個更好?我們在平時使用的時候應(yīng)該如何選擇呢?
結(jié)果導(dǎo)向的話,肯定是哪種方法效果好選哪種啦~~在《Attention is all you need》[2]里面提到,Learned Positional Embedding和Sinusoidal Position Encoding兩種方式的效果沒有明顯的差別。在論文[3],實驗結(jié)果表明使用Complex embedding相較前兩種方法有較明顯的提升。(不過介于這個方法還比較新,大家可以多多嘗試對比)。
從方法的可理解性上,相比相對位置編碼的兩種方法,Learned Positional Embedding更加的簡單直接,易于理解。從參數(shù)維度上,使用Sinusoidal Position Encoding不會引入額外參數(shù),Learned Positional Embedding增加的參數(shù)量會隨線性增長,而Complex Embedding在不做優(yōu)化的情況下,會增加三倍word embedding的參數(shù)量。在可擴(kuò)展性上,Learned Positional Embedding可擴(kuò)展性較差,只能表征在以內(nèi)的位置,而另外兩種方法沒有這樣的限制,可擴(kuò)展性更強(qiáng)。
講了這么多,相信大家對positional encoding已經(jīng)有了充分的理解~~至于到底應(yīng)該如何選擇,還是需要基于大家對方法的理解實際問題實際分析哦????
?
參考文獻(xiàn)
[1] 可視化: https://kazemnejad.com/blog/transformer_architecture_positional_encoding/#what-is-positional-encoding-and-why-do-we-need-it-in-the-first-place[2] Attention is all you need: https://arxiv.org/pdf/1706.03762.pdf
[3] Complex Embeddings: https://openreview.net/pdf?id=Hke-WTVtwr
?
?
總結(jié)
以上是生活随笔為你收集整理的positional encoding位置编码详解:绝对位置与相对位置编码对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不是所有问题都适合用神经网络去搞!
- 下一篇: 抓住训练集中真正有用的样本,提升模型整体