Transformer隨感之位置編碼

位置編碼

? ? ? ? 很多網(wǎng)友在討論transfromer的self-attention模塊中位置編碼缺失問題時攒岛,一般會優(yōu)先拋出CNN和RNN是位置敏感的這一論述耍属,不過一般很少細(xì)說态鳖;我們先來看看Transofmer的位置編碼迁酸,然后再對比一下CNN和RNN院塞。

注:除了原論文中的公式函卒,以下內(nèi)容純屬個人推導(dǎo),僅供相互討論钉稍。

為什么Transformer需要顯式添加位置編碼配深?

圖(1)簡單畫了關(guān)于輸入“A”的self-attention過程

? ? ? ? 先來看看,如果拋棄RNN特征提取層嫁盲,而僅使用attention層篓叶,會發(fā)生什么烈掠,上面圖(1)對應(yīng)的公式如下:

\begin{aligned}&[q_A,q_B, q_C] = Q[x_A, x_B, x_C] \\&[k_A,k_B, k_C] = K[x_A, x_B, x_C]\\&[v_A,v_B, v_C] = V[x_A, x_B, x_C]\\& [\hat{\alpha}_{AA}, \hat{\alpha}_{AB},\hat{\alpha}_{AC}]  = q_A^T[k_A, k_B, k_C] \\&[\alpha_{AA} , \alpha_{AB} ,\alpha_{AC} ]= {\rm softmax}[\hat{\alpha}_{AA}, \hat{\alpha}_{AB},\hat{\alpha}_{AC}] \\&att_A = \alpha_{AA}v_A + \alpha_{AB}v_B +\alpha_{AC}v_C\\ \end{aligned}

????????下面我們繼續(xù)分析,在計算A的attention向量時缸托,當(dāng)我們將上下文中的B和C的順序互換時會有:

\begin{aligned}&[q_A,q_C, q_B] = Q[x_A, x_C, x_B] \\&[k_A,k_C, k_B] = K[x_A, x_C, x_B]\\&[v_A,v_C, v_B] = V[x_A, x_C, x_B]\\& [\hat{\alpha}_{AA}, \hat{\alpha}_{AC},\hat{\alpha}_{AB}]  = q_A^T[k_A, k_C, k_B] \\&[\alpha_{AA} , \alpha_{AC} ,\alpha_{AB} ]= {\rm softmax}[\hat{\alpha}_{AA}, \hat{\alpha}_{AC},\hat{\alpha}_{AB}] \\&att_A^{\prime} = \alpha_{AA}v_A + \alpha_{AC}v_C +\alpha_{AB}v_B\\ \end{aligned}

????????顯然左敌,由向量空間的加法交換律,有:

att_A = \alpha_{AA}v_A + \alpha_{AB}v_B +\alpha_{AC}v_C =  \alpha_{AA}v_A +\alpha_{AC}v_C+ \alpha_{AB}v_B  = att_A^{\prime}

????????因此俐镐,在我們計算A的attention向量時矫限,改變上下文的順序,并不會對A的結(jié)果有任何改變佩抹;而這顯然是不合理的叼风,在文本數(shù)據(jù)中,交換兩個詞語棍苹,會使得語義截然不同无宿。

? ? ? ? 另外,transformer中使用的是pointwise-feed-forward-network枢里,意思是每個數(shù)據(jù)幀孽鸡,單獨使用該全連接層進(jìn)行變換;所以栏豺,經(jīng)過FC層的各個數(shù)據(jù)彬碱,仍然保持位置不敏感性,我想這就是作者強(qiáng)調(diào)pointwise的用意奥洼,而并不是為了起個花哨的名字巷疼。


Transformer是如何進(jìn)行位置編碼的?

? ? ? ? 原論文中使用的是sin灵奖、cos函數(shù)構(gòu)造的位置編碼嚼沿,加到詞向量中去,我簡單查了一些網(wǎng)頁桑寨,它們都使用\rm sin(\alpha + \beta) = sin(\alpha) cos(\beta) + cos(\alpha)sin(\beta)來解釋位置編碼伏尼,不過對我來說忿檩,還是覺得比較模糊尉尾;下面我說說自己的理解,我們從最基本的公式入手燥透,看看會得到什么沙咏。

沒有加入位置編碼時:

\begin{aligned}&q_x^Tk_y = (Qx)^{T}(Ky) = x^T(Q^TK)y = x^TGy\end{aligned}

