<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>

          廣告行業(yè)中那些趣事系列4:詳解從配角到C位出道的Transformer

          共 7122字,需瀏覽 15分鐘

           ·

          2021-09-30 02:15

          摘要:上一篇廣告行業(yè)中那些趣事系列3:NLP中的巨星BERT,從理論的角度講了下NLP中有里程碑意義的BERT模型。BERT具有效果好和通用性強(qiáng)兩大優(yōu)點(diǎn),其中效果好最主要的原因就是使用了Transformer作為特征抽取器。本篇主要詳解下這個(gè)從配角到C位出道的Transformer,主要從宏觀和微觀的角度分析Transformer,講下它的核心注意力機(jī)制Attention,然后以翻譯任務(wù)舉例講下Transformer是如何進(jìn)行工作的。


          對充滿挑戰(zhàn)的高薪行業(yè)NLP感興趣的小伙伴可以多多關(guān)注。不僅僅是技術(shù),大家也可以了解到身邊的翻譯任務(wù)、對話機(jī)器人是怎么做出來的。


          目錄

          01 BERT和Transformer的關(guān)系

          02 為什么要用Transformer

          03 從宏觀視角看Transformer

          04 從微觀視角看Transformer



          01 BERT和Transformer的關(guān)系

          圖1 回顧Word Embedding的演化歷史


          這里作為引言回顧下NLP中預(yù)訓(xùn)練技術(shù)Word Embedding的演化歷史:


          Word2vec將文本映射到向量空間,從而實(shí)現(xiàn)了在低維向量空間表示文本。通過向量空間中距離的長短可以表示文本語義的相似度。但是因?yàn)橐粋€(gè)詞在向量空間中位置是唯一的,所以無法解決多義詞的問題。比如”legend”既可以代表傳奇,還可以代表圖例。歸根結(jié)底是靜態(tài)的Word Embedding。


          ELMO采用聯(lián)系上下文的三層embedding來表示詞,不僅包括詞向量,還包括了句法特征向量和語義特征向量,很好的解決了多義詞問題。


          而目前項(xiàng)目中使用的BERT模型相比于ELMO,因?yàn)槭褂昧薚ransformer作為特征抽取器,所以模型效果很好。


          總結(jié)下,google推出的BERT模型在11項(xiàng)NLP任務(wù)中效果有很大提升。最重要的一個(gè)原因是使用Transformer作為特征抽取器。


          02 為什么要用Transformer


          圖2 傳統(tǒng)的特征抽取器RNN和CNN


          NLP中傳統(tǒng)的特征器主要是RNN和CNN。


          RNN(或者變種LSTM、GRU等)由于本身的機(jī)制只能按順序依次計(jì)算,這種機(jī)制存在兩個(gè)問題:

          • 時(shí)間片t的計(jì)算依賴上一時(shí)間片t-1的計(jì)算結(jié)果,這樣限制了模型的并行能力

          • 信息計(jì)算的過程中信息會(huì)丟失,雖然LSTM等通過門機(jī)制會(huì)一定程度緩解長期依賴的問題,但是對于特別長的依賴現(xiàn)象LSTM還是無能為力


          CNN雖然可以并行化計(jì)算,但是不適合捕捉長距離特征。


          因?yàn)镽NN和CNN各自存在的問題,所以google團(tuán)隊(duì)在論文《Attention is All You Need》中提出了Transformer模型。中文的意思是變形金剛,聽著就很霸氣。


          Transformer拋棄了傳統(tǒng)的CNN和RNN,整個(gè)網(wǎng)絡(luò)完全由Attention機(jī)制組成,同時(shí)具有可并行化計(jì)算和捕捉長距離特征的優(yōu)點(diǎn)。


          03 從宏觀視角看Transformer


          1.   Transformer的組成


          圖3 從宏觀視角看Transformer


          拿翻譯系統(tǒng)舉例,我們輸入一種語言,通過Transformer模型,輸出是另外一種語言。


          進(jìn)一步剖析Transformer模型,主要有編碼組件和解碼組件組成。編碼組件中包含很多個(gè)編碼器,解碼組件也包含很多個(gè)解碼器。


          2.   編碼器和解碼器結(jié)構(gòu)

          圖4 編碼器和解碼器結(jié)構(gòu)


          編碼器主要包含自注意力層(Self-Attention)和前饋神經(jīng)網(wǎng)絡(luò)層(Feed Forward Neural Network)。


          解碼器和編碼器很相似,也包含自注意力層和前饋神經(jīng)網(wǎng)絡(luò)層,另外還有一層編碼解碼層(Encoder-Decoder Attention)。


          小結(jié)下,我們從宏觀視角了解了Transformer的結(jié)構(gòu)。Transformer主要包含編碼組件和解碼組件,編碼組件中又包含很多編碼器,解碼組件同理。編碼器中主要有自注意力層和前向神經(jīng)網(wǎng)絡(luò)層,解碼器相比于編碼器多了編碼解碼層??傮w來說還是比較容易理解。


          04 從微觀視角看Transformer


          1. 從張量計(jì)算查看Transformer內(nèi)部轉(zhuǎn)化流程

          大部分NLP任務(wù)首先需要將語料轉(zhuǎn)化成詞向量的表征形式x。


          對于編碼組件來說,底層的編碼器作為整個(gè)Transformer的入口,接收詞向量作為模型輸入。


          這里咱們通過具體輸入輸出的維度表示來方便小伙伴們更好的理解Transformer中的各個(gè)環(huán)節(jié)。我們假設(shè)詞向量的維度為512維。這里的512是可以設(shè)置的參數(shù),一般是訓(xùn)練集中最長句子的長度。


          因?yàn)榫幋a組件中所有編碼器的輸入維度是相同的,初始的詞向量是1X512維,那么底層的編碼器的輸入是1X512維,所以其他的編碼器的輸入也是1X512維。編碼器內(nèi)部會(huì)依次經(jīng)過自注意力層和前饋神經(jīng)網(wǎng)絡(luò)層。


          低層編碼器的輸出會(huì)作為上一層編碼器的輸入,不斷進(jìn)行,直到穿過整個(gè)編碼組件。比如圖5中編碼器1的輸入是詞向量,編碼器2的輸入是編碼器1的輸出。編碼器內(nèi)部轉(zhuǎn)化流程和編碼器之間的轉(zhuǎn)化流程如下圖所示:

          圖5 編碼器內(nèi)部以及之間的轉(zhuǎn)化流程

           

          2. 查看自注意力層的計(jì)算流程

          Transformer中最重要的就是這個(gè)自注意力機(jī)制Self-Attention。Self-Attention主要用于計(jì)算當(dāng)前詞對所有詞的注意力得分,整個(gè)流程如下:


          圖6 計(jì)算注意力得分整個(gè)流程


          這里通過計(jì)算詞"thinking"的注意力得分舉例,詳細(xì)分析步驟如下:

          (1) 將編碼器的輸入x轉(zhuǎn)化成三個(gè)向量

          通過詞向量x(1X512)和三個(gè)不同的權(quán)值矩陣????、????????相乘得到查詢向量Q(1X64)、鍵向量K(1X64)和值向量V(1X64)。


          小伙伴們可能有疑問了,這三個(gè)權(quán)值矩陣怎么得到的?


          模型剛開始訓(xùn)練的時(shí)候,這三個(gè)權(quán)值矩陣參數(shù)可能是隨機(jī)的。等模型訓(xùn)練完成之后,就得到訓(xùn)練好的權(quán)值矩陣的參數(shù)了。這三個(gè)權(quán)重矩陣的維度都是512X64維。

           

          其中512是因?yàn)橐婚_始我們設(shè)置詞向量的維度是1X512,那64怎么來的?這里涉及到Transformer的多頭注意力機(jī)制,先埋個(gè)坑,后面填。

           

          (2) 計(jì)算當(dāng)前詞對所有詞的注意力得分

          比如我們計(jì)算"thinking"的注意力得分。將"thinking"的查詢向量q1分別和所有詞的ki點(diǎn)積相乘得到一個(gè)得分score。這個(gè)得分代表當(dāng)前詞對其他詞的注意力。


          (3) score歸一化和softmax函數(shù)映射

          使用score歸一化的目的是為了梯度穩(wěn)定,分別將score除以鍵向量維度的算術(shù)平方根(論文中默認(rèn)為8)。然后通過一個(gè)softmax函數(shù)將得分映射為0-1之間的實(shí)數(shù),并且歸一化保證和為1。


          (4) 計(jì)算最終的注意力得分

          計(jì)算softmax值和值向量v1相乘得到加權(quán)向量,然后求和得到z1為最終的自注意力向量值。目的是保持相關(guān)詞的完整性,同時(shí)可以將數(shù)值極小的不相關(guān)的詞刪除。

           

          上述整個(gè)流程就是通過張量計(jì)算展示自注意力層是如何計(jì)算注意力得分的。整體公式如下所示:

          3. 多頭注意力機(jī)制


          多頭注意力機(jī)制相當(dāng)于多個(gè)不同的注意力的集成(ensemble)。更通俗的理解是將上面Attention層“重復(fù)多次“,但是這里不僅僅是簡單的重復(fù)多次。

           

          多頭注意力機(jī)制主要從以下兩個(gè)方面進(jìn)一步完善注意力層:

          • 提升了模型對不同位置的注意力。通過多頭注意力機(jī)制,不同的頭關(guān)注的點(diǎn)是不同的。比如有的頭關(guān)注的是近距離的詞,而有些頭則是關(guān)注的更遠(yuǎn)的距離的詞

          • 給注意力層多個(gè)表示子空間。使用多頭注意力機(jī)制我們就能得到多個(gè)查詢/鍵/值的權(quán)重向量矩陣。

           

          Transformer默認(rèn)使用8個(gè)注意力頭。這樣每個(gè)編碼器就能得到8個(gè)矩陣。論文默認(rèn)使用的是8個(gè)頭,可調(diào)。

           

          因?yàn)槊總€(gè)初始的權(quán)重矩陣都是隨機(jī)初始化的,所以經(jīng)過模型訓(xùn)練之后將被投影到不同的表示子空間中。多頭注意力機(jī)制如下圖所示:

           

          圖8 多頭注意力機(jī)制


          下面通過可視化的方式查看多頭注意力機(jī)制:

          圖9 多頭注意力機(jī)制可視化

           

          圖9中分別有兩個(gè)頭head1和head2,通過是否有連線以及顏色深淺我們可以查看當(dāng)前詞對所有詞的注意力得分。head1得到的注意力矩陣更多的關(guān)注距離較遠(yuǎn)的詞,head2則關(guān)注的是距離較近的詞。可以看出不同的頭關(guān)注的點(diǎn)是不同的。

           

          現(xiàn)在出現(xiàn)一個(gè)新的問題:編碼器中從自注意力層到前饋神經(jīng)網(wǎng)絡(luò)層過程中,前饋神經(jīng)網(wǎng)絡(luò)僅需要一個(gè)矩陣?,F(xiàn)在因?yàn)槎囝^注意力機(jī)制,出現(xiàn)了八個(gè)頭。如何將這八個(gè)頭壓縮成一個(gè)頭?

           
          Transformer的解決策略是先將8個(gè)矩陣拼接起來,然后再和一個(gè)附加的權(quán)重矩陣W0相乘。這里可以簡單的理解成通過一個(gè)全連接層來轉(zhuǎn)化輸出維度。其中權(quán)重矩陣W0和前面講的權(quán)值矩陣Q、K、V都是通過模型訓(xùn)練得到的。


          圖10 多頭注意力機(jī)制合并多頭策略


          查看維度,比如z1是1X64,那么8個(gè)矩陣拼接起來就是1X(64*8)變成了1X512維。

           

          這個(gè)額外的權(quán)值矩陣W0的維度是512X512,這樣通過多頭機(jī)制的自注意力層最終得到的矩陣維度就是1X512了。通過前饋神經(jīng)網(wǎng)絡(luò)之后還是1X512維,那么編碼器的輸入和輸出則都是1X512維。

           

          到這里為止,我們可以把前面的坑埋上了。為什么我們的Q、K、V權(quán)重矩陣的維度是512X64。512是因?yàn)樵~向量的維度是512維,而64就是因?yàn)檎撐闹心J(rèn)使用的是八頭注意力機(jī)制。將8個(gè)頭的注意力矩陣壓縮成一個(gè),所以這里是64維。


          總結(jié)下多頭注意力機(jī)制的整個(gè)流程:首先輸入原始的語句;然后轉(zhuǎn)化為詞向量的矩陣形式;接著通過多頭注意力得到多個(gè)查詢/鍵/值向量;然后按照上面計(jì)算注意力的過程分別計(jì)算注意力矩陣;最后將多頭注意力矩陣壓縮為一個(gè)矩陣。大功告成!多頭注意力機(jī)制整個(gè)流程如下圖所示:



          圖11 多頭注意力機(jī)制整個(gè)流程


          4. 位置編碼

          上述流程中缺少詞位置的信息,導(dǎo)致的結(jié)果就是無論句子結(jié)構(gòu)怎么打亂,Transformer得到的結(jié)果類似。也就是說,Transformer并沒有捕捉順序序列的能力,僅僅是一個(gè)功能強(qiáng)大的“詞袋”模型。

           

          為了解決這個(gè)問題,Transformer為每個(gè)詞向量增加了一個(gè)表征詞位置以及詞之間距離的向量。這樣計(jì)算自注意力的時(shí)候模型就會(huì)加入有用的位置信息了。

           

          圖12 位置編碼


          下面是論文中關(guān)于計(jì)算位置編碼的公式:

          其中pos代表單詞的位置,i表示詞的維度。

          生成位置編碼的代碼在google開源的算法get_timing_signal_1d()函數(shù)中

           

          作者這么設(shè)計(jì)的原因是,在NLP任務(wù)中詞的絕對位置很重要(比如通常一篇文章中首尾段落可能包含更多的信息),詞的相對位置也很重要。通過上述公式可以體現(xiàn)Transformer更加關(guān)注相對位置。


          5. 殘差模塊

          編碼器內(nèi)部子層還采用殘差網(wǎng)絡(luò),主要是為了解決深度學(xué)習(xí)中的退化問題。每個(gè)子層之后都連接一個(gè)殘差網(wǎng)絡(luò),進(jìn)行求和歸一化步驟。比如自注意力層后的殘差網(wǎng)絡(luò)會(huì)將自注意力層的輸入x和輸出z相加,然后進(jìn)行normalize歸一化。


          編碼器內(nèi)部的殘差網(wǎng)絡(luò)和可視化如下圖:

          13 殘差模塊


          6. Attention可視化

          圖14 Attention可視化


          圖14通過一個(gè)簡單的例子看下Attention機(jī)制有多強(qiáng)大?,F(xiàn)在我們想翻譯一句話:"The animaldidn’t cross the street, because it was toot tired"。

           

          我們想知道"it"到底是啥意思?對于人類而言,我們很容易知道"it"代表上面的"animal"(在一些復(fù)雜的段落中可能對于我們?nèi)祟愐彩呛茈y的任務(wù),類比小時(shí)候英語試題中某些完形填空題)。對于機(jī)器來說,完全就是下面這個(gè)黑人小哥的表情了。


           

          Attention機(jī)制可以很好的理解"it"并找到最可能代表"it"的這個(gè)詞"animal"。圖中有兩個(gè)表示注意力矩陣的可視化圖,每個(gè)可視化圖表示的是上面一行的每個(gè)詞對下面一行所有詞的注意力,有連線則表示當(dāng)前詞對其他詞有關(guān)注,線的顏色越深則代表關(guān)注度越高??梢钥闯霎?dāng)前詞"it"同時(shí)對"the"、" animal"、" street"、"it"和句號(hào)都有關(guān)注度,但是對"animal"的關(guān)注度是最高的,所以"it"詞最終就代表"animal"。


          有意思的是,如果我們修改語句,將其中的"tired"改成"wide",奇跡出了,Attention能很好的識(shí)別到"it"代表的是"street"。


          下圖展示一個(gè)完整的雙層編碼-解碼器的Transformer結(jié)構(gòu):

          圖15 一個(gè)完整的雙層編碼-解碼器的Transformer結(jié)構(gòu)


          解碼器和編碼器大致相同,區(qū)別在于解碼器中多了一層編碼解碼層(encoder-decoderAttention)。編碼組件的輸入是詞向量,輸出是最頂層的編碼器輸出的K、V注意力向量集。這些K、V注意力向量集會(huì)分別進(jìn)入解碼組件中各個(gè)解碼器的編碼解碼層。解碼器中其他的自注意力層和前向神經(jīng)網(wǎng)絡(luò)層和編碼器是一樣的。


          編碼器和解碼器工作流程動(dòng)圖如下所示:

          圖16 編碼器和解碼器整個(gè)流程動(dòng)圖


          這里需要注意的是解碼器第一輪的輸入是一個(gè)特殊的開始標(biāo)志符號(hào),使用編碼組件輸出的K、V注意力向量集,輸出是需要翻譯的第一個(gè)詞。


          整個(gè)德語翻譯成英語流程動(dòng)圖如下所示:

          圖17 整個(gè)德語翻譯成英語流程動(dòng)圖

           

          咱們詳細(xì)講解下德語翻譯成英語的流程:編碼流程上面講的很詳細(xì),不再贅述。編碼組件完成編碼后,會(huì)將得到的K、V注意力向量集合分別傳遞給解碼組件中各個(gè)解碼器的編碼解碼層。

           

          解碼階段開始,第一輪輸入是一個(gè)特殊的開始符號(hào),使用編碼組件輸出的K和V注意力向量集合,輸出是翻譯的第一個(gè)單詞。第二輪的輸入是第一輪輸出的單詞,輸出翻譯的第二個(gè)單詞。第三輪的輸入是前兩輪輸出的單詞,輸出翻譯的第三個(gè)單詞。依次類推,每次輸入都是之前輸出的所有單詞,輸出是翻譯的一個(gè)單詞。直到出現(xiàn)一個(gè)特殊的結(jié)束符號(hào)告訴Transformer解碼器已經(jīng)完成輸出。

           

          當(dāng)時(shí)分享的時(shí)候有個(gè)小伙伴問了一個(gè)問題,Transformer如何做到神奇的完成翻譯流程并且知道何時(shí)停止?這里我理解翻譯任務(wù)應(yīng)該是一個(gè)多詞對多詞的流程,和通常的輸入輸出長度相同的S2S可能不同。這里的輸入和輸出長度是不同的,翻譯流程應(yīng)該是分成兩步,先找到目標(biāo)語言需要的所有詞,然后選擇最符合人類表達(dá)方式的順序輸出。因?yàn)闆]有做過翻譯系統(tǒng),所以這里僅是猜測。


          有點(diǎn)小遺憾,本來圖16和圖17是動(dòng)圖,但是不管咋弄到上面就成靜態(tài)的。求助小伙伴如何在微信公眾號(hào)插入動(dòng)圖的。

           

          總結(jié)


          本篇從宏觀和微觀視角講了下Transformer,重頭戲在Attention機(jī)制。因?yàn)門ransformer具備并行性好和適合捕捉長距離特征的優(yōu)點(diǎn),所以成為NLP中主流的特征抽取器,從配角慢慢C位出道。BERT模型大火的背后則是Transformer的高調(diào)付出??梢哉f想學(xué)好BERT,必須要搞懂Transformer。


          參考資料


          [1] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need [C],Advancesin Neural   Information ProcessingSystems. 2017: 5998-6008.

          [2] http://jalammar.github.io/illustrated-Transformer/

          [3] https://www.youtube.com/watch?v=ugWDIIOHtPA,臺(tái)大李宏毅,Transformer

          [4] https://ai.googleblog.com/2017/08/Transformer-novel-neural-network.html

          [5] https://colab.research.google.com/github/tensorflow/tensor2tensor/blob/

              master/tensor2tensor/notebooks/hello_t2t.ipynb#scrollTo=EB4MP7_y_SuQ


          特別說明:本次分享主要參考的是《Attention is all you need》論文。因?yàn)檎撐谋容^高深難懂,所以僅通過論文不能很好的理解其中的精華。幸好國外有篇jalammar大神分享的可視化Transformer文章。深度好文,點(diǎn)贊!喜歡的朋友也可以直接通過參考資料[2]欣賞大作。這里也參考了臺(tái)大李宏毅關(guān)于Transformer的講解。有興趣的小伙伴可以通過B站查看。

           

          回顧下廣告系列


          廣告中那些趣事系列1:廣告統(tǒng)一興趣建模流程

          廣告行業(yè)中那些趣事系列2:BERT實(shí)戰(zhàn)NLP文本分類任務(wù)(附github源碼)

          廣告行業(yè)中那些趣事系列3:NLP中的巨星BERT

           

          喜歡本類型文章的小伙伴可以關(guān)注我的微信公眾號(hào):數(shù)據(jù)拾光者。有任何干貨我會(huì)首先發(fā)布在微信公眾號(hào),還會(huì)同步在知乎、頭條、簡書、csdn等平臺(tái)。也歡迎小伙伴多交流。如果有問題,可以在微信公眾號(hào)隨時(shí)Q我哈。


          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  黄色视频在线观看地址 | 亚洲日韩黄色电影 | 免费一级A毛片 | 黄色做爱日本动漫网站 | 黄大色黄女片18免费 |