transformer再記(解碼器)

上一篇:transformer再記(編碼器)

解碼器與編碼器在細節上有差異。

解碼器的Attention

decoder第一級自注意力的key, query, value均來自前一層decoder的輸出,但加入了Mask操作,即我們只能attend到前面已經翻譯過的輸出的詞語,因為翻譯過程我們當前還并不知道下一個輸出詞語,這是我們之后才會推測到的。

而decoder第二級注意力也被稱作encoder-decoder attention layer,即它的query來自于之前一級的decoder層的輸出,但其key和value來自于encoder的輸出,這使得decoder的每一個位置都可以attend到輸入序列的每一個位置。

總結一下,k和v的來源總是相同的,q在encoder及decoder自注意力層中與k,v來源相同,在encoder-decoder attention layer中與k,v來源不同。


編碼器解碼器連接:

編碼器通過處理輸入序列開啟工作。頂端編碼器的輸出之后會變轉化為一個包含向量K(鍵向量)和V(值向量)的注意力向量集 。這些向量將被每個解碼器用于自身的“編碼-解碼注意力層”,而這些層可以幫助解碼器關注輸入序列哪些位置合適。

解碼器解碼:

在完成編碼階段后,則開始解碼階段。解碼階段的每個時間步都會輸出一個輸出序列的元素(在這個例子里,是英語翻譯的句子)

接下來的每個時間步重復了這個過程,直到到達一個特殊的終止符號,它表示transformer的解碼器已經完成了它的輸出。每個時間步的輸出在下一個時間步被提供給底端解碼器,并且就像編碼器之前做的那樣,這些解碼器會輸出它們的解碼結果 。另外,就像我們對編碼器的輸入所做的那樣,我們會將上個時間步的輸出嵌入并添加位置編碼,來表示每個單詞的位置。

而那些解碼器中的自注意力層表現的模式與編碼器不同:在解碼器中,自注意力層只被允許處理輸出序列中更靠前的那些位置。在softmax步驟前,它會把后面的位置給隱去(Masked)。

解碼器中的“編碼-解碼注意力層”工作方式基本就像多頭自注意力層一樣,只不過它是通過在它下面的解碼層來創造查詢矩陣(Q),并且從編碼器的輸出中取得鍵(V)/值矩陣(K)。



最終的線性變換和Softmax層

線性變換:

解碼器最終會輸出一個實數向量。解碼器輸出后的線性變換層是一個簡單的全連接神經網絡,它可以把解碼組件產生的向量投射到一個比它大得多的(字典維度),被稱作對數幾率(logits)的向量里。不妨假設我們的模型從訓練集中學習一萬個不同的英語單詞(我們模型的“輸出詞表”)。因此對數幾率向量為一萬個單元格長度的向量,其中每個單元格對應某一個單詞的分數。

softmax層:

Softmax 層便會把那些分數變成概率(都為正數、和為1)。概率最高的單元格被選中,并且它對應的單詞被作為這個時間步的輸出。?

以解碼器組件產生的輸出向量開始,之后它會轉化出一個輸出單詞。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容