您當前的位置:首頁 > 詩詞

注意力機制到底是什麼——基於常識的基本結構介紹

作者:由 李鵬宇 發表于 詩詞時間:2020-02-06

摘要:注意力機制(Attention Mechanism)是人們在機器學習模型中嵌入的一種特殊結構,用來自動學習和計算輸入資料對輸出資料的貢獻大小。本文以一個基於注意力機制的機器翻譯模型為例,從人的直覺、中英文翻譯的常識、特徵工程等角度,對注意力機制的思想和機理進行了闡述;並介紹了一種常見的注意力機制實現形式,即基於感知機的注意力機制;還介紹了一種比較經典的注意力機制,即自注意力機制(self-attention)。

1。 引言

注意力機制是上世紀九十年代,一些科學家在研究人類視覺時,發現的一種訊號處理機制。人工智慧領域的從業者把這種機制引入到一些模型裡,並取得了成功。目前,注意力機制已經成為深度學習領域,尤其是自然語言處理領域,應用最廣泛的“元件”之一。這兩年曝光度極高的BERT、GPT、Transformer等等模型或結構,都採用了注意力機制。

我對NLP比較熟,而不太瞭解CV,因此在學習和整理注意力機制相關內容的時候,採用了注意力機制的思想:基本忽略CV相關內容,主要精力放在NLP方面。因此,本文基本不涉及CV同志們的工作。

2。 認知科學、特徵工程與注意力機制

“注意力機制”是上個世紀90年代,認知科學領域的學者發現的一個人類處理資訊時採用的機制。我們做資料科學類任務時,經常做的特徵工程,看起來很像一個模型外掛的注意力模組。

2。1。 人身上的注意力機制

假設我和老婆在超市裡買菜。由於超市裡的情況如圖1-1所示,我需要時不時地從人海里找到買了跳刀的老婆。我的眼睛真厲害,可以看到這麼多東西,視線範圍內所有事物的形狀、顏色、紋路等等全都接收進來——大腦表示壓力很大,實在處理不過來,於是選擇忽略一部分訊號,重點看每一個人的髮型、衣服顏色、站姿等,而且重點分析靠近視線範圍中心的區域。我轉動腦袋,幫助眼睛掃描更大的範圍,從而幫助大腦分析更多的人,終於找到了目標。

注意力機制到底是什麼——基於常識的基本結構介紹

圖2‑1 環境噪聲較大

像我這樣,有選擇性的處理訊號,是包括人類在內的很多生物在處理外界訊號時的策略,其背後的機制被認知科學領域的學者稱為“注意力機制”。

2。2。 特徵工程——模型外部的注意力機制

我們在用機器學習模型完成情感分析這類任務時,通常會做一點特徵工程的工作,即將原始文字轉換為數值向量。特徵工程,就是注意力機制在資料科學領域裡的一種體現,它幫助模型選擇有效、適當規模的特徵,進而讓模型可以有效、高效地完成任務。比如說,我們用逐步迴歸分析方法對原始特徵集進行篩選,得到一個高質量的特徵子集,就可以讓下游模型聚焦於和任務關係最密切的訊號。

注意力機制到底是什麼——基於常識的基本結構介紹

2‑2 特徵工程的作用

良好的特徵工程,依賴於工程師對業務內容的深入理解。換句話說,資料科學從業者要花一定量的時間,用於瞭解研究物件。研究物件千千萬,留給我們瞭解的時間不多了。

傳統特徵工程採用了一種靜態的觀點來觀察事物。我瞭解的特徵工程方法,都假設各個特徵的重要性是固定不變的的——特徵工程結束的時候,每個特徵就被賦予了一個固定的權重值。(應該是)大部分機器學習模型,也假設輸入資料的各個維度具有固定的權重,學習完畢後,就不再改變各個維度的權重了。

2。3。 傳統特徵工程不能解決的問題

然而,我們用靜態的觀點無法較好地刻畫某些型別資料的動態特點。這裡用一個簡單的機器翻譯任務來說明這一點。比如說我要做機器翻譯(機器翻譯是最能體現注意力機制特色的任務),構建一個模型,把”I am Chinese。”翻譯成中文。

假設我們用一個基於RNN的seq2seq結構來學習平行語料,並獲得了一個翻譯模型(迴圈神經網路相關內容可以參考

)。該模型做翻譯的過程更是這樣的:

(1) 編碼器接收英文詞向量序列,並在各個時間步輸出當時的隱藏狀態(由於這一層有多個神經元,各個時間步的輸出實際上是一維向量)

注意力機制到底是什麼——基於常識的基本結構介紹

注意力機制到底是什麼——基於常識的基本結構介紹

是一個元素全為0的一位向量,用來啟動神經元迭代過程,一般不用來作為解碼器的輸入;這個神經元輸出的隱藏狀態合起來是一個二維陣列

注意力機制到底是什麼——基於常識的基本結構介紹

(2) 解碼器基於自身歷史輸出值以及編碼器輸出的最終狀態,計算當前時間步的狀態,並判斷當前時間步狀態對應的中文詞語。

