1. 程式人生 > >深度學習和自然語言處理中的attention和memory機制

深度學習和自然語言處理中的attention和memory機制

Attention機制是最近深度學習的一個趨勢。在一次採訪中,OpenAI的研究總監Ilya Sutskever說attention機制是最令人興奮的進步之一,而且已經廣為使用。聽起來激動人心吧。但attention機制究竟是什麼呢?

神經網路裡的attention機制是(非常)鬆散地基於人類的視覺注意機制。人類的視覺注意機制已經被充分地研究過了,而且提出了多個不同的模型,所有的模型歸根結底都是按照“高解析度”聚焦在圖片的某個特定區域並以“低解析度”感知影象的周邊區域的模式,然後不斷地調整聚焦點。

attention解決了什麼問題?

我們以神經機器翻譯(Neural Machine Translation,NMT)為例,來理解attention能為我們做什麼。傳統的機器翻譯系統通常依賴於基於文字統計特性的複雜特徵工程。簡而言之,這些系統非常複雜,需要投入大量工程來搭建它們。神經機器翻譯系統則有所區別。在NMT系統裡,我們把一句話的意思對映為一個固定長度的表徵向量,然後基於此向量生成翻譯文字。由於不依賴於類似n-gram計數,而是捕捉文字更高層次的含義,NMT系統生成的翻譯語句比大多數其它方法都要好。更重要的是,NMT系統的搭建和訓練過程更方便,它們不需要任何手工的特徵工程。事實上,TensorFlow只需要幾百行程式碼就能實現一個

簡單版本

大多數NMT系統使用遞迴神經網路(RNN)將源語句(比如,一句德語)編碼為一個向量,然後同樣用RNN將其解碼為英語句子。

圖片描述

如上圖所示,“Echt”、“Dicke”和“Kiste”依次輸入到編碼器中,一個特殊字元標誌輸入結束(圖中未顯示),然後解碼器開始生成翻譯的語句。解碼器持續逐詞地生成,直到生成句子的終止符。這裡的h向量表示了編碼器的內部狀態。

如果你仔細觀察,你會發現解碼器在翻譯時僅依賴編碼器最後的隱藏狀態(上圖的h3)。h3向量必須對源句子的所有內容都進行編碼。它必須充分地捕捉含義。用專業術語來說,這個向量就是一個sentence embedding。事實上,如果你用PCA或者t-SNE降維之後將不同句子的embedding繪製出來,

你將看到語義相近的句子彼此很接近。真是令人覺得神奇。

然而,我們似乎無法把一個很長的句子所包含的所有資訊編碼成一個向量,然後解碼器僅根據這個向量生成完美的翻譯,這種假設顯得不可理喻。我們假設原文句子長度有50個單詞。英文譯文的第一個單詞可能與原文的第一個單詞高度相關。但這意味著解碼器必須考慮50步之前的資訊,而且那段資訊需要以某種形式已經被編入向量中。眾所周知,RNN在處理這類長距離依賴關係時會出現問題。理論上,LSTM這類結構能夠處理這個問題,但在實踐中,長距離依賴關係仍舊是個問題。例如,研究人員發現將原文倒序(將其倒序輸入編碼器)產生了顯著改善的結果,因為從解碼器到編碼器對應部分的路徑被縮短了。同樣,

兩次輸入同一個序列似乎也有助於網路更好地記憶。

我認為倒序句子這種方法屬於“hack”手段。它屬於被實踐證明有效的方法,而不是有理論依據的解決方法。大多數翻譯的基準都是用法語、德語等語種,它們和英語非常相似(即使漢語的詞序與英語也極其相似)。但是有些語種(像日語)句子的最後一個詞語在英語譯文中對第一個詞語有高度預言性。那麼,倒序輸入將使得結果更糟糕。還有其它辦法嗎?那就是Attention機制。

有了Attention機制,我們不再需要將完整的原文句子編碼為固定長度的向量。相反,我們允許解碼器在每一步輸出時“參與(attend)”到原文的不同部分。尤為重要的是我們讓模型根據輸入的句子以及已經產生的內容來決定參與什麼。因此,在形式非常相似的語種之間(如英語與德語),解碼器可能會選擇順序地參與事情。生成第一個英語詞語時參與原文的第一個詞語,以此類推。這正是論文Neural Machine Translation by Jointly Learning to Align and Translate的成果,如下圖所示:

圖片描述

