日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

图解Transformer-一篇文章看懂transformer

發(fā)布時(shí)間:2024/7/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解Transformer-一篇文章看懂transformer 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文標(biāo)題:The Illustrated Transformer

原文鏈接:https://jalammar.github.io/illustrated-transformer/

論文地址:https://arxiv.org/abs/1706.03762

前言

? ? ? Attention這種機(jī)制最開(kāi)始應(yīng)用于機(jī)器翻譯的任務(wù)中,并且取得了巨大的成就,因而在最近的深度學(xué)習(xí)模型中受到了大量的關(guān)注。在在這個(gè)基礎(chǔ)上,我們提出一種完全基于Attention機(jī)制來(lái)加速深度學(xué)習(xí)訓(xùn)練過(guò)程的算法模型-Transformer。事實(shí)證明Transformer結(jié)構(gòu)在特定任務(wù)上已經(jīng)優(yōu)于了谷歌的神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯模型。但是,Transformer最大的優(yōu)勢(shì)在于其在并行化處理上做出的貢獻(xiàn)。谷歌也在利用Transformer的并行化方式來(lái)營(yíng)銷(xiāo)自己的云TPU。所以,現(xiàn)在讓我們一步一步剖析Transformer的神秘面紗,讓我看看他是怎么一步一步訓(xùn)練的。

? ? ?Transformer在Goole的一篇論文Attention is All You Need被提出,為了方便實(shí)現(xiàn)調(diào)用Transformer Google還開(kāi)源了一個(gè)第三方庫(kù),基于TensorFlow的Tensor2Tensor,一個(gè)NLP的社區(qū)研究者貢獻(xiàn)了一個(gè)Torch版本的支持:guide annotating the paper with PyTorch implementation。這里,我想用一些方便理解的方式來(lái)一步一步解釋Transformer的訓(xùn)練過(guò)程,這樣即便你沒(méi)有很深的深度學(xué)習(xí)知識(shí)你也能大概明白其中的原理。

A High-Level Look

? ? ? ?我們先把Transformer想象成一個(gè)黑匣子,在機(jī)器翻譯的領(lǐng)域中,這個(gè)黑匣子的功能就是輸入一種語(yǔ)言然后將它翻譯成其他語(yǔ)言。如下圖:

掀起The Transformer的蓋頭,我們看到在這個(gè)黑匣子由2個(gè)部分組成,一個(gè)Encoders和一個(gè)Decoders。

我們?cè)賹?duì)這個(gè)黑匣子進(jìn)一步的剖析,發(fā)現(xiàn)每個(gè)Encoders中分別由6個(gè)Encoder組成(論文中是這樣配置的)。而每個(gè)Decoders中同樣也是由6個(gè)Decoder組成。

對(duì)于Encoders中的每一個(gè)Encoder,他們結(jié)構(gòu)都是相同的,但是并不會(huì)共享權(quán)值。每層Encoder有2個(gè)部分組成,如下圖:?

每個(gè)Encoder的輸入首先會(huì)通過(guò)一個(gè)self-attention層,通過(guò)self-attention層幫助Endcoder在編碼單詞的過(guò)程中查看輸入序列中的其他單詞。如果你不清楚這里在說(shuō)什么,不用著急,之后我們會(huì)詳細(xì)介紹self-attention的。

Self-attention的輸出會(huì)被傳入一個(gè)全連接的前饋神經(jīng)網(wǎng)絡(luò),每個(gè)encoder的前饋神經(jīng)網(wǎng)絡(luò)參數(shù)個(gè)數(shù)都是相同的,但是他們的作用是獨(dú)立的。

每個(gè)Decoder也同樣具有這樣的層級(jí)結(jié)構(gòu),但是在這之間有一個(gè)Attention層,幫助Decoder專注于與輸入句子中對(duì)應(yīng)的那個(gè)單詞(類似與seq2seq models的結(jié)構(gòu))

Bringing The Tensors Into The Picture

? ? ? 在上一節(jié),我們介紹了Transformer的網(wǎng)絡(luò)結(jié)構(gòu)。現(xiàn)在我們以圖示的方式來(lái)研究Transformer模型中各種張量/向量,觀察從輸入到輸出的過(guò)程中這些數(shù)據(jù)在各個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中的流動(dòng)。

