獨(dú)家 | 感悟注意力機(jī)制
作者:Greg?Mehdiyev, Ray Hong, Jinghan Yu, Brendan Artley 翻譯:陳之炎 校對:ZRX 本文約2800字,建議閱讀12分鐘
本文由Simon Fraser大學(xué)計(jì)算機(jī)科學(xué)專業(yè)碩士生撰寫并維護(hù),同時(shí)這也是他們課程學(xué)分的一部分。

本博由Simon Fraser大學(xué)計(jì)算機(jī)科學(xué)專業(yè)碩士生撰寫并維護(hù),同時(shí)這也是他們課程學(xué)分的一部分。
想了解更多關(guān)于該項(xiàng)目的信息,請?jiān)L問:
sfu.ca/computing/mpcs
簡介
看到這張照片時(shí),首先映入眼簾的是什么?相信大多數(shù)人的眼神會(huì)被藍(lán)色小鴨子吸引。對人類而言,顯然這只藍(lán)色小鴨子在圖片中異常突出。不知何故,人類總是具備發(fā)現(xiàn)特定模式的能力,并會(huì)將注意力轉(zhuǎn)移到那些與眾不同的特征之上。
為什么會(huì)是這樣子的?究竟是什么讓我們注意到“藍(lán)色鴨子“呢?
如果仔細(xì)觀察這張照片,還會(huì)看到有其他不同特征的鴨子。例如,其中有三只鴨子面朝側(cè)面而非正面向前。

是什么讓藍(lán)色鴨子比側(cè)向鴨子更突出?是否能教會(huì)電腦學(xué)習(xí)這一特征呢?
這正是注意力機(jī)制解決的目標(biāo)問題?!白⒁饬C(jī)制是一種嘗試行為,旨在有選擇性地聚焦某些相關(guān)的事物,同時(shí)忽略深度神經(jīng)網(wǎng)絡(luò)中的其他事物?!?
從一般意義上說,注意力機(jī)制是對編碼-解碼器結(jié)構(gòu)的改進(jìn)。編碼器-解碼器模型利用神經(jīng)網(wǎng)絡(luò)將輸入的編碼特征轉(zhuǎn)換成另一種編碼特征。注意機(jī)力制組件賦予了神經(jīng)網(wǎng)絡(luò)在編碼數(shù)據(jù)時(shí)對特定特征賦予 “注意力”的能力,它有助于解決神經(jīng)網(wǎng)絡(luò)中經(jīng)常發(fā)生的梯度消失/爆炸問題。

編碼器-解碼器GIF 結(jié)構(gòu)圖
對注意力機(jī)制的實(shí)現(xiàn)可概述如下:
1. 為編碼器中的每個(gè)狀態(tài)分配一個(gè)分值:?對輸入序列進(jìn)行編碼之后,稱這部分編碼為內(nèi)部狀態(tài),可以為包含“注意力”的狀態(tài)分配高的分值,為不包含任何相關(guān)信息的狀態(tài)分配低分值,從而達(dá)到識別相關(guān)編碼器狀態(tài)的目的。
2.?計(jì)算注意力的權(quán)重:?在第一步得出的分值基礎(chǔ)上計(jì)算出注意力權(quán)重。
3.?計(jì)算語境向量:?語境向量為包含第1步和第2步中信息的聚合向量。
4. 前饋:?將從語境向量中收集到的信息輸入到編碼器/解碼器層中。
5. 解碼:?解碼器利用注意力機(jī)制解碼信息。
這便是注意力機(jī)制的工作原理,接下來深入研究一些真實(shí)的應(yīng)用程序!
常見用例
1. 自然語言處理(NLP)
自然語言處理是機(jī)器學(xué)習(xí)的一個(gè)子集,它賦予了計(jì)算機(jī)解釋人類語言的能力,諸如翻譯軟件、聊天機(jī)器人和虛擬助手等工具均來自于這一研究領(lǐng)域。與自然語言處理相關(guān)的主要挑戰(zhàn)之一是將句子中每個(gè)單詞的上下文翻譯為計(jì)算機(jī)所能理解的格式。

通常,使用編碼器和解碼器形式的兩個(gè)RNNs/LSTMs來完成語境信息的翻譯。編碼器利用特征表示提煉出句子信息,解碼器再將特征表示轉(zhuǎn)換為摘要。
這種方法對短句子很有效,但是,由于存在梯度消失/爆炸的問題,對長句子來說就變得不那么準(zhǔn)確了。如果沒有注意力機(jī)制,對于復(fù)雜的人類語言來說,該方法的有效性便不太可靠了。例如,來看下面的句子。
?

例句
可以比較未包含注意力機(jī)制的模型與包含有注意力機(jī)制的模型來驗(yàn)證它的有效性。通過可視化文本,為更加 “重要”的單詞賦予一個(gè)更深顏色的文本??梢钥吹?,如果沒有注意力機(jī)制組件,模型會(huì)受到梯度爆炸/消失的影響,無法在早期找到單詞,從而遺漏了句子中那些對整體意義提供重要信息的那部分文本。

未包含注意力機(jī)制
這便是注意力機(jī)制的價(jià)值所在。在創(chuàng)建語境向量時(shí),無論句子有多長,它均能夠考慮到整個(gè)句子,為句子中的每個(gè)單詞賦予重要程度,并將模型的“注意力”集中在句子中最重要的單詞上。該模型的注意力可表示如下。
?

包含注意力機(jī)制
?
2. 計(jì)算機(jī)視覺
機(jī)器學(xué)習(xí)中受益于注意力機(jī)制的另一個(gè)領(lǐng)域是計(jì)算機(jī)視覺,該領(lǐng)域?qū)W⒂趯?shí)現(xiàn)人類視覺系統(tǒng)的自動(dòng)化。目前,計(jì)算機(jī)視覺的應(yīng)用包括目標(biāo)檢測、圖像分類和圖像字幕。

計(jì)算機(jī)視覺圖像
圖像字幕可自動(dòng)生成圖像的文本描述,該描述以清晰的格式準(zhǔn)確地表達(dá)出圖像中的內(nèi)容。下面,來深入了解一下在模型架構(gòu)中加入注意力機(jī)制的好處。
首先,在沒有注意力機(jī)制的情況下實(shí)現(xiàn)圖像字幕,模型生成一個(gè)文本表示,如“一群黃色橡膠鴨”。由于模型是基于整個(gè)圖像進(jìn)行的概括,這已經(jīng)相當(dāng)準(zhǔn)確了。話雖如此,即便是圖像中的一個(gè)明顯的焦點(diǎn),但結(jié)果中并沒有提及藍(lán)色鴨子。由于圖像的每個(gè)區(qū)域都賦予同等的重要性,并沒有將藍(lán)鴨子描述出來。

未包含注意力機(jī)制
?
再來考慮一下使用了注意力機(jī)制的情況,這時(shí),模型賦予了包含藍(lán)鴨子圖像區(qū)域更高的重要性,在生成圖像描述時(shí),將這些信息的描述考慮進(jìn)來。

包含注意力機(jī)制
?
生成的描述將類似于“一群黃色橡皮鴨中的一只藍(lán)色橡皮鴨”。注意,描述中的主題是“藍(lán)色鴨子”。隨著注意力機(jī)制對這一區(qū)域圖像的重視,得出了更為準(zhǔn)確的文本描述。
在討論了注意力機(jī)制的常見用例之后,再來看看底層的數(shù)學(xué)。
數(shù)學(xué)
多年來,注意力機(jī)制出現(xiàn)了很多變種。其中最著名的三個(gè)版本是Vaswani 3注意力機(jī)制,Bahdanau 2注意力機(jī)制和Luong 11注意力機(jī)制。在本文中,將重點(diǎn)關(guān)注Vaswani注意力機(jī)制和Bahdanau注意力機(jī)制。
?

注意力層
注意力機(jī)制背后的思想是將一個(gè)query值和一組 key-value對映射到一個(gè)輸出當(dāng)中。
1. Key / Value / Query
“key/value/query的概念類似于檢索系統(tǒng)。例如,當(dāng)在Youtube上搜索視頻時(shí),搜索引擎會(huì)將 query (搜索欄中的文本)映射到一組keys (視頻標(biāo)題、描述等)上,與數(shù)據(jù)庫中的候選視頻相關(guān)聯(lián),然后展示最匹配的視頻(values)?!?
Key向量、Query向量和Value向量是嵌入向量在不同子空間中的抽象,因此可以通過將嵌入E乘以一個(gè)權(quán)矩陣來得到向量,“嵌入(向量)是一個(gè)相對低維的空間,可以將其轉(zhuǎn)換為高維向量“?
2. 輸出
輸出是權(quán)重和values的組合,其中權(quán)重是在query和key的點(diǎn)積的基礎(chǔ)上,應(yīng)用softmax函數(shù)獲得的。
Vaswani注意力機(jī)制
Vaswani注意力機(jī)制中,key向量、query向量和value向量是編碼器-解碼器層的輸入,key向量和query向量的長度可以用變量d來表示,當(dāng)輸入由長度為d的key向量和query向量組成時(shí),則計(jì)算出所有key向量和query向量的點(diǎn)積。
然后將每個(gè)結(jié)果除以d的平方根。最后,應(yīng)用softmax函數(shù)得出其值的權(quán)重。
假設(shè)有一個(gè)有四字單詞的句子(s1,s2, s3,s4),要想計(jì)算s4的注意力,s4依賴于s3,s3依賴于s2等等。首先,將s3的query向量命名為q3,將s1, s2, s3的key向量命名為k1, k2, k3。為了計(jì)算出權(quán)值,需要計(jì)算query向量q3與所有key向量的點(diǎn)積,將其除以d的平方根。然后,應(yīng)用softmax函數(shù)。結(jié)果得出以下三個(gè)權(quán)重,稱之為(w1,w2,w3)。

假設(shè)s1、s2、s3的值是(v1、v2、v3),那么s4的語境向量則是(w1、w2、w3)和(v1、v2、v3)的點(diǎn)積。

點(diǎn)積圖
接下來,需要計(jì)算一組query向量的注意力,將key向量、query向量和value向量打包成矩陣Q、K、V。通過將嵌入向量的組合矩陣乘以權(quán)重矩陣Wq、Wk、Wv來得到key、query和value矩陣。這里給出了以下形式的注意力矩陣,可以將這一注意力矩陣應(yīng)用到機(jī)器學(xué)習(xí)模型(如:Seq2Seq、圖像字幕、BERT等等)中去。

注意力矩陣公式
Bahdanau注意力機(jī)制
Bahdanau注意力機(jī)制又可稱為加性注意力機(jī)制。Bahdanau注意力機(jī)制和Vaswani注意力機(jī)制之間的主要區(qū)別是:Bahdanau注意力機(jī)制使用了一種加法策略,而Vaswani注意力機(jī)制使用的是一種乘法策略,二者的實(shí)現(xiàn)方式采用了各自不同的縮放因子。

Bahdanau 注意力機(jī)制
可以將Bahdanau注意力機(jī)制劃分為以下步驟:首先,將上一個(gè)時(shí)間步長中的解碼器隱含態(tài)與編碼器隱含態(tài)(輸入句子中的每個(gè)元素對應(yīng)一個(gè)隱含態(tài))相組合,生成對齊分值。類似于Vaswani注意力機(jī)制中的sqrt(d),Bahdanau注意力機(jī)制采用Tanh作為縮放因子,可以用下面的公式來表示:

Bahdanau 分值公式
然后,使用softmax函數(shù)將分值歸一化成權(quán)重值,將權(quán)重值乘以隱含的編碼器狀態(tài),得到語境向量。最后,將語境向量和前一個(gè)解碼器的輸出連接起來,生成一個(gè)新的輸出。每個(gè)時(shí)間步長均重復(fù)上述過程。
該注意力機(jī)制的詳細(xì)實(shí)現(xiàn)過程將在“代碼”小節(jié)中做詳細(xì)描述。
附加信息
1. 什么是Seq2Seq?
序列到序列的學(xué)習(xí)模型將句子從一個(gè)維度轉(zhuǎn)換成另一維度,在語言翻譯時(shí),便是將句子從一種語言翻譯成另一種語言。
2. 為什么要softmax?
softmax函數(shù)取n個(gè)實(shí)數(shù)的輸入向量v1,并將其歸一化為包含n個(gè)分量的概率分布。每個(gè)輸出分量在(0,1)范圍內(nèi),各向量分量的和加起來為1。利用softmax函數(shù),可以為每個(gè)分量生成概率分布函數(shù),從而影響解碼器輸出的概率。最后,將語境向量與之前的解碼器輸出連接,輸入到解碼器RNN單元中去,以生成新的隱含態(tài)。
3. 為什么要縮放?
如果d的維數(shù)很大,點(diǎn)積的大小就會(huì)很大,Softmax函數(shù)會(huì)使得梯度變得很小,通過對點(diǎn)積進(jìn)行縮放來減少這種影響。Bahdanau 注意力機(jī)制用Tanh實(shí)現(xiàn)縮放,Vaswani 注意力機(jī)制用1/sqrt(d)實(shí)現(xiàn)縮放。
代碼
在下一節(jié)中,將Bahdanau注意力機(jī)制應(yīng)用于序列任務(wù),利用Keras實(shí)現(xiàn)一個(gè)編碼器-解碼器架構(gòu),可以從Google Colab Notebook.上下載該例子的完整代碼。
文中的代碼對“注意力機(jī)制文章?”中的第三方實(shí)現(xiàn)代碼進(jìn)行了修改和優(yōu)化。與“注意力機(jī)制文章?”不同,這里利用注意力機(jī)制來設(shè)計(jì)一個(gè)系統(tǒng),將給定的英語句子翻譯成法語。
下面是模型的輸入示例和預(yù)測輸出序列示例。
預(yù)測示例
導(dǎo)入包
1. 首先使用下面的代碼導(dǎo)入所需的python包。

