2023-03-01
計算機處理數(shù)據(jù),肯定希望處理有上下界的,否則很容易越界。如何把一個幾乎無上界的數(shù),比如transformer的訓(xùn)練數(shù)據(jù)的長度,可能是3,4,也可能是100,1000或者10000等,當然實際上不會太大,但只要數(shù)據(jù)的上界變化比較大,處理起來就比較棘手。但Transformer在position encoding中,巧妙的利用了三角函數(shù)的值域在[-1,1]之間,而定義域則比較方便縮放在一個周期內(nèi)的特性。另外,其實還用到了實數(shù)和(0,1)等勢的性質(zhì)。
具體實現(xiàn)中,Transformer的position encoding把一個標量整數(shù)的位置數(shù)據(jù)轉(zhuǎn)化為一個多維實數(shù)。Positional Encoding和embedding具有同樣的維度d_model。例如d-model取為512,則一個token的位置編碼就是一個512個元素的向量,其偶數(shù)、奇數(shù)位置的元素分別為sin和cos。sin和cos的自變量為pos/(10000^(2i/d_model)),?pos/(10000^((2i+1)/d_model)), i的取值范圍為[0, d_model /2), 對于長度為L的句子,pos取值為0,1,2,……,L-1。 10000的這個值,一般來說就意味著可以訓(xùn)練長度為10000以內(nèi)的句子。而且10000^(1/512)=1.018比較接近1.
這樣,可以達到兩個目的
1.每個位置有一個唯一的positional encoding.?
2.兩個位置之間的關(guān)系可以通過他們位置編碼間的仿射變換來建模(獲得)
對于1,因為Transformer是多個token并行進行訓(xùn)練,如果沒有 Position embedding 的化,Transformer 模型并不能捕捉序列的順序,交換單詞位置后 attention map 的對應(yīng)位置數(shù)值也會進行交換,并不會產(chǎn)生數(shù)值變化,即沒有詞序信息。所以要把每個token的位置信息嵌入到attention map中。Transformer 采用一對三角函數(shù)sin、cos,避免了訓(xùn)練得到的位置向量長度固定的尷尬,提供了相對位置信息,使得訓(xùn)練的模型演繹能力更強。而且sin、cos這樣的組合,可以達到同一維度的位置向量之間不但可以表示不同位置,且含有相對位置信息。參考資料2對為什么把詞向量E和位置向量相加而不是拼接,進行了探討,因為相加不增加維度,訓(xùn)練更容易,而且從計算結(jié)果看,相加不必拼接差。
第2個目的是如何實現(xiàn)的呢?可以這樣理解,先看三角函數(shù)和差化積公式:
而原文[1]的位置編碼公式為:
根據(jù)上面的公式,可以得到:
即:
pos+k位置的位置向量可以表示為pos位置和k位置的位置向量的線性組合.It is great。
需要說明的是,其實也不一定奇偶位置非得分別使用sin和cos,及時直接前半部分sin,后半部分用cos也可以達到同樣的訓(xùn)練效果。因為在?Multi-Head Attention 模塊時的第一步—— Linear 層的線性轉(zhuǎn)換,也就是所謂的全連接層進行坐標重排。
經(jīng)過位置編碼后,encoder和decoder的輸入層中,使用的最終的輸入為
input = input_embedding + positional_encoding
這里的input_embedding 就是常規(guī)embedding層,將每一個token的向量維度從vocab_size映射到d_model,論文中取512.
1,2017年的Attention is All You Need? https://arxiv.org/pdf/1706.03762.pdf
2,Positional Encoding在OpenNMT中的實現(xiàn)代碼:https://github.com/OpenNMT/OpenNMT-py/blob/668c3ef362995c55633fde592354160fec1d1efd/onmt/modules/embeddings.py
3,https://www.zhihu.com/question/347678607?
4,The Annotated Transformer http://nlp.seas.harvard.edu/2018/04/03/attention.html
5,?BERT為何使用學(xué)習的position embedding而非正弦position encoding??https://www.zhihu.com/question/307293465
6.? ?Transformer Text Embeddings?https://www.baeldung.com/cs/transformer-text-embeddings?