本文為Google在2017年發(fā)表的一片關(guān)于注意力機(jī)制的文章衙解。
GitHub:https://github.com/jadore801120/attention-is-all-you-need-pytorch
主要介紹了 自注意力機(jī)制 和 多頭注意力機(jī)制虱痕。
Model
編碼器由N = 6個相同層的堆棧組成滑燃。 每層都有兩個子層碳竟。 第一個是多頭自注意力機(jī)制种远,第二個是簡單的全連接網(wǎng)絡(luò)款筑。 我們在兩個子層的每一層周圍采用了殘差連接,然后進(jìn)行層歸一化咕娄。 也就是說亥揖,每個子層的輸出是 LayerNorm (x + Sublayer(x)),其中 Sublayer(x) 是由子層本身實現(xiàn)的功能圣勒。 為了促進(jìn)這些殘差連接费变,模型中的所有子層以及嵌入層均產(chǎn)生尺寸為dmodel = 512的輸出。
解碼器還也由N = 6個相同層的堆棧組成圣贸。 除了每個編碼器層中的兩個子層之外挚歧,解碼器還插入第三子層,該第三子層對編碼器堆棧的輸出執(zhí)行多頭注意力吁峻。 與編碼器類似滑负,我們在每個子層周圍采用殘差連接,然后進(jìn)行層歸一化用含。 作者還修改了解碼器堆棧中的自注意力子層矮慕,以防止位置關(guān)注后續(xù)位置。 這種掩蓋啄骇,加上輸出嵌入被一個位置偏移的事實痴鳄,確保了對位置i的預(yù)測只能依賴于小于i位置的已知輸出。
Scaled Dot-Product Attention
輸入由維數(shù)為dk的queries和keys以及維數(shù)為dv的values組成缸夹。 我們使用所有keys計算query的點積痪寻,將每個鍵除以 \sqrt{dk},然后應(yīng)用softmax函數(shù)獲得值的權(quán)重明未。
其公式如下:
Multi-Head Attention
與使用dmodel維的keys槽华,values和queries執(zhí)行單個注意功能相比壹蔓,我們發(fā)現(xiàn)將queries趟妥,keys和values分別以不同的維度dk,dk和dv線性投影h次得到的結(jié)果更好佣蓉。
多頭注意力機(jī)制允許模型在不同位置共同關(guān)注來自不同表示子空間的信息披摄。
其公式為: