位置編碼理論與應用
1. 位置編碼如何解決置換不變性及其數學表現
在Transformer模型中,自注意力機制(Self-Attention)具有置換不變性(permutation invariance),這意味著對輸入序列的詞元(token)進行任意重排,輸出的內容本質上保持不變(或僅是行的重排),導致模型無法感知詞元的順序。為了解決這一問題,**位置編碼(Positional Encoding)**通過將位置信息融入輸入序列,打破這種不變性,使模型能夠區分詞元的相對或絕對位置。
1.1 置換不變性的數學表現
置換不變性是自注意力機制無法捕捉位置信息的核心原因。讓我們從數學角度分析:
-
自注意力機制的計算:
- 輸入序列為 X = [ x 1 , x 2 , … , x n ] X = [x_1, x_2, \dots, x_n] X=[x1?,x2?,…,xn?],其中 x i ∈ R d x_i \in \mathbb{R}^d xi?∈Rd 是第 i i i 個詞元的嵌入向量。
- 通過線性變換生成查詢(Query)、鍵(Key)和值(Value): Q = X W Q , K = X W K , V = X W V Q = X W_Q, \quad K = X W_K, \quad V = X W_V Q=XWQ?,K=XWK?,V=XWV? 其中 W Q , W K , W V W_Q, W_K, W_V WQ?,WK?,WV? 是可學習的權重矩陣。
- 注意力權重為: A = softmax ( Q K T d k ) A = \text{softmax}\left( \frac{Q K^T}{\sqrt{d_k}} \right) A=softmax(dk??QKT?) 輸出為: Attention ( Q , K , V ) = A V \text{Attention}(Q, K, V) = A V Attention(Q,K,V)=AV
-
置換操作的影響:
- 假設對輸入 X X X 應用置換矩陣 P P P(一個重排行的矩陣),置換后的輸入為 X ′ = P X X' = P X X′=PX。
- 置換后的查詢、鍵和值變為: Q ′ = P Q , K ′ = P K , V ′ = P V Q' = P Q, \quad K' = P K, \quad V' = P V Q′=PQ,K′=PK,V′=PV
- 注意力權重變為: A ′ = softmax ( Q ′ ( K ′ ) T d k ) = softmax ( P Q K T P T d k ) = P A P T A' = \text{softmax}\left( \frac{Q' (K')^T}{\sqrt{d_k}} \right) = \text{softmax}\left( \frac{P Q K^T P^T}{\sqrt{d_k}} \right) = P A P^T A′=softmax(dk??Q′(K′)T?)=softmax(dk??PQKTPT?)=PAPT
- 輸出為: Attention ( Q ′ , K ′ , V ′ ) = A ′ V ′ = P A P T P V = P A V \text{Attention}(Q', K', V') = A' V' = P A P^T P V = P A V Attention(Q′,K′,V′)=A′V′=PAPTPV=PAV
- 結果表明,置換后的輸出 P A V P A V PAV 是原始輸出 A V A V AV 的行重排,內容本質不變(即集合意義上等價)。這意味著自注意力機制無法區分 X X X 和 X ′ X' X′ 的順序,僅依賴詞元的內容。
1.2 位置編碼如何解決置換不變性
位置編碼通過將位置信息融入輸入序列,打破置換不變性,使模型能夠感知詞元的位置。常見的實現方式有兩種:絕對位置編碼和相對位置編碼。
1.2.1 絕對位置編碼
- 原理:
- 為每個位置 m m m 分配一個獨特的位置編碼向量 p m p_m pm?,將其加到對應的詞元嵌入 x m x_m xm? 上: x m ′ = x m + p m x_m' = x_m + p_m xm′?=xm?+pm? 輸入序列變為: X new = [ x 1 + p 1 , x 2 + p 2 , … , x n + p n ] X_{\text{new}} = [x_1 + p_1, x_2 + p_2, \dots, x_n + p_n] Xnew?=[x1?+p1?,x2?+p2?,…,xn?+pn?]
- 數學表現:
- 若對 X new X_{\text{new}} Xnew? 應用置換矩陣 P P P,置換后的輸入為: X new ′ = P X new = P ( X + P pos ) X_{\text{new}}' = P X_{\text{new}} = P (X + P_{\text{pos}}) Xnew′?=PXnew?=P(X+Ppos?) 其中 P pos = [ p 1 , p 2 , … , p n ] P_{\text{pos}} = [p_1, p_2, \dots, p_n] Ppos?=[p1?,p2?,…,pn?]。
- 因為 p m p_m pm? 與位置綁定,置換后位置編碼也會重排(如 P P pos P P_{\text{pos}} PPpos?),導致 X new ′ ≠ X new X_{\text{new}}' \neq X_{\text{new}} Xnew′?=Xnew?。這使得注意力計算的結果不再僅僅是行的重排,模型能夠感知位置差異。
- 例子:
- 三角函數位置編碼(原Transformer): P E ( pos , 2 i ) = sin ? ( pos 1000 0 2 i / d ) , P E ( pos , 2 i + 1 ) = cos ? ( pos 1000 0 2 i / d ) PE(\text{pos}, 2i) = \sin\left(\frac{\text{pos}}{10000^{2i / d}}\right), \quad PE(\text{pos}, 2i+1) = \cos\left(\frac{\text{pos}}{10000^{2i / d}}\right) PE(pos,2i)=sin(100002i/dpos?),PE(pos,2i+1)=cos(100002i/dpos?) 不同位置的編碼向量具有獨特的頻率模式。
- 效果:
- 通過為每個詞元添加位置標識,打破了置換不變性,模型可以區分不同位置的詞元。
1.2.2 相對位置編碼
- 原理:
- 直接在注意力機制中引入詞元間的相對位置信息,通常通過修改注意力權重的計算方式。例如,在注意力分數中加入與相對位置 i ? j i - j i?j 相關的偏置項。
- 數學表現:
- 修改注意力分數計算: a i j = q i T k j + q i T R i ? j a_{ij} = q_i^T k_j + q_i^T R_{i-j} aij?=qiT?kj?+qiT?Ri?j? 其中 R i ? j R_{i-j} Ri?j? 是相對位置 i ? j i - j i?j 的編碼向量。
- 置換輸入后,相對位置 i ? j i - j i?j 會隨之改變,導致注意力權重 A A A 的計算結果不同,輸出不再是簡單重排。
- 例子:
- Transformer-XL: a i j = q i T k j + q i T R i ? j + u T k j + v T R i ? j a_{ij} = q_i^T k_j + q_i^T R_{i-j} + u^T k_j + v^T R_{i-j} aij?=qiT?kj?+qiT?Ri?j?+uTkj?+vTRi?j? R i ? j R_{i-j} Ri?j? 使用正弦余弦函數生成,依賴相對距離。
- 效果:
- 相對位置編碼直接捕捉詞元間的相對距離或順序,使模型對位置變化敏感。
1.3 數學分析:Taylor展開的視角
在Transformer模型中,位置編碼(Positional Encoding)是解決自注意力機制無法捕捉詞元順序的關鍵機制。通過將模型輸出函數 f ( X ) f(X) f(X) 在加入位置編碼后的輸入 X + P pos X+P_{\text{pos}} X+Ppos? 處進行Taylor展開,我們可以從數學視角深入理解位置編碼如何引入絕對位置信息和相對位置信息。
f ~ ( X + P pos ) ≈ f ( X ) + p m T ? f ? x m + p n T ? f ? x n + p m T ? 2 f ? x m 2 p m + p n T ? 2 f ? x n 2 p n + p m T ? 2 f ? x m ? x n p n \tilde{f}(X + P_{\text{pos}}) \approx f(X) + p_m^T \frac{\partial f}{\partial x_m} + p_n^T \frac{\partial f}{\partial x_n} + p_m^T \frac{\partial^2 f}{\partial x_m^2} p_m + p_n^T \frac{\partial^2 f}{\partial x_n^2} p_n + p_m^T \frac{\partial^2 f}{\partial x_m \partial x_n} p_n f~?(X+Ppos?)≈f(X)+pmT??xm??f?+pnT??xn??f?+pmT??xm2??2f?pm?+pnT??xn2??2f?pn?+pmT??xm??xn??2f?pn?
其中:
-
X X X 是輸入序列的詞元嵌入矩陣, x m x_m xm? 和 x n x_n xn? 是位置 m m m 和 n n n 的詞元嵌入向量。
-
P pos P_{\text{pos}} Ppos? 是位置編碼矩陣, p m p_m pm? 和 p n p_n pn? 是位置 m m m 和 n n n 的位置編碼向量。
-
f ( X ) f(X) f(X) 是模型輸出函數, f ~ ( X + P pos ) \tilde{f}(X + P_{\text{pos}}) f~?(X+Ppos?) 是加入位置編碼后的輸出。
展開式中的項可以分為兩類:絕對位置信息(前四項)和相對位置信息(最后一項)。下面,我們將更深入地分析這些項的含義,并通過具體例子闡釋其作用。
1.3.1 絕對位置信息
絕對位置信息由以下四項表示:
-
p m T ? f ? x m p_m^T \frac{\partial f}{\partial x_m} pmT??xm??f? 和 p n T ? f ? x n p_n^T \frac{\partial f}{\partial x_n} pnT??xn??f?(一階項)
-
p m T ? 2 f ? x m 2 p m p_m^T \frac{\partial^2 f}{\partial x_m^2} p_m pmT??xm2??2f?pm? 和 p n T ? 2 f ? x n 2 p n p_n^T \frac{\partial^2 f}{\partial x_n^2} p_n pnT??xn2??2f?pn?(二階單位置項)
數學含義
-
一階項:
-
? f ? x m \frac{\partial f}{\partial x_m} ?xm??f? 是模型輸出 f f f 對位置 m m m 的詞元嵌入 x m x_m xm? 的梯度,表示輸出對該詞元的線性敏感度。
-
p m T ? f ? x m p_m^T \frac{\partial f}{\partial x_m} pmT??xm??f? 是位置編碼向量 p m p_m pm? 與梯度的點積,反映了位置 m m m 的編碼對輸出的直接調整。
-
這類似于為每個位置的詞元添加一個獨立的"位置偏移",使模型感知到"這個詞元在位置 m m m"。
-
-
二階單位置項:
-
? 2 f ? x m 2 \frac{\partial^2 f}{\partial x_m^2} ?xm2??2f? 是模型輸出的二階導數,表示輸出對 x m x_m xm? 的非線性影響(曲率)。
-
p m T ? 2 f ? x m 2 p m p_m^T \frac{\partial^2 f}{\partial x_m^2} p_m pmT??xm2??2f?pm? 是位置編碼 p m p_m pm? 通過二階導數對輸出的調整,增強了對單一位置的建模。
-
這可以看作是對位置 m m m 的"深度調整",進一步強調其絕對位置特性。
-
特點
-
這些項僅依賴單一位置的編碼( p m p_m pm? 或 p n p_n pn?),不涉及其他位置的交互,因此反映了絕對位置信息。
-
它們為每個詞元提供了一個獨立的位置標識,使模型能夠區分不同位置的詞元。
例子
-
場景:考慮一個簡單的語言模型,輸入序列為"貓追狗"(位置 m = 1 , n = 2 , k = 3 m=1, n=2, k=3 m=1,n=2,k=3),詞嵌入分別為 x 1 , x 2 , x 3 x_1, x_2, x_3 x1?,x2?,x3?,位置編碼為 p 1 , p 2 , p 3 p_1, p_2, p_3 p1?,p2?,p3?(如三角函數編碼)。
-
絕對位置作用:
-
p 1 T ? f ? x 1 p_1^T \frac{\partial f}{\partial x_1} p1T??x1??f? 調整"貓"(位置1)的輸出貢獻,可能使模型更關注句首詞。
-
p 2 T ? 2 f ? x 2 2 p 2 p_2^T \frac{\partial^2 f}{\partial x_2^2} p_2 p2T??x22??2f?p2? 增強"追"(位置2)的非線性影響,強調動詞的獨立作用。
-
-
實際效果:模型通過這些項區分"貓"在位置1和"狗"在位置3,即使內容相同,也能感知順序差異。
與絕對位置編碼的關系
- 絕對位置編碼(如三角函數編碼或可訓練編碼)主要通過這些單位置項起作用。它們為每個位置賦予獨特標識(如 p m p_m pm?),使模型在輸入層感知絕對位置。
1.3.2 相對位置信息
相對位置信息由最后一項表示:
- p m T ? 2 f ? x m ? x n p n p_m^T \frac{\partial^2 f}{\partial x_m \partial x_n} p_n pmT??xm??xn??2f?pn?(二階交互項)
數學含義
-
? 2 f ? x m ? x n \frac{\partial^2 f}{\partial x_m \partial x_n} ?xm??xn??2f? 是模型輸出對位置 m m m 和 n n n 的詞元嵌入 x m x_m xm? 和 x n x_n xn? 的混合二階導數,表示兩位置之間的相互影響。
-
p m T ? 2 f ? x m ? x n p n p_m^T \frac{\partial^2 f}{\partial x_m \partial x_n} p_n pmT??xm??xn??2f?pn? 是位置編碼 p m p_m pm? 和 p n p_n pn? 與混合導數的交互,反映了位置 m m m 和 n n n 的聯合效應。
-
這項捕捉了相對位置信息,因為它依賴于 p m p_m pm? 和 p n p_n pn? 之間的關系,通常與兩位置的相對距離或順序相關。
特點
-
與絕對位置項不同,這一項涉及兩個位置的交互,體現了位置之間的相對關系。
-
在自注意力機制中,這對應于詞元對(如 m m m 和 n n n)的注意力權重如何受相對位置影響。
例子
-
場景:繼續使用"貓追狗",假設 m = 1 m=1 m=1(“貓”), n = 2 n=2 n=2(“追”)。
-
相對位置作用:
-
p 1 T ? 2 f ? x 1 ? x 2 p 2 p_1^T \frac{\partial^2 f}{\partial x_1 \partial x_2} p_2 p1T??x1??x2??2f?p2? 表示"貓"和"追"之間的交互效應。
-
在自注意力中,這可能影響注意力權重 a 12 = softmax ( q 1 T k 2 d k ) a_{12} = \text{softmax}\left( \frac{q_1^T k_2}{\sqrt{d_k}} \right) a12?=softmax(dk??q1T?k2??),使模型更關注主語和動詞的鄰近關系。
-
-
實際效果:
- 如果序列變為"狗追貓",位置 m = 1 m=1 m=1(“狗”)和 n = 2 n=2 n=2(“追”)的相對關系不變,但具體編碼 p m p_m pm? 和 p n p_n pn? 的值不同,交互項隨之調整,反映新的順序。
與相對位置編碼的關系
-
相對位置編碼(如Transformer-XL、RoPE)直接通過這種交互項建模位置關系。例如:
-
在注意力分數中加入相對位置偏置 R m ? n R_{m-n} Rm?n?,使 a m n a_{mn} amn? 依賴 m m m 和 n n n 的距離。
-
這與 p m T ? 2 f ? x m ? x n p n p_m^T \frac{\partial^2 f}{\partial x_m \partial x_n} p_n pmT??xm??xn??2f?pn? 的形式一致,明確捕捉相對位置效應。
-
1.3.3 更深入的解釋
絕對位置信息的作用機制
-
獨立性:單位置項(如 p m T ? f ? x m p_m^T \frac{\partial f}{\partial x_m} pmT??xm??f?)為每個詞元提供獨立調整,使模型感知"這是第 m m m 個位置"。
-
Transformer中的體現:
-
輸入變為 x m + p m x_m + p_m xm?+pm?,自注意力計算 q m = ( x m + p m ) W Q q_m = (x_m + p_m) W_Q qm?=(xm?+pm?)WQ?,鍵和值類似。
-
注意力分數 q m T k n q_m^T k_n qmT?kn? 包含 p m T W Q W K T x n p_m^T W_Q W_K^T x_n pmT?WQ?WKT?xn?,獨立調整每個位置的貢獻。
-
-
局限:絕對位置編碼需通過模型學習間接推斷相對關系,效率較低。
相對位置信息的作用機制
-
交互性:交互項(如 p m T ? 2 f ? x m ? x n p n p_m^T \frac{\partial^2 f}{\partial x_m \partial x_n} p_n pmT??xm??xn??2f?pn?)直接建模位置 m m m 和 n n n 的關系。
-
Transformer中的體現:
-
在自注意力中, q m T k n = ( x m + p m ) T W Q W K T ( x n + p n ) q_m^T k_n = (x_m + p_m)^T W_Q W_K^T (x_n + p_n) qmT?kn?=(xm?+pm?)TWQ?WKT?(xn?+pn?),展開后包含 p m T W Q W K T p n p_m^T W_Q W_K^T p_n pmT?WQ?WKT?pn?。
-
這一項依賴 p m p_m pm? 和 p n p_n pn? 的交互,與相對距離相關,直接影響 a m n a_{mn} amn?。
-
-
優勢:相對位置編碼更自然地捕捉語言中的相對順序,如動詞和賓語的距離。
結合實例
-
絕對位置編碼:
-
三角函數編碼為位置1(“貓”)生成 p 1 = [ sin ? ( 1 / 1000 0 2 i / d ) , cos ? ( 1 / 1000 0 2 i / d ) ] p_1 = [\sin(1/10000^{2i/d}), \cos(1/10000^{2i/d})] p1?=[sin(1/100002i/d),cos(1/100002i/d)],獨立標識其位置。
-
模型通過 p 1 T ? f ? x 1 p_1^T \frac{\partial f}{\partial x_1} p1T??x1??f? 調整"貓"的權重。
-
-
相對位置編碼:
-
Transformer-XL中, p 1 T W Q W K T p 2 p_1^T W_Q W_K^T p_2 p1T?WQ?WKT?p2? 表示"貓"和"追"的相對位置效應,調整注意力權重。
-
若距離為1(如鄰近),交互項增強關聯;若距離變大,效應減弱。
-
1.3.4 總結與意義
-
絕對位置信息:
-
通過單位置項(如 p m T ? f ? x m p_m^T \frac{\partial f}{\partial x_m} pmT??xm??f?)為每個詞元提供獨立標識。
-
對應絕對位置編碼(如三角函數編碼),在輸入層打破置換不變性。
-
示例:區分"貓"在位置1和"狗"在位置3。
-
-
相對位置信息:
-
通過交互項(如 p m T ? 2 f ? x m ? x n p n p_m^T \frac{\partial^2 f}{\partial x_m \partial x_n} p_n pmT??xm??xn??2f?pn?)捕捉位置間關系。
-
對應相對位置編碼(如RoPE),直接調整注意力權重。
-
示例:增強"貓"和"追"的鄰近關系。
-
-
綜合效果:
- 絕對位置編碼奠定基礎,相對位置編碼優化關系建模,二者共同使Transformer感知順序,適應復雜語言任務。
1.4 所有位置編碼都是為了解決置換不變性嗎?
位置編碼的主要目的是解決置換不變性,但并非其唯一作用。不同的位置編碼方法在實現這一目標的同時,還可能帶來其他效果或改變模型行為:
-
是的,解決置換不變性是核心目標:
- 無論是絕對位置編碼還是相對位置編碼,其根本目的是讓模型感知詞元順序,打破自注意力的對稱性。
- 例如,三角函數編碼、可訓練編碼、RoPE等都旨在引入位置依賴性。
-
除此之外的額外作用:
- 外推性(Extrapolation):
- 定義:外推性是指模型在處理比訓練時見過的序列更長的輸入時,依然能夠保持良好性能的能力。也就是說,模型能夠"外推"到訓練數據分布之外的序列長度。
- 某些位置編碼(如三角函數編碼、相對位置編碼)具有良好的外推性,能處理比訓練時更長的序列。可訓練位置編碼則受限于預定義長度。
- 計算效率:
- 絕對位置編碼(如可訓練編碼)增加存儲需求,相對位置編碼(如RoPE)可能增加注意力計算的開銷。
- 任務適應性:
- 相對位置編碼更適合自然語言處理任務,因為語言中相對順序通常比絕對位置更重要(如句法關系)。
- 模型表達能力:
- 相對位置編碼(如Transformer-XL)增強了對長距離依賴的捕捉能力;RoPE結合絕對和相對位置優勢,提升線性注意力的性能。
- 創新性設計:
- 一些新型位置編碼(如遞歸位置編碼FLOATER)不僅解決順序問題,還通過動態系統建模增強長序列處理能力。
- 外推性(Extrapolation):
1.5 總結
- 如何解決置換不變性:
- 位置編碼通過引入位置信息打破自注意力的對稱性。絕對位置編碼為每個詞元添加獨特標識,相對位置編碼直接建模詞元間關系。
- 數學表現:
- 置換不變性體現為 Attention ( P X ) = P ? Attention ( X ) \text{Attention}(P X) = P \cdot \text{Attention}(X) Attention(PX)=P?Attention(X)。位置編碼使輸入或注意力計算依賴位置,置換后結果不再等價。
- Taylor展開顯示其包含絕對位置項和相對位置項。
- 是否只為置換不變性:
- 核心目標是解決置換不變性,但也帶來外推性、效率、適應性等額外改變。
2. 注意力機制的查詢與位置向量:理解它們的關系與作用過程
2.1 基礎概念回顧
2.1.1 注意力機制的核心組件
注意力機制基于三種向量:查詢(Query)向量、鍵(Key)向量和值(Value)向量。這些向量通過以下方式生成:
- 輸入嵌入:每個詞元首先被轉換為嵌入向量 x i x_i xi?
- 線性變換:通過權重矩陣將嵌入向量投影為查詢、鍵和值
- 查詢向量: q i = x i W Q q_i = x_i W_Q qi?=xi?WQ?
- 鍵向量: k i = x i W K k_i = x_i W_K ki?=xi?WK?
- 值向量: v i = x i W V v_i = x_i W_V vi?=xi?WV?
2.1.2 位置編碼的角色
位置編碼為每個位置生成一個向量表示,使模型能夠理解序列中詞元的順序。基本形式是:
- 對于位置 p p p,生成位置編碼向量 P E ( p ) PE(p) PE(p)
- 將位置編碼加到輸入嵌入: x i + P E ( i ) x_i + PE(i) xi?+PE(i)
2.2 位置向量與查詢向量的關系
現在,讓我解釋位置向量如何影響查詢向量,以及整個注意力計算過程。這里我將采用旋轉位置編碼(RoPE)作為例子,因為它最直接地展示了位置信息與查詢/鍵向量的交互。
2.2.1 標準注意力機制中的作用過程
在標準的Transformer中(使用加性位置編碼,如正弦位置編碼),過程如下:
-
位置信息融入:
- 將位置編碼加到輸入嵌入: x ~ i = x i + P E ( i ) \tilde{x}_i = x_i + PE(i) x~i?=xi?+PE(i)
- 生成查詢向量: q i = x ~ i W Q = ( x i + P E ( i ) ) W Q q_i = \tilde{x}_i W_Q = (x_i + PE(i)) W_Q qi?=x~i?WQ?=(xi?+PE(i))WQ?
- 生成鍵向量: k j = x ~ j W K = ( x j + P E ( j ) ) W K k_j = \tilde{x}_j W_K = (x_j + PE(j)) W_K kj?=x~j?WK?=(xj?+PE(j))WK?
-
注意力計算:
- 計算注意力分數: a i j = q i ? k j d k a_{ij} = \frac{q_i \cdot k_j}{\sqrt{d_k}} aij?=dk??qi??kj??
- 應用softmax歸一化: α i j = softmax ( a i j ) \alpha_{ij} = \text{softmax}(a_{ij}) αij?=softmax(aij?)
- 加權求和值向量: o i = ∑ j α i j v j o_i = \sum_j \alpha_{ij} v_j oi?=∑j?αij?vj?
在這個過程中,位置信息間接地影響了查詢和鍵向量,從而影響注意力分數的計算。
2.2.2 RoPE中的作用過程
在旋轉位置編碼中,位置信息與查詢和鍵向量的交互更加直接和明確:
-
位置旋轉應用:
- 生成基礎查詢向量: q i = x i W Q q_i = x_i W_Q qi?=xi?WQ?
- 應用位置旋轉: q ^ i = R θ , i q i \hat{q}_i = R_{\theta, i} q_i q^?i?=Rθ,i?qi?
- 同樣地,對鍵向量: k ^ j = R θ , j k j \hat{k}_j = R_{\theta, j} k_j k^j?=Rθ,j?kj?
其中 R θ , p R_{\theta, p} Rθ,p? 是基于位置 p p p 的旋轉矩陣。
-
注意力計算:
- 計算旋轉后的注意力分數: a i j = q ^ i ? k ^ j = q i ? R θ , i ? j k j a_{ij} = \hat{q}_i \cdot \hat{k}_j = q_i \cdot R_{\theta, i-j} k_j aij?=q^?i??k^j?=qi??Rθ,i?j?kj?
- 應用softmax歸一化: α i j = softmax ( a i j ) \alpha_{ij} = \text{softmax}(a_{ij}) αij?=softmax(aij?)
- 加權求和值向量: o i = ∑ j α i j v j o_i = \sum_j \alpha_{ij} v_j oi?=∑j?αij?vj?
注意關鍵的數學性質: q ^ i ? k ^ j = q i ? R θ , i ? j k j \hat{q}_i \cdot \hat{k}_j = q_i \cdot R_{\theta, i-j} k_j q^?i??k^j?=qi??Rθ,i?j?kj?。這表明旋轉后的點積直接編碼了相對位置 i ? j i-j i?j,使模型能夠明確感知詞元間的相對位置關系。
2.3 詳細的作用過程示例
讓我通過一個具體例子來說明位置向量和查詢向量如何協同工作。假設我們處理一個簡單的句子:“人工智能正在快速發展”。
2.3.1 步驟1: 輸入處理與位置融合
以RoPE為例,處理流程如下:
-
詞元嵌入:每個詞元轉換為嵌入向量
- “人工” → x 0 x_0 x0?
- “智能” → x 1 x_1 x1?
- “正在” → x 2 x_2 x2?
- “快速” → x 3 x_3 x3?
- “發展” → x 4 x_4 x4?
-
生成查詢和鍵向量:
- q 0 = x 0 W Q q_0 = x_0 W_Q q0?=x0?WQ?, k 0 = x 0 W K k_0 = x_0 W_K k0?=x0?WK? (位置0)
- q 1 = x 1 W Q q_1 = x_1 W_Q q1?=x1?WQ?, k 1 = x 1 W K k_1 = x_1 W_K k1?=x1?WK? (位置1)
- … 以此類推
-
應用位置旋轉:
- q ^ 0 = R θ , 0 q 0 \hat{q}_0 = R_{\theta, 0} q_0 q^?0?=Rθ,0?q0?, k ^ 0 = R θ , 0 k 0 \hat{k}_0 = R_{\theta, 0} k_0 k^0?=Rθ,0?k0?
- q ^ 1 = R θ , 1 q 1 \hat{q}_1 = R_{\theta, 1} q_1 q^?1?=Rθ,1?q1?, k ^ 1 = R θ , 1 k 1 \hat{k}_1 = R_{\theta, 1} k_1 k^1?=Rθ,1?k1?
- … 以此類推
在這個過程中,每個查詢和鍵向量都通過位置特定的旋轉變換,將位置信息編入向量表示中。
2.3.2 步驟2: 注意力計算
考慮位置2的詞元"正在"如何與其他詞元交互:
-
計算注意力分數:對于每個位置 j j j,計算 a 2 j = q ^ 2 ? k ^ j a_{2j} = \hat{q}_2 \cdot \hat{k}_j a2j?=q^?2??k^j?
- 與"人工"的注意力: a 20 = q ^ 2 ? k ^ 0 = q 2 ? R θ , 2 ? 0 k 0 = q 2 ? R θ , 2 k 0 a_{20} = \hat{q}_2 \cdot \hat{k}_0 = q_2 \cdot R_{\theta, 2-0} k_0 = q_2 \cdot R_{\theta, 2} k_0 a20?=q^?2??k^0?=q2??Rθ,2?0?k0?=q2??Rθ,2?k0?
- 與"智能"的注意力: a 21 = q ^ 2 ? k ^ 1 = q 2 ? R θ , 2 ? 1 k 1 = q 2 ? R θ , 1 k 1 a_{21} = \hat{q}_2 \cdot \hat{k}_1 = q_2 \cdot R_{\theta, 2-1} k_1 = q_2 \cdot R_{\theta, 1} k_1 a21?=q^?2??k^1?=q2??Rθ,2?1?k1?=q2??Rθ,1?k1?
- 與自身的注意力: a 22 = q ^ 2 ? k ^ 2 = q 2 ? R θ , 2 ? 2 k 2 = q 2 ? R θ , 0 k 2 = q 2 ? k 2 a_{22} = \hat{q}_2 \cdot \hat{k}_2 = q_2 \cdot R_{\theta, 2-2} k_2 = q_2 \cdot R_{\theta, 0} k_2 = q_2 \cdot k_2 a22?=q^?2??k^2?=q2??Rθ,2?2?k2?=q2??Rθ,0?k2?=q2??k2?
- 與"快速"的注意力: a 23 = q ^ 2 ? k ^ 3 = q 2 ? R θ , 2 ? 3 k 3 = q 2 ? R θ , ? 1 k 3 a_{23} = \hat{q}_2 \cdot \hat{k}_3 = q_2 \cdot R_{\theta, 2-3} k_3 = q_2 \cdot R_{\theta, -1} k_3 a23?=q^?2??k^3?=q2??Rθ,2?3?k3?=q2??Rθ,?1?k3?
- 與"發展"的注意力: a 24 = q ^ 2 ? k ^ 4 = q 2 ? R θ , 2 ? 4 k 4 = q 2 ? R θ , ? 2 k 4 a_{24} = \hat{q}_2 \cdot \hat{k}_4 = q_2 \cdot R_{\theta, 2-4} k_4 = q_2 \cdot R_{\theta, -2} k_4 a24?=q^?2??k^4?=q2??Rθ,2?4?k4?=q2??Rθ,?2?k4?
-
應用softmax: α 2 j = softmax ( a 2 j ) \alpha_{2j} = \text{softmax}(a_{2j}) α2j?=softmax(a2j?)
這將注意力分數歸一化為概率分布,表示"正在"對每個位置的關注程度。
-
加權聚合值向量: o 2 = ∑ j α 2 j v j o_2 = \sum_j \alpha_{2j} v_j o2?=∑j?α2j?vj?
這一步合成了與"正在"相關聯的信息,同時考慮了位置關系。
2.3.3 關鍵觀察
在上面的例子中,我們可以觀察到幾個重要特點:
-
相對位置的直接編碼:注意力分數 a 2 j a_{2j} a2j? 直接依賴于相對位置 2 ? j 2-j 2?j,通過 R θ , 2 ? j R_{\theta, 2-j} Rθ,2?j? 編碼。
-
自注意力的特殊性:當 i = j i=j i=j 時(詞元與自身的注意力),旋轉矩陣變為單位矩陣 R θ , 0 R_{\theta, 0} Rθ,0?,使得 a i i = q i ? k i a_{ii} = q_i \cdot k_i aii?=qi??ki?,這是標準內積。
-
前后關系的區分:
- 前面的詞元(如"人工"和"智能")通過正相對位置 ( + 2 , + 1 ) (+2, +1) (+2,+1) 編碼
- 后面的詞元(如"快速"和"發展")通過負相對位置 ( ? 1 , ? 2 ) (-1, -2) (?1,?2) 編碼
這使模型能夠區分前后文關系。
2.4 位置向量如何影響注意力分布
位置編碼對注意力分布的影響是多方面的,這種影響通過以下機制實現:
2.4.1 相對距離敏感性
在RoPE中,旋轉矩陣 R θ , i ? j R_{\theta, i-j} Rθ,i?j? 編碼相對距離 i ? j i-j i?j,這使得模型能夠學習距離敏感的注意力模式:
- 近距離偏好:模型可以學習給予臨近詞元更高的注意力
- 語法依賴:捕捉如主謂關系等可能跨越多個位置的結構
- 長距離關聯:識別遠距離的相關信息,如代詞與其指代對象
2.4.2 方向感知
RoPE的一個關鍵特性是它能區分正負相對位置,即前文和后文:
- 當 i > j i > j i>j 時(關注前面的內容),旋轉矩陣是 R θ , + ( i ? j ) R_{\theta, +(i-j)} Rθ,+(i?j)?
- 當 i < j i < j i<j 時(關注后面的內容),旋轉矩陣是 R θ , ? ( j ? i ) R_{\theta, -(j-i)} Rθ,?(j?i)?
這使模型能夠學習方向敏感的注意力模式,例如在英語中,形容詞通常在名詞前面,而在漢語中,形容詞的位置可能更靈活。
2.4.3 頻率差異化
RoPE使用不同頻率的旋轉,對應于向量的不同維度:
- 高頻組件(向量的前幾對維度)對小的位置變化敏感,有助于捕捉局部結構
- 低頻組件(向量的后幾對維度)對大的位置變化敏感,有助于捕捉全局結構
這種多尺度表示使模型能夠同時關注局部語法關系和全局文檔結構。
2.5 注意力查詢和位置向量的共同演化
在訓練過程中,注意力機制的查詢向量和位置編碼不是靜態的,而是通過反向傳播共同演化:
-
查詢投影學習:權重矩陣 W Q W_Q WQ? 學習如何從輸入嵌入生成有效的查詢向量
-
位置解釋學習:模型學習如何解釋位置編碼提供的位置信息
-
位置敏感的內容識別:模型逐漸發展出位置感知的表示,使相同詞在不同位置可以有不同的解釋
這種共同演化使模型能夠形成復雜的注意力模式,例如:
- 在句子開頭關注主語
- 在動詞后關注賓語
- 在代詞處回溯尋找指代對象
2.6 實際應用中的表現
在實際應用中,位置編碼與注意力查詢的交互表現出豐富的模式:
2.6.1 例子:情感分析任務
考慮句子:“這部電影很無聊,但演員表演精彩”。
在沒有位置編碼的情況下,模型可能無法區分"無聊"和"精彩"分別修飾什么,導致情感判斷混淆。
有了位置編碼,注意力查詢能夠正確關聯:
- “無聊"與"電影”
- “精彩"與"演員表演”
- "但"作為轉折關系的信號
這種正確的關聯是通過位置編碼與查詢向量的交互實現的。
2.6.2 例子:翻譯任務
在翻譯英語到中文時,位置編碼幫助模型處理兩種語言不同的語法結構:
英語:“The red car is parked outside the building.” 中文:“紅色的汽車停在建筑物外面。”
位置編碼使模型能夠學習:
- 英語中形容詞在名詞前(“red car”)
- 英語中使用被動語態的位置結構
- 中文中表達位置關系的不同方式
這種跨語言的結構映射依賴于位置編碼與注意力機制的緊密協作。
參考
更詳細的分類和介紹
- 蘇神科學空間
- https://0809zheng.github.io/2022/07/01/posencode.html
- Rope解析