文章目錄
- 位置編碼
- 引出
- Transformer中位置編碼方法:Sinusoidal functions
- 兩個重要性質
位置編碼
最近在學習位置編碼,想找一個講的比較透徹的文章或視頻,找了半天,滿意的一個也沒有,所以自己記錄一下。
注意,本篇筆記只作為自己的學習記錄用,更好的講解的內容請看鏈接:位置編碼
引出
我們首先來理解下什么是位置編碼?在Transformer架構中,由于自注意力機制固有的特性,某一個token計算和其他token之間的注意力權重時,是不受距離限制的,也就是說他是一視同仁的,比如,我吃飯了和吃飯了我,這兩句話中我這個token的表示是一樣的。這個并不符合現實的情況,因為實際情況是我們會考慮距離,一般距離越遠,它的重要性就變弱了。所以我們還需要加入有關位置的信息,再來計算注意力分數,更為合理。
那應該怎么表示位置信息呢?transformer中token是按順序輸入的,一種最直觀的想法就是我們將第一個token的位置表示為1,第二個的表示為2,一次類推,但是這樣表示會有什么問題呢?首先,這個的表示是在一個離散的空間內表示,如果訓練是在有限的長度下訓練,再擴展到訓練以外的長度時性能會大幅下降,也就是外推性很差。另一個原因是,當token數量變得很多的時候,其值會變得非常大。
那有沒有更好的方法來表示呢?我們想想,位置編碼,我們想讓他具備什么性質:
第一個:能夠表示絕對的位置信息
第二個,能夠表示不同token之間的相對的位置信息