日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Transformer性能优化:运算和显存

發布時間:2024/10/8 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Transformer性能优化:运算和显存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


?作者 |?王晗煒

單位 |?中科院信工所ASCII LAB

研究方向 |?自然語言處理

概述

Transformer [1]?在如今的深度學習領域有著不可或缺的地位,它被廣泛應用于自然語言處理、圖像處理等領域,有著極大的影響力。自注意力機制作為 Transformer 模型的核心,其幾乎不含歸納偏置的特性在足量數據的基礎上帶給了 Transformer 模型強大的建模能力,也給 Transformer 帶來了一系列效率問題:運算和顯存的限制使得其無法在長序列問題建模上應用。針對此問題,許多工作對 Transformer 的結構進行了魔改,使得其性能得到優化,下面將對部分有代表性的工作進行介紹。


經典Transformer結構

經典的 Transformer 結構包含 Encoder 和 Decoder 兩個部分,主要的組成組件可以分為以下三個小塊:多頭自注意力(Multi-Head Self-Attention)、前饋神經網絡(Position-wise Feed-forward)以及殘差連接(Residual Connect)。

▲ Transformer模型結構圖

2.1 Multi-Head Self-Attention

自注意力機制是一種基于縮放點積的注意力機制,其將原始序列的輸入向量投影至三個不同的空間,作為 query、key 和 value,每個序列中的輸入都會對整個序列進行注意力計算,包括自身。在 Transformer 中這個過程還引入了多頭機制,即對輸入向量進行維度的切分,在每個頭的空間中進行同樣的操作,最后再將每個頭的信息拼接起來,以便學到更豐富的信息。

2.2 Position-wise Feed-forward

在 Transformer 的每個小模塊中,多頭自注意力模塊后面都會接上一個全連接的前向神經網絡模塊,其對輸入向量的維度進行放大再縮小(一般為放大四倍再縮小,例如 BERT),以下為模塊的公式描述:

2.3 Residual Connect

為了使模型能夠堆疊更多的子模塊,完成深度網絡的訓練而避免梯度消失等問題,Transformer 內每一個自注意力模塊和前向神經網絡模塊均會伴有殘差連接模塊:

2.4 復雜度分析

通過對以上三個模塊的簡單回顧,我們可以發現 Transformer 內主要運算資源消耗集中在 Mulit-Head Attention 模塊和 FFN 模塊,稍加分析我們可以得知其時間復雜度和空間復雜度如下:

▲ self-attention 和 FFN 模塊復雜度分析,T 代表序列長度,D 表示隱層向量的維度

從表中的分析可以看出,當輸入序列較短的時候,模型的主要計算開銷集中在 FFN 模塊(復雜度與隱層向量維度的平方成正比),而當輸入序列較長時,模型的計算開銷則會轉移至 Multi-Head Self-Attention 模塊(復雜度與序列長度的平方成正比)。目前基于 Transformer 結構的 BERT 等預訓練模型在一定維度下已經能夠達到較好的效果,因此 FFN 模塊的計算開銷一般能夠被承受,但是當輸入序列過長時,模型則無法進行處理,這也是目前 Transformer 架構模型的一個通病。下面我們將介紹一些工作針對此問題對 Transformer 模型的改進。


基于遞歸連接的改進

使用經典的 Transformer 模型時,當遇到輸入為長序列,很多模型采用的方式都是直接將序列進行截斷,像 Bert 這種預訓練模型一般只保留前 512 個字符,或者其他的模型將文本劃分為多個 segments,訓練的時候對每個 segment 單獨處理,segments之間沒有聯系,這便會導致以下兩個問題:

  • 文本最長語義依賴關系取決于 segment 的長度,不同 segment 之間沒有關聯

  • 分割出來的 segments 語義不完整,存在一句話分隔在兩個 segment 之中的情況

針對這一問題,Transformer-XL [2] 對原始的 Transformer 結構做了以下兩點改進:

  • 提出片段級遞歸機制,引入一個記憶模塊,循環用來建模片段之間的聯系。使得 Transformer 能夠對長距離依賴進行建模,解決上下文碎片化問題

  • 提出相對位置編碼機制,代替絕對位置編碼。避免使用記憶模塊時出現混淆