y’是編碼器生成的譯文詞語,x’是原文的詞語。上圖使用了雙向遞迴網路,但這並不是重點,你先忽略反向的路徑吧。重點在於現在每個解碼器輸出的詞語yt取決於所有輸入狀態的一個權重組合,而不只是最後一個狀態。a’是決定每個輸入狀態對輸出狀態的權重貢獻。因此,如果a3,2的值很大,這意味著解碼器在生成譯文的第三個詞語時,會更關注與原文句子的第二個狀態。a’求和的結果通常歸一化到1(因此它是輸入狀態的一個分佈)。

Attention機制的一個主要優勢是它讓我們能夠解釋並可視化整個模型。舉個例子,通過對attention權重矩陣a的視覺化,我們能夠理解模型翻譯的過程。

圖片描述

我們注意到當從法語譯為英語時,網路模型順序地關注每個輸入狀態,但有時輸出一個詞語時會關注兩個原文的詞語,比如將“la Syrie”翻譯為“Syria”。

Attention的成本

如果再仔細觀察attention的等式,我們會發現attention機制有一定的成本。我們需要為每個輸入輸出組合分別計算attention值。50個單詞的輸入序列和50個單詞的輸出序列需要計算2500個attention值。這還不算太糟糕,但如果你做字元級別的計算,而且字元序列長達幾百個字元,那麼attention機制將會變得代價昂貴。

其實它和我們的直覺恰恰相反。人類的注意力是節省計算資源的。當專注於一件事時,我們能忽略其它事情。但這並不是我們上一個模型的作法。我們在決定專注於某個方面之前先仔細觀察每件事。直觀地說,這相當於輸出一個翻譯後的詞語,然後遍歷記憶裡所有文字再決定下一個輸出什麼。這似乎是一種浪費,而且沒人會這麼幹。事實上,它更類似於記憶體訪問,不是attention,在我看來有點兒用詞不當(下文會繼續討論)。不過,這並沒有阻礙attention機制的流行傳播。

attention的另一種替代方法是用強化學習(Reinforcement Learning)來預測關注點的大概位置。這聽起來更像是人的注意力,這也是Recurrent Models of Visual Attention文中的作法。然而,強化學習模型不能用反向傳播演算法端到端訓練,因此它在NLP的應用不是很廣泛。

機器翻譯之外領域的Attention機制

到目前為止,我們已經見識了attention在機器翻譯領域的應用。但上述的attention機制同樣也能應用於遞迴模型。讓我們再來看幾個例子。

Show,Attend and Tell一文中,作者將attention機制應用於生成圖片的描述。他們用卷積神經網路來“編碼”圖片,並用一個遞迴神經網路模型和attention機制來生成描述。通過對attention權重值的視覺化(就如之前機器翻譯的例子一樣),在生成詞語的同時我們能解釋模型正在關注哪個部分。

圖片描述

Grammar as a Foreign Language論文中,作者用遞迴神經網路模型和attention機制的來生成語法分析樹。視覺化的attention矩陣讓人深入地瞭解網路模型如何生成這些樹:

圖片描述

Teaching Machines to Read and Comprehend論文裡,作者利用RNN模型讀入文字,先讀入一個(合成的)問題,然後產生一個答案。通過將attention視覺化,我們可以看到網路模型在試圖尋找問題答案的時候關注哪些方面:

圖片描述

ATTENTION = (FUZZY) MEMORY?

attention機制解決的根本問題是允許網路返回到輸入序列,而不是把所有資訊編碼成固定長度的向量。正如我在上面提到,我認為使用attention有點兒用詞不當。換句話說,attention機制只是簡單地讓網路模型訪問它的內部儲存器,也就是編碼器的隱藏狀態。在這種解釋中,網路選擇從記憶中檢索東西,而不是選擇“注意”什麼。不同於典型的記憶體,這裡的記憶體訪問機制是彈性的,也就是說模型檢索到的是所有記憶體位置的加權組合,而不是某個獨立離散位置的值。彈性的記憶體訪問機制好處在於我們可以很容易地用反向傳播演算法端到端地訓練網路模型(雖然有non-fuzzy的方法,其中的梯度使用抽樣方法計算,而不是反向傳播)。

記憶機制本身的歷史更久遠。標準遞迴網路模型的隱藏狀態本身就是一種內部記憶。RNN由於存在梯度消失問題而無法從長距離依賴學習。LSTM通過門控機制對此做了改善,它允許顯式的記憶刪除和更新。