受內(nèi)積運算啟發(fā),我們先引入符號<x, y>_G \equiv x^TGy班套,當(dāng)G是對稱正定陣時肢藐,即構(gòu)成度量陣,這顯然構(gòu)成了合法的{\mathbb R}^{N}中的內(nèi)積吱韭,顯然這里的Q^TK一般不滿足對稱正定性吆豹,不過我還是打算這樣來使用鱼的,用來"度量"兩個向量的相關(guān)性。

設(shè)此時x,y的下標(biāo)索引分別是n和m痘煤,位置編碼分別是p_n,p_m凑阶,則加入位置編碼后,由雙線性性有:

\begin{aligned}&_G \\=&_G +_G +_G+_G \end{aligned}

其中:

????????第一項< x, y>_G顯然是度量兩個輸入詞向量之間的關(guān)于語言的相關(guān)性衷快;

????????第二宙橱、三項< x, p_m>_G +_G分別度量了輸入向量x到絕對位置m的相關(guān)性,和向量y關(guān)于絕對位置n的相關(guān)性蘸拔;

? ? ? ? 第四項< p_n, p_m>_G 度量了絕對位置n和絕對位置m之間的相關(guān)性师郑,這是一個很重要的點,它可以用來度量“相對距離”的遠(yuǎn)近调窍,因為相對距離更適合學(xué)習(xí)和泛化宝冕。經(jīng)驗證,發(fā)現(xiàn)作者使用的位置編碼在標(biāo)準(zhǔn)內(nèi)積下的Gram矩陣如下(這里只使用了5x5):

(<p_m, p_n>)_{5\times 5}= \begin{bmatrix}  256.00, &249.10,& 231.73, &211.75, &196.69 \\  249.10, &256.00,& 249.10,& 231.73&, 211.75 \\  231.73,& 249.10,& 256.00, &249.10,& 231.73\\211.75,& 231.73,& 249.10,& 256.00,& 249.10 \\196.68,& 211.75,& 231.73,& 249.10,& 256.00 \end{bmatrix}

? ? ? ? 可以看到主對角線是最大的陨晶,離當(dāng)前位置的距離越大猬仁,相關(guān)度越小先誉;在模型中實際使用的是變換后的Gram矩陣(<p_m, p_n>_G)_{N\times N}湿刽,若繼續(xù)保持上面矩陣中的趨勢,則我們認(rèn)為作者使用的位置編碼PE矩陣褐耳,的確編碼了相對距離到模型中去诈闺。

? ? ? ? 為什么要使用這樣的編碼呢?先看看原論文中使用的公式:

\begin{aligned}
&\rm {pos\_enc}(pos, 2i) = \sin(\frac{pos}{ 10000^{2i/d}})\\
&\rm {pos\_enc}(pos, 2i+1) = \cos(\frac{pos}{ 10000^{2i/d}})

\end{aligned}

其中:d,i,pos分別表示向量維度铃芦,詞向量某個維度的索引雅镊,詞向量的位置索引。

????????咋一看刃滓,這似乎內(nèi)藏著很深的玄機(jī)仁烹,根本就想不通為什么這樣設(shè)計,似乎也沒什么道理咧虎;一開始卓缰,我想通過積分來驗證對 \sin(\frac{p}{ x }),  \cos(\frac{p}{ x })的采樣 \sin(\frac{pos}{ 10000^{2i/d}}), \cos(\frac{pos}{ 10000^{2i/d}}),都有(<p_m, p_n>)_{N\times N}近似滿足度量矩陣的性質(zhì)砰诵。所以我想看看<\sin(\frac{p}{x}), \cos(\frac{q}{x})> = \int \sin(\frac{p}{x}) \cos(\frac{q}{x}) {\rm d}x征唬,畢業(yè)多年,對這樣的積分茁彭,還是懵逼了总寒;不過一番查閱下來,發(fā)現(xiàn)可以通過泰勒展開理肺,然后積分成一個級數(shù)表達(dá)式摄闸;也就是并沒有簡單的解析表達(dá)式善镰,所以想全面地分析作者給出的公式,還是很困難年枕。

