□文/Adam Kosiorek
神經(jīng)網(wǎng)絡(luò)中的注意力機(jī)制
□文/Adam Kosiorek
神經(jīng)網(wǎng)絡(luò)中的注意力機(jī)制(Attention mechanisms),也被稱為“神經(jīng)注意力”或“注意力”,最近吸引了廣泛的注意力(雙關(guān)語)。而在接下來的這篇文章中,我將描述和實現(xiàn)兩種軟視覺注意力機(jī)制。
一種非正式的說法是,神經(jīng)注意力機(jī)制可以使得神經(jīng)網(wǎng)絡(luò)具備專注于其輸入(或特征)子集的能力:選擇特定的輸入。這可以是x∈R^d一個輸入,z∈R^k一個特征向量,a∈[0,1]^k一個注意力向量或fφ(x) 注意力網(wǎng)絡(luò)。通常來說,注意力為:
其中⊙是指元素對應(yīng)乘法(element-wise multiplication)。下面我們可以談?wù)撘幌萝涀⒁饬Γ╯oft attention),它將特征與一個值在0和1之間的掩碼或當(dāng)這些值被限定為0或1時的硬注意力(hard attention)相乘,即a∈{0,1}^k。在后一種情況下,我們可以使用硬注意力掩碼直接索引特征向量:za =z[a](用Matlab表示法),可以改變其維度。
如果你想要弄明白為什么注意力機(jī)制如此至關(guān)重要,那我們就有必要思考一下神經(jīng)網(wǎng)絡(luò)的真正意義是什么:函數(shù)近似器。它的能夠近似不同類別函數(shù)的能力主要依賴于它的架構(gòu)。一個典型的神經(jīng)網(wǎng)絡(luò)可以被實現(xiàn)為一系列矩陣乘法(matrix multiplications)和元素對應(yīng)非線性乘法(element-wise nonlinearities),其中輸入或特征向量的元素僅僅通過加法相互作用。
注意力機(jī)制會對一個用于與特征相乘的掩碼后進(jìn)行計算,這種看似簡單的額擴(kuò)展具有深遠(yuǎn)的影響:突然間,一個可以通過神經(jīng)網(wǎng)絡(luò)進(jìn)行很好的近似的函數(shù)空間得到了極大的擴(kuò)展,使得全新的用例成為可能。為什么會出現(xiàn)這種情況呢?直覺認(rèn)為是以下原因,雖然沒有足夠的證據(jù):這種理論認(rèn)為神經(jīng)網(wǎng)絡(luò)是一個通用函數(shù)近似器,可以對任意函數(shù)進(jìn)行近似為任意精度,但只能在無限數(shù)量的隱藏單位限定條件下進(jìn)行。而在任何實際情況下,情況并非如此。我們受限于可以使用的隱藏單位的數(shù)量。參考以下示例:我們要對N個輸入的結(jié)果進(jìn)行近似,前饋神經(jīng)網(wǎng)絡(luò)只能通過模擬具有許多加法(以及非線性)的乘法來實現(xiàn),因此需要大量神經(jīng)網(wǎng)絡(luò)的實際空間。但如果我們引入乘法交互的理念,過程就會自然而然地變得簡單而又便捷。
上述將注意力定義乘法交互(multiplicative interactions)的做法使得我們?nèi)绻胍潘蓪ψ⒁饬ρ诖a值的約束且a∈R^k,可以考慮一種更為廣泛的類模型。例如,動態(tài)過濾網(wǎng)絡(luò)(DFN)使用的是一個過濾器生成網(wǎng)絡(luò),它是基于輸入來計算過濾器(或任意大小的權(quán)重),并將其應(yīng)用于特征,這實際上是一種乘法交互。與軟注意力機(jī)制的唯一區(qū)別就是,注意力權(quán)重值沒有被限制在0和1之間。想要在這個方向上進(jìn)一步研究,那么去了解哪些交互作用是相加的,哪些是相乘的,探討加法和乘法神經(jīng)元之間的可微分轉(zhuǎn)換的概念這都將非常有趣。在博客distill blog上提供了一個很好的關(guān)于軟注意力機(jī)制的闡述,大家可以去了解一下。
注意力可以應(yīng)用于任何類型的輸入而不管其形狀如何。在矩陣值輸入(如圖片)的情況下,我們可以談?wù)撘曈X注意力。不管是I∈R^H×W圖像還是g∈R^ h×w注意力的一角都可以說是將注意力機(jī)制運(yùn)用于圖像的結(jié)果。
硬注意力在圖像中的應(yīng)用已經(jīng)被人們熟知多年:圖像裁剪(image cropping)。從概念上來看是非常簡單的,因為它只需要索引。硬注意力可以用Python(或Tensorflow)實現(xiàn)為:
上述存在的唯一的問題是它是不可微分的。你如果想要學(xué)習(xí)模型參數(shù)的話,就必須使用分?jǐn)?shù)評估器(score-function estimator)。
軟注意力,在其最簡單的變體中,對于圖像與和向量值來說沒有什么不同,并在等式(1)中得到了完全實現(xiàn)。這種類型的注意力的最早用途之一是來自于一篇叫做《Show, Attend and Tell》(https∶//arxiv.org/abs/1502.03044)的論文:
該模型學(xué)習(xí)趨向于該圖像的特定部分,同時生成描述該部分的單詞。
然而,這種類型的軟注意力在計算上是非常浪費的。輸入的黑色部分對結(jié)果沒有任何影響,但仍然需要處理。同時它也是過度參數(shù)化的:實現(xiàn)注意力的sigmoid 激活函數(shù)是彼此相互獨立的。它可以一次選擇多個目標(biāo),但實際操作中,我們經(jīng)常希望具有選擇性,并且只能關(guān)注場景中的一個單一元素。由DRAW和空間變換網(wǎng)絡(luò)(Spatial Transformer Networks)引入的以下兩種機(jī)制很好地解決了這個問題。它們也可以調(diào)整輸入的大小,從而進(jìn)一步提高性能。
高斯注意力通過利用參數(shù)化的一維高斯濾波器來創(chuàng)建圖像大小的注意力圖。使 a y∈R^h和a x ∈R^w是注意向量,它們分別指定在yy和xx軸中應(yīng)該出現(xiàn)哪一部分圖像。注意力掩碼可以創(chuàng)建為:
A woman is throwing a frisbee in a park.
A dog is standing on a hardwood floor.
A stop sign is on a road with amountain in the background.
在上圖中,頂行顯示ax,右邊的列顯示ay,中間的矩形顯示結(jié)果a。這里,為了可視化的目的,向量只包含0和1。實際上,它們可以實現(xiàn)為一維高斯的向量。通常,高斯數(shù)等于空間維度,每個向量由三個參數(shù)參數(shù)化:第一個高斯 μ的中心、連續(xù)高斯d的中心距離和高斯標(biāo)準(zhǔn)偏差 σ。通過這個參數(shù),注意力和 glimpse在注意力參數(shù)方面是可以區(qū)分的,因此很容易學(xué)習(xí)。
上述圖形的注意力仍然是浪費的,因為它只選擇一部分圖像,同時遮擋所有剩余的部分。而不是直接使用向量,我們可以將它們分別放入矩陣 A y ∈R^h×H和 A x∈R^w×W?,F(xiàn)在,每個矩陣每行有一個高斯,參數(shù) d 指定連續(xù)行中高斯中心之間的距離(以列為單位)。Glimpse現(xiàn)在實施為:
我在HART中使用了這種機(jī)制,我最近的一篇關(guān)于RNN的生物啟發(fā)對象跟 蹤 的 文 章 引 起 關(guān) 注(https∶//arxiv.org/abs/1706.09262)。這里是左側(cè)輸入圖像的示例,注意力glimpse在右側(cè); glimpse將顯示主圖像中標(biāo)記的框為綠色(如下圖)。
下面的代碼可以為Tensorflow中的一小批樣本創(chuàng)建上述矩陣值的掩碼。如果要創(chuàng)建Ay,你可以將其稱為Ay = gaussian_mask(u, s, d,h, H),其中 u,s,d 為該順序的 μ,σ 和 d,以像素為單位指定。
空間變換(STN)允許進(jìn)行更多的普通變換,與圖像裁剪只有細(xì)微區(qū)別,但是圖像裁剪是可能的用例之一。它由兩個要素組成:網(wǎng)格生成器和采樣器。網(wǎng)格生成器指定網(wǎng)格的點被采樣;而采樣器,只采樣點。來自DeepMind的最近的神經(jīng)網(wǎng)絡(luò)庫Sonnet(https∶//github.com/deepmind/sonnet), 用Tensorflow實現(xiàn)尤其容易。
高斯注意力和空間變換都可以實現(xiàn)非常相似的行為。我們?nèi)绾芜x擇使用哪一個?這里有幾個細(xì)微差別:
·高斯注意力是一個超參數(shù)的裁剪機(jī)制:它需要六個參數(shù),但只有四個自由度(y、x、height 、width)。空間變換(STN)只需要四個參數(shù)。
·我還沒有運(yùn)行任何測試,但是STN應(yīng)該更快。它依賴于采樣點的線性插值,而高斯注意力必須執(zhí)行兩個巨大的矩陣乘法。STN可以快一個數(shù)量級(以輸入圖像的像素為單位)。
·高斯注意力應(yīng)該(沒有測試運(yùn)行)更容易訓(xùn)練。這是因為所發(fā)生的glimpse中的每個像素可以是源圖像相對大的像素塊的凸組合,這樣可以更容易地找到錯誤的原因。另一方面,STN依賴于線性插值,這意味著每個采樣點的梯度對于兩個最近的像素而言都是非零的。
注意力機(jī)制擴(kuò)展了神經(jīng)網(wǎng)絡(luò)的能力。它們能接近更復(fù)雜的函數(shù),或者更直觀地說,它們可以專注于輸入的特定部分。它們使自然語言基準(zhǔn)測試的性能得到改進(jìn),以及賦予圖像字幕、記憶網(wǎng)絡(luò)和神經(jīng)程序的全新能力。
我認(rèn)為注意力最重要的案例尚未發(fā)現(xiàn)。例如,我們知道視頻中的對象是一致的和連貫的,它們不會消失在框架中。注意力機(jī)制可以用來表達(dá)這種一致性,后續(xù)將如何發(fā)展,我們將會持續(xù)關(guān)注。