<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          預訓練卷積超越預訓練Transformer?

          共 4239字,需瀏覽 9分鐘

           ·

          2021-06-24 11:24

          點藍色字關注“機器學習算法工程師

          設為星標,干貨直達!

          來源|知乎    作者|DengBoCong

          鏈接|https://zhuanlan.zhihu.com/p/380195756

          Transformer誕生到現(xiàn)在,從NLP領域到CV領域,可以說是兩開花。特別是在預訓練模型中,BERT相關系列近些年屢屢突破,在各種下游任務中,不僅能提速還有效果上的提升。所以在NLP的相關任務中,提及Transformer和CNN時,Transformer一般都會優(yōu)先考慮,更何況是在預訓練語言模型方面,我以前都沒有想過將CNN用在預訓練,直到看到這篇文章,才打開了新思路,看來還是我格局小了呀。
          正如論文標題一樣:Are Pre-trained Convolutions Better than Pre-trained Transformers?這篇文章并沒有能夠?qū)ⅰ癈NN預訓練優(yōu)于Transformer預訓練”這個結(jié)論石錘,不過從某種程度上說,還是將BERT、transformers和大規(guī)模預訓練模型進行解耦,給我們打開了新世界,接下來我們就一起來品一品這篇文章。


          01
          前情提要
          這篇文章其實圍繞三個問題要討論:
          1. 只有類Transformers的結(jié)構(gòu)才適合預訓練?
          2. 如果使用不同于Transformers結(jié)構(gòu)的模型來進行預訓練,是否能夠提高收益?
          3. 使用卷積進行預訓練是否在特定的場景表現(xiàn)更好?
          在正式研究和討論之前,還有幾點需要達成共識的,根據(jù)以往的研究表明,卷積有著如下的優(yōu)勢:
          1. CNN 比 self-attention 快得多:CNN 是線性復雜度,self-attention 是平方復雜度(甚至因此誕生了《輕量 transformers》這個分支領域)。
          2. CNN 是按順序進行的,因此不需要如Transformers那樣,需要額外的位置編碼。
          不過還是需要注意的是,CNN 在單層的感受野大小是有限且固定的,只能通過堆疊層數(shù)來增大感受野,而self-attention 在一層就可以捕捉所有 token 之間的關系,這對于捕捉長距離依賴非常關鍵。同時,self-attention 聚合的權(quán)重是與輸入 token 相關的,而 CNN 的聚合權(quán)重是與輸入 token 無關的。
          文章涉及到對比卷積的運行速度,我之前寫過一篇如何根據(jù)FLOPs或MACC去大致的計算模型的速度,感興趣的可以參考如下:教你如何估計各種神經(jīng)網(wǎng)絡的計算量和參數(shù)量
          我們來簡單過一遍論文中使用到的卷積:
          Depthwise Convolutions:深度可分離卷積中,每個通道只被一個卷積核所卷積,這里我們假設輸入的張量  的維度大小為  ,那么深度可分離卷積  可以被定義為:
          其中,  是可訓練參數(shù),  是通道  的第  個位置的輸出,輸出的shape和輸入的shape相同,都是  
          Lightweight Convolutions:輕量化卷積對深度可分離卷積做了進一步地簡化,這里我們令  是深度可分離卷積,并做了softmax處理,如下:
          其中,,也就是說每個的輸出通道共享參數(shù),其中  ,這是相當于共享所有通道的所有權(quán)重。簡單來說,(1)相鄰通道的卷積核可進行參數(shù)共享;(2)卷積核參數(shù)在其長度的維度上被 softmax 歸一化:
          其中,  和  分別是卷積核的數(shù)量,以及卷積核的長度。
          Dynamic Convolutions:動態(tài)卷積是對輕量化卷積的進一步改進,如下:
          其中,是  線性變換,用于學習卷積核的生成與其順序輸入的不同token  的關系,其參數(shù)可表示為。通過這種方式,使得卷積核  的生成與其順序輸入的不同 token  有關,而不是對整個文本序列固定的卷積核。而且,這里的卷積核參數(shù)只與當前被卷積核覆蓋的幾個 token 相關,而不像 self-attention 那樣,需要與全部 token 交互計算。因此整體上,動態(tài)卷積還是線性復雜度。
          對上面三種卷積想要圖形化理解的話,可以參考這篇文章:
          https://qiita.com/koreyou/items/328fa92a1d3a7e680376


          02
          預訓練細節(jié)
          在開始細節(jié)前,我們來感受一下原文的描述:
          We implement a Seq2Seq (Sutskever et al., 2014) architecture similar to (Wu et al., 2019). The key difference when compared with Transformer architectures is that we replace the multi-headed selfattention with convolutional blocks. Instead of query-key-value transforms, we use gated linear unit projections following (Wu et al., 2019).
          說白了,本文的卷積預訓練模型結(jié)構(gòu)依然在模仿基于 transformers 的預訓練模型結(jié)構(gòu),只不過是將其中的 multi-head self-attention 換成了上面說的卷積操作,query-key-value 的結(jié)構(gòu)換成了類似的線性門控(Gated Linear Units)結(jié)構(gòu)。每個 convolution block 的結(jié)構(gòu)如下圖所示(圖源來自https://arxiv.org/pdf/1901.10430.pdf):
          我們可以從上圖看出,論文所用的卷積是一種“線性門控 + 卷積 + 線性映射”的結(jié)構(gòu),可以表示為:
          其中,  都是可訓練參數(shù),論文中實驗了輕量化卷積,動態(tài)卷積和空洞卷積。
          對于整體的卷積預訓練模型,本文也是使用類似 transformers 的方式將 convolution blocks 進行堆疊:
          其中,Conv表示實驗的卷積,F(xiàn)FN則是用ReLU的前饋神經(jīng)網(wǎng)絡,看起來是不是簡直就是Transformer,哈哈哈。
          訓練模型時,損失使用的是token-wise的交叉熵,并通過 teacher forcing進行訓練,如下:
          其中,在  時刻對類別  預測值,而  是類別  在時刻  的真實標簽值。


          03
          實驗
          模型在 Colossal Cleaned CommonCrawl Corpus (C4) 數(shù)據(jù)集上進行了預訓練。預訓練時,模型的 seq2seq 的結(jié)構(gòu)、MLM 任務依然是模擬 transformers;層數(shù)、序列長度等參數(shù)也與 BART-base 保持了一致。
          在實驗部分,這篇文章希望探究如下五個問題:
          卷積也能在預訓練中獲益,學到豐富的先驗知識嗎?
          卷積預訓練和 transformers 相比,性能怎么樣?
          卷積預訓練和 transformers 相比,有什么優(yōu)點?會更快嗎?
          什么情景下,卷積預訓練會失???
          不同的卷積模塊之間,有很大的差別嗎?
          上面的實驗可以回答提出的幾個問題:
          卷積網(wǎng)絡也能在預訓練中獲益,只是不如 transformers 大。
          無論是否預訓練,卷積的性能優(yōu)于或與 transformers 一致。
          空洞卷積和動態(tài)卷積似乎好于輕量化卷積。
          作者在實驗中發(fā)現(xiàn),與訓練卷積結(jié)構(gòu)缺少相互的 attention 結(jié)構(gòu),因此在需要構(gòu)建多個事物之間關系的任務上,卷積預訓練結(jié)構(gòu)似乎并不適合。另外,卷積預訓練模型更快,因此能被運用到更長的序列。隨著序列長度的增加,卷積預訓練模型的速度優(yōu)勢將更加顯著:


          04
          總結(jié)
          這篇論文給我們的主要啟發(fā)是:預訓練改進與模型改進不應該混為一談,預訓練技術(shù)本身往往能給各種模型都帶來提升,不應該一提到預訓練就想到Transformer,也不應該只把預訓練跟Transformer結(jié)合。這篇論文給出了一個新的視野,但是并不能實質(zhì)性的影響類Transformer在預訓練中作用,畢竟CNN有著根本的缺陷,即無法捕捉足夠遠的長程依賴,雖然通過膨脹卷積等方式,可以快速增大CNN的感受野,但也只是比較大,不是Transformer理論上的一步到位。其次,如果單純看提高效率角度,Transformer本身也有很多優(yōu)化空間,如果只是為了執(zhí)行效率而轉(zhuǎn)向CNN,那這個理由似乎不那么有說服力。
          參考鏈接:
          Are Pre-trained Convolutions Better than Pre-trained Transformers:
          https://arxiv.org/pdf/2105.03322.pdf
          nlp-paper:https://github.com/DengBoCong/nlp-paper
          nlp-dialogue:https://github.com/DengBoCong/nlp-dialogue
          text-similarity:https://github.com/DengBoCong/text-similarity

          說明:本文為閱讀原文時進行相關思想、結(jié)構(gòu)、優(yōu)缺點,內(nèi)容進行提煉和記錄,原文和相關引用會標明出處,引用之處如有侵權(quán),煩請告知刪除。

          機器學習算法工程師


                                              一個用心的公眾號

          瀏覽 64
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月婷婷综合色 | 播播影院在线特别黄色视频看看你 | 麻豆大黑鸡吧 | 一区二区水蜜桃 | 日日日日日日日日日日日日日日日干 |