Multimodal —— 看圖說話(Image Caption)任務的論文筆記(二)引入attention機制

      在上一篇博客中介紹的論文「Show and tell」所提出的NIC模型採用的是最「簡單」的encoder-decoder框架,模型上沒有什麼新花樣,使用CNN提取圖像特徵,將Softmax層以前的那一層vector做爲encoder端的輸出並送入decoder中,使用LSTM對其解碼並生成句子。模型很是直觀,並且比常規的encoder-decoder框架還要簡單一點(圖像特徵只在開始時刻輸入了decoder,此後就不輸入了),可是訓練的過程很是講究,所以取得了2015COCO任務的第一名。html

attention機制的引入  

      對於seq2seq任務來講,在沒有attention機制的時候,decoder在不一樣的時刻對接收到的信息進行解碼並生成單詞時,所接收到的encoder vector都是相同的。可是實際上,在生成不一樣的詞時,所應「關注」的信息是不同的:好比說想把「我愛天然語言處理」翻譯成「I love NLP」時,生成「love」這個詞的時候,模型應該更加關注「愛」這個詞。attention機制就是爲了實現在生成一個詞時去關注當前所「應該」關注的顯著(salient)信息這一目的,手段就是對輸入信息的各個局部賦予權重這篇博客介紹了在自動文摘任務中,引入attention的比較早期的工做。git

Show, Attend and Tell 論文閱讀筆記

      [1] Show, Attend and Tell: Neural Image Caption Generation with Visual Attentiongithub

      這篇文章提出了在傳統的encoder-decoder框架中結合注意機制的方法,這種結合attention機制的seq2seq學習,已經成爲了機器翻譯領域裏的 state-of-the-art 。算法

      本文的caption模型中,在解碼的每一個時刻都會接收由attention機制所計算出的編碼向量。做者首先指出,此前的工做使用CNN在分類以前的最後一層vector表示做爲圖像特徵的缺點是丟失了可以使caption變得更豐富的一些信息(NIC那篇論文也提到在分類數據集上預訓練的CNN拋棄了諸如顏色等對分類沒有幫助的特徵),所以這裏使用 low-level 的表示。隨後指出這項工做使用兩種attention「soft」 deterministic attention 和 「hard」 stochastic attention,經過 $\phi$ 函數來控制。網絡

      1. 模型結構app

      (1)encoder:卷積特徵框架

      在encoder端,模型使用CNN來提取 L 個 D 維vector,每個都對應圖像的一個區域:ssh

$$a=\{ \textbf{a}_1,...,\textbf{a}_L \},\quad\textbf{a}_i\in\mathbb{R}^D$$函數

      與此前的工做使用Softmax層以前的那一層vector做爲圖像特徵不一樣,本文所提取的這些vector來自於 low-level 的卷積層,這使得decoder能夠經過選擇全部特徵向量的子集來選擇性地聚焦於圖像的某些部分。這個樣子就有點像NLP裏的seq2seq任務了,這裏的輸入從詞序列轉變成了圖像區域vector的序列。學習

      (2)decoder:LSTM

      用RNN來解碼並生成詞序列,已是再熟悉不過的套路了,實在是不想再贅述了,可是文中提到了幾個比較有意思的點。

      模型生成的一句caption被表示爲各個詞的one-hot編碼所構成的集合時:

$$y=\{ \textbf{y}_1,...,\textbf{y}_C \},\quad\textbf{y}_i\in\mathbb{R}^K$$

其中 K 是詞表大小,C 是句子長度。

      LSTM的數學模型以下(省略偏置,本文全部關於神經網絡的式子都省略了偏置):

$$\begin{pmatrix}\textbf{i}_t \\\textbf{f}_t \\\textbf{o}_t \\\textbf{g}_t \\\end{pmatrix}=\begin{pmatrix}\sigma\\ \sigma\\ \sigma\\ \tanh \end{pmatrix}T_{D+m+n, n} \ \begin{pmatrix}E\textbf{y}_{t-1}\\ \textbf{h}_{t-1}\\ \hat{\textbf z}_t \end{pmatrix}$$

$$\textbf{c}_t=\textbf{f}_t \odot \textbf{c}_{t-1} + \textbf{i}_t \odot \textbf{g}_t$$

$$\textbf{h}_t = \textbf{o}_t \odot \tanh(\textbf{c}_t)$$

      第一個式子其實是四個式子,分別獲得輸入門、遺忘門、輸出門和被輸入門控制的候選向量。其中,三個門控由sigmoid激活,獲得的是元素值皆在 0 到 1 之間的向量,能夠將門控的值視做保留機率;候選向量由tanh激活,獲得的是元素值皆在 -1 到 1 之間的向量。$T_{s,t}$ 表明的是從 $\mathbb R^s$ 到 $\mathbb R^t$ 的映射。

      最右邊括號裏的三個量是四個式子共有的三個輸入量:$E\textbf y_{t-1}$ 是look-up獲得詞 $y_{t-1}$ 的 m 維詞向量;$\textbf h_{t-1}$ 是上一時刻的隱狀態;$\hat{\textbf z}_t\in\mathbb R^D$ 是LSTM真正意義上的「輸入」,表明的是捕捉了特定區域視覺信息的上下文向量,既然它和時刻 t 有關,就說明它是一個動態變化的量,在不一樣的時刻將會捕捉到與本時刻相對應的相關圖像區域。這個量將由attention機制計算獲得,後面會詳細介紹。相比之下,在上篇博客所介紹的NIC模型中,解碼過程除了在首個時刻輸入了圖像特徵以外,隨後並不存在這個輸入,而本文的模型則與標準的encoder-decoder框架同樣,將encoder端獲得的信息在每一時刻都輸入decoder。

      第二個式子是更新舊的細胞狀態,element-wise 的運算表示三個門控將對各自控制的向量的每一個元素作「取捨」:0 到 1 分別表明徹底拋棄到徹底保留。

      第三個式子是獲得隱狀態。值得注意的是,做者給出了隱狀態和細胞狀態的初始值的計算方式,使用兩個獨立的多層感知機,感知機的輸入是各個圖像區域特徵的平均:

$$\textbf c_0=f_{\text{init,c}}(\frac1L\sum_{i=1}^L\textbf a_i)$$

$$\textbf h_0=f_{\text{init,h}}(\frac1L\sum_{i=1}^L\textbf a_i)$$

      有了隱狀態,就能夠計算詞表中各個詞的機率值,那麼取機率最大的那個做爲當前時刻生成的詞,並將做爲下一時刻的輸入。其實就是個全鏈接層:

$$p(\textbf{y}_t|\textbf{a}, \textbf y_1,...,\textbf y_{t-1}) \propto \exp (L_o (E \textbf{y}_{t-1} + L_h \textbf{h}_t + L_z \hat{\textbf{z}}_t))$$

      2. attention機制

      下面就是重頭戲,本文提出的兩種attention機制。

      經過attention機制計算出的 $\hat{\textbf z}_t$ 被稱爲 context vector,是捕捉了特定區域視覺信息的上下文向量。

      首先須要明確,attention要實現的是在解碼的不一樣時刻能夠關注不一樣的圖像區域,進而能夠生成更合理的詞。那麼,在attention中就有兩個比較關鍵的量,一個是和時刻 t 相關,對應於解碼時刻;另外一個是輸入序列的區域 $\textbf a_i$,對應圖像的一個區域。

      實現這種機制的方式就是在時刻 t ,爲輸入序列的各個區域 i 計算出一個權重 $\alpha_{ti}$ 。由於須要知足輸入序列的各個區域的權重是加和爲一的,使用Softmax來實現這一點。至於Softmax須要輸入的信息,則如上所講,須要包含兩個方面:一個是被計算的區域 $\textbf a_i$ ,另外一個就是上一時刻 t-1 的信息 $\textbf h_{t-1}$ :

$$e_{ti}=f_{\text{att}}(\textbf a_i,\textbf h_{t-1})$$

$$\alpha_{ti}=\frac{\exp(e_{ti})}{\sum_{k=1}^L\exp(e_{tk})}$$

式中的 $f_{\text{att}}$ 是耦合計算區域 i 和時刻 t 這兩個信息的打分函數。文中使用多層感知機,也算是最經常使用的了,我以爲是由於內積太簡單,而雙線性的參數太多,索性用最簡單粗暴的 MLP 。可是我也看過一些paper裏面用好幾回attention時用不同的打分函數。

      如今,有了權重,就能夠計算 $\hat{\textbf z}_t$ 了:

$$\hat{\textbf z}_t=\phi(\{\textbf a_i\},\{\alpha_{ti}\})$$

這個函數 $\phi$ 就代指文中提出的兩種attention機制,對應於將權重施加到圖像區域到兩種不一樣的策略。

      (1)Stochastic 「Hard」 Attention

      首先介紹文中提出的第一種attention機制,hard attention。

      在 hard attention 機制中,權重 $\alpha_{ti}$ 所扮演的角色是圖像區域 $\textbf a_i$ 在時刻 t 被選中做爲輸入decoder的信息的機率,有且僅有一個區域會被選中。爲此,引入變量 $s_{t,i}$ ,當區域 i 被選中時取值爲 1 ,不然爲 0 。那麼有

$$\hat{\textbf z}_t=\sum_{i}s_{t,i}\textbf a_i$$

      這裏面還還沒有解決的問題就是 $s_{t,i}$ 怎麼求。在本文中,將 $s_t$ 視做隱變量,爲參數是 $\{\alpha_i\}$ 的多元貝努利分佈(貝努利分佈就是兩點分佈):

$$p(s_{t,i}=1|s_{j<t},\textbf a)=\alpha_{t,i}$$

      爲了使用極大似然估計,須要將隱變量 marginalize out,而後用marginal log-likelihood的下界(variational lower bound)來做爲目標函數 $L_s$ ,這一思路就是EM算法的思路:

$$\begin{aligned}\log p(\textbf y|\textbf a)&=\log\sum_sp(s|\textbf a)p(\textbf y|s,\textbf a)\\&\geq \sum_sp(s|\textbf a)\log p(\textbf y|s,\textbf a)\end{aligned}$$

$$L_s=\sum_sp(s|\textbf a)\log p(\textbf y|s,\textbf a)$$

式中的 $\textbf y$ 是爲圖像 $\textbf a$ 生成的一句caption(由一系列one-hot編碼構成的詞序列)。不等號那裏是琴生不等式(Jensen,我一直叫琴生,由於好聽~~)。

      對目標函數求梯度:

$${\partial L_s \over \partial W} = \sum_s p(s | \mathbf{a}) \left[ {\partial \log p(\mathbf{y} | s, \mathbf{a}) \over \partial W} + \log p(\mathbf{y} | s, \mathbf{a}) {\partial \log p(s | \mathbf{a}) \over \partial W} \right]$$

用 N 次蒙特卡洛採樣(能夠簡單理解爲拋硬幣)來近似:

$$\overset{\sim}{s}_t \sim \mathrm{Multinoulli}_L (\{ \alpha_i \})$$

$${\partial L_s \over \partial W} \approx {1 \over N} \sum_{n=1}^N p(\overset{\sim}{s}^n | \mathbf{a}) \left[ {\partial \log p(\mathbf{y} | \overset{\sim}{s}^n, \mathbf{a}) \over \partial W} + \log p(\mathbf{y} | \overset{\sim}{s}^n, \mathbf{a}) {\partial \log p(\overset{\sim}{s}^n | \mathbf{a}) \over \partial W} \right]$$

另外,在蒙特卡洛方法估計梯度時,可使用滑動平均來減少梯度的方差。在第 k 個mini-batch時,滑動平均被估計爲先前對數似然伴隨指數衰減的累積和

$$b_k=0.9b_{k-1}+0.1\log p(\textbf y|\overset{\sim}{s}_k,\textbf a)$$

爲進一步減少方差,引入多元貝努利分佈的熵 $\mathbb H[s]$ ;並且對於一張給定圖片,0.5的機率將 $\overset{\sim}{s}$ 設置爲它的指望值 $\alpha$ 。這兩個技術提高了隨機算法的robustness(在控制領域音譯爲魯棒性,CS領域通常叫健壯性吧)。最終的學習規則爲

$$\begin{aligned}{\partial L_s \over \partial W} \approx {1 \over N} \sum_{n=1}^N p(\overset{\sim}{s}^n | \mathbf{a}) &[ {\partial \log p(\mathbf{y} | \overset{\sim}{s}^n, \mathbf{a}) \over \partial W}\\& + \lambda_r (\log p(\mathbf{y} | \overset{\sim}{s}^n, \mathbf{a}) - b) {\partial \log p(\overset{\sim}{s}^n | \mathbf{a}) \over \partial W} \\&+ \lambda_e {\partial \mathbb H[\overset{\sim}{s}^n] \over \partial W} ]\end{aligned}$$

其中的兩個係數是超參數。實際上,這個規則等價於REINFORCE:attention選擇的一系列action的reward是與在採樣attention軌跡下目標句子的對數似然成比例的。

      (2)Deterministic 「Soft」 Attention

      相比之下,在 soft attention 機制中,權重 $\alpha_{ti}$ 所扮演的角色是圖像區域 $\textbf a_i$ 在時刻 t 的輸入decoder的信息中的所佔的比例。既然這樣,就將各區域 $\textbf a_i$ 與對應的權重 $\alpha_{t,i}$ 作加權求和就能夠獲得 $\hat{\textbf z}_t$ :

$$\mathbb E_{p(s_t|a)}[\hat{\textbf z}_t]=\sum_{i=1}^L\alpha_{t,i}\textbf a_i$$

這就和機器翻譯中很是標準的end-to-end訓練很是像了,整個模型光滑、可微,利用反向傳播來進行end-to-end的訓練。

      論文裏還介紹了更多細節,好比分析瞭解碼過程的一些狀況;強迫使圖像的每一個區域在整個解碼過程當中的權重之和都相等(這種作法在目標函數中體現爲一個懲罰項),來使圖像的各個區域都對生成caption起到貢獻;增長一個跟時間有關的維度因子可讓模型的注意力集中在圖像的目標上。

      3. 實驗與例子

      這裏就不介紹模型自己之外的細節了。從結果上看,當使用BLEU做爲指標時,幾個數據集上都是hard attention的效果好過soft attention;而當使用Meteor做爲指標時,狀況相反。在論文的最後做者給出了不少對比hard attention和soft attention的展現的例子,下面摘取一例。

 

 

 

參考:

[1] Show, Attend and Tell: Neural Image Caption Generation with Visual Attention

[2] http://www.cosmosshadow.com/ml/神經網絡/2016/03/08/Attention.html

[3] http://www.cnblogs.com/alexdeblog/p/3564317.html

相關文章
相關標籤/搜索