這篇文章講講谷歌大腦團隊和 CMU 聯(lián)合推出的 QANet模型贩绕,QAnet是SQUAD排行榜2018年3月份排名第一的模型。既然有Bert赠法,為什么還要講QAnet麦轰?因為QAnet融合了2017年~2018年NLP領(lǐng)域一些重要的突破(各種炫酷技巧),通過學(xué)習(xí)它,你可以對NLP近兩年的發(fā)展有較為全面的了解款侵。QAnet鏈接
? ? ? ? 這篇文章從以下幾部分講:
? ? ? ? 第一部分:QANet模型整體網(wǎng)絡(luò)結(jié)構(gòu)介紹
? ? ? ? 第二部分: 分別介紹各個炫酷的技術(shù)點的原理
? ? ? ? 第三部分: 總結(jié)(與Bert對比)
? QANet融合的NLP和深度學(xué)習(xí)領(lǐng)域近兩年內(nèi)主要成果包括:
? ? (1)Fackbook 2017.5? 提出CNN seq2seq,替代LSTM 末荐,position encoding。
? ? (2)Google 2017.6 提出《Attention is all you need》 muti-head attention新锈。
? ? (3)Depthwise Separable Conv 深度可分離卷積? ? ? ?
? ? (4)Highway network 高速神經(jīng)網(wǎng)絡(luò)? ?
? ? ? ? .........
一甲脏、QANet模型網(wǎng)絡(luò)結(jié)構(gòu)介紹
QAnet整體網(wǎng)絡(luò)結(jié)構(gòu)
(1)輸入的數(shù)據(jù)有Context和Question兩部分組成。
(2)通過Embedding層轉(zhuǎn)化為Embedding向量妹笆,分為word embedding和char embedding块请。Highway network包含在embedding層中。
(3)通過Encoder Block層拳缠,Encoder Block是QANet重要組成部分,如右圖所示脊凰。Encoder Block層分別通過四個部分抖棘,Position Encoding茂腥、 Conv卷積層狸涌、Self attention和Feedword層。每個部分開頭做layernorm處理最岗,結(jié)尾做殘差連接帕胆。
(4)Context和Question的encoder向量,通過Context Query Attention計算相關(guān)性般渡。
(5)接著通過三層Encoder Block層懒豹,第一層和第二層輸出連接后,通過一層全鏈接層作為起始位置的概率驯用。
(6)第一層和第三層輸出連接后脸秽,通過一層全鏈接層作為起始位置的概率。
二蝴乔、 梳理各個炫酷的技術(shù)點
1.技能點一:Encoder Block層里的卷積
? ? ? 2017年Facebook發(fā)表了NLP領(lǐng)域重要論文《Convolutional Sequence to Sequence Learning》记餐,提到它們用卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)seq2seq,實現(xiàn)機器翻譯薇正,效果上達(dá)到LSTM網(wǎng)絡(luò)的水平片酝,效率明顯優(yōu)于LSTM。
? ? ? 這塊有很多文章可以參考挖腰,我就不細(xì)講了雕沿。
2.技能點二:Depthwise Separable Conv
? ? ? 值得注意的是,QANet用的不是簡單的CNN猴仑,而是采用Depthwise Separable Conv(深度可分離卷積)审轮。
? ? ? 這個卷積的的大致意思是對每一個深度圖分別進(jìn)行卷積再融合,步驟是先 Depthwise Conv 再 Pointwise Conv,大大減少了參數(shù)量疾渣。目的是加速整個卷積計算過程的速度贤姆。Depthwise Separable Conv來源于Inception和Xception。
? ? ? ? Inception 最初提出的版本稳衬,其核心思想就是使用多尺寸卷積核去觀察輸入數(shù)據(jù)霞捡。也就是把一個尺寸較大的卷積核替換為多個小的卷積核串聯(lián)或者并聯(lián),以降低計算量薄疚。
Inception
? ? ? ? ? 基于Inception發(fā)展而來的 Xception 碧信,作者稱其為 Extreme Inception。首先探討的是Inception 的 多尺寸卷積核 和 卷積核替換街夭,然后到 Bottleneck砰碴,最后到 Xception 的 Depthwise Separable Conv 。從Inception 到Xception大大減少參數(shù)量板丽,從而加快訓(xùn)練速度呈枉。N=1024,Dk=3,參數(shù)降為0.112埃碱。
Depthwise Separable Conv
3.技能點三:Self attention
? ? ? ? Self attention 來源于Google 2017年發(fā)表的一篇重要論文《Attention is all you need》提出的Multi-head attention猖辫。如果你關(guān)注自然語言處理領(lǐng)域,估計對這個很熟悉了砚殿。多頭”(Multi-Head)啃憎,就是只多做幾次同樣的事情(參數(shù)不共享),然后把結(jié)果拼接似炎。 比如Multi-Head Attention就是Attention做多次然后拼接辛萍,這跟CNN中的多個卷積核的思想是一致的。Self attention即兩個輸入是一樣的羡藐,自己和自己做attention計算贩毕。
multihead attention原理圖
4.技能點四:Position Encoding
? ? ? 這里的Position Encoding方式可參考Facebook的《Convolutional Sequence to Sequence Learning》,用法是一致的仆嗦。計算公式如下:
position encoding計算公式
? ? ? 對于position encoding辉阶,多說一句,個人觀點欧啤,原理上是很有道理的睛藻,但是效果并不明顯,從論文可以看出邢隧,對模型的效果貢獻(xiàn)不大店印,屬于可有可無。也就是比較接近我的說法:”炫技”倒慧。
5.技能點五:Highway Network
? ? ? ? 如果你仔細(xì)看過QAnet詳細(xì)資料按摘,可以看到QAnet的Embedding層不是簡單的把word embedding和char embedding做了一層連接作為輸出包券,而是通過highway network再做輸出。
QAnet embedding層
Highway network本質(zhì)上與殘差網(wǎng)絡(luò)作用類似炫贤,降低信息在傳輸過程中的損失溅固。這是通過一種控制穿過神經(jīng)網(wǎng)絡(luò)的信息流的閘門機制所實現(xiàn)的。通過這種機制兰珍,神經(jīng)網(wǎng)絡(luò)可以提供通路侍郭,讓信息穿過后卻沒有損失。我們將這種通路稱為information highways掠河。
6.技能點六:Batch normalization
? ? ? Batch normalization每個batch里面的很接近的樣本亮元,都?xì)w一成0均值1方差。
? ? ? 為什么要歸一成0均值1方差呢唠摹?隨著在神經(jīng)網(wǎng)絡(luò)訓(xùn)練深度加深爆捞,其整體分布逐漸發(fā)生偏移或變動,導(dǎo)致后向傳播時神經(jīng)網(wǎng)絡(luò)梯度消失勾拉,深度網(wǎng)絡(luò)收斂越來越慢煮甥。Batch normalization把越來越偏的分布強行正態(tài)分布,梯度變大藕赞,減緩梯度消失問題成肘。因此,加Batch normalization是為了使深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練速度加快找默。
7.技能點七:LayerNorm
? ? ? Encoder層每個部分的輸入都用到了LayerNorm艇劫,實現(xiàn)近似獨立同分布吼驶。
? ? ? 為什么要獨立同分布惩激?隨著神經(jīng)網(wǎng)絡(luò)的加深,每一層的輸出到下一層的輸入蟹演,會出現(xiàn)分布偏差越來越大风钻。最后輸出的target層的分布和輸入的分布差距很大。而完全的白華操作代價高昂酒请,特別是我們還希望白化操作是可微的骡技,保證白化操作可以通過反向傳播來更新梯度。
三羞反、 個人總結(jié)
? ? ? 對比下Bert和QAnet布朦,Bert整體網(wǎng)絡(luò)結(jié)構(gòu)相對于QAnet更加簡單。QANet強調(diào)技巧昼窗,Bert強調(diào)算力是趴。從對比中,可以看出NLP發(fā)展的趨勢澄惊。