? ? ? 首先還是NLP的常規(guī)做法,先做一個(gè)詞嵌入:什么是文本的詞嵌入?

? ? ? 我們將每個(gè)單詞編碼為一個(gè)512維度的向量,我們用上面這張簡(jiǎn)短的圖形來(lái)表示這些向量。詞嵌入的過(guò)程只發(fā)生在最底層的Encoder。但是對(duì)于所有的Encoder來(lái)說(shuō),你都可以按下圖來(lái)理解。輸入(一個(gè)向量的列表,每個(gè)向量的維度為512維,在最底層Encoder作用是詞嵌入,其他層就是其前一層的output)。另外這個(gè)列表的大小和詞向量維度的大小都是可以設(shè)置的超參數(shù)。一般情況下,它是我們訓(xùn)練數(shù)據(jù)集中最長(zhǎng)的句子的長(zhǎng)度。

? ? ?上圖其實(shí)介紹到了一個(gè)Transformer的關(guān)鍵點(diǎn)。你注意觀察,在每個(gè)單詞進(jìn)入Self-Attention層后都會(huì)有一個(gè)對(duì)應(yīng)的輸出。Self-Attention層中的輸入和輸出是存在依賴關(guān)系的,而前饋層則沒(méi)有依賴,所以在前饋層,我們可以用到并行化來(lái)提升速率。

? ? 下面我用一個(gè)簡(jiǎn)短的句子作為例子,來(lái)一步一步推導(dǎo)transformer每個(gè)子層的數(shù)據(jù)流動(dòng)過(guò)程。

Now We’re Encoding!

? ? ? ?正如之前所說(shuō),Transformer中的每個(gè)Encoder接收一個(gè)512維度的向量的列表作為輸入,然后將這些向量傳遞到‘self-attention’層,self-attention層產(chǎn)生一個(gè)等量512維向量列表,然后進(jìn)入前饋神經(jīng)網(wǎng)絡(luò),前饋神經(jīng)網(wǎng)絡(luò)的輸出也為一個(gè)512維度的列表,然后將輸出向上傳遞到下一個(gè)encoder。

? ? ?如上圖所示,每個(gè)位置的單詞首先會(huì)經(jīng)過(guò)一個(gè)self attention層,然后每個(gè)單詞都通過(guò)一個(gè)獨(dú)立的前饋神經(jīng)網(wǎng)絡(luò)(這些神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)完全相同)。

Self-Attention at a High Level

? ? ? Self attention這個(gè)單詞看起來(lái)好像每個(gè)人都知道是什么意思,但實(shí)質(zhì)上他是算法領(lǐng)域中新出的概念,你可以通過(guò)閱讀:Attention is All You Need?來(lái)理解self attention的原理。

? ? ??假設(shè)下面的句子就是我們需要翻譯的輸入句:

”The animal didn't cross the street because it was too tired”

? ? ? 這句話中的"it"指的是什么?它指的是“animal”還是“street”?對(duì)于人來(lái)說(shuō),這其實(shí)是一個(gè)很簡(jiǎn)單的問(wèn)題,但是對(duì)于一個(gè)算法來(lái)說(shuō),處理這個(gè)問(wèn)題其實(shí)并不容易。self attention的出現(xiàn)就是為了解決這個(gè)問(wèn)題,通過(guò)self attention,我們能將“it”與“animal”聯(lián)系起來(lái)。

? ? ? 當(dāng)模型處理單詞的時(shí)候,self attention層可以通過(guò)當(dāng)前單詞去查看其輸入序列中的其他單詞,以此來(lái)尋找編碼這個(gè)單詞更好的線索。

? ? ? 如果你熟悉RNNs,那么你可以回想一下,RNN是怎么處理先前單詞(向量)與當(dāng)前單詞(向量)的關(guān)系的?RNN是怎么計(jì)算他的hidden state的。self-attention正是transformer中設(shè)計(jì)的一種通過(guò)其上下文來(lái)理解當(dāng)前詞的一種辦法。你會(huì)很容易發(fā)現(xiàn)...相較于RNNs,transformer具有更好的并行性。

