1. 程式人生 > >注意力機制的基本思想和實現原理(很詳細)(第二篇)

注意力機制的基本思想和實現原理(很詳細)(第二篇)

    上述內容就是經典的Soft Attention模型的基本思想,那麼怎麼理解Attention模型的物理含義呢?一般在自然語言處理應用裡會把Attention模型看作是輸出Target句子中某個單詞和輸入Source句子每個單詞的對齊模型,這是非常有道理的。

    目標句子生成的每個單詞對應輸入句子單詞的概率分佈可以理解為輸入句子單詞和這個目標生成單詞的對齊概率,這在機器翻譯語境下是非常直觀的:傳統的統計機器翻譯一般在做的過程中會專門有一個短語對齊的步驟,而注意力模型其實起的是相同的作用。

圖8 Google 神經網路機器翻譯系統結構圖

    圖8所示即為Google於2016年部署到線上的基於神經網路的機器翻譯系統,相對傳統模型翻譯效果有大幅提升,翻譯錯誤率降低了60%,其架構就是上文所述的加上Attention機制的Encoder-Decoder框架,主要區別無非是其Encoder和Decoder使用了8層疊加的LSTM模型。

Attention機制的本質思想

    如果把Attention機制從上文講述例子中的Encoder-Decoder框架中剝離,並進一步做抽象,可以更容易看懂Attention機制的本質思想。

圖9 Attention機制的本質思想

    我們可以這樣來看待Attention機制(參考圖9):將Source中的構成元素想象成是由一系列的<Key,Value>資料對構成,此時給定Target中的某個元素Query,通過計算Query和各個Key的相似性或者相關性,得到每個Key對應Value的權重係數,然後對Value進行加權求和,即得到了最終的Attention數值。所以本質上Attention機制是對Source中元素的Value值進行加權求和,而Query和Key用來計算對應Value的權重係數。即可以將其本質思想改寫為如下公式:

    其中,Lx=||Source||代表Source的長度,公式含義即如上所述。上文所舉的機器翻譯的例子裡,因為在計算Attention的過程中,Source中的Key和Value合二為一,指向的是同一個東西,也即輸入句子中每個單詞對應的語義編碼,所以可能不容易看出這種能夠體現本質思想的結構。

    當然,從概念上理解,把Attention仍然理解為從大量資訊中有選擇地篩選出少量重要資訊並聚焦到這些重要資訊上,忽略大多不重要的資訊,這種思路仍然成立。聚焦的過程體現在權重係數的計算上,權重越大越聚焦於其對應的Value值上,即權重代表了資訊的重要性,而Value是其對應的資訊。

    從圖9可以引出另外一種理解,也可以將Attention機制看作一種軟定址(Soft Addressing):Source可以看作儲存器記憶體儲的內容,元素由地址Key和值Value組成,當前有個Key=Query的查詢,目的是取出儲存器中對應的Value值,即Attention數值。通過Query和儲存器內元素Key的地址進行相似性比較來定址,之所以說是軟定址,指的不像一般定址只從儲存內容裡面找出一條內容,而是可能從每個Key地址都會取出內容,取出內容的重要性根據Query和Key的相似性來決定,之後對Value進行加權求和,這樣就可以取出最終的Value值,也即Attention值。所以不少研究人員將Attention機制看作軟定址的一種特例,這也是非常有道理的。

    至於Attention機制的具體計算過程,如果對目前大多數方法進行抽象的話,可以將其歸納為兩個過程:第一個過程是根據Query和Key計算權重係數,第二個過程根據權重係數對Value進行加權求和。而第一個過程又可以細分為兩個階段:第一個階段根據Query和Key計算兩者的相似性或者相關性;第二個階段對第一階段的原始分值進行歸一化處理;這樣,可以將Attention的計算過程抽象為如圖10展示的三個階段。

圖10 三階段計算Attention過程

    在第一個階段,可以引入不同的函式和計算機制,根據Query和某個Key_i,計算兩者的相似性或者相關性,最常見的方法包括:求兩者的向量點積、求兩者的向量Cosine相似性或者通過再引入額外的神經網路來求值,即如下方式:

    第一階段產生的分值根據具體產生的方法不同其數值取值範圍也不一樣,第二階段引入類似SoftMax的計算方式對第一階段的得分進行數值轉換,一方面可以進行歸一化,將原始計算分值整理成所有元素權重之和為1的概率分佈;另一方面也可以通過SoftMax的內在機制更加突出重要元素的權重。即一般採用如下公式計算:

    第二階段的計算結果a_i即為value_i對應的權重係數,然後進行加權求和即可得到Attention數值:

    通過如上三個階段的計算,即可求出針對Query的Attention數值,目前絕大多數具體的注意力機制計算方法都符合上述的三階段抽象計算過程。