LanguageIndex類
2. 接下來,創(chuàng)建一個(gè)執(zhí)行索引映射的語言索引類(LanguageIndex類)。目的是存儲(chǔ)字典中的所有單詞,并能夠引用它們的索引。這個(gè)類還存儲(chǔ)了每種語言的最長句的長度。

文本清洗
3. 接下來,創(chuàng)建一些輔助函數(shù)來生成編解碼的數(shù)據(jù)序列,輔助函數(shù)為執(zhí)行特征工程而設(shè)。輔助函數(shù)刪除所有的標(biāo)點(diǎn)符號、空格和不常見的字符,實(shí)現(xiàn)句子清洗,它把每個(gè)句子轉(zhuǎn)換成一個(gè)向量列表,每個(gè)向量表示一個(gè)句子中的各單詞的索引。

加載數(shù)據(jù)集+損失函數(shù)
4. 接下來,定義數(shù)據(jù)轉(zhuǎn)換函數(shù),并將其加載到數(shù)據(jù)集中。該部分代碼段中還包括了損失函數(shù)。

創(chuàng)建數(shù)據(jù)集
5. 把上述內(nèi)容歸集起來。清理輸入數(shù)據(jù)、向量化輸入和輸出語言的張量、計(jì)算輸入和輸出句子的最大長度,并添加必要的填充。這些操作通過下述代碼來實(shí)現(xiàn)。

????
編碼器+解碼器
1. 編碼器
編碼器負(fù)責(zé)步進(jìn)輸入序列的時(shí)間步長,并將整個(gè)序列編碼成一個(gè)固定長度的向量,即語境向量。
2. 解碼器
解碼器負(fù)責(zé)讀取語境向量,步進(jìn)輸出時(shí)間步長。
在下個(gè)單元中,將定義編碼器和解碼器架構(gòu)。默認(rèn)情況下,編碼器和解碼器配置在CPU上運(yùn)行。然而,模型在基于CUDA的GPU上運(yùn)行要快得多。如果在GPU上進(jìn)行訓(xùn)練,應(yīng)將第 7行至 27行代碼替換為:


3. 創(chuàng)建模型、數(shù)據(jù)并進(jìn)行訓(xùn)練!
最后,序列到序列翻譯模型的所有片段均準(zhǔn)備好之后,只需運(yùn)行以下代碼段,實(shí)例化數(shù)據(jù)集并開始訓(xùn)練模型。
?