首先我們可以結合論文中的圖片來分析經典的 Transformer 是如何對長文本編碼的:

▲ Transformer分段訓練和測試

通過這張圖可以清晰地看見在訓練過程中每個 segment 會分別編碼,相互之間沒有任何聯系。在測試時為了保證測試的完整性,其對 segment 的劃分更為緊密,不同 segment 之間的重疊度很高,造成了運算資源開銷巨大。

而為了解決這一問題,Transformer-XL 引入了一個 memory 狀態,在對當前 segment 進行處理的時候,緩存并利用上一個 segment 中所有 layer 的隱向量序列,綜合兩個 segment 的信息進行 attention 等操作。為了節約計算資源的開銷,上一個 segment 的所有隱層向量只參與前向計算,不進行反向傳播,具體計算過程如下:?

通過此機制,Transformer-XL 能夠將序列的所有 segments 連接起來,在訓練測試過程中保持前后文的關聯。并且可以顯著地提高測試時的效率,其過程可以如下圖所示:

▲ Transformer-XL的訓練和測試過程

在引入片段級遞歸機制后,雖然能夠建模出截斷的文本的關聯性,但是也帶來了一個額外的問題:每個 segment 都添加相同的位置編碼,多個 segments 之間無法區分位置關系。針對此問題,Transfomer-XL 放棄使用絕對位置編碼,而是采用相對位置編碼,在計算當前位置隱向量的時候,考慮與之依賴 token 的相對位置關系。

首先將包含絕對位置編碼的 Attention 計算展開:

可以發現展開后的表達式與位置信息相關的僅為 ,如果以一個 的相對位置視角來看, 對于所有位置均為一個定值,變化的只是 的值,因此在使用相對位置編碼時我們可以將公式改寫為以下的形勢:

其中 和 為隨機初始化的可學習參數,在計算 self-attention 時,由于 query 所有位置對應的 query 向量是一樣的,因此不管的 query 位置如何,對不同單詞的 attention 偏差應保持相同。 為計算出來的位置向量編碼,同 Transformer 里的計算方式一致。

在原論文中作者使用字符級的語言模型任務對 Transformer-XL 進行了評估,與當時的一些基線模型相比取得了最優的結果:

▲ 部分語言模型實驗結果實驗

同時,如同前面分析的一致,Transformer-XL 在進行長文本推理時有著十分明顯的速度優勢,并且隨著序列長度的增大愈發明顯:

▲ 推理加速同序列長度的關系

總體而言,Transformer-XL 通過引入遞歸連接機制和相對位置編碼機制,使得 Transformer 模型有了能夠處理長序列的能力,無論在模型效果還是性能上均有可觀的提升,但是其對于長序列的解決思路是停留在分段這一個前提上的,并沒有真正得一次性處理全部長度的序列,只不過通過增加一些額外的空間開銷來讓實驗性能和效率有一定提升,也就是空間換性能和時間,從這個角度上來看 Transformer-XL 其實并不算優化了復雜度,反而增加了復雜度,提升的速度也只是相對于截斷式的原始 Transformer 速度的提升。


基于稀疏注意力的改進

Transformer 強大的性能可以說很大程度上來源于其特殊的 Self-Attention 注意力,而其巨大的計算開銷也來源于此,可謂禍福相依,接下來的改進均將圍繞這一機制進行,即如何在保證模型性能的前提下盡量減少 Attention 過程的計算開銷。


4.1 Sparse Transformer

引入稀疏注意力是很多工作的解決思路,其中 Sparse Transformer [3] 是較為早期的工作,其關注長序列的生成問題,針對 Transformer 因效率問題無法應用于長序列生成的任務,提出一種稀疏注意力機制來解決此問題,最終在圖像、文本、音頻三個模態上驗證了其效果。

首先作者為引入稀疏注意力機制做了一些實驗進行支撐:其構建了一個由原始 Transformer 模塊深層全注意力網絡,用于圖像的像素級自回歸生成任務,即把圖像的像素點按照從上到下從左到右的方式當成一個序列,然后在序列上去做自回歸。其在生成過程中對網絡的注意力情況進行了觀察,如下圖所示,底部的黑色部分表示還沒有生成的部分,白色凸顯的部分則是注意力權重高的地方。下圖是比較低的層次的注意力,可以看到,低層次的時候主要關注的還是局部區域的部分。

