attention機制七搞八搞
註意力機制即Attention mechanism在序列學習任務上具有巨大的提升作用,在編解碼器框架內,通過在編碼段加入A模型,對源數據序列進行數據加權變換,或者在解碼端引入A模型,對目標數據進行加權變化,可以有效提高序列對序列的自然方式下的系統表現。
什麽是Attention?
Attention模型的基本表述可以這樣理解成(我個人理解):當我們人在看一樣東西的時候,我們當前時刻關註的一定是我們當前正在看的這樣東西的某一地方,換句話說,當我們目光移到別處時,註意力隨著目光的移動野在轉移,這意味著,當人們註意到某個目標或某個場景時,該目標內部以及該場景內每一處空間位置上的註意力分布是不一樣的。這一點在如下情形下同樣成立:當我們試圖描述一件事情,我們當前時刻說到的單詞和句子和正在描述的該事情的對應某個片段最先關,而其他部分隨著描述的進行,相關性也在不斷地改變。從上述兩種情形,讀者可以看出,對於Attention的作用角度出發,我們就可以從兩個角度來分類Attention種類:空間註意力和時間註意力,即Spatial Attention 和Temporal Attention。這種分類更多的是從應用層面上,而從Attention的作用方法上,可以將其分為Soft Attention和Hard Attention,這既我們所說的,Attention輸出的向量分布是一種one-hot的獨熱分布還是soft的軟分布,這直接影響對於上下文信息的選擇作用。
為什麽要加入Attention?
再解釋了Attention做了一件什麽事之後,我們討論一下為什麽需要Attention模型,即Attention加入的動機:
- 序列輸入時,隨著序列的不斷增長,原始根據時間步的方式的表現越來越差,這是由於原始的這種時間步模型設計的結構有缺陷,即所有的上下文輸入信息都被限制到固定長度,整個模型的能力都同樣收到限制,我們暫且把這種原始的模型稱為簡單的編解碼器模型。
- 編解碼器的結構無法解釋,也就導致了其無法設計。
Attention到底是什麽原理?
下面我們來看一下Attention的具體原理:
首先讓編碼器輸出結構化的表示,假設這些表示,可以用下述集合表示,(Hold不住了,我要截圖了,太麻煩了!!!)
由於定長上下文特征表示帶來的信息損失,同時也是一種缺陷,由於不同的時間片或者空間位置的信息量明顯有差別,利用定常表示無法很好的解決損失的問題,而Attention則恰好解決了這個問題。
我們甚至可以進一步解釋,編解碼器內部大致是如何工作的,當然從我看來這有點馬後炮的意思,畢竟Attention是根據人的先驗設計出來的,因此導致最後訓練的結果朝著人指定的目標在走。可以說,就是輸入第j維的上下文表示信息與第t時間片輸出的關系,第j維可以是空間維度上,也可以是時序上。由於加入Attention會對輸入的上下文表示進行一次基於權重的篩選,然而這種顯示的篩選模式並不是人工制定這種機制所要看到的結果,而是通過此種加權的方式,讓網絡能學到空間上或者時序上的結構關系,前提當然是假設這裏有一種原先不可解釋的相互關系。以上圖1可以很清晰地看出機器翻譯問題中,加入的attention模型輸出權重的分布與輸入與輸出信息的關系。
所以說Attention的作用是?(提取最重要的部分)
Attention的出現就是為了兩個目的:1. 減小處理高維輸入數據的計算負擔,通過結構化的選取輸入的子集,降低數據維度。2. “去偽存真”,讓任務處理系統更專註於找到輸入數據中顯著的與當前輸出相關的有用信息,從而提高輸出的質量。Attention模型的最終目的是幫助類似編解碼器這樣的框架,更好的學到多種內容模態之間的相互關系,從而更好的表示這些信息,克服其無法解釋從而很難設計的缺陷。從上述的研究問題可以發現,Attention機制非常適合於推理多種不同模態數據之間的相互映射關系,這種關系很難解釋,很隱蔽也很復雜,這正是Attention的優勢—不需要監督信號,對於上述這種認知先驗極少的問題,顯得極為有效。
轉自:http://blog.csdn.net/joshuaxx316/article/details/70665388
attention機制七搞八搞