Transformer、BERT学习笔记
目錄
- Transformer
- 引言
- 解析
- 整體結構
- 注意力機制
- 自注意力
- 多頭注意力
- Positional Encoding
- 參考
- BERT
- 引言
- 解析
- 參考
關于Transformer和BERT,網上已經有了很多的講解。本博客是筆者閱讀論文后,并參考了一些其他博主的思路,結合筆者本人的理解而寫。文章的最后會列出一些參考博客(知乎),如有遺漏,煩請提醒。
Transformer
引言
Attention Is All You Need
文章鏈接
本文出自NIPS2017,一作是Ashish Vaswani,來自Google Brain。Transformer最開始是基于機器翻譯任務提出的,打破了傳統的RNN框架,完全依賴于注意力機制。能夠很容易的并行訓練,僅在8個P100上訓練了12個小時,就實現了當時的新SOTA。
解析
整體結構
Transformer的結構如下圖所示。還是機器翻譯領域傳統的Encoder-Decoder架構。
Encoder部分使用N=6N=6N=6個Layer組成,每個Layer又包含兩個sub-layer,分別是:多頭注意力層(Multi-Head Attention)、前向傳播層(Feed Forward)。每個sub-layer后面都添加了一個layer normalization層(出自文章),且使用了類似ResNet的跳躍連接。綜上,對于輸入為xxx的sub-layer,它的輸出是:LayerNorm(x+Sublayer(x))\text{LayerNorm}(x+\text{Sublayer}(x))LayerNorm(x+Sublayer(x))。
Decoder部分也是使用N=6N=6N=6個Layer組成,每個Layer包含三個sub-layer,分別是:帶有掩碼的多頭注意力層(Masked Multi-Head Attention)、多頭注意力層(Multi-Head Attention)、前向傳播層(Feed Forward)。
注意力機制
首先介紹基于點積的注意力(Scaled Dot-Product Attention),再引申出本文中用到的自注意力(Self Attention)和多頭注意力(Multi-Head Attention)。
基于點積的注意力的網絡結構如下圖所示,具有三個輸入:QQQ、KKK和VVV,分別代表QueryQueryQuery、KeyKeyKey和ValueValueValue,這三個變量的含義下面會詳細介紹。
下面,以機器翻譯為例子,詳細介紹注意力機制的計算過程。假設,此時模型的輸入I="word1word2word3"I="word_1 \space word_2 \space word_3"I="word1??word2??word3?",使用NNN表示單詞個數,例子中N=3N=3N=3。
對輸入的句子III進行word embedding后,可以得到句子的特征EEE,是一個N×DimEN \times Dim^EN×DimE的矩陣。按照下標進行索引即可得到每個單詞的特征,這里使用Ei(1≤i≤N)E_i(1 \le i \le N)Ei?(1≤i≤N)表示單詞wordiword_iwordi?的特征,每個EiE_iEi?的大小均為1×DimE1 \times Dim^E1×DimE。
使用三個不同的權重矩陣WQ,WK,WVW^Q, W^K, W^VWQ,WK,WV,分別乘以EEE即可得到Q,K,VQ, K, VQ,K,V,大小分別為NQ×DimQ,NK×DimK,NV×DimVN^Q \times Dim^Q, \space N^K \times Dim^K, \space N^V \times Dim^VNQ×DimQ,?NK×DimK,?NV×DimV。
Q=EWQ,K=EWK,V=EWVQ = E W^Q, \space K = E W^K, \space V = E W^VQ=EWQ,?K=EWK,?V=EWV
直觀上來看,NQ=NK=NV=NN^Q=N^K=N^V=NNQ=NK=NV=N(實際上不一定,后文會說),下面以這種假設為前提,看一下如何計算Attention。
對于單詞wordiword_iwordi?來說,首先,通過索引得到其對應的查詢向量QiQ_iQi?。通過矩陣乘法操作Si=QiKTS_i=Q_i K^TSi?=Qi?KT可以得到一個大小為1×N1 \times N1×N的向量SiS_iSi?,而Si[j]S_i[j]Si?[j]即為wordiword_iwordi?和wordjword_jwordj?的Score。然后,使用softmax\text{softmax}softmax將Score進行歸一化,得到Attention Weight WiW_iWi?,大小仍是1×N1 \times N1×N,含義仍是Wi[j]W_i[j]Wi?[j]表示wordiword_iwordi?和wordjword_jwordj?的相關性。,整個過程可以概括為(初始時QiQ_iQi? 的大小為1×DimQ1 \times Dim^Q1×DimQ):
1×DimQ×KT→1×Nsoftmax→1×N×V→1×DimV1 \times Dim^Q \space \space \space \underrightarrow{\times K^T} \space \space \space 1 \times N \space \space \space \underrightarrow{\text{softmax}} \space \space \space 1 \times N \space \space \space \underrightarrow{\times V} \space \space \space 1 \times Dim^V1×DimQ???×KT????1×N???softmax????1×N???×V????1×DimV
不難發現,對于每一個QiQ_iQi?,分別計算再將結果Concatenate和直接使用QQQ進行計算得到的結果是一致的:
N×DimQ×KT→N×Nsoftmax→N×N×V→N×DimVN \times Dim^Q \space \space \space \underrightarrow{\times K^T} \space \space \space N \times N \space \space \space \underrightarrow{\text{softmax}} \space \space \space N \times N \space \space \space \underrightarrow{\times V} \space \space \space N \times Dim^VN×DimQ???×KT????N×N???softmax????N×N???×V????N×DimV
上述介紹中,筆者實際上省略了論文中的一個重要操作——除以DimK\sqrt{Dim^K}DimK?,文中給出的此操作的作用是:作者同時測試了點積注意力和additive attention(出自文章)的表現,在DimKDim^KDimK很小時,兩種注意力的性能接近,在DimKDim^KDimK很大時,前者的表現要更出色。而隨著DimKDim^KDimK的增加,點積操作QKTQK^TQKT得到的結果會變大,經過softmax\text{softmax}softmax后,反向傳播回來的梯度會很小,會對訓練過程帶來阻礙,故除以DimK\sqrt{Dim^K}DimK?進行縮放,再進行softmax\text{softmax}softmax。綜上,完整的計算Attention的過程為:
Attention(Q,K,V)=softmax(QKTDimK)V\text{Attention}(Q, K, V)=\text{softmax}(\frac{QK^T}{\sqrt{Dim^K}})VAttention(Q,K,V)=softmax(DimK?QKT?)V
現在,總結一下注意力到底做了什么。我覺得用一句話概括,就是:使用K,VK, VK,V來獲得QQQ的更優表示。(以下部分參考了[2])
QQQ代表我們想要表達的內容(或序列,暫記為XXX)在高維空間AAA中的表達,KKK代表某內容(或序列,暫記為YYY)在高維空間AAA中的表達,VVV代表某內容(或序列,暫記為YYY)在高維空間BBB中的表達。即:
Q=A(X),K=A(Y),V=B(Y)Q=A(X), \space K=A(Y), \space V=B(Y)Q=A(X),?K=A(Y),?V=B(Y)
也就是說,通過計算兩個不同序列X,YX, YX,Y在同一高維空間AAA的相似度,作為權重作用在序列YYY在另一高維空間BBB上,從而獲得序列XXX在高維空間BBB中的表達B(X)B(X)B(X)。
由上面這些分析可知,在注意力模塊中,必滿足以下兩個約束:
自注意力
其實只有一句話,Q=K=VQ=K=VQ=K=V
多頭注意力
這部分也很好理解,就是通過多組不同的Q,K,VQ, K, VQ,K,V分別計算注意力,再Concat一下。這樣可以學到不同空間的表示。
Positional Encoding
TO DO.
參考
[1] https://blog.csdn.net/longxinchen_ml/article/details/86533005
[2] https://zhuanlan.zhihu.com/p/104393915
BERT
引言
Pre-training of Deep Bidirectional Transformers for Language Understanding
文章鏈接
解析
TO DO.
參考
總結
以上是生活随笔為你收集整理的Transformer、BERT学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021.02.18 Visual QA
- 下一篇: 2021.02.23 Visual QA