久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    ##學習 | 超詳細逐步圖解 Transformer

     漢無為 2021-11-10

    2.1 總體結構



    2.2.1 Embedding層

    Transformer模型中缺少一種解釋輸入序列中單詞「順序」的方法,它跟序列模型還不一樣。為了處理這個問題,Transformer給Encoder層和Decoder層的輸入添加了一個額外的向量「Positional Encoding」,維度和embedding的維度一樣。這個位置向量的具體計算方法有很多種,論文中的計算方法如下:


    所以,最終一個詞的embedding,就是它的語義信息embedding(預訓練模型查表)+序列信息embedding (positional encoding):

    圖片

    2.2.2 Self-attention層

    讓我們從宏觀視角看自注意力機制,精煉一下它的工作原理。

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

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

    這個“it”在這個句子是指什么呢?它指的是street還是這個animal呢?這對于人類來說是一個簡單的問題,但是對于算法則不是。

    當模型處理這個單詞“it”的時候,自注意力機制會允許“it”與“animal”建立聯系。

    隨著模型處理輸入序列的每個單詞,自注意力會「關注整個輸入序列的所有單詞」,幫助模型對本單詞「更好地進行編碼(embedding)」。

    圖片

    如上圖所示,當我們在編碼器#5(棧中最上層編碼器)中編碼“it”這個單詞的時,注意力機制的部分會去關注“The Animal”,將它的表示的一部分編入“it”的編碼中。接下來我們看一下Self-Attention詳細的處理過程。

    「step1:」 首先,對于輸入序列的每個單詞,它都有三個向量編碼,分別為:Query、Key、Value。這三個向量是用embedding向量與三個矩陣( )相乘得到的結果。這三個矩陣的值在BP的過程中會一直進行更新。

    「step2:」 第二步計算Self-Attention的分數值,該分數值決定了當我們在某個位置encode一個詞時,對輸入句子的其他部分的關注程度。這個分數值的計算方法是用該詞語的Q與句子中其他詞語的Key做點乘。以下圖為例,假設我們在為這個例子中的第一個詞“Thinking”計算自注意力向量,我們需要拿輸入句子中的每個單詞對“Thinking”打分。這些分數決定了在編碼單詞“Thinking”的過程中重視句子其它部分的程度。

    圖片

    「step3:」 再對每個分數除以 (d是維度),之后做softmax。

    圖片

    「step4:」 把每個Value向量和softmax得到的值進行相乘,然后對相乘的值進行相加,得到的結果即是一個詞語的self-attention embedding值。

    圖片

    這樣,自注意力的計算就完成了。得到的向量就可以傳遞給前饋神經網絡。

    2.2.3 Multi-Headed Attention

    通過增加一種叫做'多頭'注意力('multi-headed'attention)的機制,論文進一步完善了自注意力層。

    接下來我們將看到,對于“多頭”注意力機制,我們有多個Query/Key/Value權重矩陣集 (Transformer使用八個注意力頭)。

    圖片

    現在對于每一個詞語,我們有了八個向量 ! ,它們分別由八個head產生。但是對于下一個feed-forward層,我們應該把每個詞語都用一個向量來表示。所以下一步,我們需要把這八個向量壓縮成一個向量。

    可以直接把這些矩陣拼接在一起,然后用一個附加的權重矩陣 與它們相乘:

    圖片

    這幾乎就是多頭自注意力的全部。這確實有好多矩陣,我們試著把它們集中在一個圖片中,這樣可以一眼看清。

    圖片

    既然我們已經摸到了注意力機制的這么多“頭”,那么讓我們重溫之前的例子,看看我們在例句中編碼“it”一詞時,不同的注意力“頭”集中在哪里:

    圖片

    當我們編碼“it”一詞時,一個注意力頭集中在“animal”上,而另一個則集中在“tired”上,從某種意義上說,模型對“it”一詞的表達在某種程度上是“animal”和“tired”的代表。

    2.2.4 The Residuals and Layer normalization

    在繼續進行下去之前,我們需要提到一個encoder中的細節:在每個encoder中都有一個殘差連接,并且都跟隨著一個Layer Normalization(層-歸一化)步驟。

    圖片

    如果我們去「可視化」這些向量以及這個和自注意力相關聯的layer-norm操作,那么看起來就像下面這張圖描述一樣:

    圖片

    Layer-Norm也是歸一化數據的一種方式,不過 Layer-Norm 是在每一個樣本上計算均值和方差,而不是 Batch-Norm 那種在批方向計算均值和方差!

    圖片

    2.2.5 小結

    這幾乎就是Encoder的全部。Encoder就是用來給input一個比較好的embedding,使用self-attention來使一個詞的embedding包含了上下文的信息,而不是簡單的查look-up table。Transformer使用了多層(6層)的Encoder是為了把握一些高階的信息。

    2.3 Decoder層

    2.3.1 簡介

    從更高的角度來看,Transformer的Decoder作用和普通seq2seq一樣:從<Start>開始,基于之前的Decoder輸出,以及Encoder輸出的帶注意力權重的embedding,來預測下一個詞的概率分布。

    以對話系統為例:

    「Our Input:」 “Hi how are you”
    「Transformer Output:」 “I am fine”

    圖片

    下面我們來詳細介紹Decoder的內部結構。

    圖片

    2.3.2 Masked Multi-Head Attention

    和Encoder一樣,Decoder先經過embedding+positional encoding之后得到了一個embedding,輸入到multi-head attention中。

    和前面不同的是,Decoder的self-attention層其實是「masked」 multi-head attention。mask表示掩碼,它對某些值進行掩蓋。這是為了防止Decoder在計算某個詞的attention權重時“看到”這個詞后面的詞語。

    Since the decoder is auto-regressive and generates the sequence word by word, you need to prevent it from conditioning to future tokens. For example, when computing attention scores on the word 'am', you should not have access to the word 'fine', because that word is a future word that was generated after. The word 'am' should only have access to itself and the words before it. This is true for all other words, where they can only attend to previous words.

    圖片

    「Look-head mask」 是為了使得 decoder 不能看見未來的信息。也就是對于一個序列,在 time_step 為 t 的時刻,我們的「解碼」輸出應該只能依賴于 t 時刻之前的輸出,而不能依賴 t 之后的輸出。因此我們需要想一個辦法,把 t 之后的信息給隱藏起來。

    那么具體怎么做呢?也很簡單:產生一個上三角矩陣,上三角的值全為 「-inf」 。把這個矩陣加在每一個序列上,就可以達到我們的目的:

    圖片

    加上-inf的目的是,做softmax之后-inf會變成0:

    圖片

    這個mask是Decoder中self-attention和Encoder中的self-attention唯一有區別的地方。

    2.3.3 第二個Multi-head Attention -- 普通attention

    For this layer, the encoder's outputs are keys and values, and the first multi-headed attention layer outputs are the queries. This process matches the encoder's input to the decoder's input, allowing the decoder to decide which encoder input is relevant to put a focus on.

    圖片

    3. Q/A

    (1) Transformer為什么需要進行Multi-head Attention?

    原論文中說進行Multi-head Attention的原因是將模型分為多個頭,形成多個子空間,可以讓模型去關注不同方面的信息,最后再將各個方面的信息綜合起來。其實直觀上也可以想到,如果自己設計這樣的一個模型,必然也不會只做一次attention,多次attention綜合的結果至少能夠起到增強模型的作用,也可以「類比CNN中同時使用多個卷積核的作用」,直觀上講,多頭的注意力有助于網絡捕捉到更豐富的特征/信息。

    (2) Transformer相比于RNN/LSTM,有什么優勢?

    • RNN系列的模型,「并行計算」能力很差,因為 T 時刻的計算依賴 T-1 時刻的隱層計算結果。
    • Transformer的特征抽取能力也比RNN系列的模型要好,使用了self-attention和多頭機制來讓源序列和目標序列自身的embedding表示所蘊含的信息更加豐富。

    (3)Transformer如何并行化的?

    Transformer的并行化我認為主要體現在self-attention模塊。對于某個序列 ,self-attention模塊可以直接計算 的點乘結果,而RNN系列的模型就必須按照順序從 計算到 .

    圖片

    本文參考資料

    [1]

    Attention is All you need: https:///abs/1706.03762

    [2]

    Illustrated Guide to Transformers- Step by Step Explanation: https:///illustrated-guide-to-transformers-step-by-step-explanation-f74876522bc0

    [3]

    Self-Attention 與 Transformer: https://www./article/1584719677724

    END -

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 白嫩少妇无套内谢视频| 午夜DY888国产精品影院| 国产精品自拍午夜福利| 国产第一页浮力影院草草影视| 国内精品久久久久久久影视麻豆| av中文字幕国产精品| 成在人线AV无码免观看| AV无码小缝喷白浆在线观看| 欧美精品一区二区在线观看播放| 亚洲国产精品久久久久婷婷老年| 99在线精品国自产拍中文字幕| 中文字幕无码无码专区| 蜜芽久久人人超碰爱香蕉| 亚洲国产精品福利片在线观看| 日韩激情一区二区三区| 久久国产福利播放| 亚洲精品一区二区美女| 精品国产一区二区三区2021 | 国产资源精品中文字幕| 午夜毛片精彩毛片| 最新国产精品亚洲| 久久99国内精品自在现线| 99国精品午夜福利视频不卡99| 国产精品毛片无码| 国产尤物AV尤物在线看| 日韩乱码人妻无码中文字幕视频 | 狠狠综合久久综合88亚洲| 亚洲熟女片嫩草影院| 亚洲欧美国产日韩天堂区| 无翼乌工口肉肉无遮挡无码18| 在线看无码的免费网站| 成人无码午夜在线观看| 无码H黄肉3D动漫在线观看 | 无码人妻一区二区三区四区AV| 中文字幕亚洲制服在线看| 色屁屁WWW影院免费观看入口| 欧美老少配性行为| 精品人妻中文字幕av| 亚洲AV无码一区二区乱子伦| 免费又黄又爽又猛的毛片| 精品卡通动漫亚洲AV第一页|