當前位置:
首頁 > 科技 > 深度學習的下一步:Transformer和注意力機制

深度學習的下一步:Transformer和注意力機制

作者:Preet Gandhi是英偉達的深度學習解決方案架構師。

鑒於NLP在如今深度學習的許多應用中普遍很重要,本文介紹了Transformer和注意力機制如何可以進一步改善先進的翻譯/轉換技術。

從Alexa到谷歌翻譯(Google Translate),深度學習最具影響力的分支之一是自然語言處理(NLP)。在這個日益全球化的世界,語言翻譯已變得必不可少。NLP領域的進步已經帶來了許多神經機器翻譯/轉換技術,比如序列到序列(Seq2Seq)模型,而Transformer和注意力機制可以進一步改善這種技術。

Seq2Seq模型

Seq2Seq是將一個序列轉換成另一個序列的一大類模型。編碼器-解碼器模型是其廣泛使用的一個子類。編碼器獲得輸入序列(源語言)後映射到中間隱向量(更高維度空間),隱向量編碼源句子的所有信息。隨後,解碼器獲得該信息後映射到輸出序列(目標語言)。該模型有能力處理可變長度的輸入。編碼器和解碼器都是循環神經網路(RNN)。通常使用LSTM(長短期記憶),因為數據依賴於序列(單詞的順序很重要)。因此,通過使用輸入門/輸出門來捕獲序列中的長距離依賴關係,記住/遺忘重要/不重要的部分,同時為序列賦予意義,這很重要。輸出是數學上反映最高P(輸出序列|輸入序列)的序列。然而,這種方法有一個問題,因為它將輸入源句子的所有信息壓縮成固定長度的向量(上一個隱狀態的輸出),然後該向量由解碼器獲取。結果已表明,這導致處理長句時性能下降。

編碼器和解碼器

注意力機制

解決長句中重要信息丟失這個問題的一種方法是使用注意力機制(attention mechanism)。源句子的第一個單詞可能與目標句子的第一個單詞高度關聯。每次模型預測輸出單詞時,它僅使用輸入中最相關的信息集中的部分,而不是使用整個句子。編碼器照常工作,但解碼器的隱狀態連同上下文向量、先前輸出和先前隱狀態一併計算。上下文向量被計算成編碼器生成的注釋的加權和。我們為每個目標單詞都有一個單獨的上下文向量。在雙向LSTM的情況下,這些注釋是向前和向後方向上隱狀態的級聯。每個注釋的權重由對齊模型(即前饋網路)計算,該模型對輸入和輸出的匹配程度進行評分。注意力得分(alpha)即計算上下文向量時隱狀態的權重表明某個注釋在決定下一個狀態、生成輸出單詞時有多重要。

RNN中的注意力機制

注意力類型:

全局注意力:使用編碼器中的所有隱狀態來計算上下文向量。這從計算資源上來說開銷很大,因為要針對每個目標單詞考慮來自源句子的所有單詞。

局部注意力:選擇源句子中的位置來確定要考慮的單詞窗口。

雙向注意力:同一個模型處理假設和前提,兩個表示都是級聯的。然而,該模型無法區別停用單詞之間的對齊不如內容單詞之間的對齊來得重要。

自注意力:這種機制關聯單單一個序列的不同位置,以計算其內部表示。

鍵值注意力:輸出向量被分成鍵以計算注意力和值,從而編碼下一個單詞分布和上下文表示。

分層嵌套注意力:兩個注意力級別:第一個是單詞級別,第二個是句子級別。這突出了文檔中信息量大的部分。

我們可以解釋和直觀顯示模型在做什麼。通過直觀顯示注意力權重矩陣,我們可以理解模型在如何翻譯/轉換:

直觀顯示注意力機制

注意力開銷很大,因為我們需要計算輸入和輸出單詞每個組合的值。如果是字元級計算,句子又有由數百個子詞(token)組成,機制的開銷變得很大。我們發現,由於注意力機制,解碼器捕獲全局信息,而不是完全依賴一個隱狀態。學習了解輸入和輸出之間的依賴關係。不過在Transformer架構中,這個想法延伸為還要學習了解輸入內和輸出內依賴關係。