? ? ? ? 也有可能媳禁,作者就是想找到一個函數(shù)列{\psi_1,\psi_2,\psi_3,...,\psi_n,... },使得對于任意\psi_n都有<\psi_n, \psi_{n-k}>隨著|k|的增大而減小画切,從而達(dá)到“越久遠(yuǎn)的信息越不相關(guān)”這一目的即可竣稽;另外就是在實際中神經(jīng)網(wǎng)絡(luò)的背景下,最好保持函數(shù)在類似[-1,1]這樣的小區(qū)間霍弹,所以作者提出的函數(shù)的確滿足需求毫别。至少目前,我自己驗證過的maxlen和d_model的都嚴(yán)格滿足條件典格。

? ? ? ? 不過岛宦,作者提出的這個函數(shù)列,有個現(xiàn)象(如下圖)所示耍缴;這是某個pos上的位置編碼的函數(shù)圖像砾肺,根據(jù)函數(shù)\sin(1/x)的性質(zhì),可知當(dāng)x\to 0時防嗡,震動的越厲害变汪。也就是在不同的維度,位置編碼的行為是相差甚遠(yuǎn)的蚁趁,加上這種非一致性的劇烈震動裙盾,這可能導(dǎo)致權(quán)重矩陣Q,K,V的學(xué)習(xí)有負(fù)擔(dān),畢竟位置編碼被加到詞向量上去他嫡,而詞向量維度之間應(yīng)該不會有如此強(qiáng)烈的震動番官,另外就是我認(rèn)為神經(jīng)網(wǎng)絡(luò)對于學(xué)習(xí)這種畸形的函數(shù)是比較困難的。

圖(2)钢属,對于某個pos對應(yīng)的pos_enc的偶數(shù)維度

? ? ? ? 所以徘熔,這是個好的位置編碼函數(shù)族嗎?至少我對這種維度之間非一致性的編碼還是抱有一點的懷疑淆党。不過酷师,說到sin和cos函數(shù),這讓我聯(lián)想到傅立葉級數(shù)中的正交函數(shù)系\{1, \cos(nx), \sin(nx)\}_{n=1}^{+\infty}宁否,不過在那里討論的都是函數(shù)的正交關(guān)系(也就是不相關(guān)性)窒升;而這里要討論的是函數(shù)(編碼向量)之間的相關(guān)性缀遍,并且具有:a)相關(guān)度具有單調(diào)性慕匠,b)函數(shù)有界性。

? ??????我覺得普通的正弦波就有很好的性質(zhì)域醇;所以台谊,我嘗試著使用sinusoid函數(shù)系來滿足上面的條件蓉媳,但是我想要加上一個性質(zhì),就是維度之間的震動規(guī)律保持一致性锅铅。

? ? ? ? 由于<\sin(nx), \sin(mx)> = 0 \quad ; n\neq m酪呻,于是,我需要在很小的范圍內(nèi)找出一列函數(shù)盐须,使得它們滿足條件a)和b)玩荠,條件a)似乎不那么好滿足;我試著按照作者的公式贼邓,在角頻率\omega \in [0, 1]的范圍內(nèi)找合適的函數(shù)列\{\sin(\omega_1x), \sin(\omega_2x),...\}都沒有成功阶冈。

? ? ? ? 不過,我突然想起來塑径,按照函數(shù)的auto-correlation女坑,把周期函數(shù)沿著坐標(biāo)軸滑動時,函數(shù)的自相關(guān)不正是在周期點處最大嗎统舀?所以匆骗,我想到了只通過改變相位來改變相關(guān)度(但是只能在很小的范圍內(nèi)滑動),得到了下面的數(shù)據(jù):

(<p_m, p_n>)_{5\times 5}= \begin{bmatrix}  

2.456 & 2.348 &2.147&1.860& 1.499\\
2.348& 2.344& 2.247 &2.060 &1.790 \\
2.147 &2.247 &2.257 &2.177& 2.011 \\
1.860 &2.060& 2.177& 2.208 &2.151\\
1.499& 1.790 & 2.011 & 2.151& 2.205\\

 \end{bmatrix}

我用的公式為:\sin(2*pos+0.2*i)誉简,再次碉就,這個式子也是沒什么道理的,是我隨便捏出來的闷串;應(yīng)該要多調(diào)才能用铝噩;可惜目前手上沒有可以訓(xùn)練大模型的機(jī)器,無法驗證想法窿克,不管對錯骏庸,后面有機(jī)會再說吧。