▲ 淺層注意力

在網絡的 19 層和 20 層,注意力的分布也發生了變化,開始關注橫向和縱向的像素點:

▲ 19層和20層的注意力

而還有一些層的注意力甚至學習到了物體本身的一些特征,例如它們的邊緣:

▲ 某些層的注意力

而我們通過對這些層注意力的觀察可以得知不同層的注意力關注的區域是不一樣的,但是無論其關注的是哪一部分的信息,注意力權重高的區域始終很小,即注意力是稀疏的,這為稀疏注意力機制的引入提供了實驗依據。

作者在設計稀疏注意力之前先對 Attention 的計算過程進行了重新定義:

這里同原始 Attention 范式的區別主要在于引入了 Attend 項,即當前位置關注的范圍,這里 表示 需要關注的范圍,對于自回歸生成任務中的 Transformer,。根據這個范式,我們在定義不同的稀疏注意力時就是在定義 。

論文中定義了兩種 Attention 機制,第一種為 Strided Attention,其描述如下:

▲ Strided Attention模式圖

上面的圖代表是二維的圖像像素圖,下面的圖是序列的注意力矩陣圖。這個注意力其實就分成兩個部分,每個字符關注前面若干個字符,然后每隔相同的間距關注一個字符。對應到圖像里面就是一個關注行,一個關注列。作者認為這種 attention 機制比較傾向于有規律的數據,比如圖像音頻,不適合文本。

另外論文中還設計了一種 Fixed Attention,描述如下:

▲ Fixed Attention模式圖

這里 c?是一個超參數。既然是針對文本的,我們看這個 attention 其實可以把左邊的二維圖的每一行看成一個句子,其實就變成了每個 token 關注自己句子之前的 token,然后關注之前句子特定位置的 token。相當于一個是局部注意力,一個是全局注意力。

可以看出每一種 Attention 模式都包含了多種關注方式,因此論文給出了三種 attention 結合的方式:

  • 不同層使用不同的注意力

  • 將所有的注意力方式融合

  • 不同的頭使用不同的注意力

論文直接表明第三種方式的效果最好。作者在三個模態的數據集上均進行了自回歸任務的實驗,均達到了較好的效果,甚至在速度和性能上都超過了原始的 self-attention。

▲ 三個模態上Sparse Transformer的性能結果

▲ 文本和圖像上Sparse Transformer的運行效率

由實驗結果還可以看出作者設計的注意力模式確實分別使用于圖像和文本。至此為對 Sparse Transformer 關于稀疏注意力部分的簡單介紹,該模型提出較早,雖然效果不如后面一些同樣基于稀疏注意力的模型,但是其范式的總結對后續模型的發展有著深遠的意義。

4.2 Longformer

Longformer [4] 和之前介紹的 Sparse Transformer 都可被視為同一類改動,也是設計不同的 Attention 范圍,但是 Longformer是專門為 NLP 任務設計的,因此除了評測模型本身的性能,其也在很多 NLP 下游任務上進行了實驗。

Longformer 設計了三種 Attention 模式,分為 Sliding Window、Dilated Sliding Window 和 Global Attention:

  • Sliding Window:對每個 token 設置一個 w 大小的窗口,每次進行 Attention 操作時僅對前后 w/2 個位置的 token

  • Dilated Sliding Window:為了能夠注意到更遠距離的 token,還可以對窗口進行挖洞,每隔 d 個位置關注一個字符

  • Global Attention:在捕獲到局部信息的同時,也不能丟失全局的信息,因此存在一些字符能夠關注到所有的字符,并且所有字符也能關注到此字符

▲ Longformer中的Attention機制

除此之外論文中給出了三個使用這些 Attention 的細節:

  • 窗口的大小會隨著模型層數的加深變大

  • 多頭注意力中,可以另某些頭使用 Sliding window,另外一些頭使用 Dilated sliding window

  • 對于不同的任務,設計不同的位置使用 global attention

