關於Attention的公式推導,我在這篇文章講過了,本篇文章主要以圖示的方式進行講解
下圖是一個Encoder架構,從值上來說與是相等的,只不過這裏換了個名字
首先我們需要將和所有的計算一個"相關性",比方說計算和之間的相關性計算得
計算得到m個相關性之後,將這些值與進行加權平均,即
我們可以直觀的感受一下這樣做有什麼作用,對於那些值比較大的,最終中也會有一大部分來自於。實際上考慮到了所有時刻的,只不過對於某些時刻可能關注的更多,而某些時刻關注的更少,這就是注意力機制
之後將作爲時刻Decoder 的輸入,計算得到,然後再計算與所有之間新的相關性
同樣的,將新計算得到的與做加權平均,得到新的context vector
重複上述步驟,直到Decoder結束
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kXBKjnuD-1593652073210)(https://i.loli.net/2020/07/01/yqm7WM4tKQpVc6B.png#shadow)]
到這裏實際上整個Seq2Seq(with Attention)就講完了,但是其中還有一些細節,比方說,align()
函數怎麼設計?如何應用到Decoder中?下面一一解釋
align()
函數如何設計?
有兩種方法,在最初的論文,即Bahdanau的論文中,他的設計方式如下圖所示
現在比較主流的,同時也是Transformer結構使用的方法如下所示
如何應用到Decoder中?
廢話不多說,直接見下圖