(3) 重複(2)步,直到輸出標籤。

注意力機制到底是什麼——基於常識的基本結構介紹

圖2‑3 基於RNN的經典seq2seq結構

注意,這裡解碼器計算輸出的方式是

注意力機制到底是什麼——基於常識的基本結構介紹

。由於編碼器的權重已經固定,

注意力機制到底是什麼——基於常識的基本結構介紹

裡蘊含的各個英文單詞的貢獻已經固定,因此即在得到各個中文詞語的時候,模型認為各個英文單詞的貢獻是固定不變的。

顯然,這種假設不符合我們的常識。在獲得“我”這個詞語時,如果考慮”am Chinese”,就有點多餘了;而“人”這個字的獲得,則必須綜合考慮”I”、“am”和“Chinese”。也就是說,人類這個翻譯達人在進行英-中翻譯的時候,每確定一箇中文詞語,都要對英文句子裡的所有單詞的貢獻重新審視一下,以充分地考慮源文字的句子結構和語義,進而得到儘量好的中文譯文。

3。 深度學習領域的注意力機制

3。1。 注意力機制的思想和基本框架

一些學者嘗試讓模型自己學習如何分配自己的注意力,即為輸入訊號加權。他們用注意力機制的直接目的,就是為輸入的各個維度打分,然後按照得分對特徵加權,以突出重要特徵對下游模型或模組的影響。這也是注意力機制的基本思想。

比較規範的文章裡,一般會採用”key-query-value”理論來描述注意力機制的機理。對我來說,理解這個有點困難,因此這裡虛構了一個符合本人直覺的框架。

如圖3-1,是一個針對RNN神經元的注意力機制框架。我們在圖2-2所示的框架基礎上,增加一個注意力模組,基於輸入資料和神經元的歷史輸出,預測當前時間步,輸入資料各個維度的權重。然後基於這份權重對輸入資料加權求和,就得到了當前時間步,交給神經元的最終輸入——神經元接收這份輸入,以及歷史輸出,就可以計算當前時間步的輸出了。

這樣做有啥用呢,好使嗎?接下來,本小節會介紹這種操作的細節,在3。2節說明其合理性 (有效性已經在大家的實戰中得到了驗證,這裡就不多說啦)。

注意力機制到底是什麼——基於常識的基本結構介紹

圖3‑1 一個適合RNN的注意力機制框架

3。2。 注意力模組幹了什麼?

如圖3-2,是採用圖3-1所示框架的一個seq2seq模型。我們在編碼器和解碼器之間增加一個注意力模組。注意力模組內部分為兩個子模組:(1)注意力得分計算模組;(2)注意力聚焦模組。

注意,注意力模組內部結構,是我為了降低理解模型的難度,特意虛構的(同行們一般把注意力模組看做一個整體來介紹)。

注意力得分計算模組,會基於解碼器神經元的歷史輸出和編碼器各個神經元的輸出,計算出編碼器各個時間步的輸出,與解碼器當前輸出的“相關度”,也叫做注意力得分。用數學符號表達很簡單:

注意力機制到底是什麼——基於常識的基本結構介紹

權重的角標中,第一位表示解碼器神經元的時間步,第二位表示編碼器神經元的時間步。權重

注意力機制到底是什麼——基於常識的基本結構介紹

表示編碼器神經元的第i個時間步輸出,對解碼器第j個時間步輸出的貢獻。為了讓這些權重具有較好的數學性質,同時可解釋性強一點,一般會用softmax或softmax迴歸層,保證它們的總和為1(這樣看起來就像機率分佈)。

這幾個權重合起來,就是圖3-2中的一維向量

注意力機制到底是什麼——基於常識的基本結構介紹

函式g是一個模型,可以是一個多元線性迴歸模型,可以是一個輸出維度為1的神經網路,也可以是其他結構。顯然,這個模組的引入增加了整個模型的引數規模。

注意力機制到底是什麼——基於常識的基本結構介紹

圖3-2 注意力機制與解碼器合作計算第一個時間步的輸入

接下來,注意力聚焦模組,會基於

注意力機制到底是什麼——基於常識的基本結構介紹

來對編碼器的輸出進行加權求和,得到解碼器當前時刻的輸入:

注意力機制到底是什麼——基於常識的基本結構介紹

然後解碼器神經元就可以基於歷史輸出和當前時間步輸入,得到當前時間步的輸出:

注意力機制到底是什麼——基於常識的基本結構介紹

如圖3-3,是解碼器求得第1個時間步輸出時,整個模型的樣子。

注意力機制到底是什麼——基於常識的基本結構介紹

圖3-3解碼器基於注意力模組的輸出和上一個時間步輸出,計算當前時間步輸出

接下來,我們可以重複前面的操作,直到解碼器輸出終止符””,如圖3-4。同樣顯然的是,注意力模組“掃描”一遍的操作,增加了解碼階段的計算量,降低了訓練和推理的速度。

注意力機制到底是什麼——基於常識的基本結構介紹

