1. 程式人生 > >Attention 機制

Attention 機制

單詞 比較 machine 保持 ase lin 什麽 img cor

Attention 機制

  1. 介紹Attention機制過程中,經常提到t時刻或者i位置,其實這兩種表述本質上是一樣的,只不過是序列在不同問題上表達方式不同而已. 在機器翻譯中,使用術語位置更合適些;而在語音識別中使用術語時刻更合適些.

  2. 先清楚幾個變量(以機器翻譯為例)

    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})\)

    ,此處保持與待翻譯語句一樣的維度. 特征表達是經過encorder模塊得到

    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})\)

中的每個分量都包含了關於整個輸入語句\(X\)的信息, 不過每個分量也所側重. 分量\(h_j\)更多地關註輸入語句第j個位置單詞\(x_j\)周圍的幾個單詞. 這是由於采用雙向RNN結構的結果. 單向RNN, \(h_j = f(x_j, h_{j-1})\), 所以特征第i個分量\(h_j\), 是包含了輸入語句第1個到第j個單詞的信息, 但是不包括j+1之後的單詞信息,采用了雙向RNN結構, 就能保證每個特征分量都包含整個輸入語句的信息. 如下圖所示

技術分享圖片

decorder模塊每個位置都對應一個狀態, 記第i個位置對應的狀態為\(s_i\), 狀態值與輸入語句\(X\)有關, 輸入語句變了, decorder模塊的所有位置狀態值都會發生變換.當然decorder第i個位置的狀態\(s_i\)

, 還與前一個位置狀態\(s_{i-1}\)和前一個位置輸出\(y_{i-1}\). 公式化表示為\(s_i = f(y_{i-1}, s_{i-1}, {\bf h})\) . 由於是Attention based encorder-decorder, 計算第i個位置的狀態,輸出,依賴的特征向量\(\bf h\)都替換成下面將要提到的有所側重的特征內容\(c_i\). 所以, \(s_i = f(y_{i-1}, s_{i-1}, c_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 機制