? ? ? ? 另外年叮,對于展開式中的2具被,3兩項< x, p_m>_G +_G,到底扮演著什么角色只损,似乎不太清晰一姿。p_n,p_m是絕對位置n和m處的位置編碼,而x,y是詞向量:

1)首先跃惫,這里的位置編碼是不可學(xué)習(xí)的向量叮叹,而如果詞向量也使用預(yù)訓(xùn)練好的詞向量,并且是frozen的話爆存,那么這兩個八桿子打不著的向量進(jìn)行相似度計算蛉顽,似乎是沒道理的,應(yīng)該要去除該部分先较。

2)若位置編碼是不可學(xué)習(xí)的向量携冤,而詞向量時可以進(jìn)行微調(diào)的(或可學(xué)習(xí)的)悼粮,那么在訓(xùn)練的過程中,將詞向量在某種程度上與這樣畸形的位置編碼向量相融曾棕,會不會對詞向量造成破壞呢扣猫?

3)所以,從這點看翘地,沒準(zhǔn)使用學(xué)習(xí)到的位置編碼是更合理的申尤,我記得作者在論文中也提到過學(xué)習(xí)到的位置編碼,不過最終沒有使用衙耕,應(yīng)該是比較難訓(xùn)練瀑凝。

卷積網(wǎng)絡(luò)是如何得到位置編碼的?

? ? ? ? 假設(shè)我們使用卷積核大小為3臭杰,步長為2的卷積層對序列“ABCABCD”進(jìn)行運算粤咪,得到特征“f1,f2,f3”。我們來看看輸入序列的交換對結(jié)果的影響:

1)交換圖中藍(lán)色箭頭對應(yīng)的輸入:

? ? ? ? a)若這兩個向量不等(見下右圖)渴杆,則雖然卷積核參數(shù)一樣寥枝,但是輸入向量不一樣,交換動作磁奖,的確對f1和f2產(chǎn)生了影響囊拜,因此此時可以說卷積網(wǎng)絡(luò)對位置交換是敏感的;

? ? ? ? b)若這兩個向量相等(見下左圖)比搭,則由于卷積網(wǎng)絡(luò)的參數(shù)共享冠跷,可知該交換動作對特征f1和f2的值,沒有絲毫影響身诺;不過蜜托,由于輸入本來就是兩個一樣的字符,即便交換它們霉赡,也不會對整個序列(例如:句子)的產(chǎn)生絲毫影響橄务。

? ? ? ? 所以,此時可以說卷積網(wǎng)絡(luò)是對輸入位置敏感的穴亏。

圖(3)蜂挪,交換輸入序列中兩個字符

2)當(dāng)輸入序列呈現(xiàn)如下圖的對稱性時,我們將第1組的3個輸入與第二組交換嗓化,從下左圖變?yōu)橄掠覉D棠涮;則原先特征f1=10,f2=20刺覆,現(xiàn)在變?yōu)閒1=20严肪,f2=10;此時,若仍使用卷積網(wǎng)絡(luò)里的Max-pooling層诬垂,則網(wǎng)絡(luò)對該交換保持不變;并且在pooling層以后將再也不可能恢復(fù)這樣的信息伦仍。

圖(4)结窘,交換兩組局部對稱輸入序列

3)不過,一般的卷積網(wǎng)絡(luò)充蓝,最后會接上一個全連接網(wǎng)絡(luò)層Fully-connected隧枫,我認(rèn)為卷積網(wǎng)絡(luò)對位置的敏感性,大多是來自于這樣的全連接層谓苟,而卷積層本身是比較缺失位置敏感性的官脓;由于卷積核是共享的,即便產(chǎn)生圖(2)中的情況涝焙,最后還有全連接來進(jìn)行兜底卑笨,如下圖,由于黃色權(quán)重和藍(lán)色權(quán)重的不同仑撞,即便“f1,f2”作為集合是相同的赤兴,但是運算后的結(jié)果是不同的。

圖(5)隧哮,當(dāng)交換f1和f2的值時桶良,由于全連接權(quán)重的不同,會導(dǎo)致o1在左右圖中的輸出不同

4)所以使用卷積網(wǎng)絡(luò)做一些語言層面的計算時沮翔,全連接是個好組件(除非任務(wù)本身不適合用全連接)陨帆,而Pooling層要小心地使用,根據(jù)具體情況具體分析采蚀。

循環(huán)網(wǎng)絡(luò)是如何得到位置編碼的疲牵?

