ICML 2020 | 基于连续动态系统学习更加灵活的位置编码
論文標題:
Learning to Encode Position for Transformer with Continuous Dynamical Model
論文作者:
Xuanqing Liu (UCLA), Hsiang-Fu Yu (Amazon), Inderjit Dhillon (UT Austin, Amazon), Cho-Jui Hsieh (UCLA)
論文鏈接:
https://arxiv.org/pdf/2003.09229.pdf
代碼鏈接:
https://github.com/xuanqing94/FLOATER
隨著Transformer時代的到來,各種花式位置編碼方法被提出,但是,它們要么需要手動地設計,要么受到文本長度的限制。
本文提出一種基于連續動態系統(Continuous Dynamic Model)的位置編碼,使用常微分方程(ODE)求解器學習,既不受文本長度的限制,又能建模位置上的關系,非常靈活。在NMT和NLU等任務上能實現比較好的結果。
位置編碼
以Transformer為代表的使用自注意力(Self-Attention)的模型具有位置置換不變性:打亂句子中的詞模型會得到同樣的特征。為此,此類模型需要加入“位置編碼”,讓模型能夠識別什么位置有什么詞。
當前已經有一些關于位置編碼的研究,如Transformer原文提出的三角函數編碼、可學習參數編碼,和后來的相對位置編碼等,但這些編碼方式都存在一些問題。
比如三角函數編碼,盡管可以處理理論上很長的句子,但是由于它是人為設計的而不是自動從數據中學習,那么就可能在效果上欠佳。
而可學習的參數編碼,盡管是模型自己學到的,但它能處理的文本長度是有限的,因為其需要的參數量是,是文本長度。
相對位置編碼需要的參數量是,和文本長度無關,但是它在一定程度上犧牲了遠距離的位置依賴。
我們希望位置編碼有以下特點:
可歸約性:能夠處理任何長度的文本
可學習性:不是人為指定的而是從數據中學到的
低參數性:引入的參數量是有限制的,而不是無限增長的
基于此,本文提出將位置編碼的學習歸入一種連續動態系統,這樣一來,就可以通過學習這個系統(模型)得到每個位置編碼,而不是單獨地為每個位置學習一個獨有的編碼。
同時,它也滿足了以上三個條件:(1)定義域為,可以學習任何長度的文本;(2)位置編碼是學習得到的;(3)參數量就是該系統的所有參數。
為了學習這個模型,本文使用了神經常微分方程(Neural ODE)求解方法。總的來說,本文貢獻如下:
提出FLOATER——一種新的位置編碼方案,通過連續動態系統和ODE學習;
FLOATER克服了以往位置編碼的若干缺點,可以處理任何長度文本;
FLOATER可以被運用到任何基于Transformer的模型中;
在機器翻譯、自然語言理解和問答等任務上,FLOATER實現了較好的效果提升。
Transformer位置編碼
在介紹FLOATER之前,我們先簡要介紹一下Transformer和位置編碼,并引入一些記號。
記為模型的第層,是第層的注意力層,是第層的前饋層,那么,Transformer的編碼層就可以表示為:
這里,是輸入序列。進行如下的自注意力操作:
以上沒有考慮位置編碼,如果把位置編碼加進來,那么每一層就可以表示為:
這里,上標是第層。的選擇有很多。Transformer給出的方案是三角函數,和可學習的參數。
FLOATER:基于連續動態系統的位置編碼
首先要明確,所謂的位置編碼其實是離散的,也即一個向量序列,然后依次加到輸入特征上。
但是從上面的概要中我們發現,這些序列在開始輸入的時候彼此之間是獨立的,如果想要建模位置編碼的相關性又該如何做呢?我們可以想象有這樣一個模型,它能接受前一個位置的編碼,得到下一個位置的編碼,即。
基于此,我們可以考慮一個連續版本的位置編碼,再考慮一個函數,這樣一來,我們就可以把域中的點映射為想要的高維位置編碼了。
現在的問題是,如何構造函數。我們可以使用一個連續動態系統:
并有初值。這里是一個神經網絡,參數為。這個式子的意思是,要得到在時刻的值,只需要考慮它前面的一個位置,計算之間的“增量”即可(即積分部分)。
因為函數是連續且定義在正實數域上的,而實際的位置編碼是定義在自然數域上的,所以在得到之后,我們可以建立一個的映射,比如,這樣一來,第個位置編碼就可以是,其中是間隔,可以自主設置(本文設置為0.1)。
現在剩下的問題就是,如何求解函數(注意到是一個輸入為點位置和該點值的神經網絡)。這等價于解如下常微分方程(ODE):
這個怎么解呢?我們在下面簡要說明,不感興趣的讀者可以略過下面的一節,或者可以參考原文附錄A和論文Neural Ordinary Differential Equations。
求解編碼函數
假設我們的輸入序列長度為,那么我們可以首先求出這個位置編碼:
然后按照常規的流程,把這些位置編碼加到輸入特征上,繼續往下走,直到最后產生損失:。那么為了更新,我們就要計算損失對它的梯度,這就可以用ODE的方法解決,如下圖所示:
于是,梯度可以計算為:
其中,可以通過下式得出:
權重共享
研究表明,在每一層都加入位置編碼會提高最終的效果,于是,第層的位置編碼就可以同樣表示為:
為了更高效地學習,我們共享所有層的模型參數,只不過是對不同的層有不同的初值。
與普通Transformer的關系
那么,FLOATER引入的位置編碼和普通的Transformer的關系是什么呢?回憶一下,普通Transformer計算Query的方式是這樣的:
這里是普通的位置編碼,比如三角函數編碼和可學習的參數編碼。那么,FLOATER的計算方式是:
顯然,FLOATER等價于在原來Transformer的基礎上增加一個偏置項,既然如此,我們直接去學習一個偏置項函數即可:
這時候,如果,則,這就退化到了普通的位置編碼了。這說明,普通的位置編碼是FLOATER的特例。
下圖是FLOATER的示意圖。
實驗
我們在機器翻譯、自然語言理解和問答上實驗。實驗設置、模型初始化詳見原文附錄。下表是機器翻譯的結果。可以看到,相比三角函數編碼和參數編碼,FLOATER編碼能夠實現較大的提升。
下表是NLU任務的結果。從表中可以看到,FLOATER幾乎在所有任務上都能超過RoBERTa,尤其是在大模型上有更大的優勢。在問答方面,FLOATER也略好于RoBERTa。
接下來看看在不同文本長度上各編碼方案的優劣。如下圖所見,當文本越長時,FLOATER的相對優勢就越明顯,這表明,FLOATER學到的編碼函數可以有較強的泛化能力。
其次,我們發現FLOATER和RNN是有一定的相似度的,這體現在位置編碼的計算方式上,如果我們通過下面的方式(RNN)來計算位置編碼又如何呢:
這里的表示第個位置,要么是(scalar),要么是三角函數表示的向量(vector)。在得到整個位置編碼序列之后,我們同樣地把它們和Transformer的輸入相加。
下表是幾種計算位置編碼方法的結果。可以看到,用RNN去計算位置編碼效果也不錯,但都沒有FLOATER好。
最后我們來看看幾種位置編碼的可視化,如下圖所示。
顯然,三角函數編碼(a)的結構化程度最好,而參數化編碼(b)就顯得比較雜亂,RNN編碼(d)幾乎就沒有結構化信息,而FLOATER(c)和三角函數編碼比較類似,具有一定結構化信息。
注意到,并不是說結構化程度越高效果就越好,此處只是在闡釋不同位置編碼具有怎樣的模式。
另一個值得注意的地方是,參數化編碼(b)的底部幾乎是常數,這是因為長文本在數據集中總的來說還是比較少的,所以這些比較遠的位置就難以得到更新。
換句話說,參數化編碼難以泛化到比較遠的地方。而FLOATER(c)則不然,盡管長文本比較少,但是它仍然有很好的泛化能力。
小結
本文提出了一種基于連續動態系統的位置編碼方法,可以不受文本長度的限制,可以從數據中學習,并且引入的參數量也不大。
實驗表明,這種位置編碼方式可以提升基線模型的表現,在機器翻譯、自然語言理解和問答等任務上表現良好。
近些年來,ODE/PDE和神經網絡結合的工作開始涌現,從物理上解釋、提升神經網絡是一條有前景的道路。
比如,Understanding and Improving Transformer From a Multi-Particle Dynamic System Point of View 這篇文章從ODE的角度試圖解釋Transformer,并且實現了很好的結果。我們期待未來有更多結合可解釋性的文章。
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的ICML 2020 | 基于连续动态系统学习更加灵活的位置编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字节跳动豆包智能硬件 Ola Frien
- 下一篇: 对抗阿尔茨海默病新希望,“大脑清道夫”胶