Attention 機制
Attention 機制
介紹Attention機制過程中,經常提到t時刻或者i位置,其實這兩種表述本質上是一樣的,只不過是序列在不同問題上表達方式不同而已. 在機器翻譯中,使用術語位置更合適些;而在語音識別中使用術語時刻更合適些.
先清楚幾個變量(以機器翻譯為例)
2.1 \(X\): 待翻譯語句\(X=(x_1, x_2, ..., x_{T_x})\),語句的長度為\(T_x\)
2.2 \(Y\): 目標翻譯語句\(Y=(y_1, y_2, ..., y_{T_y})\), 語句的長度是\(T_y\)
2.3 \(\bf h\): 待翻譯語句的特征表達\({\bf h} = (h_1, h_2, ..., h_{T_x})\)
2.4 \(s_i\): decorder模塊每個輸出位置都有對應一個狀態
2.5 \(c_i\): decorder模塊每個位置輸出過程,decorder所關註特征表達也有所不同.
2.6 decorder模塊包含很多個輸出位置, 每個位置都對應一個輸出y, 一個狀態s和關註的特征h
下面再詳細介紹一下,\(\bf h\), \(s_i\), \(c_i\)
\(\bf h\)是待翻譯語句\(X\)經過encorder編碼得到的特征表示, [1]中指出, 學習得到的\({\bf h} = (h_1, h_2, ..., h_{T_x})\)
decorder模塊每個位置都對應一個狀態, 記第i個位置對應的狀態為\(s_i\), 狀態值與輸入語句\(X\)有關, 輸入語句變了, decorder模塊的所有位置狀態值都會發生變換.當然decorder第i個位置的狀態\(s_i\)
context vector \(c_i\), 在計算decorder模塊第i位置的狀態和輸出時,都要用到的. 那麽\(c_i\)的含義是什麽呢?定義如下:\(c_i = \sum _j a_{ij}h_j\), \(a_{ij}\)解釋為生成的第i個單詞\(y_i\),對齊自或者翻譯自輸入語句的第j個單詞\(x_j\)(特征表達的第j個分量)的概率. \(c_i\)就是輸入語句特征表達(代表各個單詞的特征分量)的期望,反映了生成第i個單詞,decorder重點關註的輸入單詞/輸入單詞的特征表達.
其實,很多論文中都是定義為輸入語句特征分量的加權和, 但是我也覺得使用點乘${\bf a_i * h} = (a_{11}h_1, a_{12}h_2, ..., a_{1T_{x}}h_{T_x}) $ 也可以作為\(c_i\)的定義.
那麽上面的\(a_{ij}\)又該如何定義計算呢? \(a_{ij}=\frac{exp(e_{ij})}{\sum_k exp(e_{ik})}\), 其中\(e_{ij}=a(s_{i-1}, h_j)\)用於衡量decorder模塊第i個位置輸出單詞\(y_i\)與輸入語句第j個單詞(輸入語句特征表達第j個分量)的相關度.
[2]中對各種Attention機制介紹比較全面
[1] Neural machine translation by jointly learning to align and translate
[2] https://zhuanlan.zhihu.com/p/31547842
Attention 機制