博客專欄

        EEPW首頁 > 博客 > Transformer的細節到底是怎么樣的?Transformer 18問?。?)

        Transformer的細節到底是怎么樣的?Transformer 18問?。?)

        發布人:數據派THU 時間:2023-07-19 來源:工程師 發布文章
        來源丨知乎

        作者丨愛問問題的王宸@知乎

        為什么想通過十八個問題的方式總結Transformer?

        有兩點原因:

        第一,Transformer是既MLP、RNN、CNN之后的第四大特征提取器,也被稱為第四大基礎模型;最近爆火的chatGPT,其最底層原理也是Transformer,Transformer的重要性可見一斑。

        第二,希望通過問問題這種方式,更好的幫助大家理解Transformer的內容和原理。

        1.2017年深度學習領域的重大突破是什么?

        Transformer。有兩方面的原因:

        1.1 一方面,Transformer是深度學習領域既MLP、RNN、CNN之后的第4大特征提取器(也被稱為基礎模型)。什么是特征提取器?大腦是人與外部世界(圖像、文字、語音等)交互的方式;特征提取器是計算機為了模仿大腦,與外部世界(圖像、文字、語音等)交互的方式,如圖1所示。舉例而言:Imagenet數據集中包含1000類圖像,人們已經根據自己的經驗把這一百萬張圖像分好1000類,每一類圖像(如美洲豹)都有獨特的特征。這時,神經網絡(如ResNet18)也是想通過這種分類的方式,把每一類圖像的特有特征盡可能提取或識別出來。分類不是最終目的,而是一種提取圖像特征的手段,掩碼補全圖像也是一種提取特征的方式,圖像塊順序打亂也是一種提取特征的方式。

        圖片圖1 神經網絡為了模仿大腦中的神經元
        1.2 另一方面,Transformer在深度學習領域扮演的角色:第3次和第4次熱潮的基石,如下圖2所示。
        圖片圖2 深度學習發展的4個階段
        2. Transformer的提出背景是什么?


        2.1 在領域發展背景層面:當時時處2017年,深度學習在計算機視覺領域火了已經幾年。從Alexnet、VGG、GoogLenet、ResNet、DenseNet;從圖像分類、目標檢測再到語義分割;但在自然語言處理領域并沒有引起很大反響。

        2.2 技術背景層面:(1)當時主流的序列轉錄任務(如機器翻譯)的解決方案如下圖3所示,在Sequence to Sequence架構下(Encoder- Decoder的一種),RNN來提取特征,Attention機制將Encoder提取到的特征高效傳遞給Decoder。(2)這種做法有兩個不足之處,一方面是在提取特征時的RNN天生從前向后時序傳遞的結構決定了其無法并行運算,其次是當序列長度過長時,最前面序列的信息有可能被遺忘掉。因此可以看到,在這個框架下,RNN是相對薄弱急需改進的地方。

        圖片圖3 序列轉錄任務的主流解決方案
        3. Transformer到底是什么?

        3.1 Transformer是一種由Encoder和Decoder組成的架構。那么什么是架構呢?最簡單的架構就是A+B+C。

        3.2 Transformer也可以理解為一個函數,輸入是“我愛學習”,輸出是“I love study”。

        3.3 如果把Transformer的架構進行分拆,如圖4所示。

        圖片圖4 Transformer的架構圖
        4. 什么是Transformer Encoder?


        4.1 從功能角度,Transformer Encoder的核心作用是提取特征,也有使用Transformer Decoder來提取特征。例如,一個人學習跳舞,Encoder是看別人是如何跳舞的,Decoder是將學習到的經驗和記憶,展現出來

        4.2 從結構角度,如圖5所示,Transformer Encoder = Embedding + Positional Embedding + N*(子Encoder block1 + 子Encoder block2);

        子Encoder block1 = Multi head attention + ADD + Norm;

        子Encoder block2 = Feed Forward + ADD + Norm;

        4.3 從輸入輸出角度,N個Transformer Encoder block中的第一個Encoder block的輸入為一組向量 X = (Embedding + Positional Embedding),向量維度通常為512*512,其他N個TransformerEncoder block的輸入為上一個 Transformer Encoder block的輸出,輸出向量的維度也為512*512(輸入輸出大小相同)。

        4.4 為什么是512*512?前者是指token的個數,如“我愛學習”是4個token,這里設置為512是為了囊括不同的序列長度,不夠時padding。后者是指每一個token生成的向量維度,也就是每一個token使用一個序列長度為512的向量表示。人們常說,Transformer不能超過512,否則硬件很難支撐;其實512是指前者,也就是token的個數,因為每一個token要做self attention操作;但是后者的512不宜過大,否則計算起來也很慢。

        圖片圖5 Transformer Encoder的架構圖
        5. 什么是Transformer Decoder?

        5.1 從功能角度,相比于Transformer Encoder,Transformer Decoder更擅長做生成式任務,尤其對于自然語言處理問題。

        5.2 從結構角度,如圖6所示,Transformer Decoder = Embedding + Positional Embedding + N*(子Decoder block1 + 子Decoder block2 + 子Decoder block3)+ Linear + Softmax;

        子Decoder block1 = Mask Multi head attention + ADD + Norm;子Decoder block2 = Multi head attention + ADD + Norm;子Decoder block3 = Feed Forward + ADD + Norm;
        圖片圖6 Transformer Decoder的架構圖

        5.3 從(Embedding+Positional Embedding)(N個Decoder block)(Linear + softmax) 這三個每一個單獨作用角度:

        Embedding + Positional Embedding :以機器翻譯為例,輸入“Machine Learning”,輸出“機器學習”;這里的Embedding是把“機器學習”也轉化成向量的形式。

        N個Decoder block:特征處理和傳遞過程。

        Linear + softmax:softmax是預測下一個詞出現的概率,如圖7所示,前面的Linear層類似于分類網絡(ResNet18)最后分類層前接的MLP層。

        圖片圖7 Transformer Decoder 中softmax的作用
        5.4 Transformer Decoder的輸入、輸出是什么?在Train和Test時是不同的。在Train階段,如圖8所示。這時是知道label的,decoder的第一個輸入是begin字符,輸出第一個向量與label中第一個字符使用cross entropy loss。Decoder的第二個輸入是第一個向量的label,Decoder的第N個輸入對應的輸出是End字符,到此結束。這里也可以看到,在Train階段是可以進行并行訓練的。
        圖片圖8 Transformer Decoder在訓練階段的輸入和輸出
        在Test階段,下一個時刻的輸入時是前一個時刻的輸出,如圖9所示。因此,Train和Test時候,Decoder的輸入會出現Mismatch,在Test時候確實有可能會出現一步錯,步步錯的情況。有兩種解決方案:一種是train時偶爾給一些錯誤,另一種是Scheduled sampling。
        圖片圖9 Transformer Decoder在Test階段的輸入和輸出
        5.5 Transformer Decoder block內部的輸出和輸出是什么?
        前面提到的是在整體train和test階段,Decoder的輸出和輸出,那么Transformer Decoder內部的Transformer Decoder block,如圖10所示,的輸入輸出又是什么呢?
        圖片圖10 Transformer Decoder block的架構圖

        對于N=6中的第1次循環(N=1時):子Decoder block1 的輸入是 embedding +Positional Embedding,子Decoder block2 的輸入的Q來自子Decoder block1的輸出,KV來自Transformer Encoder最后一層的輸出。

        對于N=6的第2次循環:子Decoder block1的輸入是N=1時,子Decoder block3的輸出,KV同樣來自Transformer Encoder的最后一層的輸出。

        總的來說,可以看到,無論在Train還是Test時,Transformer Decoder的輸入不僅來自(ground truth或者上一個時刻Decoder的輸出),還來自Transformer Encoder的最后一層。

        訓練時:第i個decoder的輸入 = encoder輸出 + ground truth embedding。

        預測時:第i個decoder的輸入 = encoder輸出 + 第(i-1)個decoder輸出.


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 稷山县| 沂源县| 乐昌市| 新闻| 霍林郭勒市| 娄烦县| 洛宁县| 潼南县| 花莲县| 赤城县| 洪湖市| 湖州市| 哈尔滨市| 松潘县| 上林县| 亳州市| 苍南县| 黄龙县| 永安市| 赞皇县| 开江县| 夏邑县| 长汀县| 同仁县| 阳朔县| 古交市| 吉安县| 杂多县| 临江市| 沙坪坝区| 江都市| 正阳县| 凤冈县| 交城县| 南和县| 寿阳县| 法库县| 荆门市| 广东省| 广丰县| 宜春市|