<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 (圖解)(1)

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

發(fā)布人:數據派THU 時(shí)間:2023-03-19 來(lái)源:工程師 發(fā)布文章
1.導語(yǔ)


谷歌推出的BERT模型在11項NLP任務(wù)中奪得SOTA結果,引爆了整個(gè)NLP界。而B(niǎo)ERT取得成功的一個(gè)關(guān)鍵因素是Transformer的強大作用。谷歌的Transformer模型最早是用于機器翻譯任務(wù),當時(shí)達到了SOTA效果。Transformer改進(jìn)了RNN最被人詬病的訓練慢的缺點(diǎn),利用self-attention機制實(shí)現快速并行。并且Transformer可以增加到非常深的深度,充分發(fā)掘DNN模型的特性,提升模型準確率。在本文中,我們將研究Transformer模型,理解它的工作原理。


出處:https://blog.csdn.net/longxinchen_ml/article/details/86533005原作者:Jay Alammar原鏈接:https://jalammar.github.io/illustrated-transformer


2.正文開(kāi)始


Transformer由論文《Attention is All You Need》提出,現在是谷歌云TPU推薦的參考模型。論文相關(guān)的Tensorflow的代碼可以從GitHub獲取,其作為T(mén)ensor2Tensor包的一部分。哈佛的NLP團隊也實(shí)現了一個(gè)基于PyTorch的版本,并注釋該論文。


在本文中,我們將試圖把模型簡(jiǎn)化一點(diǎn),并逐一介紹里面的核心概念,希望讓普通讀者也能輕易理解。


Attention is All You Need:

https://arxiv.org/abs/1706.03762


從宏觀(guān)的視角開(kāi)始 首先將這個(gè)模型看成是一個(gè)黑箱操作。在機器翻譯中,就是輸入一種語(yǔ)言,輸出另一種語(yǔ)言。


圖片


那么拆開(kāi)這個(gè)黑箱,我們可以看到它是由編碼組件、解碼組件和它們之間的連接組成。


圖片


編碼組件部分由一堆編碼器(encoder)構成(論文中是將6個(gè)編碼器疊在一起——數字6沒(méi)有什么神奇之處,你也可以嘗試其他數字)。解碼組件部分也是由相同數量(與編碼器對應)的****(decoder)組成的。


圖片


所有的編碼器在結構上都是相同的,但它們沒(méi)有共享參數。每個(gè)****都可以分解成兩個(gè)子層。

圖片

從編碼器輸入的句子首先會(huì )經(jīng)過(guò)一個(gè)自注意力(self-attention)層,這層幫助編碼器在對每個(gè)單詞編碼時(shí)關(guān)注輸入句子的其他單詞。我們將在稍后的文章中更深入地研究自注意力。


自注意力層的輸出會(huì )傳遞到前饋(feed-forward)神經(jīng)網(wǎng)絡(luò )中。每個(gè)位置的單詞對應的前饋神經(jīng)網(wǎng)絡(luò )都完全一樣(譯注:另一種解讀就是一層窗口為一個(gè)單詞的一維卷積神經(jīng)網(wǎng)絡(luò ))。


****中也有編碼器的自注意力(self-attention)層和前饋(feed-forward)層。除此之外,這兩個(gè)層之間還有一個(gè)注意力層,用來(lái)關(guān)注輸入句子的相關(guān)部分(和seq2seq模型的注意力作用相似)。

圖片

將張量引入圖景


我們已經(jīng)了解了模型的主要部分,接下來(lái)我們看一下各種向量或張量(譯注:張量概念是矢量概念的推廣,可以簡(jiǎn)單理解矢量是一階張量、矩陣是二階張量。)是怎樣在模型的不同部分中,將輸入轉化為輸出的。


像大部分NLP應用一樣,我們首先將每個(gè)輸入單詞通過(guò)詞嵌入算法轉換為詞向量。


圖片

每個(gè)單詞都被嵌入為512維的向量,我們用這些簡(jiǎn)單的方框來(lái)表示這些向量。


詞嵌入過(guò)程只發(fā)生在最底層的編碼器中。所有的編碼器都有一個(gè)相同的特點(diǎn),即它們接收一個(gè)向量列表,列表中的每個(gè)向量大小為512維。在底層(最開(kāi)始)編碼器中它就是詞向量,但是在其他編碼器中,它就是下一層編碼器的輸出(也是一個(gè)向量列表)。向量列表大小是我們可以設置的超參數——一般是我們訓練集中最長(cháng)句子的長(cháng)度。


將輸入序列進(jìn)行詞嵌入之后,每個(gè)單詞都會(huì )流經(jīng)編碼器中的兩個(gè)子層。圖片

接下來(lái)我們看看Transformer的一個(gè)核心特性,在這里輸入序列中每個(gè)位置的單詞都有自己獨特的路徑流入編碼器。在自注意力層中,這些路徑之間存在依賴(lài)關(guān)系。而前饋(feed-forward)層沒(méi)有這些依賴(lài)關(guān)系。因此在前饋(feed-forward)層時(shí)可以并行執行各種路徑。


然后我們將以一個(gè)更短的句子為例,看看編碼器的每個(gè)子層中發(fā)生了什么。


現在我們開(kāi)始“編碼”


如上述已經(jīng)提到的,一個(gè)編碼器接收向量列表作為輸入,接著(zhù)將向量列表中的向量傳遞到自注意力層進(jìn)行處理,然后傳遞到前饋神經(jīng)網(wǎng)絡(luò )層中,將輸出結果傳遞到下一個(gè)編碼器中。圖片

輸入序列的每個(gè)單詞都經(jīng)過(guò)自編碼過(guò)程。然后,他們各自通過(guò)前向傳播神經(jīng)網(wǎng)絡(luò )——完全相同的網(wǎng)絡(luò ),而每個(gè)向量都分別通過(guò)它。


從宏觀(guān)視角看自注意力機制


不要被我用自注意力這個(gè)詞弄迷糊了,好像每個(gè)人都應該熟悉這個(gè)概念。其實(shí)我之也沒(méi)有見(jiàn)過(guò)這個(gè)概念,直到讀到Attention is All You Need 這篇論文時(shí)才恍然大悟。讓我們精煉一下它的工作原理。


例如,下列句子是我們想要翻譯的輸入句子:


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


這個(gè)“it”在這個(gè)句子是指什么呢?它指的是street還是這個(gè)animal呢?這對于人類(lèi)來(lái)說(shuō)是一個(gè)簡(jiǎn)單的問(wèn)題,但是對于算法則不是。


當模型處理這個(gè)單詞“it”的時(shí)候,自注意力機制會(huì )允許“it”與“animal”建立聯(lián)系。


隨著(zhù)模型處理輸入序列的每個(gè)單詞,自注意力會(huì )關(guān)注整個(gè)輸入序列的所有單詞,幫助模型對本單詞更好地進(jìn)行編碼。


如果你熟悉RNN(循環(huán)神經(jīng)網(wǎng)絡(luò )),回憶一下它是如何維持隱藏層的。RNN會(huì )將它已經(jīng)處理過(guò)的前面的所有單詞/向量的表示與它正在處理的當前單詞/向量結合起來(lái)。而自注意力機制會(huì )將所有相關(guān)單詞的理解融入到我們正在處理的單詞中。

圖片當我們在編碼器#5(棧中最上層編碼器)中編碼“it”這個(gè)單詞的時(shí),注意力機制的部分會(huì )去關(guān)注“The Animal”,將它的表示的一部分編入“it”的編碼中。


請務(wù)必檢查T(mén)ensor2Tensor notebook ,在里面你可以下載一個(gè)Transformer模型,并用交互式可視化的方式來(lái)檢驗。


從微觀(guān)視角看自注意力機制