如上圖,是我們第五層Encoder針對(duì)單詞'it'的圖示,可以發(fā)現(xiàn),我們的Encoder在編碼單詞‘it’時(shí),部分注意力機(jī)制集中在了‘a(chǎn)niml’上,這部分的注意力會(huì)通過(guò)權(quán)值傳遞的方式影響到'it'的編碼。

更多細(xì)節(jié)可以查看?Tensor2Tensor notebook?

Self-Attention in Detail

? ? 這一節(jié)我們先介紹如何用向量的方式來(lái)計(jì)算self attention,然后再來(lái)看看它是如何使用矩陣來(lái)實(shí)現(xiàn)的。

? ? ?計(jì)算self attention的第一步是從每個(gè)Encoder的輸入向量上創(chuàng)建3個(gè)向量(在這個(gè)情況下,對(duì)每個(gè)單詞做詞嵌入)。所以,對(duì)于每個(gè)單詞,我們創(chuàng)建一個(gè)Query向量,一個(gè)Key向量和一個(gè)Value向量。這些向量是通過(guò)詞嵌入乘以我們訓(xùn)練過(guò)程中創(chuàng)建的3個(gè)訓(xùn)練矩陣而產(chǎn)生的。

? ? ?注意這些新向量的維度比嵌入向量小。我們知道嵌入向量的維度為512,而這里的新向量的維度只有64維。新向量并不是必須小一些,這是網(wǎng)絡(luò)架構(gòu)上的選擇使得Multi-Headed Attention(大部分)的計(jì)算不變。

我們將乘以的權(quán)重矩陣得到新向量,既是“query”的向量。同理,最終我們可以對(duì)輸入句子的每個(gè)單詞創(chuàng)建“query”,
“key”,“value”的新向量表示形式。

對(duì)了..“query”,“key”,“value”是什么向量呢?有什么用呢?

這些向量的概念是很抽象,但是它確實(shí)有助于計(jì)算注意力。不過(guò)先不用糾結(jié)去理解它,后面的的內(nèi)容,會(huì)幫助你理解的。

? ? ??計(jì)算self attention的第二步是計(jì)算得分。以上圖為例,假設(shè)我們?cè)谟?jì)算第一個(gè)單詞“thinking”的self attention。我們需要根據(jù)這個(gè)單詞對(duì)輸入句子的每個(gè)單詞進(jìn)行評(píng)分。當(dāng)我們?cè)谀硞€(gè)位置編碼單詞時(shí),分?jǐn)?shù)決定了對(duì)輸入句子的其他單詞的關(guān)照程度。

? ? ? ?通過(guò)將query向量和key向量點(diǎn)擊來(lái)對(duì)相應(yīng)的單詞打分。所以,如果我們處理開(kāi)始位置的的self attention,則第一個(gè)分?jǐn)?shù)為和的點(diǎn)積,第二個(gè)分?jǐn)?shù)為和的點(diǎn)積。如下圖

第三步和第四步的計(jì)算,是將第二部的得分除以8()(論文中使用key向量的維度是64維,其平方根=8,這樣可以使得訓(xùn)練過(guò)程中具有更穩(wěn)定的梯度。這個(gè)并不是唯一值,經(jīng)驗(yàn)所得)。然后再將得到的輸出通過(guò)softmax函數(shù)標(biāo)準(zhǔn)化,使得最后的列表和為1。

這個(gè)softmax的分?jǐn)?shù)決定了當(dāng)前單詞在每個(gè)句子中每個(gè)單詞位置的表示程度。很明顯,當(dāng)前單詞對(duì)應(yīng)句子中此單詞所在位置的softmax的分?jǐn)?shù)最高,但是,有時(shí)候attention機(jī)制也能關(guān)注到此單詞外的其他單詞,這很有用。

第五步是將每個(gè)Value向量乘以softmax后的得分。這里實(shí)際上的意義在于保存對(duì)當(dāng)前詞的關(guān)注度不變的情況下,降低對(duì)不相關(guān)詞的關(guān)注。

