本文筆記參考Wang Shusen老師的課程:https://www.youtube.com/watch?v=Vr4UNt7X6Gw&list=PLvOO0btloRnuTUGN4XqO85eKPeFSZsEqK&index=9
1. 前言
2015年,在文獻[1]中首次提出attention。到了2016年,在文獻[2]中提出了self-attention方法。作者将self-attention和LSTM結合用在了機器閱讀任務上。為了好了解,下文将LSTM表示成SimpleRNN。
在閱讀以下内容之前,強烈建議先看看之前關于attention機制的文章介紹:Transformer自下而上(2) 注意力(Attention)機制。
2. SimpleRNN (LSTM)
由下圖可以看到傳統的LSTM的第一個輸出\(h_1\)隻依賴于兩個輸入\(x_1\)和\(h_0\)
3. SimpleRNN + Attention
下面我們會逐項介紹計算過程。
3.1 計算\(h_1\)和\(c_1\)
下圖給出了加入Attention機制後的示意圖,可以看到和Fig 1. 的差別在于我們把\(h_0\)替換成了\(c_0\)。由于\(h_0\)和\(c_0\)是已經初始化好了的,是以根據下圖中的公式我們能直接計算出\(h_1\)
接下來我們需要計算\(c_1\)。Attention的目的是為了避免遺忘,是以一種很自然的思路就是\(c_i\)是所有之前狀态\(\{h0,..,h_{i-1}\}\)的權重求和,他們的權重分别是\(\{\alpha_0,...,\alpha_{i-1}\}\)。由于通常\(h_0\)初始化為0向量,是以\(c_1=h_1\)
3.2 計算\(h_i\)和\(c_i\)
看完\(h_1\)和\(c_1\)的計算是不是還有點懵,沒關系,下面我們加大學習力度,重複多看幾次計算過程。
計算\(h\)的方法千篇一律,都是那目前的輸入\(x_i\)和前一時刻的context vector \(c_{i-1}\)拼接成一個向量後參與計算,即
\[\mathbf{h}_{i}=\tanh \left(\mathbf{A} \cdot\left[\begin{array}{l}
\mathbf{x}_{i} \\
\mathrm{c}_{i-1}
\end{array}\right]+\mathbf{b}\right)
\]
下一步是計算\(c_2\)。\(c\)的通用計算公式可以寫成 \(c_i=\alpha_1 h_1+...\alpha_{i-1} h_{i-1}\)
權重\(\alpha_i\)的計算公式為
\[\alpha_{i}=\operatorname{align}\left(\mathbf{h}_{i}, \mathbf{h}_{2}\right)
上面的\(align\)可以有不同的實作方法([3]),你隻需要知道\(\alpha_i\)表示\(h_i\)和\(h_2\)之間的權重(或者是相似度),計算出所有的\(\alpha_i\)之後我們就能計算出\(c_i\)了,這裡\(c_2=\alpha_1h_1+\alpha_2h_2\)
3.3 再計算一次
同理,要計算\(c_4\),我們仍然要通過使用\(align\)計算符計算出不同的\(\alpha\)。
注意,Fig 7裡的\(\alpha_1,\alpha_2,...\)和Fig 5裡的\(\alpha\)是不一樣的,這裡隻是為了友善講解。也就是說每計算新的\(c\)都要計算一遍不同的\(\alpha\)。為了計算這些權重,我們每次都會周遊一遍之前的資料,是以這樣可以有效解決SimpleRNN遺忘的問題。
參考文獻
[1] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate. In ICLR, 2015
[2] Cheng J, Dong L, Lapata M. Long short-term memory-networks for machine reading. In EMNLP, 2016
[3] Transformer自下而上(2) 注意力(Attention)機制 (https://zhuanlan.zhihu.com/p/374841046)
微信公衆号:AutoML機器學習 MARSGGBO ♥原創
如有意合作或學術讨論歡迎私戳聯系~
2021-05-21 16:39:50