更復雜的記憶體結構的趨勢還在延續。End-To-End Memory Networks一文中的方法允許網路在輸出內容前多次讀入相同的序列,每一步都更新記憶內容。舉個例子,輸入一個故事,在經過多步推理之後回答一個問題。然而,當網路引數的權重以某種特定方式被繫結,端到端記憶網路的記憶機制就和這裡所介紹的attention機制一樣了,只是它是多跳的記憶(因為它試圖整合多個句子資訊)。

神經圖靈機器使用類似的記憶機制,但有一個更復雜的解決方案,它同時基於內容(如在這裡)和位置,使網路模型通過學習模式來執行簡單的計算機程式,比如排序演算法。

譯者簡介:趙屹華,計算廣告工程師@搜狗,前生物醫學工程師,關注推薦演算法、機器學習領域。

相關推薦

深度學習解決自然語言處理的7大問題,文字分類、語言建模、機器翻譯

摘要: 本文講的是用深度學習解決自然語言處理中的7大問題,文字分類、語言建模、機器翻譯等,自然語言處理領域正在從統計學方法轉向神經網路方法。在自然語言中,仍然存在許多具有挑戰性的問題。但是,深度學習方法在某些特定的語言問題上取得了state-of-the-art的結果。 本文講的是用深度學習解決自

深度學習自然語言處理的應用(一)

資料整理篇 經典教材 Speech and Language Processing (第1,2版內容略陳舊,第三版很入時, 但有些重要章節沒放在網上) https://web.stanford.edu

深度學習自然語言處理的應用綜述

由於人工神經網路可以對非線性過程進行建模,因此已經成為解決諸如分類,聚類,迴歸,模式識別,維度簡化,結構化預測,機器翻譯,異常檢測,決策視覺化,計算機視覺和其他許多問題的利器。這種廣泛的能力使得人工神經網路可以應用於許多領域。在本文中,我們討論了人工神經網路在自然語言處

深度學習自然語言處理的應用: 集智俱樂部活動筆記

自然語言處理(Natural Language Processing, NLP)是人工智慧中的一個重要分支,從人工智慧這個領域剛發展起來的時候就一直是一個重要的研究方向,到現在也發展出了很多的細分領域和非常多的方法,大致上來說,我們可以認為是在 2013 年的時候,伴隨著 word2vec 這個 word

深度學習自然語言處理attentionmemory機制

Attention機制是最近深度學習的一個趨勢。在一次採訪中,OpenAI的研究總監Ilya Sutskever說attention機制是最令人興奮的進步之一,而且已經廣為使用。聽起來激動人心吧。但attention機制究竟是什麼呢?神經網路裡的attentio

深度學習自然語言處理的應用脈絡1-基礎

本文是聽煉數成金的黃老師機器讀心術之深度學習大戰自然語言處理的課程總結的筆記和讀後感。 NLP技術發展階段 以語言學為主要基礎的時代(過去):建立基本語言覎則使用數理邏輯迚行推理,建立模型產生戒理解語言以統計斱法為主流的時代(現在):當資料量積累到海量,本身就能析取

網頁自然語言處理的字符問題(半角全角)

字符轉換 處理 unicode 指點 介紹 合並 圖片 十六進制 文本   先來看一個截圖,爬蟲得到的結果,裏面99的字體貌似有點奇怪,剛開始以為是不同的字體,在Excel裏選中調整字體時發現沒有變化,後來經過大佬指點,才知道是全角數字(原諒我小白無知)。為了統一起見,把所

自然語言處理的自注意力機制(Self-attention Mechanism)

from: https://www.cnblogs.com/robert-dlut/p/8638283.html 近年來,注意力(Attention)機制被廣泛應用到基於深度學習的自然語言處理(NLP)各個任務中,之前我對早期注意力機制進行過一些學習總結(可見http://www.cn

網頁自然語言處理的字元問題(半形全形)

  先來看一個截圖,爬蟲得到的結果,裡面99的字型貌似有點奇怪,剛開始以為是不同的字型,在Excel裡選中調整字型時發現沒有變化,後來經過大佬指點,才知道是全形數字(原諒我小白無知)。為了統一起見,把所有的全形字元轉換為半形字元,然後再做處理。既然是在爬蟲裡面,那可以直接用程式碼轉換了,但是以前存起來的資料用

如何用深度學習自然語言處理?這裡有份最佳實踐清單