第六步是 累加加權(quán)值的向量。 這會(huì)在此位置產(chǎn)生self-attention層的輸出(對(duì)于第一個(gè)單詞)。

總結(jié)self-attention的計(jì)算過(guò)程,(單詞級(jí)別)就是得到一個(gè)我們可以放到前饋神經(jīng)網(wǎng)絡(luò)的矢量。?然而在實(shí)際的實(shí)現(xiàn)過(guò)程中,該計(jì)算會(huì)以矩陣的形式完成,以便更快地處理。下面我們來(lái)看看Self-Attention的矩陣計(jì)算方式。

Matrix Calculation of Self-Attention

第一步是去計(jì)算Query,Key和Value矩陣。我們將詞嵌入轉(zhuǎn)化成矩陣X中,并將其乘以我們訓(xùn)練的權(quán)值矩陣(,,)

X矩陣中的每一行對(duì)應(yīng)于輸入句子中的一個(gè)單詞。 我們看到的X每一行的方框數(shù)實(shí)際上是詞嵌入的維度,圖中所示的和論文中是有差距的。X(圖中的4個(gè)方框論文中為512個(gè))和q / k / v向量(圖中的3個(gè)方框論文中為64個(gè))

最后,由于我們正在處理矩陣,我們可以在一個(gè)公式中濃縮前面步驟2到6來(lái)計(jì)算self attention層的輸出。

?

The Beast With Many Heads

本文通過(guò)使用“Multi-headed”的機(jī)制來(lái)進(jìn)一步完善self attention層。“Multi-headed”主要通過(guò)下面2中方式改善了attention層的性能:

1. 它拓展了模型關(guān)注不同位置的能力。在上面例子中可以看出,”The animal didn't cross the street because it was too tired”,我們的attention機(jī)制計(jì)算出“it”指代的為“animal”,這在對(duì)語(yǔ)言的理解過(guò)程中是很有用的。

2.它為attention層提供了多個(gè)“representation subspaces”。由下圖可以看到,在self attention中,我們有多個(gè)個(gè)Query / Key / Value權(quán)重矩陣(Transformer使用8個(gè)attention heads)。這些集合中的每個(gè)矩陣都是隨機(jī)初始化生成的。然后通過(guò)訓(xùn)練,用于將詞嵌入(或者來(lái)自較低Encoder/Decoder的矢量)投影到不同的“representation subspaces(表示子空間)”中。

? ? 通過(guò)multi-headed attention,我們?yōu)槊總€(gè)“header”都獨(dú)立維護(hù)一套Q/K/V的權(quán)值矩陣。然后我們還是如之前單詞級(jí)別的計(jì)算過(guò)程一樣處理這些數(shù)據(jù)。

? ? 如果對(duì)上面的例子做同樣的self attention計(jì)算,而因?yàn)槲覀冇?頭attention,所以我們會(huì)在八個(gè)時(shí)間點(diǎn)去計(jì)算這些不同的權(quán)值矩陣,但最后結(jié)束時(shí),我們會(huì)得到8個(gè)不同的矩陣。如下圖:

? ? 瞧瞧,這會(huì)給我們后續(xù)工作造成什么問(wèn)題?

? ? 我們知道在self-attention后面緊跟著的是前饋神經(jīng)網(wǎng)絡(luò),而前饋神經(jīng)網(wǎng)絡(luò)接受的是單個(gè)矩陣向量,而不是8個(gè)矩陣。所以我們需要一種辦法,把這8個(gè)矩陣壓縮成一個(gè)矩陣。

? ? 我們?cè)趺醋?#xff1f;?

? ?我們將這8個(gè)矩陣連接在一起然后再與一個(gè)矩陣相乘。步驟如下圖所示:

這樣multi-headed self attention的全部?jī)?nèi)容就介紹完了。之前可能都是一些過(guò)程的圖解,現(xiàn)在我將這些過(guò)程連接在一起,用一個(gè)整體的框圖來(lái)表示一下計(jì)算的過(guò)程,希望可以加深理解。

? ? ? 現(xiàn)在我們已經(jīng)觸及了attention的header,讓我們重新審視我們之前的例子,看看例句中的“it”這個(gè)單詞在不同的attention?header情況下會(huì)有怎樣不同的關(guān)注點(diǎn)。