Self Attention模型

    通過上述對Attention本質思想的梳理,我們可以更容易理解本節介紹的Self Attention模型。Self Attention也經常被稱為intra Attention(內部Attention),最近一年也獲得了比較廣泛的使用,比如Google最新的機器翻譯模型內部大量採用了Self Attention模型。

    在一般任務的Encoder-Decoder框架中,輸入Source和輸出Target內容是不一樣的,比如對於英-中機器翻譯來說,Source是英文句子,Target是對應的翻譯出的中文句子,Attention機制發生在Target的元素Query和Source中的所有元素之間。而Self Attention顧名思義,指的不是Target和Source之間的Attention機制,而是Source內部元素之間或者Target內部元素之間發生的Attention機制,也可以理解為Target=Source這種特殊情況下的注意力計算機制。其具體計算過程是一樣的,只是計算物件發生了變化而已,所以此處不再贅述其計算過程細節。

    如果是常規的Target不等於Source情形下的注意力計算,其物理含義正如上文所講,比如對於機器翻譯來說,本質上是目標語單詞和源語單詞之間的一種單詞對齊機制。那麼如果是Self Attention機制,一個很自然的問題是:通過Self Attention到底學到了哪些規律或者抽取出了哪些特徵呢?或者說引入Self Attention有什麼增益或者好處呢?我們仍然以機器翻譯中的Self Attention來說明,圖11和圖12是視覺化地表示Self Attention在同一個英語句子內單詞間產生的聯絡。

圖11 視覺化Self Attention例項

圖12 視覺化Self Attention例項

    從兩張圖(圖11、圖12)可以看出,Self Attention可以捕獲同一個句子中單詞之間的一些句法特徵(比如圖11展示的有一定距離的短語結構)或者語義特徵(比如圖12展示的its的指代物件Law)。

    很明顯,引入Self Attention後會更容易捕獲句子中長距離的相互依賴的特徵,因為如果是RNN或者LSTM,需要依次序序列計算,對於遠距離的相互依賴的特徵,要經過若干時間步步驟的資訊累積才能將兩者聯絡起來,而距離越遠,有效捕獲的可能性越小。

    但是Self Attention在計算過程中會直接將句子中任意兩個單詞的聯絡通過一個計算步驟直接聯絡起來,所以遠距離依賴特徵之間的距離被極大縮短,有利於有效地利用這些特徵。除此外,Self Attention對於增加計算的並行性也有直接幫助作用。這是為何Self Attention逐漸被廣泛使用的主要原因。

Attention機制的應用

    前文有述,Attention機制在深度學習的各種應用領域都有廣泛的使用場景。上文在介紹過程中我們主要以自然語言處理中的機器翻譯任務作為例子,下面分別再從影象處理領域和語音識別選擇典型應用例項來對其應用做簡單說明。

圖13 圖片-描述任務的Encoder-Decoder框架

    圖片描述(Image-Caption)是一種典型的圖文結合的深度學習應用,輸入一張圖片,人工智慧系統輸出一句描述句子,語義等價地描述圖片所示內容。很明顯這種應用場景也可以使用Encoder-Decoder框架來解決任務目標,此時Encoder輸入部分是一張圖片,一般會用CNN來對圖片進行特徵抽取,Decoder部分使用RNN或者LSTM來輸出自然語言句子(參考圖13)。

此時如果加入Attention機制能夠明顯改善系統輸出效果,Attention模型在這裡起到了類似人類視覺選擇性注意的機制,在輸出某個實體單詞的時候會將注意力焦點聚焦在圖片中相應的區域上。圖14給出了根據給定圖片生成句子“A person is standing on a beach with a surfboard.”過程時每個單詞對應圖片中的注意力聚焦區域。

圖14 圖片生成句子中每個單詞時的注意力聚焦區域

    圖15給出了另外四個例子形象地展示了這種過程,每個例子上方左側是輸入的原圖,下方句子是人工智慧系統自動產生的描述語句,上方右側圖展示了當AI系統產生語句中劃橫線單詞的時候,對應圖片中聚焦的位置區域。比如當輸出單詞dog的時候,AI系統會將注意力更多地分配給圖片中小狗對應的位置。

圖15 影象描述任務中Attention機制的聚焦作用

圖16 語音識別中音訊序列和輸出字元之間的Attention

    語音識別的任務目標是將語音流訊號轉換成文字,所以也是Encoder-Decoder的典型應用場景。Encoder部分的Source輸入是語音流訊號,Decoder部分輸出語音對應的字串流。

    圖16視覺化地展示了在Encoder-Decoder框架中加入Attention機制後,當用戶用語音說句子 how much would a woodchuck chuck 時,輸入部分的聲音特徵訊號和輸出字元之間的注意力分配概率分佈情況,顏色越深代表分配到的注意力概率越高。從圖中可以看出,在這個場景下,Attention機制起到了將輸出字元和輸入語音訊號進行對齊的功能。

    上述內容僅僅選取了不同AI領域的幾個典型Attention機制應用例項,Encoder-Decoder加Attention架構由於其卓越的實際效果,目前在深度學習領域裡得到了廣泛的使用,瞭解並熟練使用這一架構對於解決實際問題會有極大幫助。