對NLP中transformer里面decoder的理解


剛接觸NLP這塊,有兩個關於transformer的問題:

1)為什么要有decoder?如果encoder后面直接接全連接不可以嗎?

2)為什么decoder要有mask?為什么要按時間步一個字一個字翻譯?這樣的話,是不是英語從句翻譯成漢語就不可行,比如 He is a person who wears a red t-shirt. -> 他是一個穿紅色t恤的人。

想了下應該是下面的原因:

1)decoder相當於有兩個輸入,一個是encoder編碼的全局語義信息(使得decoder能夠看到完整的上下文信息),一個是模型的前期翻譯結果(這個信息對最終的翻譯結果也很重要),根據這兩個輸入決定下一個輸出。

2)根據這個邏輯,每一個輸出依賴前面的結果,那么必須mask掉后面的內容,因為這時后面的內容還沒有生成。decoder的輸入是模型的前期翻譯結果,也就是拿模型的前期翻譯結果做一個Q去和encoder編碼的全局語義信息生成的K、V做attention,相當於去找現有結果在全局語義信息里面的相關性,根據這個相關性去決定下一個翻譯結果(比如翻譯到“他是一個”的時候,去encoder給的信息里面算attention,發現接下來需要翻譯的詞跟“wears a red t-shirt”相關性很強,那么就給出翻譯“穿紅色T恤”,接下來才是翻譯“person”,也就是“的人”)。正是因為有從句這種需要跳躍翻譯的問題,才需要attention算全局相關性,要不然直接查表就完事了。

3)mask也保證了模型在訓練的時候可以並行計算,因為訓練的時候我們知道label,也就是完整的翻譯結果,那么為了並行計算需要把label后面的信息掩蓋,因為每次計算需要用到前面的label信息而不能輸入label后面的信息。但在測試的時候,是串行輸出的,每個位置的翻譯結果只依賴前面的翻譯結果,mask不重要。
————————————————
版權聲明:本文為CSDN博主「xiav」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_26628975/article/details/115331368


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM