應用於深度學習和自然語言處理的注意機制和記憶模型

2021-07-14 16:05:05 字數 4753 閱讀 7395

深度學習近期的乙個趨勢是使用注意機制(attention mechanism),openai研究負責人ilya sutskever在最近的一次採訪中提到了注意機制是最令人激動的進步之一,而且它們將就此扎根下來。這聽起來令人興奮不已,但注意機制到底是什麼?

神經網路中的注意機制大體是基於從人類視覺中發現的注意機制。對人類視覺注意力的研究較為透徹,目前存在幾個不同模型,但歸根結底,它們在本質上都是能夠聚焦於影象中「高解析度」的特定區域,同時又可以感知到周圍的「低解析度」區域,然後不斷的調整焦點。

注 意機制在神經網路中的使用由來已久,特別是用在影象識別中。例如,hugo larochelle和geoffrey e. hinton於2023年發表的**《examples include learning to combine foveal glimpses with a third-order boltzmann machine》,以及misha denil2023年的**《learning where to attend with deep architectures for image tracking》。但直到最近,外界才將注意機制應用在一些遞迴神經網路架構(尤其是用於自然語言處理,對於視覺的應用也在增加)上。這就是本文所關注 的重點。

注意機制可以解決哪些問題?

為 了更好的理解注意機制的作用,我們以神經機器翻譯(nmt)為例。傳統的機器翻譯系統通常都是依靠複雜的基於文字統計屬性的特徵工程。簡單來說,這些系統 非常複雜,建造它們需要在工程上付諸大量努力。神經機器翻譯系統的工作原理有些不同,我們會將乙個句子的含義對映到乙個固定長度的向量表示上,然後基於那 個向量再進行翻譯。nmt系統不是依賴於文法計數,而是試圖獲取更加高階的文字含義,這樣就可以比其他方法更好的概括出新句子。更加重要的是,nmt系統 在建造和訓練方面更加容易,它們不需要人工新增特徵。事實上,tensorflow中的乙個簡單應用已經都不會超過100行**了。

大多數nmt系統的工作原理是通過遞迴神經網路將源句子(比如說一句德語)編碼成向量,然後同樣使用遞迴神經網路將這個向量解碼成一句英語。

在上圖中,單詞「echt」、「dicke」和「kiste」被輸入進編碼器,經過乙個特殊的訊號(圖中未顯示)之後,解碼器開始生成翻譯完成的句子。解碼器持續不斷的生成詞彙,直到遇到乙個特殊的代表句子結束的符號。在這裡,向量表現出了編碼器的內部狀態。

如 果你看的足夠仔細,你會發現,解碼器是被用來基於編碼器中的最後乙個隱狀態來單獨完成翻譯的。這個向量必須將我們所需要了解的源句子的一切都進行編碼,它 必須能夠完全捕捉到句子的含義。用個技術術語來表示,那個向量是在進行句式嵌入(sentence embedding)。事實上,你如果使用pca或t-snae等降維方法將不同句式嵌入繪製出來的話,你會發現最終語義相似的句子會離得比較近。這令人 非常驚奇。

上 文提到,我們可以將乙個非常長的句子的所有資訊都編碼成單一向量,然後解碼器僅基於這個向量就能完成一次很好的翻譯,但這個假設看起來還有些不夠合理。讓 我們拿乙個由50個單詞組成的源句子舉例。英語翻譯的第乙個詞可能和源句子的第乙個詞高度相關。但這意味著解碼器不得不考慮50步之前的資訊,以及需要在 這個向量中進行解碼的資訊。我們都知道,遞迴神經網路在處理這類遠端依賴性時會遇到問題。理論上來說,類似於長短時記憶模型(lstms)的架構應該可以 應對這些問題,但事實上遠端依賴性依然會存在問題。例如,研究者已經發現,顛倒源句子的順序(將它逆向輸入編碼器)能夠產生更好的結果,因為這縮短了從解 碼器到編碼器相關部分的路徑。同樣的,將乙個順序輸入兩次也可能幫助神經網路更好的進行記憶。

