機器學習(ML)十二之編碼解碼器、束搜尋與注意力機制
編碼器—解碼器(seq2seq)
在自然語言處理的很多應用中,輸入和輸出都可以是不定長序列。以機器翻譯為例,輸入可以是一段不定長的英語文字序列,輸出可以是一段不定長的法語文字序列,例如
英語輸入:“They”、“are”、“watching”、“.” 法語輸出:“Ils”、“regardent”、“.”
當輸入和輸出都是不定長序列時,我們可以使用編碼器—解碼器(encoder-decoder)或者seq2seq模型。這兩個模型本質上都用到了兩個迴圈神經網路,分別叫做編碼器和解碼器。編碼器用來分析輸入序列,解碼器用來生成輸出序列。用編碼器—解碼器將上述英語句子翻譯成法語句子的一種方法。在訓練資料集中,我們可以在每個句子後附上特殊符號“<eos>”(end of sequence)以表示序列的終止。編碼器每個時間步的輸入依次為英語句子中的單詞、標點和特殊符號“<eos>”。下圖中使用了編碼器在最終時間步的隱藏狀態作為輸入句子的表徵或編碼資訊。解碼器在各個時間步中使用輸入句子的編碼資訊和上個時間步的輸出以及隱藏狀態作為輸入。 我們希望解碼器在各個時間步能正確依次輸出翻譯後的法語單詞、標點和特殊符號“<eos>”。 需要注意的是,解碼器在最初時間步的輸入用到了一個表示序列開始的特殊符號“<bos>”(beginning of sequence)。
編碼器
解碼器
訓練模型
在模型訓練中,所有輸出序列損失的均值通常作為需要最小化的損失函式。在上圖所描述的模型預測中,我們需要將解碼器在上一個時間步的輸出作為當前時間步的輸入。與此不同,在訓練中我們也可以將標籤序列(訓練集的真實輸出序列)在上一個時間步的標籤作為解碼器在當前時間步的輸入。這叫作強制教學(teacher forcing)。
- 編碼器-解碼器(seq2seq)可以輸入並輸出不定長的序列。
- 編碼器—解碼器使用了兩個迴圈神經網路。
- 在編碼器—解碼器的訓練中,可以採用強制教學。
束搜尋
在準備訓練資料集時,我們通常會在樣本的輸入序列和輸出序列後面分別附上一個特殊符號“<eos>”表示序列的終止。我們在接下來的討論中也將沿用上一節的全部數學符號。為了便於討論,假設解碼器的輸出是一段文字序列。設輸出文字詞典y包含特殊符號“<eos>”)的大小為|y|,輸出序列的最大長度為T',所有可能的輸出序列一共有O(|Y|T′
貪婪搜尋
窮舉搜尋
束搜尋
- 預測不定長序列的方法包括貪婪搜尋、窮舉搜尋和束搜尋。
- 束搜尋通過靈活的束寬來權衡計算開銷和搜尋質量。
注意力機制
在“編碼器—解碼器(seq2seq)”裡,解碼器在各個時間步依賴相同的背景變數來獲取輸入序列資訊。當編碼器為迴圈神經網路時,背景變數來自它最終時間步的隱藏狀態。
讓我們再次思考那一節提到的翻譯例子:輸入為英語序列“They”“are”“watching”“.”,輸出為法語序列“Ils”“regardent”“.”。不難想到,解碼器在生成輸出序列中的每一個詞時可能只需利用輸入序列某一部分的資訊。例如,在輸出序列的時間步1,解碼器可以主要依賴“They”“are”的資訊來生成“Ils”,在時間步2則主要使用來自“watching”的編碼資訊生成“regardent”,最後在時間步3則直接對映句號“.”。這看上去就像是在解碼器的每一時間步對輸入序列中不同時間步的表徵或編碼資訊分配不同的注意力一樣。這也是注意力機制的由來。
仍然以迴圈神經網路為例,注意力機制通過對編碼器所有時間步的隱藏狀態做加權平均來得到背景變數。解碼器在每一時間步調整這些權重,即注意力權重,從而能夠在不同時間步分別關注輸入序列中的不同部分並編碼進相應時間步的背景變數。
計算背景變數
向量化計算
更新隱藏狀態
現在我們描述第二個關鍵點,即更新隱藏狀態。以門控迴圈單元為例,在解碼器中我們可以對“門控迴圈單元(GRU)”一節中門控迴圈單元的設計稍作修改,從而變換上一時間步t′−1的輸出yt′−1、隱藏狀態st′−1和當前時間步t′的含注意力機制的背景變數ct′。解碼器在時間步:math:t’的隱藏狀態為
發展
本質上,注意力機制能夠為表徵中較有價值的部分分配較多的計算資源。這個有趣的想法自提出後得到了快速發展,特別是啟發了依靠注意力機制來編碼輸入序列並解碼出輸出序列的變換器(Transformer)模型的設計。變換器拋棄了卷積神經網路和迴圈神經網路的架構。它在計算效率上比基於迴圈神經網路的編碼器—解碼器模型通常更具明顯優勢。含注意力機制的變換器的編碼結構在後來的BERT預訓練模型中得以應用並令後者大放異彩:微調後的模型在多達11項自然語言處理任務中取得了當時最先進的結果。不久後,同樣是基於變換器設計的GPT-2模型於新收集的語料資料集預訓練後,在7個未參與訓練的語言模型資料集上均取得了當時最先進的結果 [4]。除了自然語言處理領域,注意力機制還被廣泛用於影象分類、自動影象描述、脣語解讀以及語音識別。
- 可以在解碼器的每個時間步使用不同的背景變數,並對輸入序列中不同時間步編碼的資訊分配不同的注意力。
- 廣義上,注意力機制的輸入包括查詢項以及一一對應的鍵項和值項。
- 注意力機制可以採用更為高效的向量化計算。