各類神經網絡學習:(十一)注意力機制(第3/4集),位置編碼

上一篇下一篇
注意力機制(2/4集)注意力機制(4/4集)

位置編碼

R N N RNN RNN L S T M LSTM LSTM 這些網絡都是串行執行的,在潛移默化中,就包含了順序關系,也就是詞序關系。而注意力機制是并行的,詞與詞之間不存在順序關系,比如說輸入 [ A , B , C ] [A, B, C] [A,B,C] [ B , A , C ] [B, A, C] [B,A,C] 會被視為相似,那么這樣就會丟失詞序信息,所以需要在執行注意力機制之前,先進行位置編碼,這樣就包含了詞序關系。

①位置編碼向量添加方式

原本的自注意力機制的輸入,就是詞向量,但是對其位置編碼后,會在原來的詞向量上再加一個位置向量變成一個新的向量(對應元素相加),里面包含了當前詞向量和其他的詞向量之間的位置關系。并且位置向量的維度和詞向量的維度是一致的。

②位置編碼公式

編碼方式其實有多種,不過 T r a n s f o r m e r Transformer Transformer 中用的就是下方這種(效果不是最好的,只是當時正好想到了這種方式)。

T r a n s f o r m e r Transformer Transformer 論文中使用的 正弦-余弦位置編碼 是固定編碼(不可訓練),其公式如下:
P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i d m o d e l ) P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i d m o d e l ) \Large PE_{(pos,2i)}=sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}})\\ \Large PE_{(pos,2i+1)}=cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}}) PE(pos,2i)?=sin(10000dmodel?2i?pos?)PE(pos,2i+1)?=cos(10000dmodel?2i?pos?)
其中, p o s pos pos 表示元素在序列中的位置( 0 ≤ p o s ≤ 單詞個數 0 ≤ pos ≤ 單詞個數 0pos單詞個數)。 i i i 表示編碼向量的維度索引( 0 ≤ i < d m o d e l 2 0 ≤ i < \frac{d_{model}}{2} 0i<2dmodel??)。 d m o d e l d_{model} dmodel? 表示模型隱藏層維度(如 512 512 512 )。

上述公式表明:偶數位置的元素值使用 s i n sin sin 函數計算,奇數位置的元素值使用 c o s cos cos 函數計算(偶 s i n sin sin c o s cos cos )。

③舉例幫助理解

舉個例子幫助理解上述參數的含義:假設一句話中有 m m m 個單詞,則有 0 ≤ p o s ≤ m 0 ≤ pos ≤ m 0posm ,每個單詞的位置編碼向量的維度為 d m o d e l d_{model} dmodel? (就是這個向量中的元素個數),比如說第 p o s pos pos 個單詞的位置編碼向量為 [ 0.841 , 0.540 , 0.860 , 0.509 , . . . ] [0.841, 0.540, 0.860, 0.509, ...] [0.841,0.540,0.860,0.509,...]

現在我們來更具體化這個例子:

m = 3 m=3 m=3 ,假設句子為 “ I l o v e y o u I~love~you I?love?you”,包含 3 3 3 個單詞(對應于位置 p o s = 0 , 1 , 2 pos=0,1,2 pos=0,1,2 ),模型維度 d m o d e l = 512 d_{model}=512 dmodel?=512。則第 p o s pos pos 個單詞的位置編碼向量中第 2 i 2i 2i 和第 2 i + 1 2i+1 2i+1 個元素的值應按照如下公式計算:
P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i 512 ) P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i 512 ) \Large PE_{(pos,2i)}=sin(\frac{pos}{10000^{\frac{2i}{512}}})\\ \Large PE_{(pos,2i+1)}=cos(\frac{pos}{10000^{\frac{2i}{512}}}) PE(pos,2i)?=sin(100005122i?pos?)PE(pos,2i+1)?=cos(100005122i?pos?)
則有:

單詞位置(pos)維度0維度1維度2維度3…(共512維)
pos=0 (“I”)0.0001.0000.0001.000
pos=1 (“love”)0.8410.5400.8600.509
pos=2 (“deep”)0.909-0.4160.876-0.481
  • 高頻維度(如維度 512 的最后幾維)的值接近微小波動,但對模型仍攜帶位置信息。
  • 單詞很多時,其中更遠的位置(例如pos=100)會因為頻率放大分母,使得大幅衰減為小值。

測試代碼:

import math
import numpy as npdef get_div_term(d_model):div_term = np.exp(np.arange(0, d_model, 2) * (-math.log(10000.0) / d_model))return div_term  # 形狀: [256]if __name__ == '__main__':np.set_printoptions(suppress=True)# 更改下面的 0 為其他的 posprint(np.sin(0 / get_div_term(512)))  # 輸出向量中偶數位置元素print(np.cos(0 / get_div_term(512)))  # 輸出向量中奇數位置元素

④為什么位置編碼要這樣編碼

下面只做簡單解釋,詳細的原因可以問 d e e p s e e k deepseek deepseek

按順序推導,請耐心觀看。

(里面為什么是除以 1000 0 2 i / 512 10000^{2i/512} 100002i/512 不用管,知道宏觀公式的原因就行)

靈感來源:三角函數的和差化積公式:
s i n ( α + β ) = s i n α ? c o s β + c o s α ? s i n β c o s ( α + β ) = c o s α ? c o s β ? s i n α ? s i n β sin(\alpha+\beta)=sin\alpha·cos\beta+cos\alpha·sin\beta\\ cos(\alpha+\beta)=cos\alpha·cos\beta-sin\alpha·sin\beta sin(α+β)=sinα?cosβ+cosα?sinβcos(α+β)=cosα?cosβ?sinα?sinβ

則第 p o s + k pos+k pos+k 個位置的單詞的位置編碼向量 P E ( p o s + k ) PE_{(pos+k)} PE(pos+k)? 中的偶數和奇數位置的元素可被表示為:

偶數位: P E ( p o s + k , 2 i ) = sin ? ( p o s + k 1000 0 2 i 512 ) = sin ? ( p o s 1000 0 2 i 512 + k 1000 0 2 i 512 ) = sin ? ( p o s 1000 0 2 i 512 ) ? cos ? ( k 1000 0 2 i 512 ) + cos ? ( p o s 1000 0 2 i 512 ) ? sin ? ( k 1000 0 2 i 512 ) = P E ( p o s , 2 i ) ? P E ( k , 2 i + 1 ) + P E ( p o s , 2 i + 1 ) ? P E ( k , 2 i ) 奇數位: P E ( p o s + k , 2 i + 1 ) = cos ? ( p o s + k 1000 0 2 i 512 ) = cos ? ( p o s 1000 0 2 i 512 + k 1000 0 2 i 512 ) = cos ? ( p o s 1000 0 2 i 512 ) ? cos ? ( k 1000 0 2 i 512 ) ? sin ? ( p o s 1000 0 2 i 512 ) ? sin ? ( k 1000 0 2 i 512 ) = P E ( p o s , 2 i + 1 ) ? P E ( k , 2 i + 1 ) ? P E ( p o s , 2 i ) ? P E ( k , 2 i ) \begin{aligned} \text{偶數位:} & \\ PE_{(pos+k,2i)} &= \sin\left(\frac{pos+k}{10000^{\frac{2i}{512}}}\right) = \sin\left(\frac{pos}{10000^{\frac{2i}{512}}} + \frac{k}{10000^{\frac{2i}{512}}}\right) \\ &= \sin\left(\frac{pos}{10000^{\frac{2i}{512}}}\right) \cdot \cos\left(\frac{k}{10000^{\frac{2i}{512}}}\right) + \cos\left(\frac{pos}{10000^{\frac{2i}{512}}}\right) \cdot \sin\left(\frac{k}{10000^{\frac{2i}{512}}}\right) \\ &= PE_{(pos,2i)} \cdot PE_{(k,2i+1)} + PE_{(pos,2i+1)} \cdot PE_{(k,2i)} \\ \hline\\ \text{奇數位:} & \\ PE_{(pos+k,2i+1)} &= \cos\left(\frac{pos+k}{10000^{\frac{2i}{512}}}\right) = \cos\left(\frac{pos}{10000^{\frac{2i}{512}}} + \frac{k}{10000^{\frac{2i}{512}}}\right) \\ &= \cos\left(\frac{pos}{10000^{\frac{2i}{512}}}\right) \cdot \cos\left(\frac{k}{10000^{\frac{2i}{512}}}\right) - \sin\left(\frac{pos}{10000^{\frac{2i}{512}}}\right) \cdot \sin\left(\frac{k}{10000^{\frac{2i}{512}}}\right) \\ &= PE_{(pos,2i+1)} \cdot PE_{(k,2i+1)} - PE_{(pos,2i)} \cdot PE_{(k,2i)} \end{aligned} 偶數位:PE(pos+k,2i)?奇數位:PE(pos+k,2i+1)??=sin(100005122i?pos+k?)=sin(100005122i?pos?+100005122i?k?)=sin(100005122i?pos?)?cos(100005122i?k?)+cos(100005122i?pos?)?sin(100005122i?k?)=PE(pos,2i)??PE(k,2i+1)?+PE(pos,2i+1)??PE(k,2i)?=cos(100005122i?pos+k?)=cos(100005122i?pos?+100005122i?k?)=cos(100005122i?pos?)?cos(100005122i?k?)?sin(100005122i?pos?)?sin(100005122i?k?)=PE(pos,2i+1)??PE(k,2i+1)??PE(pos,2i)??PE(k,2i)???

可以看出,對于 p o s + k pos+k pos+k 位置的位置向量中的 2 i 2i 2i 2 i + 1 2i+1 2i+1 維而言,可以被表示為: p o s pos pos 位置與 k k k 位置的位置向量中的 2 i 2i 2i 2 i + 1 2i+1 2i+1 維的線性組合,這樣的線性組合意味著位置向量中蘊含了相對位置信息(也就是說:第 p o s + k pos+k pos+k 個單詞和第 p o s pos pos 、第 k k k 個單詞有關聯)。

將上述推導過程中的 P E ( k , 2 i ) PE_{(k,2i)} PE(k,2i)? P E ( k , 2 i + 1 ) PE_{(k,2i+1)} PE(k,2i+1)? 看成是 W k W_k Wk? ,那么上述公式就可以理解成:模型可以通過權重 W k W_k Wk? 來掌握第 p o s pos pos 個單詞和距離它 k k k 個單位遠的單詞之間的關聯。

⑤這種編碼方式的優缺點

  • 優點:

    • 泛化性強:支持處理比訓練時更長的序列(外推能力)。
    • 計算高效:無需額外訓練參數。
  • 缺點:這是一種不可學習,即給出即固定的編碼方式,靈活性低。

后續的 GPT 等模型大部分都采用了可學習的編碼方式。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78930.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《Python Web部署應知應會》Flask網站隱藏或改變瀏覽器URL:從Nginx反向代理到URL重寫技術

Flask網站隱藏或改變瀏覽器顯示URL地址的實現方案&#xff1a;從Nginx反向代理到URL重寫技術 引言 在Web應用開發中&#xff0c;URL路徑的安全性往往被忽視&#xff0c;這可能導致網站結構和后端邏輯被攻擊者輕易推斷。對于Flask框架開發的網站&#xff0c;如何隱藏或改變瀏覽…

elementui里的el-tabs的內置樣式修改失效?

1.問題圖 紅框里的是組件的內置樣式&#xff0c;紅框下的是自定義樣式 2.分析 2.1scoped vue模板編譯器在編譯有scoped的stye標簽時&#xff0c;會生成對應的postCSS插件&#xff0c;該插件會給每個scoped標記的style標簽模塊&#xff0c;生成唯一一個對應的 data-v-xxxhash…

大數據測試集群環境部署

Hadoop大數據集群搭建&#xff08;超詳細&#xff09;_hadoop_小飛飛519-GitCode 開源社區 hadoop集群一之虛擬機安裝(mac)_hadoop_皮皮蝦不皮呀-華為開發者空間 hadoop集群二之hadoop安裝_hadoop_皮皮蝦不皮呀-華為開發者空間 虛擬機如何查看gateway | PingCode智庫

Nginx 核心功能筆記

目錄 一、Nginx 簡介 二、核心功能詳解 三、關鍵指令解析 四、性能優化要點 五、常見應用場景 一、Nginx 簡介 定位 高性能的 HTTP/反向代理服務器&#xff0c;同時支持郵件協議代理&#xff08;IMAP/POP3/SMTP&#xff09;。采用 事件驅動、異步非阻塞 架構&#xff0c;…

強化學習(二)馬爾科夫決策過程(MDP)

1. 簡介 馬爾可夫決策過程正式地描述了強化學習的環境其中環境是完全可觀測的即當前狀態完全表征了這個過程幾乎所有的強化學習問題都可以形式化為馬爾可夫決策過程&#xff0c;例如&#xff1a; 最優控制主要處理連續的馬爾可夫決策過程部分可觀察的問題可以轉化為馬爾可夫決…

Day16(貪心算法)——LeetCode45.跳躍游戲II763.劃分字母區間

1 LeetCode45.跳躍游戲II 1.1 題目描述 與跳躍游戲類似&#xff0c;跳躍游戲II給定長為n的從0開始索引的整數數組nums&#xff0c;nums[i]是你在i處能向右跳躍的最大步數&#xff0c;求到達數組最后一個索引處需要跳躍的最少次數。 ??一個示例&#xff1a;nums[2,3,1,1,4]&a…

告別碎片化!兩大先進分塊技術如何提升RAG的語義連貫性?

研究動機 論文核心問題及研究背景分析 1. 研究領域及其重要性 研究領域&#xff1a;檢索增強生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;系統&#xff0c;結合自然語言處理&#xff08;NLP&#xff09;與信息檢索技術。重要性&#xff1a; RAG通過動態…

leetcode day37 474

474 一和零 給你一個二進制字符串數組 strs 和兩個整數 m 和 n 。 請你找出并返回 strs 的最大子集的長度&#xff0c;該子集中 最多 有 m 個 0 和 n 個 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 示例 1&#xff1a; 輸入&#xff1a;s…

二、信息時代社會結構的轉變

到了信息時代,以及在核武器的前提下,上述的社會結構的邏輯,就有了一個根 本性的轉變,就是暴力的成本和收益,都在下降。 暴力的成本在降低。比如說槍支,它的制造和分發都變得非常容易。現在我們都 知道有 3D 打印,它就好像工業時代的印刷機,印刷圣經或者書籍,使知識更加 普及和容…

Elasticsearch 堆內存使用情況和 JVM 垃圾回收

作者&#xff1a;來自 Elastic Kofi Bartlett 探索 Elasticsearch 堆內存使用情況和 JVM 垃圾回收&#xff0c;包括最佳實踐以及在堆內存使用過高或 JVM 性能不佳時的解決方法。 堆內存大小是分配給 Elasticsearch 節點中 Java 虛擬機的 RAM 數量。 從 7.11 版本開始&#xff…

C++之類和對象:構造函數,析構函數,拷貝構造,賦值運算符重載

