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

相关文章
相关标签/搜索