淺析Attention機制

引入

Attention機制目前在深度學習領域應用的越來越多了,在CV和NLP領域都有大量應用。使用keras的Attention模塊,可以說是能隨意爲深度學習模型插上Attention的翅膀了。

那Attention機制的基本原理是什麼?它有哪些優缺點呢?

Attention機制的提出

Attention機制是九幾年在CV領域被提出的思想[1]。

然後2014年Google DeepMind發表《Recurrent Models of Visual Attention》讓Attention被更多人注意到了,他們在CV領域,用Attention來從圖像/視頻中,有選擇的選取部分像素點來進行處理,而不是處理完整的圖像(所有像素點)。

2015的《Neural Machine Translation by Jointly Learning to Align and Translate》中提出了將Attention用到了NLP領域的翻譯任務中。2017年Google Brain團隊的《Attention Is All You Need》,一改翻譯任務中用Encoder+Decoder的傳統作風,拋棄了RNN/DNN等經典結構,提出了只用Attention機制構成的Transformer模型,模型簡單性能又好。這都使Attention在NLP領域得到了更廣泛的應用。

Attention的本質

Attention本質是來源於人類注意力機制,我們再感知東西的時候,不會看所有內容,而只會根據需求去集中注意力觀察部分內容。

比如做題時,你忘記了二叉樹先序遍歷的內容,那你只需要把《算法導論》中相關內容看一下,而不是把整本書都看完。

Attention的原理

我們以NLP中翻譯任務爲例來解釋Attention的原理。

傳統的深度學習翻譯模型,都是由Encoder和Decoder組成的,如下圖所示

在這裏插入圖片描述

Encoder與Decoder一般都是LSTM。這裏要注意,輸入的向量維度,Encode後的向量維度,與Decoder後的向量維度,這三個維度不一定是相同的(大部分情況是不相同的)。

RNN機制實際中存在長程梯度消失的問題,對於較長的句子,我們很難寄希望於將輸入的序列轉化爲定長的向量而保存所有的有效信息,所以隨着所需翻譯句子的長度的增加,這種結構的效果會顯著下降[2]。

爲了解決這個問題,通過人類的翻譯經驗,我們在翻譯時,會集中注意力處理某幾個詞,從而引入了Attention機制。下面是一個Attention層的示意圖[3]:

在這裏插入圖片描述

先解釋其中的一些參數:

  • Tx:輸入的一句話,經過特徵工程與Encode後,所得到的向量維度。Encoder的輸出向量維度
  • Ty:要輸出/翻譯的語言,的特徵向量/詞語編碼維度。一般即Attention層的輸出編碼維度

對某個輸入x,這個Attention層的具體的計算過程如下:

  1. 計算Attention_i的值

有很多種計算方式,只要Attention_i的維度是Tx,並且所有Attention_i的和爲1:

在這裏插入圖片描述

  1. 計算輸入向量的attention權重和c_i:

在這裏插入圖片描述

  1. 將c_i送入RNN,得到y_i

在這裏插入圖片描述

y_i就是這一個attention層的輸出

爲什麼在Attention層中還需要RNN

如果去掉這個RNN,由上面第2步的公式,可以推理出,所有c_i都一樣了。

Attention的優缺點

[1]中總結了這些優點

  • 一步到位的全局聯繫捕捉
  • 並行計算減少模型訓練時間
  • 模型複雜度小,參數少

以及缺點

  • 它不能捕捉語序順序(元素的順序)。這在NLP中是比較糟糕的,自然語言的語序是包含太多的信息。如果確實了這方面的信息,結果往往會是打折扣的。說到底,attention機制就是一個精緻的"詞袋"模型

參考

  • [1] https://zhuanlan.zhihu.com/p/35571412
  • [2] https://zhuanlan.zhihu.com/p/47063917
  • [3] https://muffintech.org/blog/id/12/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章