深度學習和NLP中的注意力和記憶
文章目錄
- 一、說明
- 二、注意力解決了什么問題?#
- 三、關注的代價#
- 四、機器翻譯之外的關注#
- 五、注意力=(模糊)記憶?#
一、說明
?? 深度學習的最新趨勢是注意力機制。在一次采訪中,現任 OpenAI 研究總監的 Ilya Sutskever 提到,注意力機制是最令人興奮的進步之一,而且它們將繼續存在。這聽起來很令人興奮。但什么是注意力機制?
?? 神經網絡中的注意力機制(非常)松散地基于人類中的視覺注意力機制。人類的視覺注意力得到了很好的研究,雖然存在不同的模型,但它們本質上都歸結為能夠以“高分辨率”聚焦在圖像的某個區域,同時以“低分辨率”感知周圍的圖像,然后隨著時間的推移調整焦點。
?? 神經網絡中的注意力有著悠久的歷史,特別是在圖像識別方面。示例包括學習將中央凹瞥見與三階玻爾茲曼機相結合,或使用用于圖像跟蹤的深度架構學習參加地點。但直到最近,注意力機制才進入通常用于NLP的遞歸神經網絡架構(并且越來越多地用于視覺)。這就是我們將在這篇文章中重點介紹的內容。
二、注意力解決了什么問題?#
?? 為了理解注意力可以為我們做什么,讓我們以神經機器翻譯(NMT)為例。傳統的機器翻譯系統通常依賴于基于文本統計屬性的復雜特征工程。簡而言之,這些系統很復雜,構建它們需要大量的工程工作。神經機器翻譯系統的工作方式略有不同。在 NMT 中,我們將句子的含義映射到固定長度的向量表示中,然后基于該向量生成翻譯。通過不依賴 n-gram 計數之類的東西,而是嘗試捕捉文本的更高層次的含義,NMT 系統比許多其他方法更好地泛化到新句子。也許更重要的是,NTM 系統更容易構建和訓練,并且不需要任何手動特征工程。事實上,Tensorflow 中的簡單實現只不過是幾百行代碼。
?? 大多數 NMT 系統的工作原理是使用遞歸神經網絡將源句子(例如德語句子)編碼為向量,然后根據該向量解碼英語句子,也使用 RNN。
RNN for Machine Translation
?? 在上圖中,“Echt”、“Dicke”和“Kiste”單詞被輸入編碼器,在特殊信號(未顯示)之后,解碼器開始生成翻譯的句子。解碼器不斷生成單詞,直到生成特殊的句子結尾標記。在這里,?向量表示編碼器的內部狀態。
?? 如果你仔細觀察,你會發現解碼器應該只根據最后的隱藏狀態生成翻譯 h 3 ?_3 h3? 從編碼器。這 h 3 ?_3 h3? vector 必須對我們需要了解的有關源句子的所有內容進行編碼。它必須充分體現其意義。用更專業的術語來說,該向量是一個句子嵌入。事實上,如果你使用PCA或t-SNE在低維空間中繪制不同句子的嵌入進行降維,你可以看到語義上相似的短語最終彼此接近。這真是太神奇了。
?? 盡管如此,假設我們可以將有關一個可能很長的句子的所有信息編碼到一個向量中,然后讓解碼器僅基于此產生良好的翻譯,這似乎有些不合理。假設您的源句子有 50 個單詞長。英文翻譯的第一個單詞可能與源句子的第一個單詞高度相關。但這意味著解碼器必須考慮 50 步前的信息,并且該信息需要以某種方式編碼到向量中。眾所周知,遞歸神經網絡在處理這種長程依賴關系方面存在問題。從理論上講,像 LSTM 這樣的架構應該能夠處理這個問題,但在實踐中,遠程依賴關系仍然存在問題。例如,研究人員發現,反轉源序列(將其向后饋送到編碼器)會產生更好的結果,因為它縮短了從解碼器到編碼器相關部分的路徑。同樣,兩次輸入序列似乎也有助于網絡更好地記憶事物。
?? 我認為顛倒句子的方法是一種“黑客”。它使事情在實踐中更好地工作,但這不是一個有原則的解決方案。大多數翻譯基準都是在法語和德語等語言上完成的,這些語言與英語非常相似(甚至中文的詞序也與英語非常相似)。但是在某些語言(如日語)中,句子的最后一個單詞可以高度預測英語翻譯中的第一個單詞。在這種情況下,反轉輸入會使情況變得更糟。那么,還有什么替代方案呢?注意力機制。
?? 使用注意力機制,我們不再嘗試將完整的源句子編碼為固定長度的向量。相反,我們允許解碼器在輸出生成的每個步驟中“關注”源句子的不同部分。重要的是,我們讓模型根據輸入的句子以及到目前為止產生的內容來學習要注意什么。因此,在非常一致的語言(如英語和德語)中,解碼器可能會選擇按順序處理事情。在生成第一個英語單詞時注意第一個單詞,依此類推。這就是在神經機器翻譯中通過聯合學習對齊和翻譯所做的,如下所示:
NMT Attention
?? 在這里,y的是我們翻譯的單詞,由解碼器生成,而x是我們的源句詞。上圖使用雙向循環網絡,但這并不重要,您可以忽略相反的方向。重要的部分是每個解碼器輸出字 y t y_t yt? 現在取決于所有輸入狀態的加權組合,而不僅僅是最后一個狀態。這里的"a"表示的權重定義了每個輸出應考慮多少每個輸入狀態。所以,如果 a 3 , 2 a_{3,2} a3,2? 是一個很大的數字,這意味著解碼器在生成目標句子的第三個單詞時會非常注意源句子中的第二個狀態。這里的a通常歸一化為總和 1(因此它們是輸入狀態的分布)。
?? 注意力的一大優勢是,它使我們能夠解釋和可視化模型正在做什么。例如,通過可視化注意力權重矩陣a,當一個句子被翻譯時,我們可以理解模型是如何翻譯的:
NMT Attention Matrix
?? 在這里,我們看到,在從法語翻譯成英語時,網絡會按順序處理每個輸入狀態,但有時它會在生成輸出時同時處理兩個單詞,例如將“la Syrie”翻譯成“Syria”。
三、關注的代價#
?? 如果我們再仔細觀察一下注意力的方程式,我們就會發現注意力是有代價的。我們需要為輸入和輸出單詞的每個組合計算一個注意力值。如果您有一個 50 個單詞的輸入序列并生成一個 50 個單詞的輸出序列,則該序列將是 2500 個注意力值。這還不錯,但是如果你進行字符級計算并處理由數百個標記組成的序列,上述注意力機制可能會變得非常昂貴。
?? 實際上,這是相當違反直覺的。人類的注意力應該可以節省計算資源。通過專注于一件事,我們可以忽略許多其他事情。但這并不是我們在上面的模型中真正要做的。在決定關注什么之前,我們基本上是在詳細研究所有內容。直觀地說,這相當于輸出一個翻譯的單詞,然后回溯你對文本的所有內部記憶,以決定接下來要生成哪個單詞。這似乎是一種浪費,根本不是人類正在做的事情。事實上,它更像是內存訪問,而不是注意力,在我看來,這有點用詞不當(更多內容見下文)。盡管如此,這并沒有阻止注意力機制變得非常流行,并在許多任務中表現出色。
?? 另一種注意力方法是使用強化學習來預測要關注的大致位置。這聽起來更像是人類的注意力,這就是視覺注意力的循環模型中所做的。
四、機器翻譯之外的關注#
?? 到目前為止,我們已經研究了對機器翻譯的關注。但是,上述相同的注意力機制可以應用于任何循環模型。因此,讓我們再看幾個例子。
?? 在“展示、參與和講述”中,作者將注意力機制應用于生成圖像描述的問題。他們使用卷積神經網絡來“編碼”圖像,并使用具有注意力機制的遞歸神經網絡來生成描述。通過可視化注意力權重(就像在翻譯示例中一樣),我們解釋模型在生成單詞時正在查看的內容:
Show, Attend and Tell Attention Visualization
?? 在《語法作為外語》一書中,作者使用帶有注意力機制的遞歸神經網絡來生成句子解析樹。可視化的注意力矩陣可以深入了解網絡如何生成這些樹:
Screen Shot 2015-12-30 at 1.49.19 PM
?? 在《教機器閱讀和理解》一書中,作者使用RNN來閱讀文本,閱讀(合成生成的)問題,然后得出答案。通過可視化注意力矩陣,我們可以看到網絡在試圖找到問題的答案時“看”在哪里:
Teaching Machines to Read And Comprehend Attention
五、注意力=(模糊)記憶?#
?? 注意力機制解決的基本問題是,它允許網絡回溯輸入序列,而不是強迫它將所有信息編碼為一個固定長度的向量。正如我上面提到的,我認為這種關注有點用詞不當。換一種解釋,注意力機制只是讓網絡訪問其內部存儲器,這是編碼器的隱藏狀態。在這種解釋中,網絡不是選擇“參加”什么,而是選擇從內存中檢索什么。與典型的內存不同,這里的內存訪問機制是軟的,這意味著網絡檢索所有內存位置的加權組合,而不是從單個離散位置檢索值。使內存訪問軟化的好處是,我們可以使用反向傳播輕松地端到端地訓練網絡(盡管有一些非模糊方法使用采樣方法而不是反向傳播來計算梯度)。
?? 記憶機制本身的歷史要長得多。標準遞歸神經網絡的隱藏狀態本身就是一種內部存儲器。RNN遭受梯度消失問題的困擾,這使它們無法學習長程依賴關系。LSTM 通過使用允許顯式內存刪除和更新的門控機制對此進行了改進。
?? 現在,更復雜的內存結構的趨勢仍在繼續。端到端內存網絡允許網絡在進行輸出之前多次讀取相同的輸入序列,并在每個步驟中更新內存內容。例如,通過對輸入故事進行多個推理步驟來回答問題。然而,當網絡參數權重以某種方式綁定時,端到端記憶網絡中的內存機制與這里介紹的注意力機制相同,只是它在內存上進行了多次跳躍(因為它試圖整合來自多個句子的信息)。
?? 神經圖靈機使用類似形式的內存機制,但具有更復雜的尋址類型,即使用基于內容的尋址(如此處)和基于位置的尋址,允許網絡學習尋址模式以執行簡單的計算機程序,如排序算法。
?? 在未來,我們很可能會看到記憶和注意力機制之間更清晰的區別,也許會沿著強化學習神經圖靈機的路線,它試圖學習訪問模式來處理外部接口。