<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          十分鐘理解Transformer

          共 5234字,需瀏覽 11分鐘

           ·

          2024-08-01 10:05

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

               
          重磅干貨,第一時間送達(dá)

          來源|知乎—Jason 
          地址|https://zhuanlan.zhihu.com/p/82312421
          Transformer是一個利用注意力機(jī)制來提高模型訓(xùn)練速度的模型。關(guān)于注意力機(jī)制可以參看這篇文章(https://zhuanlan.zhihu.com/p/52119092),trasnformer可以說是完全基于自注意力機(jī)制的一個深度學(xué)習(xí)模型,因?yàn)樗m用于并行化計(jì)算,和它本身模型的復(fù)雜程度導(dǎo)致它在精度和性能上都要高于之前流行的RNN循環(huán)神經(jīng)網(wǎng)絡(luò)。


           

          那什么是transformer呢?

          你可以簡單理解為它是一個黑盒子,當(dāng)我們在做文本翻譯任務(wù)是,我輸入進(jìn)去一個中文,經(jīng)過這個黑盒子之后,輸出來翻譯過后的英文。


           

          那么在這個黑盒子里面都有什么呢?

          里面主要有兩部分組成:Encoder 和 Decoder
          當(dāng)我輸入一個文本的時候,該文本數(shù)據(jù)會先經(jīng)過一個叫Encoders的模塊,對該文本進(jìn)行編碼,然后將編碼后的數(shù)據(jù)再傳入一個叫Decoders的模塊進(jìn)行解碼,解碼后就得到了翻譯后的文本,對應(yīng)的我們稱Encoders為編碼器,Decoders為解碼器。


           

          那么編碼器和解碼器里邊又都是些什么呢?

          細(xì)心的同學(xué)可能已經(jīng)發(fā)現(xiàn)了,上圖中的Decoders后邊加了個s,那就代表有多個編碼器了唄,沒錯,這個編碼模塊里邊,有很多小的編碼器,一般情況下,Encoders里邊有6個小編碼器,同樣的,Decoders里邊有6個小解碼器。
          我們看到,在編碼部分,每一個的小編碼器的輸入是前一個小編碼器的輸出,而每一個小解碼器的輸入不光是它的前一個解碼器的輸出,還包括了整個編碼部分的輸出。


           

          那么你可能又該問了,那每一個小編碼器里邊又是什么呢?

          我們放大一個encoder,發(fā)現(xiàn)里邊的結(jié)構(gòu)是一個自注意力機(jī)制加上一個前饋神經(jīng)網(wǎng)絡(luò)。


           

          我們先來看下self-attention是什么樣子的。

          我們通過幾個步驟來解釋:
          1、首先,self-attention的輸入就是詞向量,即整個模型的最初的輸入是詞向量的形式。那自注意力機(jī)制呢,顧名思義就是自己和自己計(jì)算一遍注意力,即對每一個輸入的詞向量,我們需要構(gòu)建self-attention的輸入。在這里,transformer首先將詞向量乘上三個矩陣,得到三個新的向量,之所以乘上三個矩陣參數(shù)而不是直接用原本的詞向量是因?yàn)檫@樣增加更多的參數(shù),提高模型效果。對于輸入X1(機(jī)器),乘上三個矩陣后分別得到Q1,K1,V1,同樣的,對于輸入X2(學(xué)習(xí)),也乘上三個不同的矩陣得到Q2,K2,V2。
          2、那接下來就要計(jì)算注意力得分了,這個得分是通過計(jì)算Q與各個單詞的K向量的點(diǎn)積得到的。我們以X1為例,分別將Q1和K1、K2進(jìn)行點(diǎn)積運(yùn)算,假設(shè)分別得到得分112和96。
          3、將得分分別除以一個特定數(shù)值8(K向量的維度的平方根,通常K向量的維度是64)這能讓梯度更加穩(wěn)定,則得到結(jié)果如下:
          4、將上述結(jié)果進(jìn)行softmax運(yùn)算得到,softmax主要將分?jǐn)?shù)標(biāo)準(zhǔn)化,使他們都是正數(shù)并且加起來等于1。
          5、將V向量乘上softmax的結(jié)果,這個思想主要是為了保持我們想要關(guān)注的單詞的值不變,而掩蓋掉那些不相關(guān)的單詞(例如將他們乘上很小的數(shù)字)
          6、將帶權(quán)重的各個V向量加起來,至此,產(chǎn)生在這個位置上(第一個單詞)的self-attention層的輸出,其余位置的self-attention輸出也是同樣的計(jì)算方式。
          將上述的過程總結(jié)為一個公式就可以用下圖表示:

           

          self-attention層到這里就結(jié)束了嗎?

          還沒有,論文為了進(jìn)一步細(xì)化自注意力機(jī)制層,增加了“多頭注意力機(jī)制”的概念,這從兩個方面提高了自注意力層的性能。
          第一個方面,他擴(kuò)展了模型關(guān)注不同位置的能力,這對翻譯一下句子特別有用,因?yàn)槲覀兿胫馈癷t”是指代的哪個單詞。
          第二個方面,他給了自注意力層多個“表示子空間”。對于多頭自注意力機(jī)制,我們不止有一組Q/K/V權(quán)重矩陣,而是有多組(論文中使用8組),所以每個編碼器/解碼器使用8個“頭”(可以理解為8個互不干擾自的注意力機(jī)制運(yùn)算),每一組的Q/K/V都不相同。然后,得到8個不同的權(quán)重矩陣Z,每個權(quán)重矩陣被用來將輸入向量投射到不同的表示子空間。
          經(jīng)過多頭注意力機(jī)制后,就會得到多個權(quán)重矩陣Z,我們將多個Z進(jìn)行拼接就得到了self-attention層的輸出:
          上述我們經(jīng)過了self-attention層,我們得到了self-attention的輸出,self-attention的輸出即是前饋神經(jīng)網(wǎng)絡(luò)層的輸入,然后前饋神經(jīng)網(wǎng)絡(luò)的輸入只需要一個矩陣就可以了,不需要八個矩陣,所以我們需要把這8個矩陣壓縮成一個,我們怎么做呢?只需要把這些矩陣拼接起來然后用一個額外的權(quán)重矩陣與之相乘即可。
          最終的Z就作為前饋神經(jīng)網(wǎng)絡(luò)的輸入。
          接下來就進(jìn)入了小編碼器里邊的前饋神經(jīng)網(wǎng)模塊了,關(guān)于前饋神經(jīng)網(wǎng)絡(luò),網(wǎng)上已經(jīng)有很多資料,在這里就不做過多講解了,只需要知道,前饋神經(jīng)網(wǎng)絡(luò)的輸入是self-attention的輸出,即上圖的Z,是一個矩陣,矩陣的維度是(序列長度×D詞向量),之后前饋神經(jīng)網(wǎng)絡(luò)的輸出也是同樣的維度。
          以上就是一個小編碼器的內(nèi)部構(gòu)造了,一個大的編碼部分就是將這個過程重復(fù)了6次,最終得到整個編碼部分的輸出。
          然后再transformer中使用了6個encoder,為了解決梯度消失的問題,在Encoders和Decoder中都是用了殘差神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),即每一個前饋神經(jīng)網(wǎng)絡(luò)的輸入不光包含上述self-attention的輸出Z,還包含最原始的輸入。
          上述說到的encoder是對輸入(機(jī)器學(xué)習(xí))進(jìn)行編碼,使用的是自注意力機(jī)制+前饋神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),同樣的,在decoder中使用的也是同樣的結(jié)構(gòu)。也是首先對輸出(machine learning)計(jì)算自注意力得分,不同的地方在于,進(jìn)行過自注意力機(jī)制后,將self-attention的輸出再與Decoders模塊的輸出計(jì)算一遍注意力機(jī)制得分,之后,再進(jìn)入前饋神經(jīng)網(wǎng)絡(luò)模塊。
          以上,就講完了Transformer編碼和解碼兩大模塊,那么我們回歸最初的問題,將“機(jī)器學(xué)習(xí)”翻譯成“machine learing”,解碼器輸出本來是一個浮點(diǎn)型的向量,怎么轉(zhuǎn)化成“machine learing”這兩個詞呢?
          是個工作是最后的線性層接上一個softmax,其中線性層是一個簡單的全連接神經(jīng)網(wǎng)絡(luò),它將解碼器產(chǎn)生的向量投影到一個更高維度的向量(logits)上,假設(shè)我們模型的詞匯表是10000個詞,那么logits就有10000個維度,每個維度對應(yīng)一個惟一的詞的得分。之后的softmax層將這些分?jǐn)?shù)轉(zhuǎn)換為概率。選擇概率最大的維度,并對應(yīng)地生成與之關(guān)聯(lián)的單詞作為此時間步的輸出就是最終的輸出啦!!

           

          假設(shè)詞匯表維度是6,那么輸出最大概率詞匯的過程如下:

          以上就是Transformer的框架了,但是還有最后一個問題,我們都是到RNN中的每個輸入是時序的,是又先后順序的,但是Transformer整個框架下來并沒有考慮順序信息,這就需要提到另一個概念了:“位置編碼”。
          Transformer中確實(shí)沒有考慮順序信息,那怎么辦呢,我們可以在輸入中做手腳,把輸入變得有位置信息不就行了,那怎么把詞向量輸入變成攜帶位置信息的輸入呢?
          我們可以給每個詞向量加上一個有順序特征的向量,發(fā)現(xiàn)sin和cos函數(shù)能夠很好的表達(dá)這種特征,所以通常位置向量用以下公式來表示:
          最后祭出這張經(jīng)典的圖,最初看這張圖的時候可能難以理解,希望大家在深入理解Transformer后再看這張圖能夠有更深刻的認(rèn)識。
          Transformer就介紹到這里了,后來的很多經(jīng)典的模型比如BERT、GPT-2都是基于Transformer的思想。我們有機(jī)會再詳細(xì)介紹這兩個刷新很多記錄的經(jīng)典模型。
             
          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個基于OpenCV實(shí)現(xiàn)20個實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群

          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計(jì)算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

          瀏覽 77
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  爱爱网站无码 | 91av免费电影 | 中文字幕亚洲高清 | 丁香五月成人网 | 在线观看视频精品 |