2021-11-28 沐神《transformer論文逐段精讀》

Transformer論文逐段精讀【論文精讀】筆記 - 嗶哩嗶哩 (bilibili.com)
Transformer論文逐段精讀【論文精讀】_嗶哩嗶哩_bilibili

1. 標(biāo)題 + 作者(title & author)

8位作者都帶了星號(hào),貢獻(xiàn)是一樣的哦。
文章末尾有說明,每位作者的分工。
200頁綜述(來自評(píng)論區(qū): https://arxiv.org/pdf/2108.07258.pdf )建議將Transformer作為基礎(chǔ)模型。

2. 摘要(abstract)

在主流的序列轉(zhuǎn)錄模型一般是依賴復(fù)雜的RNN或者CNN,一般使用encoder和decoder的架構(gòu)。【注:所謂序列轉(zhuǎn)錄模型就是說給定一個(gè)序列生成另外一個(gè)序列。比如機(jī)器翻譯】。在性能最好的這些模型中,通常也會(huì)在endoer和decoder之間架設(shè)注意力機(jī)制。本文提出了一個(gè)新的簡(jiǎn)單的架構(gòu),transformer,僅僅依賴于注意力機(jī)制,沒有使用RNN或者CNN?!局耙话愣家詎ovel的架構(gòu)為佳,漸漸地變成simple為佳】做了機(jī)器翻譯的實(shí)驗(yàn),性能上表現(xiàn)非常,并行性更好,訓(xùn)練時(shí)間更短,更好的BLEU分?jǐn)?shù)。transofrmer任務(wù)還可以泛化到其他領(lǐng)域上。

3. 結(jié)論(conclusion)

transformer,第一個(gè)僅僅使用注意力機(jī)制的序列轉(zhuǎn)錄模型。在encoder-decoder使用了多頭注意力機(jī)制替換了RNN層。transformer架構(gòu),訓(xùn)練更快更強(qiáng),此架構(gòu)應(yīng)該不止可以用在文本上,圖片,視頻都可以推廣使用。
代碼放在https://github.com/tensorflow/tensor2tensor

4. 導(dǎo)言(introduction)

[基本是摘要前半部分的擴(kuò)充]
第一段:在時(shí)序模型中主流的是LSTM/RNN,當(dāng)輸出結(jié)構(gòu)化信息比較多的時(shí)候,還會(huì)使用編碼器-解碼器架構(gòu)。
第二段:

  • RNN的特點(diǎn)(缺點(diǎn))
    在RNN中,給定一個(gè)序列,其計(jì)算方式是把序列從左往右移動(dòng),一步一步往前走,假設(shè)是個(gè)句子的話,就是一個(gè)一個(gè)詞的看,對(duì)第t個(gè)詞,RNN會(huì)計(jì)算一個(gè)輸出h_t,也稱為隱藏狀態(tài),h_t是有前面一個(gè)詞的隱藏狀態(tài)h_{t-1}和當(dāng)前第t個(gè)詞本身決定的。即可將前面學(xué)到的歷史信息,通過h_{t-1}放到當(dāng)下和當(dāng)前的詞做一些計(jì)算后輸出。RNN就是通過這種機(jī)制有效處理時(shí)序信息,把之前的信息全部放在隱藏狀態(tài)里,依次往后進(jìn)行。但是RNN的問題也出現(xiàn)在這里,1.RNN是時(shí)序即一個(gè)一個(gè)地執(zhí)行計(jì)算,難以并行,即計(jì)算h_t的時(shí)候,必須保證前面的h_{t-1}輸入完成了。無法并行,計(jì)算性能比較差。2.歷史信息是一步一步地往后傳遞,如果時(shí)序(步數(shù))比較長(zhǎng),早期的歷史信息會(huì)丟掉,如果不想丟掉,就需要h_t比較大,但是h_t比較大,每個(gè)步驟都存儲(chǔ),內(nèi)存開銷會(huì)很大。當(dāng)然后續(xù)做了很多改進(jìn),但是并沒有改變基本問題。
    第三段:attention在RNN上的應(yīng)用。主要是用在如何把編碼器的東西很有效地傳輸給解碼器。
    最后一段:全新的使用注意力機(jī)制transformer,可以并行計(jì)算,更少的資源和時(shí)間即可訓(xùn)練。

5. 相關(guān)工作(background)

第一段:如何使用CNN替換RNN來減少時(shí)序的計(jì)算。CNN用在時(shí)序存在的問題:卷積神經(jīng)網(wǎng)絡(luò)無法對(duì)較長(zhǎng)的序列進(jìn)行建模。(這是因?yàn)镃NN計(jì)算的時(shí)候,每一次看一個(gè)一個(gè)比較小的窗口,比如3×3的像素塊,如果兩個(gè)像素離得比較遠(yuǎn),那么需要很多層卷積,一層一層上去才能夠最后把這兩個(gè)隔得遠(yuǎn)的像素給融合起來。),
??如果使用transformer的注意力機(jī)制,每次可以看到所有的像素,所以一層就可以把整個(gè)序列全部看到,就沒有這個(gè)問題。但是CNN還有個(gè)優(yōu)點(diǎn)是,CNN可以做多個(gè)輸出通道,一個(gè)輸出通道去識(shí)別不一樣的模式,transformer使用Multi_Head Attention來模擬這種多輸出通道的效果
第后續(xù)段落:關(guān)鍵點(diǎn):自注意力機(jī)制。自注意力機(jī)制并不是本文提出,但是transformer是第一個(gè)僅僅靠自注意力機(jī)制的encoder-decoder架構(gòu)模型。
講清楚相關(guān)的工作有哪些,區(qū)別與聯(lián)系是什么。

6. 模型(Model Architecture)【chapter 3】

深度神經(jīng)網(wǎng)絡(luò)的論文最重要的一章。
第一段: 序列模型中現(xiàn)在比較好的是編碼器-解碼器架構(gòu)。(接下來解釋什么是encoder,decoder)編碼器:將一個(gè)長(zhǎng)為n(x_1,...,x_n)的東西(假設(shè)是一個(gè)句子的話,有n個(gè)詞,x_t就表示第t個(gè)詞),編碼器會(huì)將此序列表示為(輸出)一個(gè)長(zhǎng)度也是n(z_1,...,z_n)z_t對(duì)應(yīng)的是x_t的一個(gè)向量表示(如果是個(gè)句子,那么z_t就表示第t個(gè)詞的向量表示)。解碼器:拿到編碼器的輸出,生成一個(gè)長(zhǎng)為m的序列,注意:nm是可以不一樣的,解碼器和編碼器不一樣在于,在解碼器中,詞是一個(gè)一個(gè)生成的。編碼器是一次性看到整個(gè)句子。但是解碼的時(shí)候只能一個(gè)一個(gè)生成)這是一個(gè)自回歸(auto_regressive)的過程(輸入又是輸出)。在最開始給定的z,生成第一個(gè)輸出y_1,在拿到y_1后可以去生成y_2,要生成y_t,可以把之前所有的y_1y_{t-1}全部拿到,即翻譯時(shí),一個(gè)一個(gè)詞往外蹦。過去時(shí)刻的輸出可以是是當(dāng)前時(shí)刻的輸入【那么RNN也是屬于自回歸的啦?】
好的論文要有優(yōu)秀的圖示結(jié)構(gòu)。

image.png

左半邊是編碼器,右半邊是解碼器?!癷nput embedding”是編碼器輸入,比如中文翻譯英文時(shí)的中文句子embedding,“output”是解碼器之前時(shí)刻的輸出,作為此刻解碼器的輸入?!皊hifted right”一個(gè)一個(gè)往后往右移。
編碼器:N個(gè)塊堆疊,具體內(nèi)部:multi-head attention,殘差&LN,前饋神經(jīng)網(wǎng)絡(luò),殘差&LN。編碼器的輸出作為解碼器的輸入。
解碼器:其中一部分和編碼器結(jié)構(gòu)相同,但是有一塊是“Masked Multi-Head Attention”,N個(gè)這樣的塊堆疊后,進(jìn)入輸出層,softmax層輸出結(jié)果。
各模塊簡(jiǎn)單標(biāo)記

