讀論文 Neural Machine Translation by Jointly Learning to Align and Translate網絡
這個論文是在NLP中第一個使用attention機制的論文。他們把attention機制用到了神經網絡機器翻譯(NMT)上。NMT其實就是一個典型的sequence to sequence模型,也就是一個encoder to decoder模型,傳統的NMT使用兩個RNN,一個RNN對源語言進行編碼,將源語言編碼到一個固定維度的中間向量,而後在使用一個RNN進行解碼翻譯到目標語言。函數
直接來看這個模型學習
$c_{i} = \sum_{j=1}^{T_{x}}\alpha_{i,j}h_{j}$編碼
$\alpha_{i,j} = \frac{exp(e_{i,j})}{\sum_{k=1}^{T_{x}}exp(e_{i,k})}$.net
$e_{ij} = a(s_{i-1},h_{j})$翻譯
咱們使用一個前饋神經網絡來對對齊網絡模型$a$進行參數化。(在這裏有一個知識點須要取了解什麼是前饋神經網絡)。對於這個前饋神經網絡模型,是總體模型的一部分,因此參數會隨着總體模型的其餘部分異同進行訓練更新,而不是單獨把這個模型拿出來訓練。code
值得注意的是這個對齊模型並非一個隱變量(什麼是隱變量在這裏有一個解釋。這個對齊模型是一個軟對齊模型,容許損失函數的梯度進行反向傳播並更新(這裏我並無看懂,爲啥軟對齊模型能夠達到這個效果)。換句話講,這個對齊模型能夠和整個翻譯模型一塊兒進行訓練更新。blog
咱們把計算隱層狀態權重和的過程能夠理解爲一個求指望隱層狀態表達的過程。 咱們能夠把$\alpha_{i,j}或者是說與它相關$當作是一個機率。這個機率的含義就是目標單詞$y_{i}$和源單詞$x_{j}$對齊的機率。或者說,目標單詞$y_{i}$是從源單詞$x_{j}$翻譯過來的機率帶下。而後對於目標單詞$y_{i}$來講的,它的環境向量$c_{i}$是一個指望中的表達,這個表達是基於annotations(這裏指的是全部的隱層狀態)和相對應的$\alpha_{ij}$的結合計算。get
$\alpha_{i,j}$或者$e_{i,j}$反應出的是$h_{j}$和上一層隱層狀態$s_{i-1}$對於下一個隱層狀態$s_{i}$和下一個單元輸出$y_{i}$io
解碼器應用這個attention機制,從而決定在原始句子中的哪一個部分須要花費更多的注意力。經過使用這個機制,編碼器消除了一個負擔,這個負擔就是不得不把全部的原始句子信息通過神經網絡由一個固定長度的向量表達。其實用了這個機制,長度也是固定的,只不過對於如今這個機制,這個向量會針對不一樣的目標單詞有着不一樣的環境向量。
我本身有一個思考,在整個模型訓練完成以後,咱們獲得的應該是一個權重矩陣C。爲何這麼說呢,由於針對每一個目標單詞,咱們都有一行的權重(其中這一行的每個權重值表明的是輸入句子中的每一個單詞的重要程度)。
對於這個權重矩陣$C_{i}$是權重矩陣的一行,表示對於目標單詞$y_{i}$輸入句子每一個單詞對應的重要程度。
對於$\alpha_{i.j}$,它表示的是一個單詞的重要程度,是$C_{i}$中的一個具體單詞的重要程度。
如今我本身有一種感受,就是說,這個權重矩陣,學習的重要程度,從如今我直觀感覺來講,它是一種兩種翻譯語言的語法關係。是輸入句子一個位置對輸出句子中的一個位置的影響程度,這個並無體現出意思之間的對應的關係。
咱們使用的是隻有一層的多層感知機來計算$a(s_{i-1},h_{j})=v_{a}^Ttanh(W_{a}s_{i-1}+U_{a}h_{j}$
(其實這裏並無搞清楚爲啥是一個多層感知機模式。多層感知機實際上是一個最簡單的神經網絡模型,若是看作是一個多層感知機,那麼輸入是$s_{i-1}$和$h_{j}$,怎麼會有兩個輸入呢?)
在原始論文中,做者說$U_{a}h_{j}$並無依賴於$i$,那麼咱們能夠提早將這個東西算出來減小計算消耗。(那麼這一步提早算出來是怎麼實現的呢?)