圖3-4帶有注意力機制的seq2seq結構

3。3。 從翻譯的角度看,注意力模組幹了什麼?

現在,我們回過頭來看看注意力模組幹了什麼。注意力模組實際上是我們嵌入到經典seq2seq中的一個小模型,在翻譯模型的訓練階段,它負責學習編碼器輸出的隱藏狀態序列Z,與解碼器當前要預測的

注意力機制到底是什麼——基於常識的基本結構介紹

輸出的關係密切程度。

問題來了,我如何在不知道

注意力機制到底是什麼——基於常識的基本結構介紹

是啥的情況下,考察它和一堆資料的相關性呢?當然不能。這是符合常識的:人在翻譯的時候,在決定目標文字的某個詞語時,會基於原文字的句法和語義,以及已確定的目標文字片段,從大腦的詞彙表中找一個候選詞語集合,然後在候選集中選一個最佳詞語。

有思路了,讓解碼器基於自身歷史輸出(已確定的目標文字片段),來計算

注意力機制到底是什麼——基於常識的基本結構介紹

注意力機制到底是什麼——基於常識的基本結構介紹

(源文字語義向量序列)的相關性。這就是注意力模組真正在做的事情。

3。4。 注意力機制的設計是靈活的

注意力機制本質上就是嵌入到原有模型的一個小模型,具體結構是可以靈活設計的。比方說,我們可以用一個如圖3-5的神經網路來作為注意力模組。我們可以把

注意力機制到底是什麼——基於常識的基本結構介紹

注意力機制到底是什麼——基於常識的基本結構介紹

拼接成一個較長的一位向量,然後輸入到一個”一層感知機+多元線性迴歸”結構,來計算

注意力機制到底是什麼——基於常識的基本結構介紹

對解碼器當前時間步輸出的貢獻大小。而最終的權重需可以用softmax來得到:

注意力機制到底是什麼——基於常識的基本結構介紹

注意力機制到底是什麼——基於常識的基本結構介紹

圖3‑5 一個簡單的注意力機制模組的核心結構

3。5。 自注意力機制

某些情況下,我們希望對英文句子的句法結構和語義有更清晰的認識,我們主要關注的是英文單詞之間的相關性,就會採用一種叫做自注意力機制的版本。這時。在自注意力機制中,我們會計算編碼器的輸出

注意力機制到底是什麼——基於常識的基本結構介紹

與各個時間步的輸出的相關性:

注意力機制到底是什麼——基於常識的基本結構介紹

是的,它就是這麼simple。當然了,高玩們在這個基礎上發展出了一大堆精妙或者複雜的注意力機制形式,效果各有千秋。

相比經典注意力機制,自注意力機制不再依賴解碼器的輸出。這樣的話,我們就可以想象:撤掉解碼器,換成多層感知機之類的東西,我們就可以做分類等其他型別的任務啦。

4。 結語

最近在看哈工大計院李治軍老師的課程(

)時,聽到了一些關於學習方法的內容,感覺挺有道理。他認為,任何一個人造複雜系統的出現,都有一個過程,即以簡單系統的形式出現,然後逐漸發展,最終成為比較複雜、越來越複雜的系統。我們在學習或者設計一個複雜的東西時,可以想辦法模擬這個事物的發展過程——從它最初、最簡單的時候開始,逐漸增加其複雜度。這樣,我們不僅可以相對輕鬆地完成學習或設計任務,還可以體會和提升自己的智慧。以本文所述的注意力機制為例,要想搞明白其基本原理還是是比較費力氣的。一個比較友好的學習策略是:回憶沒有注意力機制的經典模型,思考它們的窘境,然後引出注意力機制救場。這樣的話,我就是在經典seq2seq結構的基礎上做探索了,相對輕鬆一些。

學習過程中,遇到瓶頸是常有的事,這時候需要想辦法脫困,比如換個思路或者借用別人的思路。在整理注意力機制相關知識的過程中,有那麼幾天,我隱約感覺自己所理解的東西有較大的錯誤,但是又確定不了哪裡有錯(主觀上懶得再進一步,客觀上確實是沒學明白)。於是我在同事微信群群裡弱弱地問了一句:”大家是如何看待注意力機制的?”這招拋磚引玉是有效果的,大家紛紛發言:姚光南同志提到了“維度不變”這個特點;呂少松同志提到了“在有意識的區域內採用注意力機制”;許達同志提到了“在家辦公不用釘釘打卡”。這幾個方面是我之前沒有考慮到的,這下算是打消了好幾個疑惑點,之後的學習就容易很多了。

注意:

本文為李鵬宇(知乎個人主頁

https://www。

zhihu。com/people/py-li-

34

)原創作品,受到著作權相關法規的保護。如需引用、轉載,請註明來源資訊:(1)作者名,即“李鵬宇”;(2)原始網頁連結,即當前頁面地址。如有疑問,可發郵件至我的郵箱:lipengyuer@126。com。

標簽: 注意力  機制  解碼器  輸出  模組