前提&#xff1a;如果一個類是空類&#xff0c;C中空類中真的什么都沒有嗎&#xff0c;不是的&#xff0c;編譯器會自動生成6個默認成員函數。默認成員函數&#xff1a;用戶沒有顯式實現&#xff0c;編譯器會生成的成員函數稱為默認成員函數。 默認成員函數&#xff1a;構造函…

【專題五】位運算(1):常見位運算操作總結

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

小草GrassRouter多卡聚合路由器聚合衛星、MESH網絡應用解決方案

一、多網融合解決方案 衛星網絡融合? 支持接入衛星通信模塊&#xff0c;在無地面網絡覆蓋的極端場景&#xff08;如偏遠山區、海洋救援&#xff09;下&#xff0c;形成“5G衛星”雙鏈路冗余傳輸&#xff0c;衛星鏈路可作為核心通信備份&#xff0c;確保關鍵指令和視頻數據實…

【Mybatis】Mybatis基礎

文章目錄 前言一、搭建MyBatis1.1 創建maven工程1.2 加入log4j日志功能1.3 MyBatis的增刪改查1.4 核心配置文件詳解 二、MyBatis獲取參數值的兩種方式2.1 單個字面量類型的參數2.2 多個字面量類型的參數2.3 map集合類型的參數2.4 實體類類型的參數2.5 使用Param標識參數 三、 M…

AI四大邊界

大模型訓練的邊界并非由單一因素決定&#xff0c;而是技術、倫理、法律及實際應用需求共同作用的結果。以下從四個維度解析其邊界來源&#xff1a; 一、技術邊界&#xff1a;資源與能力的雙重限制 計算資源瓶頸 成本與算力&#xff1a;大模型訓練依賴海量GPU/TPU資源&#xff…

Twitter 工作原理|架構解析|社交APP邏輯

這是對Twitter 工作原理&#xff5c;架構解析&#xff5c;社交APP邏輯_嗶哩嗶哩_bilibili的學習&#xff0c;感謝up小凡生一 在兩年半前&#xff0c;埃隆馬斯克收購了Twitter&#xff0c;并且進行了一系列重大改革。今天我們來解析一下這個全球知名社交平臺的架構。首先&#x…

Java基礎學習內容大綱

Java基礎學習內容大綱 第一階段:建立編程思想 ? Java概述:如何快速學習Java技術、Java歷史、Java特點、Sublime、Java運行機制、JDK、轉義字符、Java開發規范、Java API ? 變量:數據類型、變量基本使用、數據類型轉換 ? 運算符:運算符介紹、算數運算符、關系運算符、…

如何對多維樣本進行KS檢驗

對于形狀為 ( 10000 , 1 , 304 ) (10000, 1, 304) (10000,1,304)的三維數據&#xff0c;若需使用scipy.stats.ks_2samp進行KS檢驗&#xff0c;可按以下步驟處理&#xff1a; 數據降維 KS檢驗要求輸入為一維數組&#xff0c;需將三維數據展平或按特定維度聚合&#xff1a; ? 方…

在 VMware 虛擬機中安裝 Windows7

文章目錄 前言1.安裝VMware 虛擬機1. VMware虛擬機軟件安裝2. 虛擬機創建配置&#xff08;超詳細步驟&#xff09;3. Windows7系統安裝 3、安裝 VMware tools4. VMware Tools安裝與優化5. 總結與常見問題 前言 最近有不少朋友在問如何在電腦上同時使用多個操作系統&#xff0c…

直播預告|TinyVue 組件庫高級用法:定制你的企業級UI體系

TinyVue 是一個跨端跨框架的企業級 UI 組件庫&#xff0c;基于 renderless 無渲染組件設計架構&#xff0c;實現了一套代碼同時支持 Vue2 和 Vue3&#xff0c;支持 PC 和移動端&#xff0c;包含 100 多個功能豐富的精美組件&#xff0c;可幫助開發者高效開發 Web 應用。 4 月 …