結(jié)語
引入注意力機(jī)之后制,離使用機(jī)器學(xué)習(xí)模仿人類觀察又進(jìn)了一步。
可以免費(fèi)從 Google Colab Notebook上下載源代碼。如果想了解更多關(guān)于注意力機(jī)制的信息,請查看下述資源。
參考文獻(xiàn)
[1] 利用BERT語言模型從文本中獲取語義(2020年9月1日)
?https://www.youtube.com/watch?v=-9vVhYEXeyQ&t=145s
[2] 利用聯(lián)合學(xué)習(xí)對齊和翻譯實(shí)現(xiàn)神經(jīng)機(jī)器翻譯(2016年5月19日) https://arxiv.org/abs/1409.0473
[3] 你需要的就是注意力(2017年12月6日)?https://arxiv.org/abs/1706.03762
[4] 展示、出席和講述:帶有視覺注意力的神經(jīng)圖像標(biāo)題生成(2016年4月19日)https://arxiv.org/abs/1502.03044
[5]注意力機(jī)制中的keys、queries和values到底是什么?(2019年8月1日)
https://stats.stackexchange.com/questions/421935/what-exactly-are-keys-queries-and-values-in-attention-mechanisms
[6] 機(jī)器學(xué)習(xí)速成課程:嵌入式課程(2020年10月2日)
?https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture
[7]注意力機(jī)制綜合指南(2019年11月20日)
?https://www.analyticsvidhya.com/blog/2019/11/comprehensive-guide-attention-mechanism-deep-learning/
[8]深度學(xué)習(xí):注意力機(jī)制(2019年9月15日)
?https://blog.floydhub.com/attention-mechanism/
[9] 注意力機(jī)制的直觀理解(2019年3月20日)
?https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f
[10] 博客發(fā)布代碼(2022年2月11日)
https://colab.research.google.com/drive/1HRuVWssDYPdq1eDQSYL54OjLKXQlmW0_?usp=sharing
[11]基于注意力的神經(jīng)機(jī)器翻譯的有效方法(2015年9月15日)?https://arxiv.org/abs/1508.04025
?
原文標(biāo)題:What You Never Knew About Attention Mechanisms
原文鏈接:https://medium.com/sfu-cspmp/what-you-never-knew-about-attention-mechanisms-caa2a2fb0b94
譯者簡介
陳之炎,北京交通大學(xué)通信與控制工程專業(yè)畢業(yè),獲得工學(xué)碩士學(xué)位,歷任長城計(jì)算機(jī)軟件與系統(tǒng)公司工程師,大唐微電子公司工程師,現(xiàn)任北京吾譯超群科技有限公司技術(shù)支持。目前從事智能化翻譯教學(xué)系統(tǒng)的運(yùn)營和維護(hù),在人工智能深度學(xué)習(xí)和自然語言處理(NLP)方面積累有一定的經(jīng)驗(yàn)。業(yè)余時(shí)間喜愛翻譯創(chuàng)作,翻譯作品主要有:IEC-ISO 7816、伊拉克石油工程項(xiàng)目、新財(cái)稅主義宣言等等,其中中譯英作品“新財(cái)稅主義宣言”在GLOBAL TIMES正式發(fā)表。能夠利用業(yè)余時(shí)間加入到THU 數(shù)據(jù)派平臺的翻譯志愿者小組,希望能和大家一起交流分享,共同進(jìn)步
翻譯組招募信息
工作內(nèi)容:需要一顆細(xì)致的心,將選取好的外文文章翻譯成流暢的中文。如果你是數(shù)據(jù)科學(xué)/統(tǒng)計(jì)學(xué)/計(jì)算機(jī)類的留學(xué)生,或在海外從事相關(guān)工作,或?qū)ψ约和庹Z水平有信心的朋友歡迎加入翻譯小組。
你能得到:定期的翻譯培訓(xùn)提高志愿者的翻譯水平,提高對于數(shù)據(jù)科學(xué)前沿的認(rèn)知,海外的朋友可以和國內(nèi)技術(shù)應(yīng)用發(fā)展保持聯(lián)系,THU數(shù)據(jù)派產(chǎn)學(xué)研的背景為志愿者帶來好的發(fā)展機(jī)遇。
其他福利:來自于名企的數(shù)據(jù)科學(xué)工作者,北大清華以及海外等名校學(xué)生他們都將成為你在翻譯小組的伙伴。
點(diǎn)擊文末“閱讀原文”加入數(shù)據(jù)派團(tuán)隊(duì)~
轉(zhuǎn)載須知
如需轉(zhuǎn)載,請?jiān)陂_篇顯著位置注明作者和出處(轉(zhuǎn)自:數(shù)據(jù)派ID:DatapiTHU),并在文章結(jié)尾放置數(shù)據(jù)派醒目二維碼。有原創(chuàng)標(biāo)識文章,請發(fā)送【文章名稱-待授權(quán)公眾號名稱及ID】至聯(lián)系郵箱,申請白名單授權(quán)并按要求編輯。
發(fā)布后請將鏈接反饋至聯(lián)系郵箱(見下方)。未經(jīng)許可的轉(zhuǎn)載以及改編者,我們將依法追究其法律責(zé)任。
點(diǎn)擊“閱讀原文”擁抱組織


