从三大顶会论文看百变Self-Attention
作者丨劉朋伯
學校丨哈爾濱工業大學碩士生
研究方向丨自然語言處理
研究背景
本人維護了一個 NLP 論文集倉庫:
https://github.com/PengboLiu/NLP-Papers
首先簡單講一下 Self Attention。
Self Attention 原本是 Transformer 中的一個結構,現在很多時候也被單獨拿出來作為一個特征抽取器。輸入是一個 Query 向量,一個 Key 向量和一個 Value 向量。在 Self Attention 中,三者相同。是模型維度。
如果是 Multi-Head Attention,那就把多個 Attention 拼在一起。
簡單粗暴又有效,那么能不能對這種結構進行一些改進呢?
首先是 EMNLP 2019 中,騰訊 AI Lab?的三篇關于改進 SANs 的論文(本文中,Self Attention Networks 簡記為 SANs)。
在 Transformer 中,SANs 本身不能表示句子結構的,句子的序列信息是靠 “position encoding”?得到的。
本文對此進行改進,在 SANs 中融合了結構性的位置表示信息,以此增強 SANs 對句子潛在結構的建模能力。當然并沒有舍棄原有的 position encoding,本文是把序列信息和結構信息一并使用。
結構化位置表示:position encoding 是根據句子中單詞的實際位置建模,而本文引入了依存句法樹表示單詞之間的關系。直覺上來說,這種方法能挖掘出更多關于句子中各個詞語之間的依存信息。
本文介紹了兩種位置:絕對結構位置和相對結構位置(使用 Stanford Parser):
1. 絕對結構位置:把主要動詞作為原點,然后計算依存樹上每個單詞到原點的距離;
2. 相對結構位置:根據以下規則計算每兩個單詞之間的距離:
在依存樹的一條邊上,兩個單詞的絕對結構位置之差就是相對結構位置;?
如果不在同一條邊,兩個單詞的絕對結構位置之和乘 1(兩個單詞在句子中正序)或 -1(兩個單詞在句子中正序逆序)或 0 (同一個單詞)
最后,序列絕對位置和結構絕對位置通過非線性函數結合在一起得到絕對位置的表示。至于相對位置,因為每個時間步的單詞都不同,方法和絕對位置表示也不一樣。這里,作者參考了?Self-Attention with Relative Position Representations?[1]?中的方法。
作者在 NMT 和 Linguistic Probing Evaluation 兩個任務上進行試驗,結果表明無論是相對結構位置還是絕對結構位置都能更好地在句法和語義層面上建模,從而達到更好的效果。
上一篇論文是利用 Parser 生成依存句法樹進而改變 SANs 的輸出,這篇論文則在 SANs 的結構做了一些改動,目的類似,也是為了增加句子的句法結構信息。
多粒度的 Self Attention 簡稱為 MG-SA,結合多頭注意力和短語建模。一方面,在多頭注意力中拿出幾個“頭”在 N 元語法和句法維度對短語建模;然后,利用短語之間的相互作用增強 SANs 對句子結構建模的能力(還是 structure modeling)。
本文的 motivation 有兩方面:
1. 和上一篇論文類似,考慮短語模式學習句子的潛在結構;
2. 最近很多論文表明,SANs 中很多“head”?并沒有被充分利用,這樣何不試試把一些“head”?做別的事情從而改善 SANs 的性能。
改進后的 MG-SA 如下:
ATT 就是經典的 Self Attention,無需多言。可以看出,主要的改動在于 H9(文章稱之為生成的短語級記憶)。計算方法也就是文章提到的 “Multi-Granularity”?表示:
多粒度表示
首先是得到短語劃分并對其合成,如圖(a),然后短語標簽監督和短語交互可以進一步增強短語表示在結構上的建模能力。最終得到的 MG-SA 如圖(b)。
短語劃分(Phrase Partition):句子劃分成若干個不重疊的長度為?n 個單詞的短語。此外,又提出了句法級的短語劃分(當然也要靠句法樹),得到的短語輸入為;
合成策略(Composition Strategies):,一般是?CNN、RNN?或者是?SANs;
短語標簽監督(Phrase Tag Supervision):得到的,我們再使用它預測短語的標簽(就是?NP、VP、PP?這些)。預測方法(softmax)和損失函數(負對數似然)如下:
短語間的交互(Phrase Interaction?):想讓句子的短語得到交互,直覺肯定是要引入循環式的結構(REC),那?LSTM 當之無愧了。本文采用了?)。到此為止,我們終于得到了。
訓練和實驗
訓練時的損失函數需要把剛才定義的短語標簽預測損失加起來;
在機器翻譯任務上做了若干組實驗,并進行了可視化分析;
完成了?Does string-based neural mt learn source syntax?[2]?中的任務來評估 MG-SA 多粒度短語建模的能力。
看論文標題就知道,又是一篇對 SANs 結構改進的文章,而且也使用了剛才提到的 ON-LSTM。本文的貢獻有二:
1. 層次結構(要區別與上文的句法結構)可以更好地對 SANs 建模;
2. 證明了 ON-LSTM 對有助于 NMT 任務;
這里,我們主要看看對 SANs 的改進。
其實就是輸入先使用 RNNs 編碼,然后得到的輸出再用 SANs 編碼。這里的?
最后,也沒有直接去利用得到的 SANs 的輸出,而是使用 Short-Cut Connection (就是類似 Transformer 中 residual connection 的結構)。也算是取之?Transformer,用之 Transformer。
同樣是來自 EMNLP 2019 的 paper,這篇 paper 對 SANs 的改進主要是在兩個相鄰單詞之間增加了一個“Constituent Attention”模塊,從而達到樹結構的效果(也就是 Tree Transformer)。
圖(A)是 Tree Transformer 的結構。以圖為例,輸入“the cute dog is wagging its tail”。在 layer0,cute 和 dog 組成一個“Constituent”,its 和 tail 組成一個“Constituent”。在 layer1,兩個相鄰的“Constituent”?可能融合在一起,所以“Constituent”?的尺寸是越來越大的,到最頂層就只有一個“Constituent”?了。那么怎么劃分一個“Constituent”呢?
文章引入了“Constituent Attention”、“ Neighboring Attention”?和“Hierarchical Constraint”?的概念。
首先是 Neighboring Attention,q 和 k 和經典的 transformer 結構中的意義相同。
得到的還需“Hierarchical Constraint”的處理,至于為什么后面會說。
最后一步,終于要計算“Constituent Attention”了!
由 i,j 之間的連乘得到。不過這么做有個問題就是某個特別小的話,連乘起來的結果會趨近于 0,所以我們用對數和的形式代替它:
“Constituent Attention”?要怎么去用呢?并不是單獨作為一個結構,而是在原有的 attention 概率分布前乘上這個“Constituent Attention”?就好了。
在這,解釋一下“Hierarchical Constraint”:因為 attention 的每一個 layer,都不小于前一個 layer,為了保證這種層次性,我們需要添加這樣一種限制,使得每一層的“Constituent Attention”?都要大于上一層的。
圖(B)是整個 Tree Transformer 的結構,圖(C)是 Constituent Attention 的熱力圖,可以看到,確實有了分塊的效果。
值得一提的是,文章還單獨一節介紹了 Tree Transformer 中的Neighboring Attention,可以看做一種無監督的 parsing,也算是意料中的收獲吧。
NeurIPS 2019 的文章,來自 CMU Neubig 團隊,一篇偏重解釋性的文章。
文章討論的是 SANs 是不是真的需要那么多 heads。討論這件事,就需要刪除掉一些?heads 做對比實驗。Head 具體怎么刪除呢?文章中的做法是將一些?head 參數矩陣置?0?進行 mask。
去掉一個head的影響
在 WMT 模型中的 encoder 部分,分別將其中96(16heads*6 層)個單獨去掉。絕大部分的?head 被單獨去掉BLEU 反而有所提升,極少數的幾個(4 個)去掉之后效果會稍差。論文還做了一組實驗,證明了:在?inference 階段,絕大部分的head 被單獨去掉不會對效果有什么太大影響;BERT 中,同樣單獨去掉 head,大概有 50?個 head,在去掉其中一個的時候效果反而要好于原始 bert 模型。
大部分的 head 在被單獨的去掉的時候,效果不會損失太多。
只留下一個?head
96 個 head 去掉一個直觀上一想確實不會有太大影響。作者又進一步刪除掉更多的?heads:在某個?layer 內只保留一個 head。結果,無論是?BERT 還是 NMT,對實驗效果都沒什么太大的影響。
需要注意的是,機器翻譯中,self attention 保留一個 head 影響不大,但是 Encoder-Decoder 的 attention 則需要更多的 head。
不同的數據集,head 的重要程度相同嗎?
論文給出的答案是基本呈正相關的。這里的是去掉某個?head,然后分別在兩個不同的數據集(MNLI-matched 和 MNLI-mismatche)中進行測試,觀察這個 head 對效果的影響是否在兩個數據集的表現一致。當然,這里的實驗做的可能做的不夠充分。
啟發式迭代剪枝?head
那么如果想在不同層之間同時去掉一些 head 呢?作者給出了一種啟發式的策略。
根據求導得到的,每次去掉 10%?的 head。
之前知乎上有個問題:為什么 Transformer 需要進行 Multi-head Attention??[3]?相信這篇文章可以某種程度上回答一下此問題。當然,對 head 數量的探索,肯定不止于此。
對 head 數量剪枝的還有 ACL 2019 的這一篇。作者十分良心,寫了篇博客?[4]?解釋自己的論文。本文的實驗非常非常詳盡,如果看了上一篇文章還對?head 剪枝感興趣不妨先看看這篇文章對應的博客。
文章的結論大概如下:
只有一小部分頭對于翻譯任務似乎很重要(上一篇文章也得到了類似的結論);
重要的頭有一到多個功能:位置、句法、低頻詞等;
Encoder 端的 head 很多都可以被減掉(是不是又似曾相識);
總結與思考
讀完幾篇論文,做一個小小的總結:- 目前的 Transformer 結構,encoder 端的 head 是存在冗余的,Multi-Head 其實不是必須的;
- 丟掉一些 head 反而能提升性能,大概有點像 dropout?
- 不同的 head 似乎有不同的分工;
- 結構信息對文本建模很重要,無論是什么方法即使是 Transformer;
- 目前對 SANs 的改造還比較淺層,不夠大刀闊斧。
相關鏈接
[1] https://arxiv.org/pdf/1803.02155.pdf[2] https://www.isi.edu/natural-language/mt/emnlp16-nmt-grammar.pdf[3]?https://www.zhihu.com/question/341222779/answer/868039515[4]?https://lena-voita.github.io/posts/acl19_heads.html
點擊以下標題查看更多往期內容:?
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
📝?來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
📬 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
🔍
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 獲取最新論文推薦
總結
以上是生活随笔為你收集整理的从三大顶会论文看百变Self-Attention的全部內容,希望文章能夠幫你解決所遇到的問題。