<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

          共 5182字,需瀏覽 11分鐘

           ·

          2021-11-11 13:32

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

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

          目錄:
          • 背景知識(shí)

          • 高層次理解

          • 通過(guò)實(shí)例來(lái)理解Tensor

            • Encoding

          • 高層次理解Self-Attention

            • Self-Attention的細(xì)節(jié)

            • Self-Attention矩陣乘法

            • Multi-headed完善

            • 整體過(guò)程

          • 使用位置編碼

            • 編碼規(guī)則

          • 殘差神經(jīng)網(wǎng)絡(luò) Residuals

          • Decoder

          • Linear 和 Softmax層

          • 回顧訓(xùn)練過(guò)程

            • LossFunction

            • TargetModel Outputs

            • TrainedModel Outputs

          一、背景知識(shí)


          • Transformer是Google 的論文 Attention is All You Need中提出

          • Google開(kāi)源了一個(gè)基于TensorFlow的 Tensor2Tensor的第三方庫(kù)

          • 哈佛大學(xué)用PyTorch 對(duì) 這篇文章進(jìn)行了深度解讀:http://nlp.seas.harvard.edu/2018/04/03/attention.html

          ?

          二、高層次理解

          首先將Transformer理解成一個(gè)黑盒子,黑盒子的功能是翻譯,你輸入一個(gè)語(yǔ)句,它對(duì)你的輸入進(jìn)行翻譯操作。

          ? ? ?

          ? ? ? ?

          ? ? ?


          黑盒子可以進(jìn)行展開(kāi),由兩部分組成:Encoders和Decoders

          ? ? ? ? ? ? ?

          對(duì)黑盒子進(jìn)一步細(xì)化,可以發(fā)現(xiàn)由6個(gè)Encoder和6個(gè)Decoder組成

          ? ? ? ? ? ? ?

          對(duì)于每一個(gè)Encoder,他們結(jié)構(gòu)都是相同的,但是權(quán)值不共享。每一層都包括兩部分:自監(jiān)督+全連接

          ? ? ? ? ? ? ?

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

          Decoder部分也有相同的層級(jí)結(jié)構(gòu),但是中間多了一個(gè)Encoder-Decoder-Attention層,幫助專注于對(duì)應(yīng)的那個(gè)語(yǔ)句。(與Seq2Seq模型類似)

          ? ? ? ? ? ? ?

          三、通過(guò)實(shí)例來(lái)理解Tensor

          首先做一個(gè)embedding使得輸入的單詞成為向量,具體可看這篇博客:

          https://blog.csdn.net/qq_41664845/article/details/84313419

          ? ? ? ? ? ? ?

          列表的大小和詞向量的維度大小都是可以設(shè)置的超參數(shù),一般設(shè)置訓(xùn)練數(shù)據(jù)集中最長(zhǎng)的句子的長(zhǎng)度。這個(gè)例子是把每個(gè)單詞編碼為512維的向量。

          ? ? ? ? ? ? ?

          可以觀察到,x1,x2,x3輸入后通過(guò)self-attention,分別得到了z1,z2,z3,這點(diǎn)就要注意,其實(shí)z1,z2,z3這3個(gè)是通過(guò)x1,x2,x3一起合作產(chǎn)生的。

          Encoding

          每一個(gè)Encoder接收一個(gè)512維的向量x作為輸入,然后傳遞Self-Attention,產(chǎn)生一個(gè)等量的512維的z,再經(jīng)過(guò)全連接神經(jīng)網(wǎng)絡(luò),輸出的r也是512維,然后傳遞給下一個(gè)encoder

          ? ? ? ? ? ? ?

          注意,前饋神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)其實(shí)是一致的

          ? ? ?

          四、高層次理解Self-Attention

          假如輸入:

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

          這句話

          那么句子中的“it”如何和“animal”關(guān)聯(lián)起來(lái)?

          ? ? ? ? ? ? ?

          Self-Attention的細(xì)節(jié)

          第一步:Q,K,V計(jì)算

          對(duì)于每個(gè)單詞,我們創(chuàng)建一個(gè)Query向量,一個(gè)Key向量和一個(gè)Value向量。這些向量是通過(guò)詞嵌入乘以我們訓(xùn)練過(guò)程中創(chuàng)建的3個(gè)訓(xùn)練矩陣而產(chǎn)生的。

          輸入的向量維度是512維,新向量的維度64維。新向量的維度通過(guò)實(shí)際情況自己確定。

          ? ? ? ? ? ? ?

          Multiplying?x1?by the?WQ?weight matrix produces?q1 ? ? ? ? ? ? ?

          第二步:點(diǎn)乘

          ? ? ? ? ? ? ?

          q1和k1點(diǎn)乘,q1和k2點(diǎn)乘,注意!!!是q1和k2!看清楚,不是q2

          第三步、第四步:

          將點(diǎn)乘的結(jié)果除以sqrt(dk)。這個(gè)里面向量是64,開(kāi)方是8,那么就是除以8

          然后進(jìn)行Softmax的操作

          ? ? ? ? ? ? ?

          Softmax的操作得到的分?jǐn)?shù),就是當(dāng)前單詞在每個(gè)句子中每個(gè)單位位置的表示程度。

          第五步、第六步:

          將Values和Softmax的值相乘得到v1,v2,對(duì)當(dāng)前詞的關(guān)注度不變,對(duì)不相關(guān)的的進(jìn)行降低。

          累加加權(quán)的向量得到z1

          ? ? ? ? ? ? ?

          Self-Attention矩陣乘法

          ? ?第一步是去計(jì)算Query,Key和Value矩陣。X是x1和x2一起轉(zhuǎn)化為的矩陣。

          ? ? ? ? ? ? ?

          然后一下子就操作得到后面的Z

          ? ? ? ? ? ? ?

          Multi-headed 完善

          • 擴(kuò)展了模型關(guān)注不同位置的能力

          • 提供投影到不同的子空間subspace

          ? ? ? ? ? ? ?

          通過(guò)multi-headed attention,我們?yōu)槊總€(gè)“header”都獨(dú)立維護(hù)一套Q/K/V的權(quán)值矩陣。

          使用8個(gè)時(shí)間點(diǎn)去計(jì)算權(quán)值矩陣,得到8個(gè)不同的矩陣z

          ? ? ? ? ? ? ?

          把這8個(gè)矩陣鏈接在一起,然后再與矩陣Wo相乘

          ? ? ? ? ? ? ?

          整體過(guò)程

          ? ? ? ? ? ? ?

          我們隨意找兩個(gè)不同的attention header的情況(8列,取下下圖的2,3列),看一下關(guān)注點(diǎn)會(huì)有什么區(qū)別

          ? ? ? ? ? ? ?

          這兩個(gè)時(shí)間戳上面,發(fā)現(xiàn)it最關(guān)注兩個(gè):animal和tire

          將所有注意力都添加到圖片上,可能不那么容易理解其中含義

          ? ? ? ? ? ? ?

          、使用位置編碼

          輸入序列還要考慮單詞的順序的問(wèn)題

          transformer為每個(gè)輸入單詞的詞嵌入了一個(gè)新的位置向量。

          ? ? ? ? ? ? ?

          為了讓模型知道單詞的順序信息,將位置編碼的向量信息直接進(jìn)行規(guī)則產(chǎn)生

          比如嵌入的維度是4,實(shí)際編碼效果如下:

          ? ? ? ? ? ? ?

          編碼規(guī)則

          ? ? ? ? ? ? ?

          ? ? ? ? ? ? ?

          比如20個(gè)單詞,每個(gè)單詞編碼為512維度。

          一共20行,那么每一行就表示一個(gè)詞向量,包含512個(gè)值,每個(gè)值在-1到1之間。可視化顯示:

          ? ? ? ? ? ? ?

          中心位置一分為2,主要是一半是正弦生成,一半是余弦生成。

          對(duì)上述的Transformer2Transformer有細(xì)微改變顯示的話:

          ? ? ? ? ? ? ?

          import numpy as npimport matplotlib.pyplot as plt

          # https://github.com/jalammar/jalammar.github.io/blob/master/notebookes/transformer/transformer_positional_encoding_graph.ipynb# Code from https://www.tensorflow.org/tutorials/text/transformerdef get_angles(pos, i, d_model): angle_rates = 1 / np.power(10000, (2 * (i//2)) / np.float32(d_model)) return pos * angle_ratesdef positional_encoding(position, d_model): angle_rads = get_angles(np.arange(position)[:, np.newaxis], np.arange(d_model)[np.newaxis, :], d_model) # apply sin to even indices in the array; 2i angle_rads[:, 0::2] = np.sin(angle_rads[:, 0::2]) # apply cos to odd indices in the array; 2i+1 angle_rads[:, 1::2] = np.cos(angle_rads[:, 1::2]) pos_encoding = angle_rads[np.newaxis, ...] return pos_encoding tokens = 10dimensions = 64pos_encoding = positional_encoding(tokens, dimensions)print (pos_encoding.shape)plt.figure(figsize=(12,8))plt.pcolormesh(pos_encoding[0], cmap='viridis')plt.xlabel('Embedding Dimensions')plt.xlim((0, dimensions))plt.ylim((tokens,0))plt.ylabel('Token Position')plt.colorbar()plt.show()

          ?

          六、殘差神經(jīng)網(wǎng)絡(luò) Residuals


          layer-normalization步驟 ? ? ? ? ? ? ?

          ? ? ? ? ? ? ?

          ?

          ?

          ? ? ? ? ? ? ?

          進(jìn)一步可視化

          ? ? ? ? ? ? ?

          Decoder部分和這個(gè)是同樣的。我們堆疊了2個(gè)Encoder和2個(gè)Decoder

          ? ? ? ? ? ? ?

          七、Decoder


          Encoder將其轉(zhuǎn)化為一組attention的集合(K,V)

          ? ? ? ? ? ? ?

          八、Linear 和 Softmax層


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

          假設(shè)實(shí)驗(yàn)?zāi)P偷恼Z(yǔ)料庫(kù)一共1萬(wàn)個(gè)英語(yǔ)單詞,那么Logits的矢量表示1萬(wàn)個(gè)小格子,每個(gè)小格子就表示了一個(gè)單詞。

          線性層之后是一個(gè)Softmax層,Softmax層可以通過(guò)轉(zhuǎn)換將分?jǐn)?shù)轉(zhuǎn)換為概率,選取概率最高的作為索引,然后通過(guò)索引找到單詞作為輸出

          ? ? ? ? ? ? ?

          九、回顧訓(xùn)練過(guò)程

          假設(shè)輸出的詞匯只有“a”、“am”、“I”、“thanks”、“student”、“結(jié)束符號(hào)”

          ? ? ? ? ? ? ?

          一旦確定了輸出的詞匯表,就可以使用相同寬度的向量來(lái)表示詞匯表中的單詞,稱為one-hot編碼

          舉例子以句子中的“am”為例子,one-hot編碼

          ? ? ? ? ? ? ?

          Loss Function

          模型的參數(shù)權(quán)重是隨機(jī)初始化的

          ? ? ? ? ? ? ?

          實(shí)際上做一個(gè)簡(jiǎn)單的減法就行

          Target Model Outputs

          ? ? ? ? ? ? ?

          Trained Model Outputs

          ? ? ? ? ? ? ?

          雖然沒(méi)有那么準(zhǔn)確,但是通過(guò)比較可以找到最大的概率值


          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

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

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

          交流群


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


          瀏覽 57
          點(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>
                  欧美成人三级在线 | 91天天综合 | 美女裸体网站91 | 夜夜躁日日躁狠狠久久AV | 伊人成人激情 |