博客專欄

EEPW首頁 > 博客 > 小白看得懂的 Transformer (圖解)(3)

小白看得懂的 Transformer (圖解)(3)

發(fā)布人:數(shù)據(jù)派THU 時間:2023-03-19 來源:工程師 發(fā)布文章
殘差模塊


在繼續(xù)進行下去之前,我們需要提到一個編碼器架構中的細節(jié):在每個編碼器中的每個子層(自注意力、前饋網(wǎng)絡)的周圍都有一個殘差連接,并且都跟隨著一個“層-歸一化”步驟。


層-歸一化步驟:https://arxiv.org/abs/1607.06450

圖片

如果我們?nèi)タ梢暬@些向量以及這個和自注意力相關聯(lián)的層-歸一化操作,那么看起來就像下面這張圖描述一樣:

圖片

****的子層也是這樣樣的。如果我們想象一個2 層編碼-解碼結(jié)構的transformer,它看起來會像下面這張圖一樣:


圖片解碼組件


既然我們已經(jīng)談到了大部分編碼器的概念,那么我們基本上也就知道****是如何工作的了。但最好還是看看****的細節(jié)。


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

圖片

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


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


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


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


最終的線性變換和Softmax層


解碼組件最后會輸出一個實數(shù)向量。我們?nèi)绾伟迅↑c數(shù)變成一個單詞?這便是線性變換層要做的工作,它之后就是Softmax層。


線性變換層是一個簡單的全連接神經(jīng)網(wǎng)絡,它可以把解碼組件產(chǎn)生的向量投射到一個比它大得多的、被稱作對數(shù)幾率(logits)的向量里。


不妨假設我們的模型從訓練集中學習一萬個不同的英語單詞(我們模型的“輸出詞表”)。因此對數(shù)幾率向量為一萬個單元格長度的向量——每個單元格對應某一個單詞的分數(shù)。


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

圖片這張圖片從底部以****組件產(chǎn)生的輸出向量開始。之后它會轉(zhuǎn)化出一個輸出單詞。


訓練部分總結(jié)


既然我們已經(jīng)過了一遍完整的transformer的前向傳播過程,那我們就可以直觀感受一下它的訓練過程。


在訓練過程中,一個未經(jīng)訓練的模型會通過一個完全一樣的前向傳播。但因為我們用有標記的訓練集來訓練它,所以我們可以用它的輸出去與真實的輸出做比較。


為了把這個流程可視化,不妨假設我們的輸出詞匯僅僅包含六個單詞:“a”, “am”, “i”, “thanks”, “student”以及 “”(end of sentence的縮寫形式)。

圖片

我們模型的輸出詞表在我們訓練之前的預處理流程中就被設定好。


一旦我們定義了我們的輸出詞表,我們可以使用一個相同寬度的向量來表示我們詞匯表中的每一個單詞。這也被認為是一個one-hot 編碼。所以,我們可以用下面這個向量來表示單詞“am”:

圖片

例子:對我們輸出詞表的one-hot 編碼


接下來我們討論模型的損失函數(shù)——這是我們用來在訓練過程中優(yōu)化的標準。通過它可以訓練得到一個結(jié)果盡量準確的模型。


損失函數(shù)


比如說我們正在訓練模型,現(xiàn)在是第一步,一個簡單的例子——把“merci”翻譯為“thanks”。


這意味著我們想要一個表示單詞“thanks”概率分布的輸出。但是因為這個模型還沒被訓練好,所以不太可能現(xiàn)在就出現(xiàn)這個結(jié)果。

圖片

因為模型的參數(shù)(權重)都被隨機的生成,(未經(jīng)訓練的)模型產(chǎn)生的概率分布在每個單元格/單詞里都賦予了隨機的數(shù)值。我們可以用真實的輸出來比較它,然后用反向傳播算法來略微調(diào)整所有模型的權重,生成更接近結(jié)果的輸出。


你會如何比較兩個概率分布呢?我們可以簡單地用其中一個減去另一個。更多細節(jié)請參考交叉熵和KL散度。


