Transformer為什么一定要添加一個Positional Encoding模塊?
之前老喜歡死記硬背transformer的網(wǎng)絡(luò)架構(gòu),雖然內(nèi)容并不復(fù)雜,但是發(fā)現(xiàn)這個transformer模塊中的positional encoding在死記硬背的情況之下很容易被忽略。為了更好地理解為什么transformer一定需要有一個positional encoding,簡單推了一下公式
先說結(jié)論:沒有Positional Encoding的transformer架構(gòu)具有置換等變性。
證明如下:
1. 對self-attn的公式推導(dǎo)
其中的是可訓(xùn)練的權(quán)重矩陣。首先計算Query和Key之間的點積,得到注意力權(quán)重矩陣:
然后計算自注意力輸出:
2. 假設(shè)對輸入進行置換
置換后的Query, Key, Value的公式分別為:
注意力矩陣的計算則變化為:
由于P是置換矩陣,滿足=,且P=I,所以:
所以最終的輸出可以這樣寫:
這樣就可以證明,transformer架構(gòu)在沒有Positional Encoding計算的情況下具有置換等變性,換句話說,輸入序列中元素的排列方式不會影響模型對它們的處理方式,只是輸出的順序相應(yīng)地改變。
3. 添加Positional Encoding之后的影響
加入Positional Encoding之后,置換后的輸入為:
由于P是固定的,加入Positional Encoding之后,輸入序列的置換將導(dǎo)致模型的輸出發(fā)生變化,模型能夠區(qū)分不用的序列:
從公式上看,在沒有位置編碼的情況下,自注意力機制的計算只涉及輸入向量的內(nèi)容,不涉及任何位置信息,且對輸入序列的置換是等變的。
加入位置編碼后,輸入向量包含了位置信息,打破了自注意力機制的置換等變性,使模型能夠?qū)π蛄兄械脑匚恢妹舾小?/p>