# Position Encoding 作者: Xuanqing Liu、Hsiang-Fu Yu、Inderjit Dhillon、Cho-Jui Hsieh 整理:Pocky [論文連結](https://arxiv.org/abs/2003.09229) - - - - - ## 前言 這篇論文提出一種新的方法來幫助非循環模型(Non Recurrent Model)學習如何編碼位置的訊息。 ### Why: Non Recurrent Model,例如Transformer,對於位置的敏感度較低。 ### Main Reason: 與RNN或LSTM等Recurrent Model不同,Transformer的原始設計中,並沒有直接在其結構中考慮或包含輸入單元的位置信息。導致模型對輸入序列的不同排列會有相同的響應,這稱為排列等價(permutation equivalent)。 當時的模型,都會在 Iuput 的地方加入 Sinusoidal encoding/embedding layer。但這種作法有以下限制: 1. 由於手動設計的關係,導致不夠靈活 2. 不包含任何可學習的參數 3. 限制了輸入序列的最大長度 作者認為理想的位置編碼方法須符合下列三個特性: 1. Inductive:有能力處理在訓練時未見過的,比任何序列都長的序列 2. Data-Driven:要能夠從數據中學習 3. Parameter Efficient:引入的可訓練參數量應該有所限制,以避免增加模型大小,這可能會損害泛化能力。 提出一種連續的動態系統,只需要學習系統動態,不需要將每個位置的嵌入獨立開來學習,且完美的克服了上述的限制。 ### 主要貢獻 - 提出FLOw-bAsed TransformER - FLOATER,通過連續動態模型以數據驅動和參數高效的方式模擬位置信息。 - FLOATER可以處理任何長度的序列,使Inference變得更加靈活。 - 廣泛應用在各種Tranformer架構當中。 - 在NLP任務中,FLOATER相較於baseline models有明顯的性能改進。 - - - - - ## FLOATER:Proposed Position Encoder Introduce FLOATER in three steps ### First step: Only look at one Transformer block, and describe how to learn the position representation driven by a dynamical system. 當時的編碼方法不是用固定的sin函數來獲得$p_i$,不然就是將它們作為不相關的學習參數。這些做法都忽略了這些位置之間的依賴性。於是作者提出了一種動態系統來模擬這些位置。 Dynamical System: $p(t)=p(s)+\int^t_sh(τ,p(τ);θ _h)dτ, 0 \le s \le t \le \infty$ - $p(t)$:時間點t的位置編碼 - $p(s)$:時間點s的位置編碼 - $\int^t_sh(τ,p(τ);θ_h)$:整個動態系統的核心,代表位置編碼p(τ)在任何時間點τ的變化率 - $h$:h是神經網路,由$θ_h$進行參數化 ![image](https://hackmd.io/_uploads/S1Ll-1-eC.png) 在FLOATER模型中,位置向量$p_i$是通過動態系統迭代計算出來的。從初始位置$p_0$開始,每個後續的位置$p_{i+1}$都是基於前一個位置$p_i$,並考慮動態系統在給定時間間隔$Δ$內的行為,損失函數$L$則考慮了所有的位置編碼結果,並通過反向傳播來更新模型參數$w_h$,以最小化損失。 ![image](https://hackmd.io/_uploads/HycYM1Ze0.png) 上圖展示了前向傳播和反向傳播的方向。算是一個簡化的版本,其中只有位置編碼$p_s$和$p_t$被考慮。 - Forward: 從初始位置編碼$p_s$開始,通過動態系統$h$在每一個時間點上迭代更新位置編碼,直到達到$p_t$,這個過程可以表示為: $p_t=p_s+\int^t_sh(τ,p(τ);w_h)dτ$ 這反映了從$p_s$到$p_t$的位置編碼隨時間如何改變。一旦所有編碼被計算出來(從$p_0$到$p_N$),就可以計算整個序列的損失$L$。 - Backward: 反向傳播的過程中,梯度從損失$L$開始計算,使得模型更新參數$w_h$,以便於改善動態系統$h$的表現。 ### Second step: How to save parameters if we add position signals to every layer. 將位置訊息加入到Transformer的每一個block可以在語言理解任務中有更好的性能,作者所提出的FLOATER也可以被加入到每一個block中。 $p^{(n)}(t)=p^{(n)}(s)+\int^t_sh^{(n)}(τ,p^{(n)}(τ);θ _h^{(n)})dτ$ - $p^{(n)}(t)$:在第n個block和時間t的位置編碼 - $p^{(n)}(s)$:起始位置編碼 - $h^{(n)}$:第n個block的動態系統函數,而$θ _h^{(n)}$是對應的參數 但如果每一個block都加入的話,參數會過多導致訓練負擔,所以選擇在所有block之間共享參數。 即:$θ_h^{(1)} = θ_h^{(2)} = .... = θ_h^{(N)}$ 但這不代表所有的$p^{(n)}$都是相同的,因為可以為每一個block指定不同的初始值。 這樣做就可以在Transformer的不同block之間共享動態位置編碼模型的參數,然後對每一個block給予不同的初始位置編碼值來維持唯一性,有效的減少了模型參數的數量。 ### Third step: Change the architecture to save trainable parameters further and make FLOATER “compatible” with the original Transformer 在這裡,作者改變了加入位置編碼的方式,以便FLOARTER可以直接從Transformer初始化。 一般Transformer計算Query的方式如下: $\tilde{q}^{(n)}_i = W^{(n)}_q(x_i+\tilde{p}^{(n)}_i)+b^{(n)}_q$ ------ 式子11 - $\tilde{p}^{(n)}_i$為sinusoidal encoding 而FLOATER的計算方式是: $q^{(n)}_i = W^{(n)}_q(x_i+p^{(n)}_i+b^{(n)}_q)$ $=$ $W^{(n)}_q(x_i+\tilde{p}^{(n)}_i)+b^{(n)}_q+W^{(n)}_q(p^{(n)}_i-\tilde{p}^{(n)}_i)$ $=$ $\tilde{q}^{(n)}_i+b^{(n)}_{q,i}$ ------ 式子12 其實FLOATER等價於在原始Transformer上增加一個偏置項,可以直接去學習偏置項b就好。 前述的Dynamical System可以改成以下: $b^{(n)}_q(t)=b^{(n)}_q(0)+\int^t_0h^{(n)}(τ,b^{(n)}_q(τ);θ _h)dτ.$ 所以如果將$h(\cdot)和b^{(n)}_q(0)設為0$, 則$b^{(n)}_q \equiv 0$ ,式子12就會退化為式子11,換句話說就是把動態模型設置為0, 即$h(p(\cdot);θ_h) \equiv 0$,那麼FLOATER就等同於具有Sinusoidal encoding的原始Tranformer。 Q:What is $b^{(n)}_{q,i}$ ?? Usage? A:$b^{(n)}_{q,i}$ 用於在每一個self-attentive layers {$A(\cdot)$}中引入位置訊息,不同於標準的Transformer的固定位置編碼,FLOATER引入的$b^{(n)}_{q,i}$是可變動的,通過Dynamical System計算,使模型能夠捕捉位置訊息隨著序列深度的變化。 - - - - - ## Experimental Results ![image](https://hackmd.io/_uploads/SkfPhx-eA.png) FLOARTER在WMT14 Ee-De and En-Fr dataset上的BLEU分數,不論是在基礎Transformer或是大型Transformer,作者提出的FLOATER都超越了其他兩種Position Encoder的表現。 另外,可以發現,在所有block上加入Position Encoder比只在Input block加入能有更好的表現。 而且不會帶來太多額外的負擔。 Focus on [$GLUE$](https://arxiv.org/abs/1804.07461)、[$RACE$](https://arxiv.org/abs/1704.04683)、[$SQuAD$](https://arxiv.org/abs/1606.05250) 三個語言理解test sets。 ![image](https://hackmd.io/_uploads/rkV_5xWe0.png) FLOATER在GLUE中的三個任務相較於RoBERTa有所改善。 - Single Sentence - Similarity and Paraphrase - Natural Language Inference ![image](https://hackmd.io/_uploads/B1VIOZZlR.png) 在RACE test sets 中,擁有更長的上下文,作者認為如何準確地把握位置訊息,是非常重要的,根據表4,FLOATER在性能上優於RoBERTa。 ![image](https://hackmd.io/_uploads/BkPosWWlA.png) 在SQuAD這個dataset中,每筆資料包含冗長的段落以及若干與段落相關的問題。 使用相同的數據處理與RoBERTa進行比較,根據表5,FLOATER表現比RoBERTa來的好。 And more ... - - - - - ## Conclusion