圖解Attention

關於Attention的公式推導,我在這篇文章講過了,本篇文章主要以圖示的方式進行講解

下圖是一個Encoder架構,s0s_0從值上來說與hmh_m是相等的,只不過這裏換了個名字

首先我們需要將s0s_0和所有的hi (i=1,...,m)h_i\ (i=1,...,m)計算一個"相關性",比方說計算s0s_0h1h_1之間的相關性計算得α1=align(h1,s0)\alpha_1=align(h_1, s_0)

計算得到m個相關性αi\alpha_i之後,將這些值與hih_i進行加權平均,即
c0=i=1mαihi=α1h1+αmhm c_0=\sum_{i=1}^m \alpha_i h_i=\alpha_1h_1+···\alpha_mh_m
我們可以直觀的感受一下這樣做有什麼作用,對於那些值比較大的αk\alpha_k,最終c0c_0中也會有一大部分來自於hkh_kc0c_0實際上考慮到了所有時刻的hh,只不過對於某些時刻可能關注的更多,而某些時刻關注的更少,這就是注意力機制

之後將s0,c0,x1s_0,c_0,x'_1作爲t=0t=0時刻Decoder 的輸入,計算得到s1s_1,然後再計算s1s_1與所有hi (i=1,...,m)h_i\ (i=1,...,m)之間新的相關性αi\alpha_i

同樣的,將新計算得到的αi\alpha_ihih_i做加權平均,得到新的context vector c1c_1

重複上述步驟,直到Decoder結束

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kXBKjnuD-1593652073210)(https://i.loli.net/2020/07/01/yqm7WM4tKQpVc6B.png#shadow)]

到這裏實際上整個Seq2Seq(with Attention)就講完了,但是其中還有一些細節,比方說,align()函數怎麼設計?cic_i如何應用到Decoder中?下面一一解釋

align()函數如何設計?

有兩種方法,在最初的論文,即Bahdanau的論文中,他的設計方式如下圖所示

現在比較主流的,同時也是Transformer結構使用的方法如下所示

cic_i如何應用到Decoder中?

廢話不多說,直接見下圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章