我們以簡單的單層RNN為例,并且忽略激活函數(shù)榆鼠,和偏置項:

\begin{aligned}&\boldsymbol a^{(t)} = U\boldsymbol x^{(t)}  + W\boldsymbol a^{(t-1)} \\&\boldsymbol o^{(t)} = V\boldsymbol a^{(t)}\end{aligned}

則將遞歸式進(jìn)行展開得:

\begin{aligned}\boldsymbol o^{(t)} &= V [U\boldsymbol x^{(t)}  + WU\boldsymbol x^{(t-1)} + W^2 \boldsymbol a^{(t-2)}  ]\\&= V [U\boldsymbol x^{(t)}  + WU\boldsymbol x^{(t-1)} + W^2U \boldsymbol x^{(t-2)} +W^3U \boldsymbol x^{(t-3)}+\cdots  ]\end{aligned}

\boldsymbol y^{(t)} = U\boldsymbol x^{(t)}瑰步,并對W進(jìn)行特征分解W=Q\Lambda Q^TQ為標(biāo)準(zhǔn)正交矩陣璧眠,則有:

\begin{aligned}\boldsymbol o^{(t)} &= V [y^{(t)}  + Wy^{(t-1)} + W^2y^{(t-2)} +W^3y^{(t-3)}+\cdots  ]\\&=V Q[IQ^Ty^{(t)}  + \Lambda Q^Ty^{(t-1)} + \Lambda^2 Q^Ty^{(t-2)} +\Lambda^3Q^Ty^{(t-3)}+\cdots  ]\end{aligned}

????????顯然缩焦,RNN是causal 的,我們無需對分析未來數(shù)據(jù)的影響责静;

? ? ? ? 其中袁滥,標(biāo)準(zhǔn)正交陣Q^T只是對\boldsymbol y^{(t)}做了旋轉(zhuǎn),不改變\boldsymbol y^{(t)}的模長灾螃,然后通過特征值\Lambda^{n}來對旋轉(zhuǎn)后的特征各個維度分別進(jìn)行不同比例的縮放题翻。假設(shè)特征值都是小于1的(因為網(wǎng)絡(luò)也不太可能學(xué)到距離越大越相關(guān)的事件,另外特征值小于1,只會使得網(wǎng)絡(luò)性能衰退嵌赠;而特征值大于1塑荒,則直接爆炸,使得訓(xùn)練失斀Α)齿税,可以看到在序列中,隨著距離當(dāng)前時間t越來越久遠(yuǎn)炊豪,輸入\boldsymbol y^{(t-i)}被對應(yīng)的特征值削弱得越來越厲害凌箕。因此,在RNN中的確存在著指數(shù)級衰退的相關(guān)度词渤,所以RNN在一定范圍內(nèi)牵舱,對位置是敏感的。當(dāng)兩幀數(shù)據(jù)在RNN的位置敏感區(qū)域外交換缺虐,則RNN也會不感知芜壁。

(TODO)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者高氮。
  • 序言:七十年代末沿盅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纫溃,更是在濱河造成了極大的恐慌腰涧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紊浩,死亡現(xiàn)場離奇詭異窖铡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)坊谁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門费彼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人口芍,你說我怎么就攤上這事箍铲≡鋈龋” “怎么了触机?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坡贺。 經(jīng)常有香客問我小染,道長翘瓮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任裤翩,我火速辦了婚禮资盅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己呵扛,他們只是感情好每庆,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著今穿,像睡著了一般缤灵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荣赶,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天凤价,我揣著相機(jī)與錄音鸽斟,去河邊找鬼拔创。 笑死,一個胖子當(dāng)著我的面吹牛富蓄,可吹牛的內(nèi)容都是我干的剩燥。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼立倍,長吁一口氣:“原來是場噩夢啊……” “哼灭红!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起口注,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤变擒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后寝志,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娇斑,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年材部,在試婚紗的時候發(fā)現(xiàn)自己被綠了毫缆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡乐导,死狀恐怖苦丁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情物臂,我是刑警寧澤旺拉,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站棵磷,受9級特大地震影響账阻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泽本,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一淘太、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦蒲牧、人聲如沸撇贺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽松嘶。三九已至,卻和暖如春挎扰,著一層夾襖步出監(jiān)牢的瞬間翠订,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工遵倦, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留尽超,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓梧躺,卻偏偏與公主長得像似谁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掠哥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361