交叉熵:https://colah.github.io/posts/2015-09-Visual-Information/KL散度:https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained


但注意到這是一個過于簡化的例子。更現(xiàn)實的情況是處理一個句子。例如,輸入“je suis étudiant”并期望輸出是“i am a student”。那我們就希望我們的模型能夠成功地在這些情況下輸出概率分布:


每個概率分布被一個以詞表大?。ㄎ覀兊睦永锸?,但現(xiàn)實情況通常是3000或10000)為寬度的向量所代表。


第一個概率分布在與“i”關聯(lián)的單元格有最高的概率


第二個概率分布在與“am”關聯(lián)的單元格有最高的概率


以此類推,第五個輸出的分布表示“”關聯(lián)的單元格有最高的概率


圖片

依據(jù)例子訓練模型得到的目標概率分布


在一個足夠大的數(shù)據(jù)集上充分訓練后,我們希望模型輸出的概率分布看起來像這個樣子:圖片

我們期望訓練過后,模型會輸出正確的翻譯。當然如果這段話完全來自訓練集,它并不是一個很好的評估指標。注意到每個位置(詞)都得到了一點概率,即使它不太可能成為那個時間步的輸出——這是softmax的一個很有用的性質(zhì),它可以幫助模型訓練。


因為這個模型一次只產(chǎn)生一個輸出,不妨假設這個模型只選擇概率最高的單詞,并把剩下的詞拋棄。這是其中一種方法(叫貪心解碼)。另一個完成這個任務的方法是留住概率最靠高的兩個單詞(例如I和a),那么在下一步里,跑模型兩次:其中一次假設第一個位置輸出是單詞“I”,而另一次假設第一個位置輸出是單詞“me”,并且無論哪個版本產(chǎn)生更少的誤差,都保留概率最高的兩個翻譯結(jié)果。然后我們?yōu)榈诙偷谌齻€位置重復這一步驟。這個方法被稱作集束搜索(beam search)。在我們的例子中,集束寬度是2(因為保留了2個集束的結(jié)果,如第一和第二個位置),并且最終也返回兩個集束的結(jié)果(top_beams也是2)。這些都是可以提前設定的參數(shù)。


再進一步


我希望通過上文已經(jīng)讓你們了解到Transformer的主要概念了。如果你想在這個領域深入,我建議可以走以下幾步:閱讀Attention Is All You Need,Transformer博客和Tensor2Tensor announcement,以及看看?ukasz Kaiser的介紹,了解模型和細節(jié)。


Attention Is All You Need:https://arxiv.org/abs/1706.03762Transformer博客:https://ai.googleblog.com/2017/08/transformer-novel-neural-network.htmlTensor2Tensor announcement:https://ai.googleblog.com/2017/06/accelerating-deep-learning-research.html?ukasz Kaiser的介紹:https://colab.research.google.com/github/tensorflow/tensor2tensor/blob/master/tensor2tensor/notebooks/hello_t2t.ipynb
接下來可以研究的工作:
Depthwise Separable Convolutions for Neural Machine Translationhttps://arxiv.org/abs/1706.03059
One Model To Learn Them Allhttps://arxiv.org/abs/1706.05137

Discrete Autoencoders for Sequence Modelshttps://arxiv.org/abs/1801.09797
Generating Wikipedia by Summarizing Long Sequenceshttps://arxiv.org/abs/1801.10198
Image Transformerhttps://arxiv.org/abs/1802.05751
Training Tips for the Transformer Modelhttps://arxiv.org/abs/1804.00247
Self-Attention with Relative Position Representationshttps://arxiv.org/abs/1803.02155
Fast Decoding in Sequence Models using Discrete Latent Variableshttps://arxiv.org/abs/1803.03382
A****ctor: Adaptive Learning Rates with Sublinear Memory Costhttps://arxiv.org/abs/1804.04235


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。



關鍵詞: AI

相關推薦

技術專區(qū)

關閉