6.1 編碼器&解碼器

  • 編碼器
    由6個(gè)相同的layer組成。每個(gè)layer有兩個(gè)sub-layer:①multi-head self-attention;②position wise fully feed-forward network。 每個(gè)sub-layer都用了殘差鏈接,同時(shí)后面有LN,每個(gè)sub-layer的輸出是LayerNorm(x+Sublayer(x))。殘差鏈接需要輸入和輸出是一樣大小的,如果不一樣,還需要做投影。為了簡(jiǎn)單起見,把每一個(gè)層的輸出維度變成512,固定長(zhǎng)度表示,使得模型比較簡(jiǎn)單。(這里和之前的CNN或MLP時(shí)是不一樣的,那時(shí)經(jīng)常把維度往下減,要么CNN的話是空間維度往下減且channel維度往上拉)
    簡(jiǎn)單的網(wǎng)絡(luò)使得調(diào)參實(shí)際上只有兩個(gè)可調(diào),d_{model}=512N=6(layer的數(shù)量)
    • LayerNorm(文章中如果用了別人的東西,最好花幾句話講一下是什么,免得還要打開鏈接去看到底是個(gè)啥)
    • 通過LN和BN的對(duì)比來解釋一下什么是LN,以及變長(zhǎng)的應(yīng)用中不適用BN,而采用LN。
      二維情況:BatchNorm VS LayerNorm
      ??紤]最簡(jiǎn)單的二維輸入情況:輸入是一個(gè)矩陣,每一行是一個(gè)樣本,每一列是一個(gè)特征(feature)。BN做的操作:把每一個(gè)列即每一個(gè)特征在一個(gè)mini-batch里的均值變?yōu)?方差變?yōu)?(減去向量本身的均值,再除以方差即可),注意訓(xùn)練時(shí)計(jì)算均值是在mini-batch里此向量算均值和方差,預(yù)測(cè)時(shí)計(jì)算所有數(shù)據(jù)全局的均值和方差,BN還會(huì)學(xué)習(xí)一個(gè)α和β,把此向量通過學(xué)習(xí)可以放成一個(gè)任意方差和均值的向量(BN和dropout在預(yù)測(cè)和訓(xùn)練時(shí)的區(qū)別)。LN做的操作:是對(duì)每一行即每一個(gè)樣本進(jìn)行均值為0,方差為1的操作,其他與BN操作一致。
      RNN或transformer的輸入是三維情況,是一個(gè)序列。
      三維情況下的LN和BN
    • 為什么RNN/transformer中使用LN?
      BN切出來的結(jié)果,有效的是陰影部分,其余是 0

      遇到一個(gè)超長(zhǎng)的樣本,效果可能不好

      LN切出來的結(jié)果,樣本內(nèi)進(jìn)行均值方差計(jì)算

①在持續(xù)的序列模型里面,每個(gè)樣本的長(zhǎng)度可能會(huì)發(fā)生變化,比如機(jī)器翻譯,句子/單詞可長(zhǎng)可短,短的會(huì)在后面補(bǔ)零。BN是跨樣本計(jì)算同一特征的均值和方差,如果樣本的長(zhǎng)度變化非常大,那么每次的mini-batch計(jì)算得到的均值方差的抖動(dòng)可能會(huì)非常大;且預(yù)測(cè)時(shí)候是將全局的均值和方差記錄下來,那么全局的均值方差如果遇到一個(gè)很長(zhǎng)很長(zhǎng)的樣本,那么模型的表現(xiàn)很可能就不盡人意了。而LN來說,是每個(gè)樣本自己的特征來計(jì)算均值和方差,也不需要存一個(gè)全局的均值方差,故不管樣本長(zhǎng)還是短,均值都是在樣本自身里計(jì)算的,相對(duì)穩(wěn)定一些。
②另一篇文章解釋LN:從梯度歸一化等角度解釋LN的有效性,( LayerNorm是Transformer的最優(yōu)解嗎?_夕小瑤的賣萌屋-CSDN博客

  • 解碼器
    同樣由n=6個(gè)layer組成,每個(gè)layer同樣有encoder的兩個(gè)sub-layer,但是解碼器還多了第三個(gè)sub-layer,這個(gè)sub-layer同樣是多頭注意力機(jī)制+ResNet+LN,但是區(qū)別在于是“Masked-Multi-Head attention”
    (前文提到,解碼器做的是自回歸的過程,即當(dāng)前時(shí)刻的輸出的輸入集是上面一些時(shí)刻的輸出,意味著在做預(yù)測(cè)時(shí)候是不可以看到當(dāng)前之后那些時(shí)刻的輸出,但是注意力機(jī)制中每次是可以看到完整的輸入的,為了避免這種情況發(fā)生,即保證解碼器訓(xùn)練時(shí),在預(yù)測(cè)第t個(gè)時(shí)刻的輸出的時(shí)候其不應(yīng)該看到t時(shí)刻以后的那些輸入,
    文章的做法是通過一個(gè)帶掩碼的注意力機(jī)制,保證了輸入進(jìn)來時(shí),t時(shí)間是不會(huì)看到t時(shí)間以后的那些輸入,從而保證訓(xùn)練和預(yù)測(cè)時(shí)候的行為是一致的。

這里保證訓(xùn)練和預(yù)測(cè)行為一致是怎么得到的???

6.2 注意力機(jī)制(attention)

第一段,attention的一般化介紹。注意力函數(shù)是將Query和Key-Value對(duì)映射成一個(gè)輸出的函數(shù)。output是value的一個(gè)加權(quán)和,即輸出的維度和value的維度是一樣的。


給定一個(gè)query,與其中一個(gè)key較為相似,那么其權(quán)重就會(huì)更大,不同的query由于其相似的key不同會(huì)導(dǎo)致輸出不一樣

value的權(quán)重是此value對(duì)應(yīng)的key和查詢query的相似度得來的。

6.2.1 Scaled Dot-Product Attention (3.2.1)

query和key是等長(zhǎng)的d_k,value的長(zhǎng)度是d_v。計(jì)算query和key做內(nèi)積,(兩個(gè)向量做內(nèi)積,內(nèi)積越大,余弦相似度越大,如果為0則二者垂直),內(nèi)積再除以\sqrt{d_k}(向量的長(zhǎng)度),再用softmax計(jì)算權(quán)重,得到n個(gè)非負(fù)的和為1的權(quán)重(假設(shè)一個(gè)query,有n個(gè)k-v對(duì))。
實(shí)際計(jì)算中,query作為一個(gè)矩陣,與k矩陣相乘,除以\sqrt{d_k}后進(jìn)入softmax,最后乘以V。

Q,K,V的矩陣運(yùn)算

其他注意力機(jī)制:常見兩種:加型注意力機(jī)制,另一種點(diǎn)積注意力機(jī)制。點(diǎn)積注意力機(jī)制和本文的區(qū)別就在于除以了\sqrt{d_k},原因是:
??當(dāng)d_k不大時(shí)候,除不除沒關(guān)系,但是當(dāng)d_k比較大,也就是說兩個(gè)向量(Q和K)的長(zhǎng)度比較長(zhǎng)的時(shí)候,做點(diǎn)積結(jié)果會(huì)比較大也可能比較小,當(dāng)結(jié)果比較大的時(shí)候,之間的相對(duì)的差距就會(huì)變大,導(dǎo)致最大的那個(gè)值在softmax之后會(huì)更加靠近于1,剩下的值就會(huì)更加靠近0,即:softmax的結(jié)果會(huì)更加向兩端靠攏,這樣的情況下計(jì)算梯度,會(huì)發(fā)現(xiàn)梯度會(huì)比較?。ㄒ?yàn)椋?img class="math-inline" src="https://math.jianshu.com/math?formula=softmax" alt="softmax" mathimg="1">最后的結(jié)果就是希望模型的預(yù)測(cè)值,置信的地方盡量靠近1,不置信的地方盡量靠近0,如此認(rèn)為模型接近了收斂,此時(shí)梯度會(huì)變得比較小,模型的優(yōu)化就會(huì)跑不動(dòng)),而transformer中d_k比較大(512),故除以\sqrt{d_k}比較合適。
標(biāo)準(zhǔn)化的點(diǎn)積注意力機(jī)制

??上圖中的MASK,主要是避免在第t時(shí)間的時(shí)候看到以后時(shí)間的東西,具體講:假設(shè)querykey是等長(zhǎng)的n,而且時(shí)間上是能對(duì)應(yīng)起來的,對(duì)于第t時(shí)刻的q_t,在計(jì)算時(shí)應(yīng)該只看k_1k_{t-1},不去看k_t及其之后的內(nèi)容。給不該看的部分給予一個(gè)權(quán)重為極大的負(fù)數(shù),這樣進(jìn)入softmax后,這些就會(huì)接近于0.

6.2.2 多頭注意力(3.2.2 Multi-Head Attention)

與其我做一個(gè)單個(gè)的注意力函數(shù),不如把整個(gè)query,keyvalue投影到低維,投影h次,然后做h次的投影函數(shù),每一個(gè)函數(shù)的輸出把它并在一起,然后再投影來會(huì)得到最終輸出。下圖演示效果:

多頭注意力

V,K,Q,進(jìn)入一個(gè)線性層(線性層就是投影的比較低的維度),再做一個(gè)Scaled Dot-Product Attention,做h次,將h個(gè)向量并在一起,最后做一次線性投影,得到結(jié)果。

為什么要做多頭注意力機(jī)制呢

如果我們回過頭來看dot-product的注意力的話,會(huì)發(fā)現(xiàn)里面沒有什么可以學(xué)的參數(shù),其具體函數(shù)就是內(nèi)積,但有時(shí)候?yàn)榱俗R(shí)別不一樣的那些模式,我希望你可能有一些不一樣的計(jì)算像素的辦法,如果你用的是加性attention的話,那里面其實(shí)還是有一個(gè)權(quán)重的可以用來學(xué)習(xí),也許是可以學(xué)到一些東西。但是對(duì)于點(diǎn)積attention,可以如此:先投影到低維,那么投影的w是可以學(xué)的(即給模型h次機(jī)會(huì),希望其學(xué)到不一樣的投影的方法,使得在投影進(jìn)去的那個(gè)度量空間里面能夠去匹配不同模式需要的一些相似函數(shù),最后把這些東西回來,再做一次投影),跟之前說的在卷積神經(jīng)網(wǎng)絡(luò)里面有多個(gè)輸出通道的情形有些像。具體公式:

image.png

實(shí)際使用中,h=8,投影的維度為d_k=d_v=d_{model}/h=64,在此64維投影空間計(jì)算注意力函數(shù),最后再投影回來。如何用矩陣實(shí)現(xiàn)上述公式中的很多小矩陣運(yùn)算?

6.2.3 transformer中如何使用注意力機(jī)制(Application of Attention in our Model)

  • ① 編碼器中的注意力機(jī)制:
    編碼器的輸入:假設(shè)句子長(zhǎng)度是n的話,那么其輸入是n個(gè)長(zhǎng)為d的向量(假設(shè)p_n大小設(shè)置為1了)。注意力層有三個(gè)輸入(Q,K,V),但是圖中可以看到,是同一個(gè)輸入復(fù)制了三份,就是說此處的Q,K,V是一個(gè)東西(故稱為自注意力機(jī)制),輸入了n個(gè)query,那么每個(gè)query會(huì)拿到一個(gè)輸出,則會(huì)有n個(gè)輸出,且輸出和長(zhǎng)度是一樣的,維度都是d,即輸入和輸出都是n×d,計(jì)算過程見前文。 不考慮多頭和投影的情況,輸出其實(shí)就是輸入的加權(quán)和,權(quán)重來自于本身跟各個(gè)向量的相似度。多頭和投影情況下,會(huì)學(xué)到h個(gè)不一樣的距離空間出來。輸出則和純粹的單注意力機(jī)制會(huì)不一樣。
  • ② 解碼器的第一個(gè)注意力機(jī)制(下方的注意力塊)
    輸入也是Q,K,V一樣,只是不是n而是m,主要計(jì)算過程和編碼器一樣,但是有一個(gè)MASK操作,只看到k_t以前不包括k_t的數(shù)據(jù),詳見前文描述。
  • ③ 解碼器的第二個(gè)注意力機(jī)制。
    首先輸入的Q,K,V不同,keyvalue是來自于編碼器的輸出,query是來自于解碼器下方的輸出。此時(shí)權(quán)重的計(jì)算為解碼器輸出作為的query去和編碼器的輸出作為的key去計(jì)算相似度作為權(quán)重,在和value計(jì)算得到注意力分?jǐn)?shù),即此attention做的事情是:有效的把編碼器里面輸出根據(jù)相似度給拎出來。根據(jù)解碼器的輸入不一樣,根據(jù)當(dāng)前的向量去編碼器的輸出中挑出感興趣(對(duì)應(yīng))的內(nèi)容出來。
    三個(gè)attention

6.3 Position-wise Feed-Forward Networks

