重新思考深度學習中的Attention機制

2021-02-25 極市平臺

寫在前面: 本文是一篇關於深度學習中的 Attention機制 的文章。與之前的系列文章不同,本文並非定位於對Attention機制的各類框架和玩法進行綜述,因此不會花費過多的篇章去介紹Attention的發展歷史或數學計算方法;更多是簡單地介紹幾個Attention的代表性和有意思的工作,並去思考Attention機制的合理性,提出一些進一步的思考。

以下是本文的主要框架:

1. 問題來源 & 背景

最近做了非常非常久的多任務學習工作(或許後面會整理一下),在嘗試到MMoE這個模型時,發現了一件有意思的事情。

我們知道,在MMoE模型中,專家層的下一層——Gate層的工作是針對不同的任務,對專家的輸出進行加權求和,使得不同任務按照自己的需要獲取不同專家的信息,最終目的應該是將不同專家提取到的特徵用一種更加無損的方式融合起來。

MMoE如下圖最右側的C模型,Gate A的工作是對專家0,1,2的輸出進行加權,並將加權之後的結果輸出給Tower A,用於A任務後續計算Logit。

圖1,MMoE模型結構,

在Gate A中採取了一種很有趣的方式來對專家0,1,2的方式進行加權融合:

專家0,1,2分別是從input處連接的全連接網絡。對於每個Tower(與Gate一一對應),從input處連接一個全連接網絡(網絡參數W的Size為input size * 3),並對這個全連接模塊的輸出進行Softmax。將Softmax後的結果作為權重,分別乘以專家0,1,2的輸出,作為加權融合後的結果,用作Tower A後續的操作。

讀完Paper後,第一遍實現MMoE時並沒有發現什麼問題。後面和同事討論,我們感覺Gate模塊本質上就是一個對專家輸出進行加權融合的模塊,那這個模塊為何不用主流的Attention來實現一下呢?

於是,我們修改了MMoE Gate層的結構,為每個任務隨機設置了一個Context向量,作為Attention模塊的Query,用Context與MMoE專家的輸出計算相似度,根據相似度對於專家輸出進行加權。修改後的模型,在我們的場景下,在多個任務上的評價指標居然高於原生的MMoE Gate層不少。

這件事情讓我萌發了再深入思考一下Attention機制的想法!

2. 「樸素」的Attention思想

如果用一句話來描述Attention機制的作用,你會怎麼選擇?

Attention機制的作用就是對信息進行更好地加權融合

我們來看下這句話的關鍵詞。其實就兩個,第一,信息;第二,加權融合

這兩個詞怎麼來理解呢?

「信息」。深度學習裡的信息,無非就是特徵,隱藏層的輸出。

2. 「加權融合」。這個也比較好理解,我們可能通過不同的方式獲取了幾組信息後,並非簡單地將這幾組信息直接進行concat或者直接相加,而是根據每組信息的重要性,為其賦予一個權重,再按照權重求和。

從這個角度上來看,Attention機制人如其名——注意力機制,表現了對信息重要性程度的關注。Attention作為深度學習的一個組件,其實是通過信息加權融合的方式,目的是為了讓網絡獲取更好的特徵表達

Attention的例子在生活中比比皆是。

男生:多喝熱水。
女生:你怎麼就知道讓我喝熱水,啥也不是!
因為女生情緒比較激動,可能忽略了平時男生對她也是體貼的,導致一個臨時事件的權重急速上升,權重失衡就生氣了(當然男生也有問題O(∩_∩)O~)。

再比如說,「顏狗」這個詞,說的就是你對於人評價的Attention權重過多分配在對方的顏值上,又是一個Attention機制沒有train好的例子。= =當然,如果「顏值」這個Value更適合你的Query就當我沒說。

大白話講完了,為了讓文章顯得更加直觀和科學一點,我們來簡單看下Attention的計算方式。

通常的文章在介紹Attention機制的時候往往是和Encoder-Decoder架構放在一起來講,我感覺多一些影響因素反而會影響理解。因此,我們拋離Encoder-Decoder架構來看看Attention機制。

