日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Transformers中的位置编码到底是什么?

發布時間:2025/3/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Transformers中的位置编码到底是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

眾所周知,self-attention是不考慮輸入序列的位置的,要解決這個問題就得靠Position Encoding了,在attention is All You Need中就提出了這個方法,在每個輸入中都加上了位置編碼,如下圖紅框所示:

然后在論文3.5部分給出了以下PE公式,一個sin函數和一個cos函數,為每個position計算一個值:

說實話,看到這里時晴反正是沒看懂,公式是初中生都看的懂,d_model表示輸入的維度,pos表示單詞的索引,i表示向量中索引,用sin,cos計算出對應值,但是為什么可以這樣加到input上達到位置編碼的效果呢?這時候我們看看bert就是非常直觀的絕對位置動態編碼,就直觀很多,每個位置就是固定的embedding:

讓我們看看原文作者是怎么解釋的:

對于任何偏移量k,對pos+k的編碼都可以是pos編碼線形變換.先來看看可視化結果:

值得注意的是,每個向量第0和第1的位置,第0的位置對應于PE公式的sin式,第1的位置對應于PE公式的cos式子,但是他們的2i都是0,所以會有下式:

所以每個輸入向量的第0個和第1個位置的位置編碼只和向量所處的pos有關.但是第3個位置后就受d_model影響了,一旦d_model變小,sin/cos函數就會有“拉伸”感,如下圖所示:

對于長度為20的input,維度是50,我們可以畫出一下PE值:

我們發現,越小的pos受影響的i就越少,i如果很大,PE值就會在0和1進行變換.從上圖中,我們看到30~50列值基本沒有變化.為啥上圖這種編碼就能學到位置信息?其實有種非常直觀的解釋方式,比如讓你對數字進行編碼,最直觀的想法就是二進制編碼,如下圖所示:

PE方法就可以簡單的理解為上述版本的float編碼.

PE的方法有很多,但是有很多實驗表明,這些PE方法最終結果都很類似,本文討論的PE方法優勢在于可以支持更長的序列長度.

總結

以上是生活随笔為你收集整理的Transformers中的位置编码到底是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。