Transformer

Transformer是一種新的編碼器-解碼器架構,它僅使用注意力機制而不是RNN來編碼每個位置,並關聯有關其自身的輸入和輸出的兩個遠端單詞,然後可以並行化處理,因而加快訓練。由於RNN是順序型的,如果兩個單詞隔著10個單詞,需要10個計算步驟,但在自注意力中,這只是一個層。它有自注意力的多層,其中所有鍵(序列中所有單詞的向量表示)、值和查詢(序列中一個單詞的向量表示)都來自輸入句子本身。權重由序列的每個單詞如何受序列中所有其他單詞的影響來加以定義。權重計算可以並行處理,名為多頭注意力(multi-head attention)。由於我們不使用RNN,因此我們將位置編碼器添加到單詞的嵌入表示中以維持順序。

多頭注意力

就多頭注意力而言,輸出是值的加權和,其中分配給每個值的權重由擁有所有鍵的查詢的點積(dot-product)來確定。該架構使用乘法注意力函數,並計算多個注意力加權和,每個加權和是輸入表示的線性轉換。

編碼部分和解碼部分分別是一堆數量相同的編碼器和解碼器。其中的每個元素有同樣的結構,但並不共享權重。

Transformer

每個編碼器都有自注意力層和前饋層。在自注意力層中,編碼器聚合來自所有其他單詞的信息,按照整個上下文提供信息的每個單詞生成新的表示。同樣的前饋網路獨立應用於每個位置。在輸入句子中的每個連續位置,自注意力查看其他位置,尋找有助於更好地編碼單詞的線索。每個位置中的單詞流經編碼器中的路徑,自注意力層中有這些路徑之間的依賴關係。前饋層沒有允許並行執行的那些依賴關係。在編碼器的每個子層之後,還有規範化步驟。位置向量添加到每個輸入嵌入,該輸入嵌入遵循模型學習了解的特定模式,以幫助知道不同單詞之間的距離或每個單詞的位置。連接編碼器和解碼器的多頭注意力模塊將確保綜合考慮編碼器輸入序列和解碼器輸入序列。

Transformer

解碼器在開始時有自注意力,然後是編碼器-解碼器注意力以及此後的前饋。解碼器輸入將向右移動一個位置,使用單詞字詞的開頭作為第一個字元,因為我們不希望自己的模型學習了解在訓練期間如何複製解碼器輸入,因為位置i的目標單詞/字元將是解碼器輸入中的單詞/字元i。然而,我們想要了解:若有了編碼器序列和模型已經看到的特定解碼器序列,我們就能預測下一個單詞/字元。因此,通過將解碼器輸入移動一個位置,我們的模型需要為只看到解碼器序列中單詞/字元1, …, i-1的位置i預測目標單詞/字元。我們將句末字詞附加到解碼器輸入序列的末尾,以標記該序列結束,還將它附加到目標輸出句子的末尾。Transformer將掩碼(mask)應用於第一個多頭注意力模塊中的輸入,以避免看到潛在的「未來」序列元素。如果沒有掩模,多頭注意力將在每個位置考慮整個解碼器輸入序列。在每個時間步長,一個解碼器的輸出被饋送到另一個解碼器。在每個時間步長還添加位置向量。解碼器輸出進入到線性層(完全連接的NN),該線性層輸出對數向量(大得多的向量)。最後,softmax給出了選擇與最高概率相關聯的相應單詞作為該時間步長輸出的概率。

Transformer適用於序列轉換(語言翻譯)、句法結構成分解析的典型語言分析任務以及不同的輸入和輸出模態(比如圖像和視頻以及換代消解)。該演算法大有潛力,因為它可以應用於圖像和視頻。該演算法的高效是一個活躍的研究領域,可通過嘗試不同的位置編碼方法(添加vs級聯單詞嵌入,學習vs預設位置編碼等方法)來加以改進。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 雲頭條 的精彩文章:

金山雲中標中國國土勘測規劃院存儲擴容設備採購與集成項目
2018 年中國雲市場規模 963 億元:公有雲 437 億元、私有雲 525 億元