從seq2seq到注意力機(jī)制

seq2seq 模型

seq2seq模型誕生于語言模型的相關(guān)任務(wù)中,最初是用來處理翻譯問題的,解決了將任意長度的輸入序列轉(zhuǎn)變?yōu)閷?yīng)的輸出序列的問題,普通的全連接網(wǎng)絡(luò)結(jié)構(gòu)沒法接受一個可變長度的輸入,也沒法產(chǎn)生一個變長的輸出,Sutskever, Ilya et al. “Sequence to Sequence Learning with Neural Networks.” NIPS (2014) 中提出了解決這一問題的比較直接的方式。因為 RNN 的輸入長度可以不預(yù)先固定,簡單想法就是通過RNN接受輸入,接著通過另一個 RNN 將前一個 RNN 的輸出,也就是通常所稱的內(nèi)容向量(context vector)轉(zhuǎn)變?yōu)檩敵鲂蛄?,注意此處的?nèi)容向量的維度是固定的。后來 seq2seq 模型逐漸用于多種語言之間的翻譯文本-語音翻譯或者是問答系統(tǒng)之類的任務(wù)中。

seq2seq 模型通常將接受輸入的RNN稱為編碼器(encoder),將產(chǎn)生輸出的RNN成為了解碼器(decoder):

  • 編碼器接受輸入,并將信息壓縮進(jìn)固定長度的內(nèi)容向量中(context vector),也有文獻(xiàn)將其稱為句子嵌入(sentence embedding)或者思維向量(thought vector),這種表示被認(rèn)為能產(chǎn)生對于源語句所包含意義的編碼表示。
  • 解碼器用內(nèi)容向量初始化,早期工作里編碼器的初始化向量用的不是內(nèi)容向量,而是編碼器的最后狀態(tài),這樣只能得到編碼器最后一步的輸出,相比較起內(nèi)容向量的方式損失了更多信息。
編碼器-解碼器模型的簡單示意

注意力機(jī)制

但是面對長句子的處理時,固定長度的內(nèi)容向量的缺陷顯露出來,它最大的問題在于無法記住長句子,很多時候編碼器在處理完整個輸入之后就忘了開頭部分,解碼的時候也是如此,內(nèi)容向量隨著時間步傳輸一段時間后就逐漸被遺忘。

Bahdanau, Dzmitry 等人在 “Neural Machine Translation by Jointly Learning to Align and Translate.(2015)"中提出了
改進(jìn)方案,并且引入注意力機(jī)制解決長期記憶的問題,同時在編碼器的結(jié)構(gòu)上也做了細(xì)微調(diào)整,

  • 用雙向RNN來處理輸入序列,而且編碼器在每一個編碼步的信息都會被保留作為編碼器的輸出;
  • 解碼的時候每次讀入編碼器的輸出,并且輸出一個單詞,也就是說解碼的每一步都能讀取到所有的編碼信息,并且借助注意力的方式來決定編碼信息中的哪一部分和當(dāng)前的聯(lián)系最為緊密。

注意力機(jī)制可認(rèn)為是一種權(quán)重分配,例如在圖像處理中,圖片像素和臨近像素有多大程度上有關(guān),或者句子中的單詞之間的相關(guān)性的強(qiáng)弱。比起從編碼器的最后隱層狀態(tài)構(gòu)建單個內(nèi)容向量,注意力機(jī)制的秘密在于內(nèi)容向量和整個源輸入之間創(chuàng)建了快捷連接,這些快捷連接的權(quán)重是可以根據(jù)每個輸出元素定制化的。簡單來說,內(nèi)容向量不再是固定不變的c,而是在每一個解碼步產(chǎn)生內(nèi)容向量c_{t},這種方式考慮到了每次解碼的時候的不同情況,因此更具靈活性。

Bahdanau 提出的加性注意力機(jī)制的圖解.

注意力機(jī)制考慮的是輸入序列和輸出序列之間關(guān)聯(lián)的緊密程度,自注意力機(jī)制則反映了輸入序列內(nèi)部之間不同組分之間(在自然語言處理的領(lǐng)域,也就是不同單詞之間)關(guān)聯(lián)的緊密程度。注意力機(jī)制顯式地將選擇過程交給我們控制,也就是對于目標(biāo)單詞,從源單詞表中尋找其關(guān)注對象。自注意力機(jī)制除了考慮源單詞表之外,還考慮了對于輸出的關(guān)注,也就是對輸出序列自身的關(guān)注,這一部分準(zhǔn)備放到Transformer中詳細(xì)敘述。

注意力機(jī)制的核心是注意力層,注意力層的輸入被稱為一個查詢(query, Q),對于該查詢,注意力層會根據(jù)已有記憶(memory,在Transformer中叫鍵值對)返回一個輸出,這個記憶也就是鍵值對(Key-Value Pair)。假設(shè)有n個鍵值對(k_{1}, v_{1}), \cdots, (k_{n}, v_{n}),對于每個查詢,其實(shí)也就是每次輸入的源單詞,可以得到一個輸出,其維度和值一樣。具體做法為:使用得分函數(shù)\alpha得到一組分?jǐn)?shù),對得分進(jìn)行指數(shù)歸一化,得到一個歸一化的權(quán)重,最后得到值v_{i}的凸組合。直觀理解就是使用已有鍵值對對查詢作插值,其重點(diǎn)在于得分函數(shù)的設(shè)計,也就是如何判斷兩個向量之間的相似程度,在不合理的設(shè)計中,相似度高不代表接近。

注意力的計算其實(shí)很多地方都可以找到,在此簡單提及。

  • 對于encoder層的隱狀態(tài)輸出(h_{1}, \cdots, h_{n}),假設(shè)編碼步長為n,h_{i}為第i步的encoder的輸出,可以是單向RNN也可以是雙向的,如果是雙向的,這里的h_{i}指雙向隱狀態(tài)的拼接。
  • 在每一步解碼的時候,我們可以得到decoder的原始輸出,記為e_{j},也就是解碼到第j步,此時我們將解碼和編碼向量通過得分函數(shù)作用,a(h_{i}, e_{j}), i=1,\cdots, n
  • 在這個n維得分向量上進(jìn)行指數(shù)歸一化得到(\alpha_{j, 1}, \cdots, \alpha_{j, n}),以此作為線性組合系數(shù)對encoder的隱狀態(tài)(h_{1}, \cdots, h_{n})作線性組合得到內(nèi)容向量,也叫注意力向量,c_{j} = \sum_{k=1}^{n}\alpha_{j, k}h_{k}
  • 以此為基礎(chǔ),可以結(jié)合原始輸出e_{j}的信息得到第j步decoder的輸出,接著可以將其投影到目標(biāo)單詞表維度上,得到單詞表中的一個單詞。

指針網(wǎng)絡(luò)

注意力機(jī)制的改進(jìn)或者說簡化還有一些好玩的應(yīng)用,指針網(wǎng)絡(luò)就是一例,指針網(wǎng)絡(luò)由Vinyals, Oriol et al 在“Pointer Networks.” NIPS (2015)中提出。作者提出可以被用來解決一些輸出長度依賴于輸入的可變輸入的問題。此處需要做一個細(xì)致的分辨,seq2seq模型也能處理變長輸入的問題,因為RNN結(jié)構(gòu)可以不停地接受下一個時間步長的輸入。

那指針網(wǎng)絡(luò)的創(chuàng)新點(diǎn)在哪呢?這里涉及到模型構(gòu)建中的一個小細(xì)節(jié),指針網(wǎng)絡(luò)所解決的變長問題不在于輸入長度可變。在encoder-decoder結(jié)構(gòu)的通常應(yīng)用中,譬如說翻譯問題,我們需要在解碼的每一步輸出目標(biāo)詞匯表中的一個單詞,對于網(wǎng)絡(luò)來說是輸出一個目標(biāo)詞匯表上的分布,詞匯表的長度在模型構(gòu)建之前就已經(jīng)確定了,因此在訓(xùn)練中不再可變,假如我從64個單詞表的任務(wù)遷移到128個單詞表的任務(wù),就需要重新訓(xùn)練。

指針網(wǎng)絡(luò)解決了輸出長度依賴于輸入長度的問題,傳統(tǒng)的encoder-decoder結(jié)構(gòu)的輸出長度依賴于詞匯表的大小。如果弄清楚了注意力機(jī)制,指針網(wǎng)絡(luò)的實(shí)現(xiàn)就顯得比較簡單,它在計算內(nèi)容向量之前就輸出了,其實(shí)是對注意力的計算過程作了截斷。在注意力計算中得到歸一化系數(shù)(\alpha_{j, 1}, \cdots, \alpha_{j, n})之后,我們對此使用\arg \max得到一個索引,這個索引指向的其實(shí)是輸入中的某個位置,作者將其稱為“指針”,也就是說在當(dāng)前解碼步,我們認(rèn)為輸入中的這個位置最為相關(guān),將其作為網(wǎng)絡(luò)的輸出。在原文中,作者嘗試用指針網(wǎng)絡(luò)來解決旅行商問題、凸包問題和排序問題,結(jié)果表明,純粹數(shù)據(jù)驅(qū)動的求解器也許可以在旅行商問題這類NP難問題上有所貢獻(xiàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容