在實驗部分,Longformer 首先和之前的模型一樣在自回歸任務上進行了實驗:

▲ Longformer 在字符級自回歸任務上的性能

可以看出 Longformer 較之于之前的模型有一個更好的效果,而如前文所提到的,Longformer 是專門為 NLP 任務設計的 Transformer 模型,因此其在下游任務上的表現也很重要。因為只修改 Attention 的范圍,不修改模型的結構,可以直接在預訓練模型 Roberta 的 checkpoint 上繼續訓練并且運用到下游任務上,這里預訓練的任務也是 MLM。將窗口大小設置為 512,添加了額外的 position embedding 到 4096 的大小,通過多次復制其 512 個位置嵌入來對其進行初始化。

隨后其在三個下游任務上進行了 Finetuning:

  • Question answering:問題和候選答案使用 Global Attention

  • Coreference Resolution:不使用 Global Attention

  • Document Classification:[CLS] 使用 Global Attention

其實驗結果如下所示:

▲ Longformer在下游任務中的效果

可以看出 Longformer 在下游的任務上的表現基本都超過了 Roberta,而且下游任務的數據集文本越長 Longformer 的優勢更為明顯。


4.3 Big Bird

還是在這個稀疏注意力的模式上,谷歌又繼續推出了?[5],除了之前的 window attention 和 global attention,還加入了一種 random attention,讓模型不局限于人為增加的強先驗。而對于 global attention 的使用,其還提出了兩種方式:

  • Big Bird-ITC:選擇已經存在于序列的詞匯使用 global attention

  • Big Bird-ETC:添加額外的特殊字符使用 global attention

該模型沒有單獨對模型效率進行評估,而是在大量下游任務上進行了實驗并取得了良好的效果:

▲ Big Bird在問答任務上的表現

總體而言,這三種都可以看成是一類稀疏 attention,都是通過引入一些先驗知識來限定 attention 的范圍,從而提升效率,看起來是直觀有效的,但是存在兩個問題:

  • 通用性降低:self-attention 相對于 CNN、RNN 這類模型一大優勢就是具有更廣泛的歸納偏置,也就是能夠處理更一般化的信息,做了這些限定之后其實算是一種倒退

  • 稀疏 Attention 計算優化困難:這種稀疏 attention 的做法雖然看上去很簡單,但是真正在實現的時候是沒那么方便的,前面兩種都設計到 cuda 內核的修改,后面的 big bird 設計了一種很復雜的分塊計算方法,實際的運算優化度不如理論上高


4.4 Reformer

前面幾種人為設計的稀疏 Attention 模式不一定能夠滿足待處理數據的特點,而且不具有普適性,而 Reformer [6] 使用了一種局部哈希的方式來獲取每個字符需要關注的范圍。在論文的開始,其提出了三個 Transformer 中存在的效率問題并給出了自己的解決思路:

  • 自注意力機制消耗的資源隨著序列長度的增長而平方倍增長:局部哈希

  • 模型占用的內存隨模型深度呈線性增長:可逆殘差

  • Feed-Forward 部分參數過多:分塊計算

首先我們可以介紹一下局部哈希算法,如下圖所示,對于空間中的點,先將其投影到一個圓上,然后將分成八個區域,每個區域都代表一個獨立的值。隨機轉動圓,記錄下投影后的點所在區域的值;那么經過多次轉動后,就為一個點得到了多個值,這些值就是點的哈希值。

▲ 局部哈希示例

上圖中的上半部分是兩個不相似的點組成的例子,它們的哈希值差別很大。下半部分則是兩個相似的點,它們的哈希值也是一樣的。通過這個簡單的示例我們就能發現,在空間中距離越近的點,其哈希完之后哈希值相同的概率也會越高,這就是局部敏感哈希的原理 [7]。

隨后我們可以通過矩陣乘法隨機構造一個哈希函數:

接著把原始 Attention 公式進行重寫:

這里 表示 mask 項, 表示歸一化項, 嘖表示當前字符注意的區域,這里規定為當前字符的 query 的哈希值和序列中 key 的哈希值相同的位置進行 Attention 操作。經過這些定義,我們可以將原序列按哈希值進行排序,并分為 個桶:

▲ 分桶哈希示意圖

上圖中左邊為序列的表示,可以觀察到其首先將序列進行哈希然后排序。這首先便會存在一個問題,就是 query 和 key 均通過一個哈希函數進行哈希,因此在一個桶中,可能會發生 query 很多但是 key 很少的問題,甚至,會有 qeury 很多而 key 不存在的問題。為了解決這個問題,這里讓 query 和 key 在同一空間,即生成 Q 和 K 的矩陣是同一個。這樣在避免了剛剛的問題的同時又引入了一個新的問題:同一個 token 的 key 值和 query 值的點積值會遠遠高于不同 token 之間的值,因此論文中的做法是不計算本身的 Attention 值。

看到這里 Reformer 對 Self-Attention 的優化思路已經很清晰了,就是講相似的 token 置于一個桶中,僅對在桶中進行 Attention 操作。然而在實現的過程中,我們需要保證桶內的元素分布均衡,否則在進行計算優化的時候會帶來很大的麻煩。在這里為了保證計算的均衡,采用的策略是分塊,如果一個桶的元素跨塊的話,則讓后面的塊再去 attend 到前一個塊中的元素(僅考慮自回歸任務時),如上圖左圖所示。由此可見 Reformer 的加速僅在模型結構上就能夠實現,較之之前幾種方式更為方便。

另外,在局部敏感哈希中,隨機的次數越多,得到的哈希桶就越準確,所以哈希值可以做多輪。這樣,P 就成為多次哈希的值的全集:

隨后論文針對局部哈希 Attention 的優化做了一個很有意思的實驗,該實驗的任務是重復句子的單詞預測,即將兩個相同的句子通過特殊字符拼接在一起,以 的格式作為序列輸入,每次通過前一個句子預測后面一個句子。其使用了一個單層的 Transformer 模型,通過訓練和測試時不同輪數的局部哈希進行了效果對比,實驗結果如下:

▲ 重復句預測實驗

可以發現無論在訓練時還是測試時,哈希的輪數越多模型的效果越好,這證明了多輪哈希的合理性和重要性,同時通過這個實驗我們也可以進一步認識到:局部哈希函數無需訓練,只需要隨機初始化,并且訓練和測試過程的哈希輪數和函數也可以不一致,自由度非常高。

在完成了對 Self-Attention 的優化后,論文還提出了一種可逆殘差的方式來解決模型過深帶來的性能開銷。在訓練網絡的時候,一般需要記錄每層的激活值,用來在反向傳播的時候進行計算。所以每增加一層,內存也會隨之增長。一般的殘差網絡的結構如下:

我們在反向傳播的過程中無法通過 y 復原 x 和 F(x) 的值,因此需要將其記錄下來,而論文通過對?進行拆分巧妙地避免了這一問題:

在 Transformer 的模塊中 和 不用由 拆分,只需分別代表 Self-Attention 和 FeedForward 的輸入即可:

同時,對于 FeedForward 部分,論文也進行了優化。該模塊的全稱為 Position-wise FeedForward,如名字所示,改模塊對序列中的每個 token 的操作是一樣的,也可以理解為 token 之間不會進行交互,因此當輸入序列過長時,完全可以講序列分段輸入,來緩解內存上的開銷。

論文針對自己優化的模塊在一些基礎任務上進行了實驗,來驗證模型優化的有效性:

▲ 驗證共享q、k參數和可逆殘差的效果

▲不同輪數哈希取得的效果

▲? 不同輪數哈希對應的模型效率

總體而言,Reformer 通過實驗證實了自己模型結構優化的有效性,多輪哈希在帶來效果提升的同時也會一定程度上降低模型的效率。相較于之前介紹的集中稀疏 Attention 機制的模型,Reformer 不依賴人工設計先驗知識,模型的適用性更廣,并且能夠在模型代碼層面進行優化,不涉及到cuda內核的修改。但是在模型的設計和實現上過于復雜,在時間和空間復雜度上反復橫跳,從最后的實驗結果也可以看出模型只在超長序列上效果較為明顯,能夠應用的場景還是十分有限的。