其實(shí)就是全連接神經(jīng)網(wǎng)絡(luò)層(MLP),但是不一樣的是,()position是指輸入序列中每個(gè)詞,即MLP對(duì)每個(gè)詞作用了一次,說白了就是MLP只是作用在最后一個(gè)維度。
注意力層的輸出為512,那么公式中的x就是一個(gè)512的向量,w_1會(huì)把512投影成2048,即維度擴(kuò)大四倍。因?yàn)樽詈笥袀€(gè)殘差鏈接,還得投影回去,故w_2又把2048投影回512,說白就是個(gè)單隱層的MLP。如果用pytorch實(shí)現(xiàn),兩個(gè)線性層放在一起就可以了,不需要改任何參數(shù),因?yàn)閜ytorch的輸入是3D時(shí),其計(jì)算默認(rèn)就是在最后一個(gè)維度做計(jì)算。

FFN

image.png

attention起的作用:把整個(gè)序列里面的信息抓取出來,做一次匯聚aggregation,注意力的輸出中已經(jīng)有了序列中感興趣的內(nèi)容,信息已經(jīng)抓取到,在做投影,MLP時(shí),映射到我更想要的語義空間的時(shí)候,由于每個(gè)attention的輸出已經(jīng)包含序列信息,所以MLP對(duì)每個(gè)點(diǎn)獨(dú)立做即可。
對(duì)比RNN:RNN的輸入是向量,對(duì)于第一個(gè)點(diǎn),其實(shí)就是做了一個(gè)線性層MLP,直接出去即可,下一個(gè)點(diǎn),時(shí)序信息(綠色)上一時(shí)刻的輸出和輸入(藍(lán)色)一起并入,如此完成了歷史信息的傳遞。
二者雖有區(qū)別,但是關(guān)注點(diǎn)都是在于如何利用序列信息。

6.4 Embeddings and Softmax

embedding:輸入是一個(gè)個(gè)的詞,或者叫詞源叫token,我需要把它映射成一個(gè)向量,embedding就是說給任何一個(gè)詞,學(xué)一個(gè)一個(gè)長(zhǎng)為d的向量表示它。本文中d就是512啦。
transformer的三個(gè)embedding:編碼器輸入,解碼器輸入,softmax前面的線性也需要embedding。
三個(gè)embedding權(quán)重一樣,且把權(quán)重乘以了\sqrt{d_{model}},因?yàn)樵趯W(xué)embedding的時(shí)候,多多少少會(huì)把向量的L2 Norm學(xué)成相對(duì)比較小的,比如說1,即不管維度多大,最后的值都會(huì)等于1. 即維度一大,學(xué)到的權(quán)重值就會(huì)變小,但是之后加上的位置編碼(position encoding),位置便編碼并不會(huì)隨著長(zhǎng)度變長(zhǎng),是把long固定住的。所以權(quán)重乘以\sqrt{d_{model}}之后,使得位置編碼和embedding相加的時(shí)候,二者具有差不多的scale,相當(dāng)于做了一個(gè)hat。【這里沒明白】

6.5 position encoding

attention并不具有時(shí)序信息,輸出是value的加權(quán)和,權(quán)重是query和key的距離,和順序(序列信息)是無關(guān)的,一句話打亂順序前后的attention值是一樣,這樣的情況在處理時(shí)序信息是有問題的。
故而,transformer在輸入中加入時(shí)序信息,即位置編碼。
(RNN是上一時(shí)刻的輸出作為下一個(gè)時(shí)刻的輸入來傳遞歷史信息)

位置編碼的計(jì)算

思路:舉例:計(jì)算機(jī)表示數(shù)值,32bit二進(jìn)制,可以理解為長(zhǎng)度為32的向量表示。而transformer中,一個(gè)詞在嵌入層會(huì)表示成512的向量,同樣再使用512維的向量表示詞的位置,用周期不一樣的sin/cos函數(shù)的值算出來的。二者相加,就完成了給attention添加時(shí)序信息。
?位置編碼是cos/sin函數(shù),在+1和-1之間抖動(dòng),輸入的embedding乘以\sqrtu0z1t8os,使得每個(gè)數(shù)字也差不多在+1和-1之間。

為什么使用自注意力機(jī)制(chapter 4)

四種Layer比較(復(fù)雜度,順序依賴的計(jì)算[越少越好],)

三個(gè)維度:① 復(fù)雜度;②順序的計(jì)算:下一步計(jì)算必須要等前面多少步計(jì)算完成,越不需要等,那么并行度就越高; ③ 信息從一個(gè)數(shù)據(jù)點(diǎn)到另外一個(gè)數(shù)據(jù)點(diǎn)要走多遠(yuǎn),越短越好。

  • 自注意力層:① n是序列的長(zhǎng)度,d是向量的長(zhǎng)度。self-attention的矩陣運(yùn)算:query×key,q和k都是n×d維度。③矩陣計(jì)算,并行度很高,認(rèn)為O(1)
    ③ 任何query和任何k-v對(duì)只要一次就可以
  • RNN層:① 序列長(zhǎng)為n,就一個(gè)一個(gè)做運(yùn)算,每個(gè)里面計(jì)算時(shí)d×d的矩陣再乘以n的輸入。 ② n個(gè)步驟都是一次依賴的 ③ 最初到最后,需要走過n步
  • CNN層:①序列上的用的1d的卷積,k為kernel數(shù),n是序列長(zhǎng)度,d是輸入/輸出通道數(shù)。② 并行度非常高 ③ 每次一個(gè)長(zhǎng)為k的窗口,k以內(nèi)可以一次傳遞,超過k需要多層,一層一層地傳遞
  • 自注意力層(受限)query只和最近的r個(gè)鄰居進(jìn)行計(jì)算,這樣復(fù)雜度就降低了(① 提升)。但是舉例比較長(zhǎng)的點(diǎn),就需要多走幾步才能完成傳遞(③犧牲)
    得與失使用了attention后,對(duì)長(zhǎng)數(shù)據(jù)的處理更好,而且算的也不慢,但是實(shí)際上,由于attention對(duì)模型的假設(shè)做的更少,導(dǎo)致需要更多的數(shù)據(jù)和更大的模型才能訓(xùn)練出RNN/CNN同樣的效果。

7. 實(shí)驗(yàn)(chapter 5)

英語-德語。WMT 2014的數(shù)據(jù),使用byte-pair encoding:每個(gè)詞有各種變化形式,如果每個(gè)形式都單獨(dú)做成一個(gè)詞,他們之間的區(qū)別模型就無法獲知了,且會(huì)造成詞典太大。bpe做的是把詞的詞根提出來,詞典可以較小。并且英語和德語共享一個(gè)字典,好處:編碼器和解碼器可以使用同一種embedding,即編碼器和解碼器共享權(quán)重。

優(yōu)化器使用adma,
學(xué)習(xí)率公式計(jì)算:


學(xué)習(xí)率計(jì)算

正則化:每一個(gè)子層的輸出上,進(jìn)入殘差前和進(jìn)入layernorm之前,加了dropout(0.1),輸入:加上詞嵌入和位置編碼時(shí),也加了dropout(0.1)
label smoothing,將softmax的輸出為0.1時(shí),即可認(rèn)為是正確的。(置信度為0.1),這里會(huì)損失困惑度(perplexity)可理解為模型不確信度。

8. 評(píng)論

寫作非常簡(jiǎn)潔,沒有用什么寫作技巧,基本就是提出了什么模型,模型長(zhǎng)什么樣子,跟RNN/CNN比,結(jié)論是什么。不推薦這樣寫,而是:可以選擇把自己的東西減少一些,甚至把一些東西不那么重要的東西放到附錄里面,建議正文最好講個(gè)故事,為什么做這些事情,設(shè)計(jì)理念是什么樣的,整個(gè)文章的思考是什么樣子的,這樣會(huì)讓大家認(rèn)為文章比較有深度一些。
transformer架構(gòu)作為一種類似CNN的一種基礎(chǔ)架構(gòu),應(yīng)用非常廣泛,有影響力。同樣一個(gè)模型能在許多領(lǐng)域使用。transformer能夠融合多模態(tài)的數(shù)據(jù)。
attention主要在模型起了一部分作用:把整個(gè)序列的信息給聚合起來,后面的MLP,殘差是缺一不可的;attention根本沒有對(duì)序列順序建模但是效果卻比CNN/RNN效果好,現(xiàn)在認(rèn)為,attention使用了一個(gè)更廣泛的歸納偏置,使得它能處理更一般化的信息。從而使得attention并沒有做任何空間上的假設(shè),他也能夠跟CNN甚至比CNN取得更好的一些效果,但是代價(jià)是假設(shè)更一般,造成對(duì)數(shù)據(jù)的信息抓取能力變?nèi)?,所以transformer的模型都是非常大

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容