我們先看看下面的圖,

圖2,Q, K, V

Value1到4是我們要用來加權的信息,類比搜索系統中的文檔內容。Key1到4是用於檢索Value的「索引」,與Value一一對應,類比搜索系統中的文檔摘要或者文檔關鍵詞。Query是用來檢索Key的信息,我們通過計算Q與各個K的「相似」或者說「匹配」程度,得到每個V對應的權重,根據權重對V進行加和。

用數學語言來描述,通過Query與Key逐一計算「相似度」,得到相似度權重a,使用a對於Value進行加權得到最終的輸出。

3. Attention相關的有趣工作

3.1 Hierarchical Attention Networks

《Hierarchical Attention Networks for Document Classification》本文的應用場景是文檔分類,本質上還是使用了Attention作為基礎組件,但是讓Attention的建模具有了層級結構:

圖3,Hierarchical Attention Networks網絡結構

文檔由句子組成,句子由單詞組成,這是一個兩層結構。

對於每個句子,通過Attention獲取到每個單詞的注意力權重,並詞級別信息進行加權,最終獲得句子的特徵表示。對於每個文檔,通過Attention獲取到每個句子的注意力權重,並句子級別信息進行加權,最終獲得文檔的特徵表示。

具體做法為:

首先,設置兩個context向量:  是詞語級別的context vector;  是句子級別的context vector。

從句子的層面來看,針對每一個句子,用雙向GRU建模,計算出每個詞語的hidden vector。用與hidden vector通過內積計算相似度作為每個詞語的權重,加權以後就可以產生整個sentence的表示。

從document層面來看(hierarchical),針對每個document,對每個句子使用雙向GRU建模,同上使用來獲取句子的權重,加權以後就可以產生整個document的表示。

思想很簡單,結果很驚豔。

圖4,Hierarchical Attention Networks模型效果

3.2 Self-attention & multi-head attention

這個可能大家更熟悉一些,《Attention is all you need》中明確提出的思想,並成為Bert等預訓練模型的基礎框架。

圖5,Self-Attention和Multi-head attention

Self-Attention的提出是為了對句子信息進行更好的建模,讓每個詞中,都可以更好地融入其他單詞的信息。

而多頭Attention則是Concat了多組Self-attention的結果。

網上關於multi-head attention詳細描述比較多,在此就不展開贅述了,簡單推薦一篇文章:

《Attention is All You Need》淺讀(簡介+代碼)

https://spaces.ac.cn/archives/4765/comment-page-1

同時,大家可以關注一下這個不錯的問題

為什麼Transformer 需要進行 Multi-head Attention?

https://www.zhihu.com/question/341222779/answer/814111138

Multi-head attention基本已經成為NLP領域的標配框架了,且在推薦領域有較好的應用場景,一個最簡單的轉化就是AutoInt(《AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks》)了,直接用Multi-head attention去對CTR問題進行建模。AutoInt在我們的嘗試中,效果較好,建議大家可以關注。

圖6,AutoInt網絡結構

3.3 Multi-Head Attention with Disagreement Regularization

如果在Multi-Head Attention中設置多個頭是為了讓模型關注不同的信息角度,但是在具體的實踐中會發現:如果讓每個attention的頭原生地自發生長會可能導致信息冗餘的發生——多個頭提取的特徵比較一致。

圖7,Bert Head可視化情況《A Multiscale Visualization of Attention in the Transformer Model》https://arxiv.org/pdf/1906.05714.pdf

如上圖所示,第三層的1, 2,3,4等幾個Head學習結果高度相似。那麼有沒有辦法來提升不同Head的學習能力呢?

《Multi-Head Attention with Disagreement Regularization》一文中,希望通過對不同的Head加正則的方式,來提升不同Head學習的差異性。

原文中,添加了三種類型的正則:

a. Disagreement on Subspaces (Sub.)——增大不同Head的Value空間中,Value的差異

b. Disagreement on Attended Positions (Pos.)——增大不同的Head中,注意力權重的差異