首先我們了解一下如何使用向量來(lái)計算自注意力,然后來(lái)看它實(shí)怎樣用矩陣來(lái)實(shí)現。


計算自注意力的第一步就是從每個(gè)編碼器的輸入向量(每個(gè)單詞的詞向量)中生成三個(gè)向量。也就是說(shuō)對于每個(gè)單詞,我們創(chuàng )造一個(gè)查詢(xún)向量、一個(gè)鍵向量和一個(gè)值向量。這三個(gè)向量是通過(guò)詞嵌入與三個(gè)權重矩陣后相乘創(chuàng )建的。


可以發(fā)現這些新向量在維度上比詞嵌入向量更低。他們的維度是64,而詞嵌入和編碼器的輸入/輸出向量的維度是512. 但實(shí)際上不強求維度更小,這只是一種基于架構上的選擇,它可以使多頭注意力(multiheaded attention)的大部分計算保持不變。


圖片

X1與WQ權重矩陣相乘得到q1, 就是與這個(gè)單詞相關(guān)的查詢(xún)向量。最終使得輸入序列的每個(gè)單詞的創(chuàng )建一個(gè)查詢(xún)向量、一個(gè)鍵向量和一個(gè)值向量。


什么是查詢(xún)向量、鍵向量和值向量向量?


它們都是有助于計算和理解注意力機制的抽象概念。請繼續閱讀下文的內容,你就會(huì )知道每個(gè)向量在計算注意力機制中到底扮演什么樣的角色。


計算自注意力的第二步是計算得分。假設我們在為這個(gè)例子中的第一個(gè)詞“Thinking”計算自注意力向量,我們需要拿輸入句子中的每個(gè)單詞對“Thinking”打分。這些分數決定了在編碼單詞“Thinking”的過(guò)程中有多重視句子的其它部分。


這些分數是通過(guò)打分單詞(所有輸入句子的單詞)的鍵向量與“Thinking”的查詢(xún)向量相點(diǎn)積來(lái)計算的。所以如果我們是處理位置最靠前的詞的自注意力的話(huà),第一個(gè)分數是q1和k1的點(diǎn)積,第二個(gè)分數是q1和k2的點(diǎn)積。

圖片

第三步和第四步是將分數除以8(8是論文中使用的鍵向量的維數64的平方根,這會(huì )讓梯度更穩定。這里也可以使用其它值,8只是默認值),然后通過(guò)softmax傳遞結果。softmax的作用是使所有單詞的分數歸一化,得到的分數都是正值且和為1。

圖片

這個(gè)softmax分數決定了每個(gè)單詞對編碼當下位置(“Thinking”)的貢獻。顯然,已經(jīng)在這個(gè)位置上的單詞將獲得最高的softmax分數,但有時(shí)關(guān)注另一個(gè)與當前單詞相關(guān)的單詞也會(huì )有幫助。


第五步是將每個(gè)值向量乘以softmax分數(這是為了準備之后將它們求和)。這里的直覺(jué)是希望關(guān)注語(yǔ)義上相關(guān)的單詞,并弱化不相關(guān)的單詞(例如,讓它們乘以0.001這樣的小數)。


第六步是對加權值向量求和(譯注:自注意力的另一種解釋就是在編碼某個(gè)單詞時(shí),就是將所有單詞的表示(值向量)進(jìn)行加權求和,而權重是通過(guò)該詞的表示(鍵向量)與被編碼詞表示(查詢(xún)向量)的點(diǎn)積并通過(guò)softmax得到。),然后即得到自注意力層在該位置的輸出(在我們的例子中是對于第一個(gè)單詞)。圖片

這樣自自注意力的計算就完成了。得到的向量就可以傳給前饋神經(jīng)網(wǎng)絡(luò )。然而實(shí)際中,這些計算是以矩陣形式完成的,以便算得更快。那我們接下來(lái)就看看如何用矩陣實(shí)現的。


*博客內容為網(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>