Transformer升级之路:从Performer到线性Attention
?PaperWeekly 原創 ·?作者|蘇劍林
單位|追一科技
研究方向|NLP、神經網絡
看過筆者之前的文章線性Attention的探索:Attention 必須有個 Softmax 嗎?和 Performer:用隨機投影將 Attention 的復雜度線性化的讀者,可能會覺得本文的標題有點不自然,因為是先有線性 Attention 然后才有 Performer 的,它們的關系為“Performer 是線性 Attention 的一種實現,在保證線性復雜度的同時保持了對標準 Attention 的近似”,所以正常來說是“從線性 Attention 到 Performer”才對。
然而,本文并不是打算梳理線性 Attention 的發展史,而是打算反過來思考 Performer 給線性 Attention 所帶來的啟示,所以是“從 Performer 到線性 Attention”。
激活函數
線性 Attention 的常見形式是:
其中 、 是值域非負的激活函數。那么如何選取這個激活函數呢?Performer 告訴我們,應該選擇指數函數:
首先,我們來看它跟已有的結果有什么不一樣。在《Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention》[1] 給出的選擇是:
我們知道 正是 在 x=0 處的一階泰勒展開,因此 這個選擇其實已經相當接近 了。
此外, 這個方案還跟《Efficient Attention: Attention with Linear Complexities》[2] 一文中引入的雙重 softmax 來構建線性 Attention 的設計很相似,在那種設計中有 ,相比直接 只不過歸一化的位置有所不同。
簡單推導
為什么說 Performer 告訴我們激活函數的最佳選擇是 呢?我們來看 Performer 找到的將標準 Attention 線性化的映射:
簡單來說,Performer 找到了一個映射,使得 d 維向量 被映射為了 m 維向量 ,并且滿足近似關系 ,此時:
最后一個等式表明,往 里邊乘以一個常數(哪怕這個常數跟 有關),Performer 的結果完全不改變,這意味著將映射改為:
Performer 的結果不會有任何變化。當然,這里 這一項還不能去掉,但是如果我們假設 不會波動太大,它并不是 Attention 的主要因素,那么這一項也相當于一個常數,于是最終的映射(近似地)等價為:
這個看上去已經簡化很多的映射該怎么理解呢?其實 m 個隨機向量 拼成了一個 的矩陣,它將 d 維的 映射為了 m 維的向量,然后加上激活函數 得到了 。我們知道 Attention 的 都有一個全連接層變換,如果我們將這個 的映射矩陣整合到全連接層中,那么剩下的就是一個激活函數 了!
所以這就是最優激活函數 的來源了,只要我們將 的輸出維度從 d 維改為 m 維,然后配合 的激活函數,那么理論上它就有 Performer 的擬合能力,甚至更強,因為 Performer 的 矩陣是一個固定的隨機矩陣,而這里我們相當于把該矩陣也設為可訓練了,還去掉了低秩約束,空間是比 Performer 更大的。
低秩問題
不管是本文的主角 Performer,還是之前在 Nystr?mformer:基于矩陣分解的線性化 Attention 方案介紹的 Nystr?mformer,它們的思路都是“尋找一個能逼近標準 Attention 的線性 Attention”。那么一個很自然的問題就是:標準 Attention 有什么好的?哪里值得大家向它對齊?
從信息損失的角度來看,標準 Attention 矩陣的“秩”可能更大,即更接近可逆矩陣,這意味著它能保留更多有效信息。具體來說,Attention 矩陣是一個 的矩陣,它由 通過 而來,要注意的是,這里的 d 是 Attention 的key_size,比如對于 BERT base 來說它只是 64,而 n 往往比較大,這說明 的秩不超過d,而且 ,即離滿秩還遠得很。
不過,softmax 的關鍵運算是 ,一個矩陣如果每個元素取指數的話,那么新矩陣的秩是可能增加的!所以標準 Attention 矩陣有升秩的可能性,意味著它蘊含了更有效處理信息的能力。
相比之下,線性 Attention 矩陣是 的形式,所以線性 Attention 矩陣的秩一定不超過 m,而為了彌補秩的損失,所以一般要設置 m > d,在 Performer 的實驗中選擇的是 m = 4d,也就是 key_size 擴大為 4 倍,秩的重要性可見一斑。當然,擴大了 key_size,一個直接的后果是處理短序列的時候,線性 Attention 還比標準 Attention 要慢,這是線性 Attention 的固有瓶頸。
關于 Attention 矩陣的秩的理論分析,也有一些論文可以參考,比如《Low-Rank Bottleneck in Multi-head Attention Models》[3] 就指出哪怕在標準 Attention 中,低秩性也是一個嚴重的瓶頸,增大 key_size 可以提升性能;
上個月的《Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth》[4] 則指出,如果沒有殘差和 FFN,那么標準 Attention 有極大的風險退化為秩等于 1 的簡單變換。連標準 Attention 這個有“升秩潛力”的模型都有低秩問題,更不用說線性 Attention 這種本身秩就有上限的模型了。
所以,一句話就是:用線性 Attention 需要用更大的 key_size 來維持矩陣的秩。
集中注意
我們還可以從稀疏性角度來理解標準 Attention 的好處。直觀來想,既然是“注意力機制”,那么肯定需要“集中注意力”,如果太分散,那么可能就相當于平均池化了,而“集中注意力”,意味著每個 token 應該只能顯著地關聯到若干個 token,用數學的話說,那就是意味著 Attention 矩陣是稀疏的,或者說至少要具備變得稀疏的可能性。
對于標準 Attention 來說,它通過 softmax 來歸一化:
其中指數函數 起到了一個放大的作用,只要各個 本身能拉開一定差距,那么 會進一步放大這種差距,結果就是歸一化之后除了最大值的那幾個位置之外,剩下的概率都很接近于 0 了,這說明標準 Attention 是有潛力“集中注意力”的。
而對于線性 Attention 來說,它是直接內積的結果,沒有得到 的進一步放大,所以它的注意力是比較稠密的,在序列長度較大的時候,它往往就很接近平均池化了。要緩解這一點,還是需要增大 key_size,來放大差距,直觀來說,就是 n 向量放到一個低維空間太“擠”了,換到更高維的空間就“松”一些了。
怎么樣驗證稀疏的重要性呢?筆者曾經嘗試過,將線性 Attention 的 Attention 矩陣先算出來,然后強行截斷 Attention 矩陣(也就是每個token只跟前后幾個 token 做 attention,變成局部形式的 Attention)讓它變得稀疏,結果發現這種截斷后的線性 Attention 效果明顯好于全矩陣的線性 Attention。
這就肯定了稀疏的重要性了,當然,這樣把 Attention 矩陣先算出來然后前行截斷的方式,使得線性 Attention 的復雜度不再是線性的了,因此不具備實用價值,僅用于理論驗證。
還有一個實驗現象可以輔助證明稀疏的重要性,那就是線性 Attention 做語言模型或者解碼器的時候,效果是跟標準 Attention 差不了多少的,這時候線性 Attention 變成了單向的 RNN(參考《Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention》[1] ),等價于 Attention 矩陣變成了下三角陣,也是更稀疏了。相比之下,如果用不稀疏的雙向的線性 Attention 直接做 MLM 模型,則掉點會相當明顯。
更重要的是,稀疏性和前一節提到的秩是有密切關聯的,甚至可以說它們是“一體兩面”:適當的稀疏化方法能提高矩陣的秩!比如做語言模型的下三角 Attention 矩陣,只要對角線元素非零(往往都能達到),那么這時候的矩陣直接就是滿秩可逆陣了!還有筆者實驗的局部 Attention 截斷,也能增加矩陣的秩,比如極端情況下,每個 token 只跟自身做 attention,那么 Attention 矩陣就是滿秩的單位陣了!
文章小結
本文從 Performer 出發思考了線性 Attention 的一些問題,包括關于線性 Attention 的激活函數選擇,以及線性 Attention 的瓶頸所在(低秩性、稀疏性),總的結論是,線性 Attention 的最佳激活函數應當是指數函數,而有效的 Attention 機制應當具備更高的秩和更大的稀疏性。
參考文獻
[1] https://arxiv.org/abs/2006.16236
[2] https://arxiv.org/abs/1812.01243
[3] https://arxiv.org/abs/2002.07028
[4] https://arxiv.org/abs/2103.03404
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的Transformer升级之路:从Performer到线性Attention的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解京东商城智能对话系统(生成+检索)
- 下一篇: 深入解读首个万亿级语言模型Switch