? ? ? 如圖:當(dāng)我們對(duì)“it”這個(gè)詞進(jìn)行編碼時(shí),一個(gè)注意力的焦點(diǎn)主要集中在“animal”上,而另一個(gè)注意力集中在“tired”?

但是,如果我們將所有注意力添加到圖片中,那么事情可能更難理解:

?

Representing The Order of The Sequence Using Positional Encoding

# 使用位置編碼表示序列的順序

我們可能忽略了去介紹一個(gè)重要的內(nèi)容,就是怎么考慮輸入序列中單詞順序的方法。

為了解決這個(gè)問(wèn)題,transformer為每個(gè)輸入單詞的詞嵌入上添加了一個(gè)新向量-位置向量。

為了解決這個(gè)問(wèn)題,變換器為每個(gè)輸入嵌入添加了一個(gè)向量。這些位置編碼向量有固定的生成方式,所以獲取他們是很方便的,但是這些信息確是很有用的,他們能捕捉大奧每個(gè)單詞的位置,或者序列中不同單詞之間的距離。將這些信息也添加到詞嵌入中,然后與Q/K/V向量點(diǎn)擊,獲得的attention就有了距離的信息了。

為了讓模型捕捉到單詞的順序信息,我們添加位置編碼向量信息(POSITIONAL ENCODING)-位置編碼向量不需要訓(xùn)練,它有一個(gè)規(guī)則的產(chǎn)生方式。

如果我們的嵌入維度為4,那么實(shí)際上的位置編碼就如下圖所示:


那么生成位置向量需要遵循怎樣的規(guī)則呢?

觀察下面的圖形,每一行都代表著對(duì)一個(gè)矢量的位置編碼。因此第一行就是我們輸入序列中第一個(gè)字的嵌入向量,每行都包含512個(gè)值,每個(gè)值介于1和-1之間。我們用顏色來(lái)表示1,-1之間的值,這樣方便可視化的方式表現(xiàn)出來(lái):

這是一個(gè)20個(gè)字(行)的(512)列位置編碼示例。你會(huì)發(fā)現(xiàn)它咋中心位置被分為了2半,這是因?yàn)樽蟀氩糠值闹凳且挥梢粋€(gè)正弦函數(shù)生成的,而右半部分是由另一個(gè)函數(shù)(余弦)生成。然后將它們連接起來(lái)形成每個(gè)位置編碼矢量。
?

位置編碼的公式在論文(3.5節(jié))中有描述。你也可以在中查看用于生成位置編碼的代碼get_timing_signal_1d()。這不是位置編碼的唯一可能方法。然而,它具有能夠擴(kuò)展到看不見(jiàn)的序列長(zhǎng)度的優(yōu)點(diǎn)(例如,如果我們訓(xùn)練的模型被要求翻譯的句子比我們訓(xùn)練集中的任何句子都長(zhǎng))。

The Residuals

這一節(jié)我想介紹的是encoder過(guò)程中的每個(gè)self-attention層的左右連接情況,我們稱這個(gè)為:layer-normalization?步驟。如下圖所示:

?

?

在進(jìn)一步探索其內(nèi)部計(jì)算方式,我們可以將上面圖層可視化為下圖:

?Decoder的子層也是同樣的,如果我們想做堆疊了2個(gè)Encoder和2個(gè)Decoder的Transformer,那么它可視化就會(huì)如下圖所示:

The Decoder Side

? ? ?我們已經(jīng)基本介紹完了Encoder的大多數(shù)概念,我們基本上也可以預(yù)知Decoder是怎么工作的。現(xiàn)在我們來(lái)仔細(xì)探討下Decoder的數(shù)據(jù)計(jì)算原理,

? ? ?當(dāng)序列輸入時(shí),Encoder開(kāi)始工作,最后在其頂層的Encoder輸出矢量組成的列表,然后我們將其轉(zhuǎn)化為一組attention的集合(K,V)。(K,V)將帶入每個(gè)Decoder的“encoder-decoder attention”層中去計(jì)算(這樣有助于decoder捕獲輸入序列的位置信息)


