66 使用注意力機(jī)制的seq2seq【動手學(xué)深度學(xué)習(xí)v2】

使用注意力機(jī)制的 seq2seq
- 注意力機(jī)制在 NLP 中的應(yīng)用,也是最早的工作之一
動機(jī)

- 在機(jī)器翻譯的時候,每個生成的詞可能相關(guān)于源句子中不同的詞
- 在語言翻譯的時候,中文和英文之間的翻譯可能會存在倒裝,但是可能在西方語言之間,相同意思的句子中的詞的位置可能近似地是對應(yīng)的,所以在翻譯句子的某個部位的時候,只需要去看源句子中對應(yīng)的位置就可以了
- 然而,Seq2Seq 模型中不能對此直接建模。Seq2Seq 模型中編碼器向解碼器中傳遞的信息是編碼器最后時刻的隱藏狀態(tài),解碼器只用到了編碼器最后時刻的隱藏狀態(tài)作為初始化,從而進(jìn)行預(yù)測,所以解碼器看不到編碼器最后時刻的隱藏狀態(tài)之前的其他隱藏狀態(tài)
- 源句子中的所有信息雖然都包含在這個隱藏狀態(tài)中,但是要想在翻譯某個詞的時候,每個解碼步驟使用編碼相同的上下文變量,但是并非所有輸入(源)詞元都對解碼某個詞元有用。將注意力關(guān)注在源句子中的對應(yīng)位置,這也是將注意力機(jī)制應(yīng)用在Seq2Seq 模型中的動機(jī)
加入注意力

- 編碼器對每次詞的輸出(隱藏狀態(tài))作為 key 和 value,序列中有多少個詞元,就有多少個 key-value 對,它們是等價的,都是第 i 個詞元的 RNN 的輸出
- 解碼器 RNN 對上一個詞的預(yù)測輸出(隱藏狀態(tài))是 query(假設(shè) RNN 的輸出都是在同一個語義空間中,所以在解碼器中對某個詞元進(jìn)行解碼的時候,需要用到的是 RNN 的輸出,而不能使用詞嵌入之后的輸入,因為 key 和 value 也是 RNN 的輸出,所以 key 和 query 做匹配的時候,最好都使用 RNN 的輸出,這樣能夠保證它們差不多在同一個語義空間)
- 注意力的輸出和下一個詞的詞嵌入合并進(jìn)入 RNN 解碼器
- 對 Seq2Seq 的改進(jìn)之處在于:之前 Seq2Seq 的 RNN 解碼器的輸入是 RNN 編碼器最后時刻的隱藏狀態(tài),加入注意力機(jī)制之后的模型相當(dāng)于是對所有的詞進(jìn)行了加權(quán)平均,根據(jù)翻譯的詞的不同使用不同時刻的 RNN 編碼器輸出的隱藏狀態(tài)
總結(jié)
1、Seq2Seq 中通過編碼器最后時刻的隱藏狀態(tài)在編碼器和解碼器中傳遞信息
2、注意力機(jī)制可以根據(jù)解碼器 RNN 的輸出來匹配到合適的編碼器 RNN 的輸出來更有效地傳遞信息
3、在預(yù)測詞元時,如果不是所有輸入詞元都是相關(guān)的,加入注意力機(jī)制能夠使 RNN 編碼器-解碼器有選擇地統(tǒng)計輸入序列的不同部分(通過將上下文變量視為加性注意力池化的輸出來實現(xiàn))
Q&A
- 1、attention 在搜索的時候是在當(dāng)前句子搜索,還是所有的文本搜索?
- ?QA P3 - 00:00?
- 2、q 是 decoder 的輸出,那第一次 q 是怎么得來的?
- ?QA P3 - 00:27?
- 3、一般都是在 decoder 加入注意力嗎,不可以在 encoder 加入嗎?
- ?QA P3 - 00:53?
- 4、老師,enc_valid_lens 的值能再講下如何設(shè)置的嗎?可以用時間序列為例子嗎?
- ?QA P3 - 01:31?
- 5、注意力機(jī)制是不是和昨天講的束搜索有些類似?
- ?QA P3 - 02:23?
- 6、課程快結(jié)束了,沐神可以再推薦一些其他的學(xué)習(xí)資源嗎?
- ?QA P3 - 02:56?
- 7、有沒有比賽?
- ?QA P3 - 04:30?
- 8、能大概說一下圖像 attention 嗎?
- ?QA P3 - 05:06?
- 9、后期有沒有方式可以交流?
- ?QA P3 - 06:24?
---end----
其他參考
1、《動手學(xué)深度學(xué)習(xí)》,教程,https://zh-v2.d2l.ai/chapter_attention-mechanisms/bahdanau-attention.html
標(biāo)簽: