注意力機制近幾年比較熱,在圖像識別、圖像翻譯、語音識別、文本摘要、機器翻譯等各個領域都有應用,特別是 NLP領域效果很好,本文旨在闡述其基本原理。
研究背景
當前神經網絡的問題
算力問題:計算量太大,硬件無法支持,或者計算速度較慢
長序列問題:在處理序列問題時,當前的預測目標如果跟前一刻的狀態很相關,則容易預測,如果跟很久之前的狀態相關,即使引入了 記憶機制,也較難預測,
舉個例子,文本預測,
我愛籃球,如果預測 我()籃球,很明顯,括號內很可能是 愛,
我今天看了場NBA,很有靈感,想去打籃球,如果預測 我()籃球,很難預測了
問題啟發
在深度學習領域,或者說算法領域、AI領域很多問題都借鑒了人類處理問題的方式,注意力機制也是如此
人類的視覺注意力
當人類在看東西時,一般會將注意力聚焦在某些區域,而不是關注所有區域,這使得人類視覺能夠快速捕捉有效信息,如下圖
圖中有貓、有草、有石頭,但人類往往只關注貓
人類的語言注意力
人類在閱讀或者說話時,會自動忽略低可能、低價值的文字,比如我們看到一個錯別字,直接忽略,也來張圖
圖中有亂序、錯字,但不影響我們閱讀
所以,注意力機制就是 通過 某種方式 將 注意力放在重點信息上,從而快速有效地完成任務
Encode-Decode 框架
當前大部分Attention模型是基於Encode-Decode框架的,需要強調的是:
1. Encode-Decode框架 是一種思想,不單指自編碼器,其可以是 NN、CNN、RNN、LSTM的隨意組合
2. Attention 模型也是一種思想,其不依賴於任何框架
Encode-Decode框架是深度學習領域的一種研究模式,應用十分廣泛,下圖為常規的Encode-Decode 框架
以NLP任務來解釋這張圖,圖中給出(x,y),訓練好模型后,給出x,即可預測y,
如果x是中文,y是英語,模型就是機器翻譯,
如果x是問題,y是答案,模型就是對話機器人,
如果x是文章,y是摘要,模型就是文本摘要,
在實際預測時,yi是一個一個預測的,即
yi=g(C,y1,y2…yi-1)
其中C是語義編碼,它是解碼器的直接輸入
C=f(x1,x2,..xn)
存在問題
在預測不同時刻的y時,其輸入C都是相同的,是對全體x的高度抽象,但實際上不同時刻的y可能只與某幾個時刻的x相關,
比如情感分析,評論一堆,可能只看到很差二字,就可預測為負面評價,而全體文字一視同仁,很可能弱化很差二字,導致預測錯誤
故上述Encode-Decode 框架也被稱為注意力不集中的 分心模型。
Attention 模型
Encode-Decode 框架的問題在於C不變,那解決方法很簡單,預測不同時刻的yi時C變化不就行了,如下圖
Attention 模型是對Encode-Decode 框架的擴展,
下面以中英翻譯來解釋上圖
X:Tom chase Jerry
y:湯姆追逐傑瑞
顯然,翻譯 湯姆 時只與 Tom 有關,翻譯 追逐 時與 chase 和 Tom 有關,等,
翻譯過程用數學公式表達如下
y1=f1(c1)
y2=f1(c2,y1)
y3=f1(c3,y1,y2)
其中f1代表解碼器
ci代表x中不同單詞注意力分配不同權重概率的語義編碼
ci=g(aij, hj)
c1=g(0.6*f2(Tom), 0.2*f2(chase), 0.2*f2(Jerry))
c2=g(0.2*f2(Tom), 0.7*f2(chase), 0.1*f2(Jerry))
c3=g(0.3*f2(Tom), 0.2*f2(chase), 0.5*f2(Jerry))
其中f2代表編碼器,g代表將x中的多個單詞轉換成句子的一種變換函數,通常是加權求和;
ci代表預測y第i個單詞時解碼器的輸入,
aij表示預測y第i個單詞時與x第j個單詞的相關度,
hj表示x第j個單詞的編碼器的輸出,隱層狀態,語義編碼,
len(x)表示x的單詞數量
求 C 過程總結為下圖
那么 aij 是如何得到的呢?
aij是個概率,代表權重,反映了hj對ci的重要性,可用softmax表示
其中
eij=F(Hi,hj) 也有這么寫的 eij=F(Hi-1,hj)
F 是打分函數,用於計算hj和Hi的相似度, 【這個在以前的 NLP 算法中類似 單詞對齊模型】
Hi代表y第i個單詞的解碼器的隱層狀態,
由於在計算ci時Hi還沒有Hi,故用Hi-1代替,
這里的相似度計算比較開放,可以是簡單的相關性計算,也可以是一個神經網絡模型。
常用方法如下
求 aij 過程總結為下圖
綜上,帶有注意力機制的 Encode-Decode 框架總結如下面幾張圖
注意力模型 按不同維度可分為很多類,以上介紹的是經典的 Soft-Attention 模型,是最常用的模型 。
下圖可視化地展示了【在英語-德語翻譯系統】中加入Attention機制后,Source和Target兩個句子每個單詞對應的注意力分配概率分布
Attention 的本質
實際上,Attention 機制是一種思想,只要是對輸入有選擇、有區別的對待都可認為是注意力機制,
我們脫離Encode-Decode 框架,更容易看清 Attention 的本質
我們將 Source(x)的數據想象成一系列 (key,value),當給定 Target(y) 中的某個元素 Query,我們先根據 Query 和 key 計算得到一個相似性或者叫權重W,然后和 value 進行加權求和 到得 attention;
只是有的時候,key 和 value 是一個東西,比如 機器翻譯
求 attention 過程總結如下圖
比較火的 Transformer 中主要運用的 就是 Query、Key和Value三個矩陣
形象解釋
想象一下相親畫面,我心中有個喜歡女孩的樣子,我按照心目中的形象瀏覽各個女孩的照片,如果女生的樣貌符合我心中的樣子,我會注意到這個人,並安排稍微長一點的時間閱讀她的資料,反之我就會安排少一點時間。
這樣我就能將“注意力”放在滿足條件的候選人身上了。
我心中女神的樣子就是Query,我拿着Query去和所有的候選人(key)做對比,得到一個要注意力(attention),根據這個注意力大小判斷我要花多久時間閱讀候選人的材料(Value)。這個就是Transform的注意力方式。
注意力模型分類
按注意力的可微性,可分為:
- Hard-Attention,就是0/1問題,某個區域要么被關注,要么不關注,這是一個不可微的注意力;
- Soft-Attention,[0,1]間連續分布問題,用0到1的不同分值表示每個區域被關注的程度高低,這是一個可微的注意力。
按注意力的關注域,可分為:
- 空間域(spatial domain)
- 通道域(channel domain)
- 層域(layer domain)
- 混合域(mixed domain)
- 時間域(time domain)
還有 self-attention 機制,多頭注意力等等,后面再講吧
漲見識
上圖為Google於2016年部署到線上的基於神經網絡的機器翻譯系統,相對傳統模型翻譯效果有大幅提升,翻譯錯誤率降低了60%,
其架構就是上文所述的加上Attention機制的Encoder-Decoder框架,主要區別無非是其Encoder和Decoder使用了8層疊加的LSTM模型
好圖收集
參考資料:
https://blog.csdn.net/xiaobian_/article/details/108672303 神經網絡注意力機制 入門級,簡單易懂
https://zhuanlan.zhihu.com/p/37601161 深度學習中的注意力機制(2017版)
https://my.oschina.net/u/876354/blog/3061863 大話注意力機制(Attention Mechanism)
https://zhuanlan.zhihu.com/p/66076731 神經網絡中的注意力機制
https://blog.csdn.net/hei653779919/article/details/103360587 圖注意力機制神經網絡基本原理和代碼解讀
https://www.cnblogs.com/databingo/p/9769928.html 神經網絡中注意力機制概述
https://zhuanlan.zhihu.com/p/135970560 全面解析RNN,LSTM,Seq2Seq,Attention注意力機制
https://www.jiqizhixin.com/articles/100902 什么是自注意力機制
https://www.zhihu.com/question/395862913 神經網絡中的注意力機制該如何訓練呢?