完成encoder階段后,我們開(kāi)始decoder階段,decoder階段中的每個(gè)步驟輸出來(lái)自輸出序列的元素(在這種情況下為英語(yǔ)翻譯句子)。

上面實(shí)際上已經(jīng)是應(yīng)用的階段了,那我們訓(xùn)練階段是如何的呢?

我們以下圖的步驟進(jìn)行訓(xùn)練,直到輸出一個(gè)特殊的符號(hào)<end of sentence>,表示已經(jīng)完成了。?The output of each step is fed to the bottom decoder in the next time step, and the decoders bubble up their decoding results just like the encoders did. 對(duì)于Decoder,和Encoder一樣,我們?cè)诿總€(gè)Decoder的輸入做詞嵌入并添加上表示每個(gè)字位置的位置編碼

Decoder中的self attention與Encoder的self attention略有不同:

? ? ? ?在Decoder中,self attention只關(guān)注輸出序列中的較早的位置。這是在self attention計(jì)算中的softmax步驟之前屏蔽了特征位置(設(shè)置為 -inf)來(lái)完成的。

? ? ?“Encoder-Decoder Attention”層的工作方式與"Multi-Headed Self-Attention"一樣,只是它從下面的層創(chuàng)建其Query矩陣,并在Encoder堆棧的輸出中獲取Key和Value的矩陣。

?

The Final Linear and Softmax Layer

? ? ? ? ?Decoder的輸出是浮點(diǎn)數(shù)的向量列表。我們是如何將其變成一個(gè)單詞的呢?這就是最終的線性層和softmax層所做的工作。

線性層是一個(gè)簡(jiǎn)單的全連接神經(jīng)網(wǎng)絡(luò),它是由Decoder堆棧產(chǎn)生的向量投影到一個(gè)更大,更大的向量中,稱為對(duì)數(shù)向量

? ? ? 假設(shè)實(shí)驗(yàn)中我們的模型從訓(xùn)練數(shù)據(jù)集上總共學(xué)習(xí)到1萬(wàn)個(gè)英語(yǔ)單詞(“Output Vocabulary”)。這對(duì)應(yīng)的Logits矢量也有1萬(wàn)個(gè)長(zhǎng)度-每一段表示了一個(gè)唯一單詞的得分。在線性層之后是一個(gè)softmax層,softmax將這些分?jǐn)?shù)轉(zhuǎn)換為概率。選取概率最高的索引,然后通過(guò)這個(gè)索引找到對(duì)應(yīng)的單詞作為輸出。

?上圖是從Decoder的輸出開(kāi)始到最終softmax的輸出。一步一步的圖解。

Recap Of Training

現(xiàn)在我們已經(jīng)講解了transformer的訓(xùn)練全過(guò)程了,讓我們回顧一下。

在訓(xùn)練期間,未經(jīng)訓(xùn)練的模型將通過(guò)如上的流程一步一步計(jì)算的。而且因?yàn)槲覀兪窃趯?duì)標(biāo)記的訓(xùn)練數(shù)據(jù)集進(jìn)行訓(xùn)練(機(jī)器翻譯可以看做雙語(yǔ)平行語(yǔ)聊),那么我們可以將模型輸出與實(shí)際的正確答案相比較,來(lái)進(jìn)行反向傳播。

為了更好的理解這部分內(nèi)容,我們假設(shè)我們輸出的詞匯只有(“a”,“am”,“i”,“thanks”,“student”和“<eos>”(“句末”的縮寫(xiě)))

在我們開(kāi)始訓(xùn)練之前,我們模型的輸出詞匯是在預(yù)處理階段創(chuàng)建的。

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?示例:我們的輸出詞匯表的one-hot編碼

下一節(jié)我們?cè)儆懻撘幌履P偷膿p失函數(shù),我們優(yōu)化的指標(biāo),引導(dǎo)一個(gè)訓(xùn)練有素且令人驚訝的精確模型。

The Loss Function