c. Disagreement on Outputs (Out.)——直接增加不同的Head的輸出的差異

最終,在NMT任務中,基於正則的多頭Attention取得了優於Base的普通多頭Attention的效果。

圖8,《Multi-Head Attention with Disagreement Regularization》模型效果

3.4 Attention的長程依賴問題

我們在計算Attention時,與RNN,CNN一樣,也存在長程依賴問題。

這裡有一篇比較RNN,CNN,Transfomer長程依賴和效果的比較的論文供大家參考。

https://www.aclweb.org/anthology/D18-1458.pdf

在《Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》中提出了Transfomer-XL模型,提出了一種相對位置編碼的方式,相對於Base的Transfomer模型效果略有提升,但是相應地參數量增大。

文中提出了跨相鄰兩個區域的attention來解決長程依賴依賴的問題,使得Transfomer可以提取更長文本的信息。

圖8,Vanilla Attention處理長程依賴

圖9,Transformer-XL處理長程依賴

Transfomer-XL只能用於單向語言建模,後續在XLNet(效果優於Bert)中,為了使其可以解決雙向上下文的建模的問題,作者提出了排列語言模型。

4. What's more

4.1 從「信息」層面

4.1.1 信息採集的區域——Global Attention VS Local Attention

Global Attention將會計算Q與所有K的相似性關係,並對所有Value進行加權,而Local Attention會先定位到一定的窗口,然後再對窗口內的K計算相似性關係,對窗口內的Value進行加權。

4.1.2 信息的線性——線性加權信息 VS 非線性加權信息

我們的「樸素的」Attention模型,如Hierarchical Attention Networks中的Attention中其實只是對信息V進行了線性的加權

反觀Self-Attention中,每個V都會通過全連接(非線性地)映射到一個新的空間,然後在根據Q與K的相似性進行加權,這種先將Value非線性映射後再加權的方式是不是好呢?我們不得而知,這個選擇需要結合具體任務來實踐。

4.1.3 信息的交互性

在推薦領域,從最早的LR模型只能提取一階特徵,並依靠經驗進行二階的特徵組合;到FM模型提取二階特徵;再到DCN、xDeepFM等號稱可以顯式提取高階特徵的推薦模型,我們可以發現,在推薦領域非常在意特徵交互。

在Attention中,不同V在進行加權之前,Q和V在計算相似性之前,進行信息和特徵的交互是否是有用的呢?我們不得而知,也需要結合具體任務來實踐。

在DIN中,廣告信息和用戶側信息在進行Attention之前有一個out product的操作,然後將廣告信息,用戶側信息,Product信息三者Concat在一起之後,進行Attention。這個操作的效果筆者暫時沒有考慮清楚,有熟悉的小夥伴可以在評論區進行討論~

圖10,DIN模型

4.2 從「加權融合」層面

4.2.1 權重的計算方法

關於Q和K相似度的計算方法,這裡有一份總結,我覺得還不錯,大家可以參考一下。

圖11,Attention相似度計算方式,https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html#summary

5. 總結Attention機制的本質就是對信息進行更好地加權融合信息可以用非線性進行變換,QKV之間可以進行特徵交互,可以選擇加權信息的區域。

這就是本文核心的三句話啦,讀完本文之後,你理解了麼~

參考文獻

Ma J, Zhao Z, Yi X, et al. Modeling task relationships in multi-task learning with multi-gate mixture-of-experts[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 1930-1939.

Yang Z, Yang D, Dyer C, et al. Hierarchical attention networks for document classification[C]//Proceedings of the 2016 conference of the North American chapter of the association for computational linguistics: human language technologies. 2016: 1480-1489.

Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.

Li J, Tu Z, Yang B, et al. Multi-head attention with disagreement regularization[J]. arXiv preprint arXiv:1810.10183, 2018.

Vig J. A multiscale visualization of attention in the transformer model[J]. arXiv preprint arXiv:1906.05714, 2019.

Song, Weiping, et al. "Autoint: Automatic feature interaction learning via self-attentive neural networks."Proceedings of the 28th ACM International Conference on Information and Knowledge Management. 2019.

Dai Z, Yang Z, Yang Y, et al. Transformer-xl: Attentive language models beyond a fixed-length context[J]. arXiv preprint arXiv:1901.02860, 2019.

Tang G, Müller M, Rios A, et al. Why self-attention? a targeted evaluation of neural machine translation architectures[J]. arXiv preprint arXiv:1808.08946, 2018

Zhou G, Zhu X, Song C, et al. Deep interest network for click-through rate prediction[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 1059-1068.

https://spaces.ac.cn/archives/4765/comment-page-1

為什麼Transformer 需要進行 Multi-head Attention?

https://zhuanlan.zhihu.com/p/106662375

Attention? Attention!

相關焦點

  • 關於attention機制的一些細節的思考
    之前看過的一些attention機制,除了self attention之外,基於rnn或者cnn的attention在處理文本問題的時候基本上是embedding之後經過了rnn或者cnn結構的映射之後得到了映射後的向量V,然後attention是針對於V進行注意力weights的計算,問題來了,能不能直接在embedding上進行score的計算?
  • 【Attention】淺談Attention機制的理解
    ,很多深度學習的框架都帶上了注意力機制,而且也取得了很好的性能指標。隨後Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用類似attention的機制在機器翻譯任務上將翻譯和對齊同時進行,他們的工作算是第一個將attention機制應用到NLP領域中。
  • 注意力機制(Attention Mechanism)在自然語言處理中的應用
    近年來,深度學習的研究越來越深入,在各個領域也都獲得了不少突破性的進展。
  • 淺談Attention機制的理解
    ,很多深度學習的框架都帶上了注意力機制,而且也取得了很好的性能指標。隨後Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用類似attention的機制在機器翻譯任務上將翻譯和對齊同時進行,他們的工作算是第一個將attention機制應用到NLP領域中。
  • 機器翻譯中的 Attention 機制
    上篇我們學習了基本的 seq2seq 模型,它的流程為將輸入序列送入 encoder,計算得到的隱層狀態傳遞給 decoder,然後進行解碼得到輸出序列
  • 注意力機制Attention
    注意力機制(attention mechanism)Attention實質上是一種分配機制,其核心思想是突出對象的某些重要特徵。根據Attention對象的重要程度,重新分配資源,即權重,實現核心思想是基於原有的數據找到其之間的關聯性,然後突出其某些重要特徵。注意力可以被描述為將一個查詢和一組鍵值對映射到一個輸出,其中查詢、鍵、值和輸出都是向量。
  • 【CV中的Attention機制】ShuffleAttention
    摘要目前注意力機制主要可以分為兩類,空間注意力機制和通道注意力機制,兩者目標用於捕獲成對的像素級關係和通道間依賴關係的。同時使用兩種注意力機制可以達到更好的效果,但是不可避免地增加了模型的計算量。CapsuleNet則是將每個組的神經元視為一個膠囊Capsule,其中,激活的膠囊中的神經元活動代表了圖像中特定實體的各種屬性。
  • 一文讀懂Attention機制
    在很多的應用場景,attention肩負起了部分 feature-selection,featue-representation 的責任。Attention 的原理可以將attention機制看做一種query機制,即用一個query來檢索一個memory區域。
  • 深度學習之Attention模型詳解
    採用multi-head attention為的就是讓不同head學習到不同的子空間語義。顯然實驗也證實這種形式的結果較好。無論是encoder還是decoder,我們都能看到存在residual connection這種跳躍連接。隨著深度的增加會導致梯度出現彌散或者爆炸,更為嚴重的是會導致模型退化 (也就是在訓練集上性能飽和甚至下降,與過擬合不同)。深度殘差網絡就是為了解決退化的問題。其實引入殘差連接,也是為了儘可能保留原始輸入x的信息。與 BN 不同,LN 是一種橫向的規範化。
  • CV中的Attention機制:簡單而有效的CBAM模塊
    什麼是注意力機制?注意力機制(Attention Mechanism)是機器學習中的一種數據處理方法,廣泛應用在自然語言處理、圖像識別及語音識別等各種不同類型的機器學習任務中。通俗來講:注意力機制就是希望網絡能夠自動學出來圖片或者文字序列中的需要注意的地方。
  • 注意力機制Attention Model(mechanism) 的 套路
    閱讀過本文的人還看了以下文章:《美團機器學習實踐》_美團算法團隊.pdf分享《深度學習入門:基於Python的理論與實現》高清中文版PDF+原始碼《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼《深度學習之pytorch》pdf+附書源碼PyTorch深度學習快速實戰入門《pytorch-handbook》【下載】豆瓣評分8.1,《機器學習實戰:基於Scikit-Learn和TensorFlow》《Python數據分析與挖掘實戰》PDF+完整源碼
  • Attention 掃盲:注意力機制及其 PyTorch 應用實現
    點上方藍字計算機視覺聯盟獲取更多乾貨地址:https://www.zhihu.com/people/lucas_zhang深度學習
  • 圖深度學習入門教程(六)——注意力機制與圖注意力
    摘要:深度學習還沒學完,怎麼圖深度學習又來了?別怕,這裡有份系統教程,可以將0基礎的你直接送到圖深度學習。
  • 【CV中的Attention機制】BiSeNet中的FFM模塊與ARM模塊
    前言:之前介紹過一個語義分割中的注意力機制模塊-scSE模塊,效果很不錯。今天講的也是語義分割中使用到注意力機制的網絡BiSeNet,這個網絡有兩個模塊,分別是FFM模塊和ARM模塊。其實現也很簡單,不過作者對注意力機制模塊理解比較深入,提出的FFM模塊進行的特徵融合方式也很新穎。1.
  • 一文搞懂NLP中的Attention機制(附詳細代碼講解)
    當然不同的attention機制有不同的當然如果說transformer的壞處,其最大的壞處是空間消耗大,這是因為我們需要儲存attention score(N*N)的維度,所以Sequence length(N)不能太長,這就導致,我們seq和seq之間沒有關聯。
  • 乾貨|理解attention機制本質及self-attention
    的知識,這篇接上篇,更加深入的理解attention的有關思想和最新的self-attention機制一、Attention機制的本質思想如果把Attention機制從上文講述例子中的Encoder-Decoder框架中剝離,並進一步做抽象,可以更容易看懂Attention機制的本質思想。
  • Attention!當推薦系統遇見注意力機制
    NewBeeNLP原創出品公眾號專欄作者@上杉翔二悠閒會 · 信息檢索當注意力機制都已經變成很tasteless的手法的時候,使用或者魔改注意力機制一定要專注講好自己的故事:即『為什麼要用Attention,為什麼要魔改Attention』
  • 深度學習中的注意力機制(一)
    作者 | 蘑菇先生來源 | NewBeeNLP頭圖 | CSDN下載自視覺中國目前深度學習中熱點之一就是注意力機制(Attention Mechanisms)。文中使用前饋神經網絡學習對齊模型,並且和其他組件聯合學習, 實際上學到的是soft alignment,因此可以很容易應用梯度反向傳播。總之, 可以理解為衡量了輸出單詞 和輸入單詞 的對齊程度,而 是 時刻,所有encode隱狀態根據該對齊程度得到的期望上下文向量,是所有對齊情況下的期望。
  • 【手把手學習筆記】基於深度學習的自然語言處理(附實現代碼)
    以及最近很火的注意力機制等方法,手把手教大家如何使用不同的深度網絡進行文本分類任務。更精確地說,在有兩個類(比如0和1)的二進位分類設置中,對數損失被定義為:層次注意力機制(Hierarchical attention):下圖所示的體系結構提供了一個關於自注意力機制如何良好地在實踐中運用的簡單的例子。在這種體系結構中,自注意力機制發揮了兩次作用:在單詞級別和句子級別。
  • 機器翻譯的Attention機制
    = BahdanauAttention(self.dec_units) def call(self, x, hidden, enc_output): context_vector, attention_weights = self.attention(hidden, enc_output) x = self.embedding(x)