我 認為這種顛倒句子順序的方法屬於「hack」。這在實際應用中更有效,但卻不是一種從根本上出發的解決方案。大部分翻譯基準是基於法語和德語所做出來的, 它們和英語比較類似。但在某些語言(例如日語)的英語翻譯中,一句話的最後乙個詞有可能是第乙個詞的**因子。在這種情況下,逆向輸入就會使結果變的更 差。對此,還有什麼可選方案?答案就是注意機制。

有 了注意機制,我們不再試圖將乙個完整的源句子編碼成乙個固定長度的向量。相反,我們在形成輸出的每一步都允許解碼器「關注」到源句子的不同部分。重要的 是,我們會讓這個模型基於輸入的句子以及到目前為止產生的結果去學習應該「關注」什麼。因此,在那些高度一致的語言(例如英語和德語)中,解碼器將可能選 擇按照順序進行「關注」。如果需要翻譯第乙個英語單詞,就「關注」第乙個單詞,等等。這就是神經機器翻譯中借助於對匹配和翻譯的聯合學習所獲得的成果。

這 裡,y』是解碼器翻譯出來的dan ci,x』是源句子的單詞。上圖用了乙個雙向的遞迴網路,但這個不重要,你可以忽視反向部分。重要的部分在於,解碼器輸出的每乙個單詞y都依賴於所有輸入 狀態的加權組合,而不僅是最後乙個狀態。a』是權重,用來定義對於每乙個輸出值,每個輸入狀態應該被考慮的程度。因此,如果a(3,2)很大,則意味著解 碼器在生成目標句子第三個單詞的翻譯結果時,應該更多的「注意」源句子的第二個狀態。

注意力的一大優點是它使我們能夠解釋和想象出模型的工作狀態。例如,當乙個句子正在被翻譯時,我們可以將注意力權重矩陣進行視覺化處理,因此,就能理解這個模型是怎樣進行翻譯的。

這裡我們看到,當從法語翻譯成英語時,神經網路按照順序「關注」了每乙個輸入狀態,但有時它會一次性「關注」兩個單詞,比如在將「la syrie」翻譯成「syria」(敘利亞)時。

注意機制的代價

如 果我們更仔細地觀察注意機制的方程,我們會發現它是有代價的。我們需要結合每個輸入和輸出的單詞來計算注意值。如果你輸入50個詞,輸出50個詞,那麼注 意值將會是2500。這還不算糟,但是如果你做字元級的計算,處理由數以百計的標記組成的序列,那麼上述注意機制的代價將變得過於昂貴。

事 實上,這是反直覺的。人類的注意力是節省計算資源的。當我們專注於一件事時,會忽略許多其他事。但那不是我們上述模型所真正做的事。在我們決定關注什麼之 前,必須確定每乙個細節。直覺上等效輸出乙個翻譯的單詞,要通過所有內在記憶中的文本來決定下一步生成什麼單詞,這似乎是一種浪費,完全不是人類所擅長的 事情。事實上,它更類似於記憶的使用,而不是注意,這在我看來有點用詞不當。然而,這並不影響注意機制變得非常流行,而且在許多任務中表現良好。

另 一種注意機制的方法是使用強化學習來**乙個需要專注的近似位置。這聽起來更像人類的注意力,這就是視覺注意遞迴模型( recurrent models of visual attention)所完成的事情。然而,強化學習模型不能用反向傳播進行首尾相連的訓練,因此它們並不能廣泛應用於nlp問題中。

超越機器翻譯的注意機制

目前我們看到了注意機制應用於機器翻譯中,但它可以用於任意遞迴模型,讓我們看更多的例子。

如 圖所示,在《attend and tell:neural image caption generation with visual attention》**中,作者使用了注意機制來解決影象描述生成問題。他們用卷積神經網路來「編碼」影象,然後用帶有注意機制的遞迴神經網路來生成描 述。通過將注意權重視覺化,我們來解釋一下,模型在生成乙個單詞時所表現出來的樣子:

在**《grammar as a foreign language》中,作者用帶有注意機制的遞迴神經網路生成句子分析樹。將注意矩陣視覺化,可以讓我們洞悉神經網路是如何生成這個分析樹的:

在**《teaching machines to read and comprehend》中,作者使用rnn來閱讀文字和(合成的)問題,然後輸出答案。通過將注意矩陣視覺化,我們能看到,當神經網路試圖尋找答案時,它在「看」什麼:

注意力=(模糊的)記憶?

注 意機制所解決的基本問題是允許神經網路參考輸入序列,而不是專注於將所有資訊編碼為固定長度的向量。正如我上面提到的,我認為注意力有點用詞不當。換句話 說,注意機制是簡單的讓神經網路使用其內部記憶(編碼器的隱狀態)。在這個解釋中,不是選擇去「關注」什麼,而是讓神經網路選擇從記憶中檢索什麼。不同於 傳統的記憶,這裡的記憶訪問機制更加靈活,這意味著神經網路根據所有記憶的位置賦予其相應的權重,而不是從單個離散位置得出某個值。讓記憶的訪問更具靈活 性,有助於我們用反向傳播對神經網路進行首尾相連的訓練(雖然有非模糊的方法,即使用抽樣方法來代替反向傳播進行梯度計算。)

記憶機制有著更長的歷史。標準遞迴神經網路的隱狀態就是一種內部記憶。梯度消失問題使rnns無法從遠端依賴性中進行學習。長短時記憶模型通過使用允許明確記憶刪除和更新)改善了上述情況。

形 成更加複雜記憶結構的趨勢仍在繼續。**《end-to-end memory networks》中可以(end-to-end memory networks)使神經網路先多次讀取相同的輸入序列,然後再進行輸出,每乙個步驟都更新記憶內容。例如,通過對輸入內容進行多次推理從而回答某個問 題。但是,當神經網路引數的權重以一種特定方式聯絡在一起時,端對端記憶網路中的記憶機制等同於注意機制,這在記憶中創造了多重躍點(因為它試圖從多個句 子中整合資訊)。

在**《神經圖靈機》中使用了和記憶機制類似的形式,但有著更加複雜的訪問型別,後者既使用了基於內容的訪問,又使用了基於位置的訪問,從而使神經網路可以學習訪問模式來執行簡單的電腦程式,例如排序演算法。

在不久的將來,我們非常有可能看到對記憶和注意機制的更加清晰的區分,它可能會沿著「強化學習神經圖靈機」(正試著學習訪問模式來處理外部介面)的路線發展下去。

自然語言處理深度學習的7個應用

自然語言處理領域正在從統計方法轉變為神經網路方法。自然語言中仍有許多具有挑戰性的問題需要解決。然而,深度學習方法在一些特定的語言問題上取得了最新的成果。這不僅僅是深度學習模型在基準問題上的表現,基準問題也是最有趣的 事實上,乙個單一的模型可以學習詞義和執行語言任務,從而消除了對專業手工製作方法渠道的...

自然語言處理深度學習的7個應用

翻譯 無阻我飛揚 自然語言處理領域正在從統計方法轉變為神經網路方法。自然語言中仍有許多具有挑戰性的問題需要解決。然而,深度學習方法在一些特定的語言問題上取得了最新的成果。這不僅僅是深度學習模型在基準問題上的表現,基準問題也是最有趣的 事實上,乙個單一的模型可以學習詞義和執行語言任務,從而消除了對專業...

基於深度學習的自然語言處理

cbow表示可以通過求單詞表示向量和或者通過將乙個單詞詞袋向量乘 以乙個每一行對應於乙個稠密單詞表示的矩陣 這樣的矩陣也叫作嵌入矩陣 embedd i ng matricy 來得到。網路中每行神經元的值可以看作是乙個向量 全連線層可以看作是從四維到六維 的線性變換。全連線層實現了乙個向量與矩陣的乘法...