假設(shè)我們正在訓(xùn)練一個(gè)模型,比如將“merci”翻譯成“謝謝”。這意味著我們希望模型計(jì)算后的輸出為“謝謝”,但由于這種模式還沒(méi)有接受過(guò)訓(xùn)練,所以這種情況不太可能發(fā)生。


這是因?yàn)槟P偷膮?shù)(權(quán)重)都是隨機(jī)初始化的,因此(未經(jīng)訓(xùn)練的)模型對(duì)每個(gè)單詞產(chǎn)生的概率分布是具有無(wú)限可能的,但是我們可以通過(guò)其余實(shí)際我們期望的輸出進(jìn)行比較,然后利用反向傳播調(diào)整所有模型的權(quán)重,使得輸出更接近所需的輸出。

那么如何比較算法預(yù)測(cè)值與真實(shí)期望值呢?

實(shí)際上,我們對(duì)其做一個(gè)簡(jiǎn)單的減法即可。你也可以了解交叉熵和Kullback-Leibler散度來(lái)掌握這種差值的判斷方式。

但是,需要注意的是,這只是一個(gè)很簡(jiǎn)單的demo,真實(shí)情況下,我們需要輸出一個(gè)更長(zhǎng)的句子,例如。輸入:“je suis étudiant”和預(yù)期輸出:“I am a student”。這樣的句子輸入,意味著我們的模型能夠連續(xù)的輸出概率分布。其中:

  • 每個(gè)概率分布由寬度為vocab_size的向量表示(在我們的示例中vocab_size為6,但實(shí)際上可能為3,000或10,000維度)
  • 第一概率分布在與單詞“i”相關(guān)聯(lián)的單元處具有最高概率
  • 第二概率分布在與單詞“am”相關(guān)聯(lián)的單元格中具有最高概率
  • 依此類推,直到第五個(gè)輸出分布表示'?<end of sentence>'符號(hào),意味著預(yù)測(cè)結(jié)束。


上圖為:輸入:“je suis étudiant”和預(yù)期輸出:“I am a student”的期望預(yù)測(cè)概率分布情況。

在算法模型中,雖然不能達(dá)到期望的情況,但是我們需要在訓(xùn)練了足夠長(zhǎng)時(shí)間之后,我們的算法模型能夠有如下圖所示的概率分布情況:

? ? 現(xiàn)在,因?yàn)槟P鸵淮紊梢粋€(gè)輸出,我們可以理解為這個(gè)模型從該概率分布(softmax)矢量中選擇了具有最高概率的單詞并丟棄了其余的單詞。? ? ? ? ? ??

? ?現(xiàn)在,因?yàn)槟P鸵淮紊梢粋€(gè)輸出,我們可以假設(shè)模型從該概率分布中選擇具有最高概率的單詞并丟棄其余的單詞。

這里有2個(gè)方法:一個(gè)是貪婪算法(greedy decoding),一個(gè)是波束搜索(beam search)。波束搜索是一個(gè)優(yōu)化提升的技術(shù),可以嘗試去了解一下,這里不做更多解釋。

Go Forth And Transform

如果你想更深入了解,可以嘗試下面幾個(gè)步驟:

  • 閱讀?Attention Is All You Need?這篇論文, the Transformer 的博客?(Transformer: A Novel Neural Network Architecture for Language Understanding) 和?Tensor2Tensor announcement公告
  • 觀看??ukasz Kaiser’s talk?這個(gè)視頻,了解更多細(xì)節(jié)。
  • 試著通過(guò)?Jupyter Notebook provided as part of the Tensor2Tensor repo?以編程的角度學(xué)習(xí)
  • 探索?Tensor2Tensor repo.

后續(xù)工作:

  • Depthwise Separable Convolutions for Neural Machine Translation
  • One Model To Learn Them All
  • Discrete Autoencoders for Sequence Models
  • Generating Wikipedia by Summarizing Long Sequences
  • Image Transformer
  • Training Tips for the Transformer Model
  • Self-Attention with Relative Position Representations
  • Fast Decoding in Sequence Models using Discrete Latent Variables
  • Adafactor: Adaptive Learning Rates with Sublinear Memory Cost

總結(jié)

以上是生活随笔為你收集整理的图解Transformer-一篇文章看懂transformer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。