對於如何使用深度學習進行自然語言處理,本文作者 Sebastian Ruder 給出了一份詳細的最佳實踐清單,不僅包括與大多數 NLP 任務相關的最佳實踐,還有最常見任務的最佳實踐,尤其是分類、序列標註、自然語言生成和神經機器翻譯。作者對最佳實踐的選擇很嚴格,只有被證明在至少兩個獨立的群體中有益的實踐才

深度學習自然語言處理(7)_斯坦福cs224d 語言模型,RNN,LSTM與GRU

說明:本文為斯坦福大學CS224d課程的中文版內容筆記,已得到斯坦福大學課程@Richard Socher教授的授權翻譯與發表 1.語言模型 語言模型用於對特定序列的一系列詞彙的出現概率進行計算。一個長度為m的詞彙序列{w1,…,wm}的聯合概率被表示為

斯坦福cs224d(深度學習自然語言處理上的應用)Lecture 2 note2

說明:本文為斯坦福大學CS224d課程的中文版內容筆記,已得到斯坦福大學課程@Richard Socher教授的授權翻譯與發表 課堂筆記:第2部分 ——————————————————————————————————– 關鍵詞:內部任務評價(Intrinsic Evaluation)和 外部任務

深度學習自然語言處理

這是一門關於自然語言處理的高階課程,由牛津大學和谷歌DeepMind(AlphaGo的開發機構)聯合開設,由Phil Blunsom主講,同時邀請到多位來自DeepMind和NVIDIA的業界講師來做客座講座。這是牛津大學計算機系2017年春季學期最新課程,由​大資料文摘進行

深度學習自然語言處理(8)_斯坦福cs224d RNN,MV-RNN與RNTN

這篇課堂筆記將介紹不同型別的RNN(遞迴神經網路),並介紹它在NLP領域的應用和優勢。 1、遞迴神經網路 在這篇課筆記中,我們會一起學習一種新的模型,這種模型絕對是以前介紹的那種遞迴神經網路的加強版!遞迴神經網路(RNNs)十分適用於有層次的、本身就有遞

深度學習自然語言處理(3)_斯坦福cs224d Lecture 3

原文作者:Rohit Mundra, Richard Socher 原文翻譯:@熊傑([email protected]) && @王昱森([email protected]) && @範築軍老師( [

深度學習自然語言處理(一)

自然語言處理主要研究用計算機來處理、理解以及運用人類語言(又稱自然語言)的各種理論和方法,屬於人工智慧領域的一個重要研究方向,是電腦科學與語言學的交叉學科,又常被稱為計算語言學。隨著網際網路的快速發展,網路文字尤其是使用者生成的文字成爆炸式增長,為自然語言處理帶來了巨大的應用

深度學習自然語言處理(三)——深度學習運用到自然語言處理領域的成功案例

目錄 1.全連線前饋神經網路(MLP)的應用 大部分情況下,全連線前饋神經網路(MLP)能被用來替代線性學習器。這包括二分類或多分類問題,以及更復雜的結構化預測問題。網路的非線性以及易於整合預訓練詞嵌入的能力經常帶來更高的分類精度。一系列工作通過簡單地將句

《基於深度學習自然語言處理》中文PDF+英文PDF+學習分析

機器學習 生成 統計學 alt 依存句法分析 詞向量 tle 工程應用 互聯 我們做自然語言處理的,主要是進行文本分析,作為人工智能的領域之一,也一定會應用深度神經網絡進行處理。 近年來快速發展的深度學習技術為解決自然語言處理問題的解決提供了一種可能的思路,已成為有效推動

車萬翔《基於深度學習自然語言處理》中英文PDF+塗銘《Python自然語言處理實戰核心技術與算法》PDF及代碼

提取 實用 進行 分析 表達式 詞法 快速入門 重點 tps 自然語言處理是人工智能領域的一個重要的研究方向,是計算機科學與語言學的交叉學科。隨著互聯網的快速發展,網絡文本尤其是用戶生成的文本呈爆炸性增長,為自然語言處理帶來了巨大的應用需求。但是由於自然語言具有歧義性、動態

自然語言處理傳統詞向量表示VS深度學習語言模型(三):word2vec詞向量

        在前面的部落格中,我們已經梳理過語言表示和語言模型,之所以將這兩部分內容進行梳理,主要是因為分散式的詞向量語言表示方式和使用神經網路語言模型來得到詞向量這兩部分,構成了後來的word2vec的發展,可以說是word2vec的基礎。1.什麼是詞向量