最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

68 Transformer【動手學(xué)深度學(xué)習(xí)v2】

2022-11-16 12:16 作者:如果我是泡橘子  | 我要投稿

Transformer

  • Transformer 模型是完全基于注意力機制,沒有任何卷積層或循環(huán)神經(jīng)網(wǎng)絡(luò)
  • Transformer 最初應(yīng)用在文本數(shù)據(jù)上的序列到序列學(xué)習(xí),現(xiàn)在已經(jīng)推廣到各種現(xiàn)代的深度學(xué)習(xí)中,如語言視覺、語音強化學(xué)習(xí)領(lǐng)域



Transformer 架構(gòu)

基于編碼器-解碼器的架構(gòu)來處理序列對,Transformer 的編碼器和解碼器是基于自注意力的模塊疊加而成的,源(source,輸入)序列和目標(biāo)(target,輸出)序列的嵌入(embedding)表示通過加上位置編碼(positional encoding)加入位置信息,再分別輸入到編碼器和解碼器中

  • ?
    Transformer P1 - 02:30
    ?

1、Transformer 的編碼器是由多個相同的層疊加而成的,每個層都有兩個子層每個子層都采用了殘差連接,并且在殘差連接的加法計算之后,都使用了層歸一化,因此 Transformer 編碼器都將輸出一個 d 維表示向量

第一個子層是多頭自注意力匯聚

  • Transformer 塊中的多頭注意力實際上就是自注意力(自注意力同時具有并行計算和最短的最大路徑長度這兩個優(yōu)勢
  • 在計算編碼器的自注意力時,key 、value 和 query 的值都來自前一個編碼器層的輸出

第二個子層是基于位置的前饋網(wǎng)絡(luò)

  • Positionwise FFN 實際上是全連接
  • 本質(zhì)上和編碼器-解碼器的架構(gòu)沒有本質(zhì)上的區(qū)別,將 Transformer 編碼器最后一層的輸出作為解碼器的輸入來完成信息的傳遞

2、Transformer 解碼器也是由多個相同的層疊加而成的,每層都有三個子層,并且在每個子層中也使用了殘差連接層歸一化

第一個子層是解碼器自注意力(帶掩碼的多頭自注意力)

  • 在解碼器自注意力中,key 、value 和 query 都來自上一個解碼器層的輸出
  • 解碼器中的每個位置只能考慮該位置之前的所有位置
  • 帶掩碼的自注意力保留了自回歸的屬性,確保預(yù)測僅僅依賴于已生成的輸出詞元(為了在解碼器中保留自回歸的屬性,帶掩碼的自注意力設(shè)定了有效長度(dec_valid_lens)作為參數(shù),以便任何查詢都只會與解碼器中所有已經(jīng)生成的詞元的位置(即直到該查詢?yōu)橹梗┻M行注意力計算,而不會對當(dāng)前位置之后的 key-value 對進行注意力計算

第二個子層是編碼器-解碼器注意力

  • 除了編碼器中所描述的兩個子層之外,解碼器還在這兩個子層之間插入了編碼器-解碼器注意力層,作為第三個子層,它的 query 來自上一個解碼器層的輸出,key 和 value 來自整個編碼器的輸出

第三個子層是基于位置的前饋網(wǎng)絡(luò)





對比 seq2seq

  • 和使用注意力的 seq2seq 的不同之處在于:Transformer 是純基于注意力(具體來講,它是一個純基于自注意力的架構(gòu),里面沒有 RNN)
  • Transformer 將使用注意力的 seq2seq 中的 RNN 全部換成了 Transformer 塊





多頭注意力(Multi-head attention)

1、對同一個 key 、value 、query 抽取不同的信息

  • 例如短距離關(guān)系和長距離關(guān)系

2、多頭注意力使用 h 個獨立的注意力池化

  • 合并各個頭(head)輸出得到最終輸出
  • key 、value 、query 都是長為 1 的向量,通過全連接層映射到一個低一點的維度,然后進入到注意力模塊中





帶掩碼的多頭注意力(Masked Multi-head attention)

1、解碼器對序列中一個元素輸出時,不應(yīng)該考慮該元素之后的元素

  • 注意力中是沒有時間信息的,在輸出中間第 i 個信息的時候,也能夠看到后面的所有信息,這在編碼的時候是可以的,但是在解碼的時候是不行的,在解碼的時候不應(yīng)該考慮該元素本身或者該元素之后的元素

2、可以通過掩碼來實現(xiàn)

  • 也就是計算 xi 輸出時,假裝當(dāng)前序列長度為 i





基于位置的前饋網(wǎng)絡(luò)(Positionwise FFN)

  • 基于位置的前饋網(wǎng)絡(luò)對序列中的所有位置的表示進行變換時使用的是同一個多層感知機(MLP),這就是稱前饋網(wǎng)絡(luò)是基于位置的原因

其實就是全連接層,將輸入形狀由(b,n,d)變成(bn,d),然后作用兩個全連接層,最后輸出形狀由(bn,d)變回(b,n,d),等價于兩層核窗口為 1 的一維卷積層

  • b:batchsize
  • n:序列長度
  • d:dimension
  • 在做卷積的時候是將 n 和 d 合成一維,變成 nd ;但是現(xiàn)在 n 是序列的長度,會變化,要使模型能夠處理任意的特征,所以不能將 n 作為一個特征,因此對每個序列中的每個元素作用一個全連接(將每個序列中的 xi 當(dāng)作是一個樣本





殘差連接和歸一化(Add & norm)

1、Add 就是一個 Residual_block

1、加入歸一化能夠更好地訓(xùn)練比較深的網(wǎng)絡(luò),但是這里不能使用批量歸一化,批量歸一化對每個特征/通道里元素進行歸一化

  • 這里的特征指的是每個序列中 D 中的一維,所以在做歸一化的時候就是將其方差變 1 ,均值變 0
  • 在做 NLP 的時候,如果選擇將 d 作為特征的話,那么批量歸一化的輸入是 n*b ,b 是批量大小,n 是序列長度,序列的長度是會變的,所以每次做批量歸一化的輸入大小都不同,所以會導(dǎo)致不穩(wěn)定,訓(xùn)練和預(yù)測的長度本來就不一樣,預(yù)測的長度會慢慢變長,所以批量歸一化不適合長度會變的 NLP 應(yīng)用

2、層歸一化對每個樣本里的元素進行歸一化

  • b 代表 batchsize
  • d 代表特征維度
  • len 表示序列長度
  • 層歸一化和批量歸一化的目標(biāo)相同,但是層歸一化是基于特征維度進行歸一化的
  • 層歸一化和批量歸一化的區(qū)別在于:批量歸一化在 d 的維度上找出一個矩陣,將其均值變成 0 ,方差變成 1,層歸一化每次選的是一個元素,也就是每個 batch 里面的一個樣本進行歸一化
  • 盡管批量歸一化在計算機視覺中被廣泛應(yīng)用,但是在自然語言處理任務(wù)中,批量歸一化通常不如層歸一化的效果好,因為在自然語言處理任務(wù)中,輸入序列的長度通常是變化的
  • 雖然在做層歸一化的時候,長度也是變化的,但是至少來說還是在一個單樣本中,不管批量多少,都給定一個特征,這樣對于變化的長度來講,稍微穩(wěn)定一點,不會因為長度變化,導(dǎo)致穩(wěn)定性發(fā)生很大的變化





信息傳遞

假設(shè)編碼器中的輸出是 y1,... ,yn ,將其作為解碼中第 i 個 Transformer 塊中多頭注意力的 key 和 value

  • 一共有三個多頭注意力(包括一個帶掩碼的多頭注意力),位于帶掩碼的多頭注意力與其它兩個不同,其他兩個都是自注意力(key 、value 和 query 都相同),而它是普通的注意力(它的 key 和 value 來自編碼器的輸出, query 來自目標(biāo)序列)

這就意味著編碼器和解碼器中塊的個數(shù)和輸出維度都是一樣的





預(yù)測

預(yù)測第 t+1 個輸出時,解碼器中輸入前 t 個預(yù)測值

  • 在自注意力中,前 t 個預(yù)測值作為 key 和 value ,第 t 個預(yù)測值還作為 query

關(guān)于序列到序列模型,在訓(xùn)練階段,輸出序列的所有位置(時間步)的詞元都是已知的;但是在預(yù)測階段,輸出序列的次元是逐個生成的

  • 在任何解碼器時間步中,只有生成的詞元才能用于解碼器的自注意力計算中





總結(jié)

1、和 seq2seq 有點類似,不同之處在于 Transformer 是一個純使用注意力的編碼-解碼器

2、編碼器和解碼器都有 n 個 Transformer 塊

3、每個塊里使用多頭(自)注意力(multi-head attention),基于位置的前饋網(wǎng)絡(luò)(Positionwise FFN)殘差連接層歸一化

  • 編碼器和解碼器中各有一個自注意力,但是在編碼器和解碼器中傳遞信息的是一個正常的注意力
  • 基于位置的前饋網(wǎng)絡(luò)使用同一個多層感知機,作用是對所有序列位置的表示進行轉(zhuǎn)換,實際上就是一個全連接,等價于 1*1 的卷積
  • Add & norm:Add 實際上就是 Residual block 可以幫助將網(wǎng)絡(luò)做的更深,norm 使用的是 Layer Norm 使得訓(xùn)練起來更加容易;Transformer 中的殘差連接和層規(guī)范化是訓(xùn)練非常深度模型的重要工具

4、在 Transformer 中,多頭注意力用于表示輸入序列和輸出序列,但是解碼器必須通過掩碼機制來保留自回歸屬性





Q&A

  • 1、正余弦編碼和自動學(xué)習(xí)位置編碼在最終效果上有區(qū)別嗎?
  • ?
    QA P4 - 00:00
    ?
  • 2、在視覺領(lǐng)域,transformer 適合應(yīng)用在芯片上嗎?比如用在車載領(lǐng)域?
  • ?
    QA P4 - 00:10
    ?
  • 3、請問老師現(xiàn)在在企業(yè)里面多輪對話都是用什么算法啊,還是用規(guī)則?
  • ?
    QA P4 - 00:28
    ?
  • 4、多頭注意力,concat 和相加取平均,怎么選擇呢?
  • ?
    QA P4 - 00:38
    ?
  • 5、請問老師,在 Transformer 中,為什么在獲取詞向量之后,需要對詞向量進行縮放?(乘以 embedding size 的開方之后再加上 PE )
  • ?
    QA P4 - 00:52
    ?
  • 6、老師,請問 NLP 沒有競賽嗎?
  • ?
    QA P4 - 01:33
    ?
  • 7、num of heads 做什么?
  • ?
    QA P4 - 01:45
    ?
  • 8、后面還會講 DETR 嗎?
  • ?
    QA P4 - 01:57
    ?
  • 9、老師,請問訓(xùn)練 transformer 的最低硬件要求,如果需要幾千張 GPU ,那么大部分人怎么復(fù)現(xiàn)它?
  • ?
    QA P4 - 02:02
    ?
  • 10、DETR 的 query 是否有什么實際的含義,好像和機器翻譯的不太一樣?
  • ?
    QA P4 - 02:21
    ?
  • 11、k、v、q 的大小一般怎么選擇呢?
  • ?
    QA P4 - 02:38
    ?
  • 12、老師,pytorch 中的 nn.Embedding() 應(yīng)該是用的標(biāo)準(zhǔn)正態(tài)初始化吧?
  • ?
    QA P4 - 02:53
    ?
  • 13、老師,看論文時很多模型只使用了 encoder ,沒有用 decoder ,想問下區(qū)別在哪里,有什么選擇依據(jù)呢?
  • ?
    QA P4 - 03:17
    ?
  • 14、transformer 可以處理非序列圖像處理嗎?
  • ?
    QA P4 - 03:25
    ?
  • 15、請教是否有多智能體處理 RNN 的論文或者模型推薦,即每個智能體處理一部分序列輸出,若都輸出合適的序列的話才能獲得正獎勵,是否有相關(guān)的論文或者模型推薦?
  • ?
    QA P4 - 03:41
    ?
  • 16、請問老師,我想用 BERT 特征做文章抄襲檢測,一百萬的文章庫特征搜索太慢了,老師有什么好的技術(shù)方案可以指導(dǎo)一下嗎,直接文本比較的話有什么好的算法嗎?
  • ?
    QA P4 - 03:59
    ?
  • 17、自回歸和自編碼有什么區(qū)別?
  • ?
    QA P4 - 04:57
    ?
  • 18、RNN 處理非序列圖像也可以很多個 batch 組成序列去處理嗎?
  • ?
    QA P4 - 05:20
    ?





----end----

其他參考

1、《動手學(xué)深度學(xué)習(xí)》,課程 PPT ,https://courses.d2l.ai/zh-v2/assets/pdfs/part-4_5.pdf

2、《動手學(xué)深度學(xué)習(xí)》,教程,https://zh-v2.d2l.ai/chapter_attention-mechanisms/transformer.html

68 Transformer【動手學(xué)深度學(xué)習(xí)v2】的評論 (共 條)

分享到微博請遵守國家法律
股票| 双辽市| 郯城县| 平武县| 宜良县| 栖霞市| 孟村| 抚宁县| 怀仁县| 黄石市| 雷州市| 孟州市| 托克逊县| 外汇| 克什克腾旗| 乐亭县| 大荔县| 丽江市| 永寿县| 衡阳市| 黄石市| 鱼台县| 噶尔县| 益阳市| 安远县| 汉阴县| 泰州市| 平南县| 格尔木市| 九龙县| 余江县| 宝坻区| 股票| 达孜县| 福清市| 武胜县| 南充市| 阿鲁科尔沁旗| 盐山县| 海晏县| 疏附县|