基于低秩分解的改進

同樣是解決 Self-Attention 部分的復雜度問題,Linformer?[8]?從另外一個角度給出了自己的優化方案。同 Sparse Transformer 一樣,其也先對自己的理論進行了實驗的論證。論文在在 Wiki103 和 IMDB 兩個數據集上,用 Roberta-large 模型上計算出的 Attention 矩陣做了奇異值分解,然后從下圖左兩圖中可以看出,前 128 維的奇異值累計值已經占了到了 0.9 左右。

而在右圖中可以看到,越高層,128 個奇異值累積值就越高。在第 11 層,128個奇異值累積起來達到了0.96。因而說明了,雖然 Attention 的計算結果是一個 N x N 的矩陣,但其實一個低秩矩陣比如 N x 128 可能就已經足夠存儲 Attention 的所有信息。因此直接對矩陣進行合理降維就能夠在保證模型效果的前提下完成 Self-Attention 過程復雜度從平方級到線性的轉變。

作者在論文中花了很多篇幅證明降維的合理性,在這里我們不過多贅述,感興趣的讀者可以自行閱讀原文。根據以上的結論,我們很容易想到在訓練和測試的過程對 K、V 的矩陣進行 SVD 分解就能夠解決效率問題,但實際上再測試過程中進行 SVD 分解還是比較麻煩,因此論文中給出了一種十分簡單粗暴的方式來代替這一步驟:直接給 key 和 value 矩陣加一層線性變換,將其的長度變為一個定值,其模型結構如下所示:

▲ Linformer 模型結構圖

由公式和模型圖均可知 Linformer 在 V 和 K 參與 Self-Attention 計算之前,通過兩個投影矩陣將其序列長度那一維降至一個固定值,因此無論原始序列的輸入長度是多少,最后均會變成一個 k 長度的向量,最后 Self-Attention 的時間復雜度也會變成線性復雜度。

論文在 MLM 預訓練任務和 NLP 下游任務上均做了實驗:

▲?MLM 預訓練任務實驗

▲?下游任務實驗

總體而言 Linformer 無論是在運行效率還是下游任務的效果上都有著不錯的表現,實現的方式也十分簡單,但是這種投影的方式卻有一個致命的缺陷,即無法做自回歸的生成任務,因為投影相當于把序列信息都雜糅至一個定長的向量,模型無法通過之前 causal mask 的方式將信息給掩蓋,這也是論文只進行了 MLM 預訓練任務的原因。


基于線性注意力的改進

在線性注意力的探索上,除了對 K、V 矩陣進行下采樣之外,還有一些工作給出了另一種視角。讓我們繼續回到注意力的計算過程,其本質上是三個矩陣的連乘,而矩陣的連乘是滿足結合律的,我們正常的計算順序是 ,前一步我們會得到一個 的矩陣,這一步將導致我的時間復雜度為 ,而如果我們以順序 計算,復雜度則會變成 。

▲ Attention 計算順序與復雜度

然而 softmax 的存在卻讓這一步的操作無法實現,因為其需要先將 值指數化并歸一化,因此沒有辦法先計算后面兩個矩陣的乘積。然而一定需要 softmax 嗎?

首先我們先來思考一下 Self-Attention 的本質,其使用點積相乘并進行 softmax 其實想得到的僅僅是 token 之間的相似度,因此其計算過程可以如下描述:

softmax 的目的其實只是使得注意力的值恒為正且滿足歸一化,而這兩個條件通過其他的方式顯然是可以實現的。Linear Transformer [9] 通過一種核函數的方式巧妙地替換了 softmax,其認為只需要找一個恒為正的核函數將 Q 和 K 的值進行映射便可完成以上過程:

這里 代表核函數,其定義如下:

如此轉換我們就可以將softmax函數刪去從而使得整個運算的復雜度變為 。

之后谷歌推出的 Performer [10]?的解決思路其實也和 Linear Transformer 是一致的,其工作的最大亮點在于為 softmax 找到了一個更為優美的映射來替代并給出了理論證明,而不像之前 Linear Transformer 那樣僅通過核函數的替換顯得有些空穴來潮。其映射表示如下 [11]:

由公式可知其使用了一種向量采樣的方式來表示 ,隨后為了使采樣出的向量能夠表征更多的信息,即讓采出來的向量線性無關,其對采樣出的向量使用了正交化技術。

Performer 也在一些任務上進行了測評,也是一些長序列相關的任務,我們可以簡單了解一下其大致性能:

▲ Performer 訓練和推理速度

▲?Performer 在蛋白質序列預測任務上的性能

模型綜合評測

上文已經對 Transformer 的魔改模型分類別介紹了不少,通過這些介紹我們可能能夠大致了解這些工作改進的思路和大概方法,但是很難知道這些模型在使用時的差異。針對這一問題,谷歌推出了一個評測框架 LRA [12] 對一眾 Transformer 改進模型進行了統一評測。

LRA 旨在用一些(形式)簡單、通用、有一定挑戰性的多個任務對這些模型進行長序列任務的評測,其中包括:

  • Long Listops

  • Byte-Level Text Classification

  • Byte-Level Document Retrieval

  • Image Classification on Sequences of Pixels

  • Pathfinder (Long-Range Spatial Dependency)

  • Pathfinder-X (Long-Range Spatial Dependencies with Extreme Lengths)

以下為模型在這些任務上的表現:

▲ LRA性能測試效果

▲?LRA速度測試效果

由結果可以大體看出 Linformer、Linear Transformer、Performer 效率很高,Big bird Reformer 效率很低,但是 Big Bird 的性能還是不錯的。總體的性能還可以由以下這張圖看出,其中縱軸是效果,橫軸是速度,圓圈的大小代表所需要的顯存。理論上來說,越靠近右上方的模型越好,圓圈越小的模型越好。

▲ Transformer 們的性能-速度-顯存圖



總結

本文大體介紹了若干種高效 Transformer 的改進版本,均集中在對長序列任務的處理上,里面有一些筆者對這些模型的思考,其中更多的細節感興趣的讀者可以自行閱讀原文。

參考文獻

[1] Transformer?https://arxiv.org/abs/1706.03762

[2] Transformer-XL?https://arxiv.org/abs/1901.02860

[3] Sparse Transformer?https://arxiv.org/abs/1904.10509

[4] Longformer?https://arxiv.org/abs/2004.05150

[5] Big Bird?https://arxiv.org/abs/2007.14062

[6] Reformer?https://arxiv.org/abs/2001.04451

[7] Reformer: 局部敏感哈希、可逆殘差和分塊計算帶來的高效?https://mp.weixin.qq.com/s?__biz=MzI4ODg3NDY2NQ==&mid=2247483911&idx=1&sn=8d98a214d455a55650bb589830b08dae&chksm=ec368bc1db4102d7d54216e917ec22f83b47df55153ef4c3f83aaafd68a0dd60caf836fb712a&scene=178&cur_album_id=1464771644039610372#rd

[8] Linformer?https://arxiv.org/abs/2006.04768

[9] Linear Transformer?https://arxiv.org/abs/2006.16236

[10] Performer?https://arxiv.org/abs/2009.14794

[11]《Performer:用隨機投影將Attention的復雜度線性化 》 https://kexue.fm/archives/7921

[12] LRA?https://arxiv.org/abs/2011.04006

更多閱讀

#投 稿?通 道#

?讓你的文字被更多人看到?

如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學術熱點剖析科研心得競賽經驗講解等。我們的目的只有一個,讓知識真正流動起來。

📝?稿件基本要求:

? 文章確系個人原創作品,未曾在公開渠道發表,如為其他平臺已發表或待發表的文章,請明確標注?

? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發送,要求圖片清晰,無版權問題

? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創首發稿件,提供業內具有競爭力稿酬,具體依據文章閱讀量和文章質量階梯制結算

📬?投稿通道:

? 投稿郵箱:hr@paperweekly.site?

? 來稿請備注即時聯系方式(微信),以便我們在稿件選用的第一時間聯系作者

? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿

△長按添加PaperWeekly小編

🔍

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

·

總結

以上是生活随笔為你收集整理的Transformer性能优化:运算和显存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。