深度學(xué)習(xí)近期的一個(gè)趨勢(shì)是使用注意機(jī)制(Attention Mechanism),OpenAI研究負(fù)責(zé)人Ilya Sutskever在**近的一次采訪中提到了注意機(jī)制是**令人激動(dòng)的進(jìn)步之一,而且它們將就此扎根下來(lái)。這聽(tīng)起來(lái)令人興奮不已,但注意機(jī)制到底是什么?
神經(jīng)網(wǎng)絡(luò)中的注意機(jī)制大體是基于從人類視覺(jué)中發(fā)現(xiàn)的注意機(jī)制。對(duì)人類視覺(jué)注意力的研究較為透徹,目前存在幾個(gè)不同模型,但歸根結(jié)底,它們?cè)诒举|(zhì)上都是能夠聚焦于圖像中「高分辨率」的特定區(qū)域,同時(shí)又可以感知到周圍的「低分辨率」區(qū)域,然后不斷的調(diào)整焦點(diǎn)。
注 意機(jī)制在神經(jīng)網(wǎng)絡(luò)中的使用由來(lái)已久,特別是用在圖像識(shí)別中。例如,Hugo Larochelle和Geoffrey E. Hinton于2010年發(fā)表的論文《Examples include Learning to combine foveal glimpses with a third-order Boltzmann machine》,以及Misha Denil2011年的論文《Learning where to Attend with Deep Architectures for Image Tracking》。但直到**近,外界才將注意機(jī)制應(yīng)用在一些遞歸神經(jīng)網(wǎng)絡(luò)架構(gòu)(尤其是用于自然語(yǔ)言處理,對(duì)于視覺(jué)的應(yīng)用也在增加)上。這就是本文所關(guān)注 的重點(diǎn)。
注意機(jī)制可以解決哪些問(wèn)題?
為 了更好的理解注意機(jī)制的作用,我們以神經(jīng)機(jī)器翻譯(NMT)為例。傳統(tǒng)的機(jī)器翻譯系統(tǒng)通常都是依靠復(fù)雜的基于文本統(tǒng)計(jì)屬性的特征工程。簡(jiǎn)單來(lái)說(shuō),這些系統(tǒng) 非常復(fù)雜,建造它們需要在工程上付諸大量努力。神經(jīng)機(jī)器翻譯系統(tǒng)的工作原理有些不同,我們會(huì)將一個(gè)句子的含義映射到一個(gè)固定長(zhǎng)度的向量表示上,然后基于那 個(gè)向量再進(jìn)行翻譯。NMT系統(tǒng)不是依賴于文法計(jì)數(shù),而是試圖獲取更加高級(jí)的文本含義,這樣就可以比其他方法更好的概括出新句子。更加重要的是,NMT系統(tǒng) 在建造和訓(xùn)練方面更加容易,它們不需要人工添加特征。事實(shí)上,Tensorflow中的一個(gè)簡(jiǎn)單應(yīng)用已經(jīng)都不會(huì)超過(guò)100行代碼了。
大多數(shù)NMT系統(tǒng)的工作原理是通過(guò)遞歸神經(jīng)網(wǎng)絡(luò)將源句子(比如說(shuō)一句德語(yǔ))編碼成向量,然后同樣使用遞歸神經(jīng)網(wǎng)絡(luò)將這個(gè)向量解碼成一句英語(yǔ)。
在上圖中,單詞「Echt」、「Dicke」和「Kiste」被輸入進(jìn)編碼器,經(jīng)過(guò)一個(gè)特殊的信號(hào)(圖中未顯示)之后,解碼器開(kāi)始生成翻譯完成的句子。解碼器持續(xù)不斷的生成詞匯,直到遇到一個(gè)特殊的代表句子結(jié)束的符號(hào)。在這里,向量表現(xiàn)出了編碼器的內(nèi)部狀態(tài)。
如 果你看的足夠仔細(xì),你會(huì)發(fā)現(xiàn),解碼器是被用來(lái)基于編碼器中的**后一個(gè)隱狀態(tài)來(lái)單獨(dú)完成翻譯的。這個(gè)向量必須將我們所需要了解的源句子的一切都進(jìn)行編碼,它 必須能夠完全捕捉到句子的含義。用個(gè)技術(shù)術(shù)語(yǔ)來(lái)表示,那個(gè)向量是在進(jìn)行句式嵌入(sentence embedding)。事實(shí)上,你如果使用PCA或t-SNAE等降維方法將不同句式嵌入繪制出來(lái)的話,你會(huì)發(fā)現(xiàn)**終語(yǔ)義相似的句子會(huì)離得比較近。這令人 非常驚奇。
上 文提到,我們可以將一個(gè)非常長(zhǎng)的句子的所有信息都編碼成單一向量,然后解碼器僅基于這個(gè)向量就能完成一次很好的翻譯,但這個(gè)假設(shè)看起來(lái)還有些不夠合理。讓 我們拿一個(gè)由50個(gè)單詞組成的源句子舉例。英語(yǔ)翻譯的**個(gè)詞可能和源句子的**個(gè)詞高度相關(guān)。但這意味著解碼器不得不考慮50步之前的信息,以及需要在 這個(gè)向量中進(jìn)行解碼的信息。我們都知道,遞歸神經(jīng)網(wǎng)絡(luò)在處理這類遠(yuǎn)程依賴性時(shí)會(huì)遇到問(wèn)題。理論上來(lái)說(shuō),類似于長(zhǎng)短時(shí)記憶模型(LSTMs)的架構(gòu)應(yīng)該可以 應(yīng)對(duì)這些問(wèn)題,但事實(shí)上遠(yuǎn)程依賴性依然會(huì)存在問(wèn)題。例如,研究者已經(jīng)發(fā)現(xiàn),顛倒源句子的順序(將它逆向輸入編碼器)能夠產(chǎn)生更好的結(jié)果,因?yàn)檫@縮短了從解 碼器到編碼器相關(guān)部分的路徑。同樣的,將一個(gè)順序輸入兩次也可能幫助神經(jīng)網(wǎng)絡(luò)更好的進(jìn)行記憶。
我 認(rèn)為這種顛倒句子順序的方法屬于「hack」。這在實(shí)際應(yīng)用中更有效,但卻不是一種從根本上出發(fā)的解決方案。大部分翻譯基準(zhǔn)是基于法語(yǔ)和德語(yǔ)所做出來(lái)的, 它們和英語(yǔ)比較類似。但在某些語(yǔ)言(例如日語(yǔ))的英語(yǔ)翻譯中,一句話的**后一個(gè)詞有可能是**個(gè)詞的預(yù)測(cè)因子。在這種情況下,逆向輸入就會(huì)使結(jié)果變的更 差。對(duì)此,還有什么可選方案?答案就是注意機(jī)制。
有 了注意機(jī)制,我們不再試圖將一個(gè)完整的源句子編碼成一個(gè)固定長(zhǎng)度的向量。相反,我們?cè)谛纬奢敵龅拿恳徊蕉荚试S解碼器「關(guān)注」到源句子的不同部分。重要的 是,我們會(huì)讓這個(gè)模型基于輸入的句子以及到目前為止產(chǎn)生的結(jié)果去學(xué)習(xí)應(yīng)該「關(guān)注」什么。因此,在那些高度一致的語(yǔ)言(例如英語(yǔ)和德語(yǔ))中,解碼器將可能選 擇按照順序進(jìn)行「關(guān)注」。如果需要翻譯**個(gè)英語(yǔ)單詞,就「關(guān)注」**個(gè)單詞,等等。這就是神經(jīng)機(jī)器翻譯中借助于對(duì)匹配和翻譯的聯(lián)合學(xué)習(xí)所獲得的成果。
這 里,y’是解碼器翻譯出來(lái)的dan ci,x’是源句子的單詞。上圖用了一個(gè)雙向的遞歸網(wǎng)絡(luò),但這個(gè)不重要,你可以忽視反向部分。重要的部分在于,解碼器輸出的每一個(gè)單詞y都依賴于所有輸入 狀態(tài)的加權(quán)組合,而不僅是**后一個(gè)狀態(tài)。a’是權(quán)重,用來(lái)定義對(duì)于每一個(gè)輸出值,每個(gè)輸入狀態(tài)應(yīng)該被考慮的程度。因此,如果a(3,2)很大,則意味著解 碼器在生成目標(biāo)句子第三個(gè)單詞的翻譯結(jié)果時(shí),應(yīng)該更多的「注意」源句子的第二個(gè)狀態(tài)。
注意力的一大優(yōu)點(diǎn)是它使我們能夠解釋和想象出模型的工作狀態(tài)。例如,當(dāng)一個(gè)句子正在被翻譯時(shí),我們可以將注意力權(quán)重矩陣進(jìn)行可視化處理,因此,就能理解這個(gè)模型是怎樣進(jìn)行翻譯的。
這里我們看到,當(dāng)從法語(yǔ)翻譯成英語(yǔ)時(shí),神經(jīng)網(wǎng)絡(luò)按照順序「關(guān)注」了每一個(gè)輸入狀態(tài),但有時(shí)它會(huì)一次性「關(guān)注」兩個(gè)單詞,比如在將「la Syrie」翻譯成「Syria」(敘利亞)時(shí)。
注意機(jī)制的代價(jià)
如 果我們更仔細(xì)地觀察注意機(jī)制的方程,我們會(huì)發(fā)現(xiàn)它是有代價(jià)的。我們需要結(jié)合每個(gè)輸入和輸出的單詞來(lái)計(jì)算注意值。如果你輸入50個(gè)詞,輸出50個(gè)詞,那么注 意值將會(huì)是2500。這還不算糟,但是如果你做字符級(jí)的計(jì)算,處理由數(shù)以百計(jì)的標(biāo)記組成的序列,那么上述注意機(jī)制的代價(jià)將變得過(guò)于昂貴。
事 實(shí)上,這是反直覺(jué)的。人類的注意力是節(jié)省計(jì)算資源的。當(dāng)我們專注于一件事時(shí),會(huì)忽略許多其他事。但那不是我們上述模型所真正做的事。在我們決定關(guān)注什么之 前,必須確定每一個(gè)細(xì)節(jié)。直覺(jué)上等效輸出一個(gè)翻譯的單詞,要通過(guò)所有內(nèi)在記憶中的文本來(lái)決定下一步生成什么單詞,這似乎是一種浪費(fèi),完全不是人類所擅長(zhǎng)的 事情。事實(shí)上,它更類似于記憶的使用,而不是注意,這在我看來(lái)有點(diǎn)用詞不當(dāng)。然而,這并不影響注意機(jī)制變得非常流行,而且在許多任務(wù)中表現(xiàn)良好。
另 一種注意機(jī)制的方法是使用強(qiáng)化學(xué)習(xí)來(lái)預(yù)測(cè)一個(gè)需要專注的近似位置。這聽(tīng)起來(lái)更像人類的注意力,這就是視覺(jué)注意遞歸模型( Recurrent Models of Visual Attention)所完成的事情。然而,強(qiáng)化學(xué)習(xí)模型不能用反向傳播進(jìn)行首尾相連的訓(xùn)練,因此它們并不能廣泛應(yīng)用于NLP問(wèn)題中。
超越機(jī)器翻譯的注意機(jī)制
目前我們看到了注意機(jī)制應(yīng)用于機(jī)器翻譯中,但它可以用于任意遞歸模型,讓我們看更多的例子。
如 圖所示,在《Attend and Tell:Neural Image Caption Generation with Visual Attention》論文中,作者使用了注意機(jī)制來(lái)解決圖像描述生成問(wèn)題。他們用卷積神經(jīng)網(wǎng)絡(luò)來(lái)「編碼」圖像,然后用帶有注意機(jī)制的遞歸神經(jīng)網(wǎng)絡(luò)來(lái)生成描 述。通過(guò)將注意權(quán)重可視化,我們來(lái)解釋一下,模型在生成一個(gè)單詞時(shí)所表現(xiàn)出來(lái)的樣子:
在論文《Grammar as a Foreign Language》中,作者用帶有注意機(jī)制的遞歸神經(jīng)網(wǎng)絡(luò)生成句子分析樹(shù)。將注意矩陣可視化,可以讓我們洞悉神經(jīng)網(wǎng)絡(luò)是如何生成這個(gè)分析樹(shù)的:
在論文《Teaching Machines to Read and Comprehend》中,作者使用RNN來(lái)閱讀文本和(合成的)問(wèn)題,然后輸出答案。通過(guò)將注意矩陣可視化,我們能看到,當(dāng)神經(jīng)網(wǎng)絡(luò)試圖尋找答案時(shí),它在「看」什么:
注意力=(模糊的)記憶?
注 意機(jī)制所解決的基本問(wèn)題是允許神經(jīng)網(wǎng)絡(luò)參考輸入序列,而不是專注于將所有信息編碼為固定長(zhǎng)度的向量。正如我上面提到的,我認(rèn)為注意力有點(diǎn)用詞不當(dāng)。換句話 說(shuō),注意機(jī)制是簡(jiǎn)單的讓神經(jīng)網(wǎng)絡(luò)使用其內(nèi)部記憶(編碼器的隱狀態(tài))。在這個(gè)解釋中,不是選擇去「關(guān)注」什么,而是讓神經(jīng)網(wǎng)絡(luò)選擇從記憶中檢索什么。不同于 傳統(tǒng)的記憶,這里的記憶訪問(wèn)機(jī)制更加靈活,這意味著神經(jīng)網(wǎng)絡(luò)根據(jù)所有記憶的位置賦予其相應(yīng)的權(quán)重,而不是從單個(gè)離散位置得出某個(gè)值。讓記憶的訪問(wèn)更具靈活 性,有助于我們用反向傳播對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行首尾相連的訓(xùn)練(雖然有非模糊的方法,即使用抽樣方法來(lái)代替反向傳播進(jìn)行梯度計(jì)算。)
記憶機(jī)制有著更長(zhǎng)的歷史。標(biāo)準(zhǔn)遞歸神經(jīng)網(wǎng)絡(luò)的隱狀態(tài)就是一種內(nèi)部記憶。梯度消失問(wèn)題使RNNs無(wú)法從遠(yuǎn)程依賴性中進(jìn)行學(xué)習(xí)。長(zhǎng)短時(shí)記憶模型通過(guò)使用允許明確記憶刪除和更新)改善了上述情況。
形 成更加復(fù)雜記憶結(jié)構(gòu)的趨勢(shì)仍在繼續(xù)。論文《End-to-End Memory Networks》中可以(End-to-End Memory Networks)使神經(jīng)網(wǎng)絡(luò)先多次讀取相同的輸入序列,然后再進(jìn)行輸出,每一個(gè)步驟都更新記憶內(nèi)容。例如,通過(guò)對(duì)輸入內(nèi)容進(jìn)行多次推理從而回答某個(gè)問(wèn) 題。但是,當(dāng)神經(jīng)網(wǎng)絡(luò)參數(shù)的權(quán)重以一種特定方式聯(lián)系在一起時(shí),端對(duì)端記憶網(wǎng)絡(luò)中的記憶機(jī)制等同于注意機(jī)制,這在記憶中創(chuàng)造了多重躍點(diǎn)(因?yàn)樗噲D從多個(gè)句 子中集成信息)。
在論文《神經(jīng)圖靈機(jī)》中使用了和記憶機(jī)制類似的形式,但有著更加復(fù)雜的訪問(wèn)類型,后者既使用了基于內(nèi)容的訪問(wèn),又使用了基于位置的訪問(wèn),從而使神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)訪問(wèn)模式來(lái)執(zhí)行簡(jiǎn)單的計(jì)算機(jī)程序,例如排序算法。
在不久的將來(lái),我們非常有可能看到對(duì)記憶和注意機(jī)制的更加清晰的區(qū)分,它可能會(huì)沿著「強(qiáng)化學(xué)習(xí)神經(jīng)圖靈機(jī)」(正試著學(xué)習(xí)訪問(wèn)模式來(lái)處理外部接口)的路線發(fā)展下去。
出處:機(jī)器之心
注:轉(zhuǎn)載文章均來(lái)自于公開(kāi)網(wǎng)絡(luò),僅供學(xué)習(xí)使用,不會(huì)用于任何商業(yè)用途,如果侵犯到原作者的權(quán)益,請(qǐng)您與我們聯(lián)系刪除或者授權(quán)事宜。