<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

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

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

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


在繼續進(jìn)行下去之前,我們需要提到一個(gè)編碼器架構中的細節:在每個(gè)編碼器中的每個(gè)子層(自注意力、前饋網(wǎng)絡(luò ))的周?chē)加幸粋€(gè)殘差連接,并且都跟隨著(zhù)一個(gè)“層-歸一化”步驟。


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

圖片

如果我們去可視化這些向量以及這個(gè)和自注意力相關(guān)聯(lián)的層-歸一化操作,那么看起來(lái)就像下面這張圖描述一樣:

圖片

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


圖片解碼組件


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


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

圖片

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


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


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


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


最終的線(xiàn)性變換和Softmax層


解碼組件最后會(huì )輸出一個(gè)實(shí)數向量。我們如何把浮點(diǎn)數變成一個(gè)單詞?這便是線(xiàn)性變換層要做的工作,它之后就是Softmax層。


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


不妨假設我們的模型從訓練集中學(xué)習一萬(wàn)個(gè)不同的英語(yǔ)單詞(我們模型的“輸出詞表”)。因此對數幾率向量為一萬(wàn)個(gè)單元格長(cháng)度的向量——每個(gè)單元格對應某一個(gè)單詞的分數。


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

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


訓練部分總結


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


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


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

圖片

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


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

圖片

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


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


損失函數


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


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

圖片

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


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


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


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


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


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


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


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


圖片

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


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

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


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


再進(jìn)一步


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


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
接下來(lái)可以研究的工作:
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


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



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>