Multimodal —— 看图说话(Image Caption)任务的论文笔记(三)引入视觉哨兵的自适应attention机制
在此前的两篇博客中所介绍的两个论文,分别介绍了encoder-decoder框架以及引入attention之后在Image Caption任务上的应用。
这篇博客所介绍的文章所考虑的是生成caption时的与视觉信息无关的词的问题,如“the”、“of”这些词其实和图片内容是没什么关系的;而且,有些貌似需要视觉特征来生成的词,其实也可以直接通过语言模型来预测出来,例如“taking on a cell”后生成“phone”。
所以作者设计了一个自适应注意力机制,使得模型在生成每个词时,可以决定模型需要关注图像还是只需要依靠语言模型;如果需要关注图像,再通过spatial attention来决定关注图像的哪个区域。中间那一行的概率值越大,就表明越需要图像特征。
Adaptive Attention 论文阅读笔记
[1] Knowing When to Look - Adaptive Attention via A Visual Sentinel for Image Captioning
这篇文章主要的idea是解码器在生成一个词时,图像特征有时候并不需要,单纯依靠语言模型就可以predict一个很合适的词。
1. encoder-decoder框架
下面还是不厌其烦地过一遍encoder-decoder框架,主要是为了为全文统一记号……
给定训练集的图像 I 和对应的描述句子 $y=\{y_1,...,y_T\}$ ,模型的训练目标是最大化似然
$$\theta^*=\arg\max_{\theta}\sum_{(I,y)}\log p(y|I;\theta)$$
(1)encoder:CNN
CNN来提取图像特征早已经成为了标配。本文的模型使用ResNet提取 k 个区域特征
$$A = \{\textbf a_1,...,\textbf a_k\},\quad \textbf a_i\in\mathbb R^{1024}$$
然后得到全局(global)图像特征
$$\textbf a^g=\frac1k\sum_i\textbf a_i$$
使用ReLU激活函数,将图像特征变换为 d 维向量
$$\textbf v_i=\text{ReLU}(W_a\textbf a_i)$$
$$\textbf v^g=\text{ReLU}(W_b\textbf a^g)$$
最后就可以得到
$$V=[\textbf v_1,...,\textbf v_k]\in\mathbb R^{d\times k},\quad\textbf v_i\in\mathbb R^d$$
(2)decoder:LSTM
将句子的概率拆解(省略了模型参数的依赖)
$$\log p(y|I)=\sum_{t=1}^T\log p(y_t|y_1,...,y_{t-1},I)$$
建模在 t 时刻生成词 $y_t$ 的条件概率,通常情况下都是选择RNN:
$$\log p(y_t|y_1,...,y_{t-1},I)=f(\textbf h_t,\textbf c_t)$$
f 是非线性函数,$\textbf h_t$ 是当前时刻的隐状态;$\textbf c_t$ 是当前时刻输入到decoder的视觉上下文向量:如果不使用attention机制时,它就是encoder计算出的编码向量,与时间 t 无关;如果使用attention机制,则是由attention机制计算出来(也就是上一篇博客的 $\textbf z_t$ ,由encoder的编码向量和decoder在上一时刻的隐状态共同决定)。
隐状态通过LSTM建模:
$$\textbf h_t=\text{LSTM}(\textbf x_t,\textbf h_{t-1},\textbf m_{t-1})\in\mathbb R^d$$
其中 $\textbf x_t=[\textbf w_t;\textbf v^g]$ 是输入信息,这里使用的是上一时刻生成的词的词向量 $\textbf w_t$ 和图像特征 $\textbf v^g$ 的拼接(concatenate),$\textbf m_{t-1}$ 是上一时刻的细胞状态。
到这里还没介绍函数 f 究竟是什么,就是普通的一层Softmax?不急,下面介绍attention时再说。
2. spatial attention机制
抛开具体任务,概括地说attention机制在seq2seq中的作用的话,其目的就是得到一个与时刻 t 相关的向量(用来取代encoder的与时刻无关的编码向量)来输入给decoder,这个向量需要反映出在解码器在时刻 t 生成一个词时对输入序列的不同部分(这里就是不同的图像区域)的关注程度的差别。用一个函数 $f_{\text{att}}$ 来表示attention机制耦合两方面信息的方式,然后就可以用Softmax得到这 k 个区域在时刻 t 被分配的权重:
$$\textbf z_t=f_{\text{att}}(V,\textbf h_t)=\textbf w_h^{\top}\tanh(W_vV+W_g\textbf h_t\textbf 1^{\top})$$
$$\boldsymbol\alpha_t=\text{softmax}(\textbf z_t)=[\alpha_{t1},...,\alpha_{tk}]$$
本文的模型中,$f_{\text{att}}$ 使用的形式是 $\textbf w_h^{\top}\tanh(W_vV+W_g\textbf h_t\textbf 1^{\top})$ 。有了权重,就可以计算出视觉上下文向量 $\textbf c_t$ :
$$\textbf c_t=\sum_{i=1}^k\alpha_{ti}\textbf v_i$$
看到这基本上可以感觉到,这个attention机制和上篇博客介绍的那篇论文里的soft attention很像,但是有细微的差别,比如这里用的隐状态是当前时刻 t 的而不是上一个时刻的。作者画了个图示意了两个机制的区别:
作者解释道,使用当前时刻的隐状态这一idea来自于ResNet的启发。作者将 $\textbf c_t$ 视作当前时刻隐状态 $\textbf h_t$ 的残差信息,其起到的作用是削减生成词时的不确定性,为 $\textbf h_t$ 补充信息。用当前时刻隐状态而不用上一时刻的这种套路,我似乎在机器翻译的文献中也见到过。
3. Adaptive Attention机制
下面这个图就是adaptive attention的示意图。相比于刚才的attention,多了一个 $\textbf s_t$ 。下面就来看看,它究竟是什么,起到了什么作用,怎么求得的。
(1)decoder已知信息 vs. attention得到的视觉上下文信息
下面就是本文的核心,自适应注意力机制。之前提到,本文的关注点就在于decoder所生成的那些与图片无关的词(如介词),或者貌似有关、但是可以直接用语言模型预测出来的词。直接用attention机制的话,是无法确定什么时候可以不依赖图像信息而直接用语言模型来生成一个词的。
作者提出了一个visual sentinel(视觉哨兵)的概念,是decoder已经知道的信息的隐式表示。与此对应地,attention机制所得到的视觉上下文向量 $\textbf c_t$ 可以看作是decoder在当前时刻从图像特征里了解到的“新”信息。
decoder的memory(细胞状态,$\textbf m_t$ )存储了长时和短时的视觉和语言学信息。这篇论文的模型从里面抽取一个新的成分——视觉哨兵 $\textbf s_t$,使得模型能够在不需要图片信息时不再关注图像特征。基于此,作者扩展了LSTM:
$$\textbf g_t=\sigma(W_x\textbf x_t+W_h\textbf h_{t-1})$$
有了门控,就可以对LSTM的细胞单元进行如下计算,抽取出视觉哨兵:
$$\textbf s_t=\textbf g_t\odot \tanh(\textbf m_t)$$
换句话说,普通版本的LSTM使用输出门控 $\textbf o_t$ 从细胞单元提取出了隐状态 $\textbf h_t=\textbf o_t\odot \tanh(\textbf m_t)$ ,这里又提取出了新的成分,也就是视觉哨兵。
那么,如何利用这个视觉哨兵向量呢?要知道,视觉哨兵向量是decoder已经知道的信息的隐式表示,而此前的attention机制所得到的视觉上下文向量 $\textbf c_t$ 可以看作是decoder从图像特征里了解到的信息。接下来就是把两者进行一个trade-off,sentinel gate $\beta_t$ 用来决定是否去关注图像特征的门控。线性加权是无敌的!
$$\hat{\textbf c}_t=\beta_t\textbf s_t+(1-\beta_t)\textbf c_t$$
$\beta_t$ 取值在 0 到 1 之间,当 $\beta_t=1$ 时就表示此时的decoder完全不需要图像信息。作者把 $1-\beta_t$ 称为 visual grounding probability。
(2)trade-off 系数的自适应求解
所谓的“自适应”,大概就是说这个 $\beta_t$ 可以计算出来,而不是手工指定。作者是这样做的:
$$\textbf z_t=f_{\text{att}}(V,\textbf h_t)=\textbf w_h^{\top}\tanh(W_vV+W_g\textbf h_t\textbf 1^{\top})$$
$$\hat z_t=f_{\text{att}}(\textbf s_t,\textbf h_t)=\textbf w_h^{\top}\tanh(W_s\textbf s_t+W_g\textbf h_t)\in\mathbb R$$
$$\hat{\boldsymbol\alpha}_t=\text{softmax}([\textbf z_t;\hat{ z}_t])\in\mathbb R^{k+1}$$
$$\beta_t=\hat{\alpha}_{t,k+1}$$
$[\textbf z_t;\hat{ z}_t]$ 是指拼接操作,在向量 $\textbf z_t$ 的基础上又加了一个元素 $\hat{ z}_t$ 。不妨概括一下,写成比较简单的样子:我把 $[\textbf z_t;\hat{ z}_t]$ 记作 $\hat{\textbf z}_t$ ,就有
$$\hat{\textbf z}_t=f_{\text{ada-att}}(V,\textbf h_t,\textbf s_t)$$
$$\hat{\boldsymbol\alpha}_t=\text{softmax}(\hat{\textbf z}_t)\in\mathbb R^{k+1}$$
换句话说,$\beta_t$ 就是使用向量 $\hat{\boldsymbol\alpha}_t$ 的最后一个元素,满足取值在 0 到 1 之间。那么attention这个模块的输出再重写一遍就是:
$$\textbf c_t=\sum_{i=1}^k\hat{\alpha}_{ti}\textbf v_i$$
$$\hat{\textbf c}_t=\beta_t\textbf s_t+(1-\beta_t)\textbf c_t$$
(3)解码方式
现在,该有的信息都有了,回答一下刚才留的那个问题,也就是LSTM输出了隐状态后,如何计算生成的词。传统的方式就是用Softmax,利用的信息包括隐状态、上一时刻的词向量、attention得到的向量。这里大同小异:
$$\textbf p_t=\text{softmax}(W_p(\hat{\textbf c}_t+\textbf h_t))$$
4. 实验与例子
这里不再介绍实验细节了,回来跑一下这篇文章的代码感受一下。总之就是,纵向比较的话,加入了视觉哨兵的自适应attention机制后效果要好于不加;横向比较的话,在这个论文在2016年11月放到arXiv时(现在已经被2017CVPR接收了),是state-of-the-art的效果。即便现在来看,其在COCO排行榜上的排名也是非常高的(JLu_CXiong的那个结果)。
Multimodal —— 看图说话(Image Caption)任务的论文笔记(三)引入视觉哨兵的自适应attention机制的更多相关文章
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型
看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(二)引入attention机制
在上一篇博客中介绍的论文"Show and tell"所提出的NIC模型采用的是最"简单"的encoder-decoder框架,模型上没有什么新花样,使用CNN ...
- 学习笔记TF060:图像语音结合,看图说话
斯坦福大学人工智能实验室李飞飞教授,实现人工智能3要素:语法(syntax).语义(semantics).推理(inference).语言.视觉.通过语法(语言语法解析.视觉三维结构解析)和语义(语言 ...
- (CV学习笔记)看图说话(Image Captioning)-1
Background 分别使用CNN和LSTM对图像和文字进行处理: 将两个神经网络结合: 应用领域 图像搜索 安全 鉴黄 涉猎知识 数字图像处理 图像读取 图像缩放 图像数据纬度变换 自然语言处理 ...
- [看图说话]在VMware Workstation 9中安装Mac OS X 10.8 Mountain Lion
本文环境: CPU:Intel Core i7 920: OS:Windows 7: 内存:8G: 玩Hackintosh各有各的理由,不管什么理由,利用虚拟机安装Mac OS X都是一个可行的办法. ...
- [看图说话] 基于Spark UI性能优化与调试——初级篇
Spark有几种部署的模式,单机版.集群版等等,平时单机版在数据量不大的时候可以跟传统的java程序一样进行断电调试.但是在集群上调试就比较麻烦了...远程断点不太方便,只能通过Log的形式,进行分析 ...
- 看图说话,P2P 分享率 90% 以上的 P2P-CDN 服务,来了!
事情是这样的:今年年初的时候,公司准备筹划一个直播项目,在原有的 APP 中嵌入直播模块,其中的一个问题就是直播加速服务的选取. 老板让我负责直播加速的产品选型,那天老板把我叫到办公室,语重心长地说: ...
- 看图说话:关于BI那点事儿
[编者按]BI=DW+数据挖掘+业务分析+社会学?BI三部曲:管数据.看数据.源数据.BI有三种放法:技术部.业务部和独立部门.BI的工作=20%数据平台+30%数据支持+50%数据应用.
- Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署
基于Logstash跑通Kafka还是需要注意很多东西,最重要的就是理解Kafka的原理. Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送 ...
随机推荐
- 影响国内WinCE7发展的最大障碍是没有D版下载
WinCE红火的时代已经过去,做嵌入式系统时考虑WinCE的越来越少,网络上相关文章也是越来越少. 但真正用过WinCE的应该有体会,它集成了文件系统,tcp/ip,GUI系统,usb驱动,就这些,你 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十一)——SpringMVC架构
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6985816.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十)--My ...
- selenium+python等待时间
等待时间可以有多种 1.硬等待 import time time.sleep(x)#等待x秒 2.浏览器每次查找一个元素都进行等待 import time br.implicitly_wait(x)# ...
- 【数据库】Mean web开发 04-MongoDB在Linux上的安装及遇到的问题
简介 Mean是JavaScript的全栈开发框架.更多介绍 用MongoDB实现持久数据的存储是Mean Web全栈开发中的一部分. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...
- 理解Java中的抽象
在计算机科学中,抽象是一种过程,在这个过程中,数据和程序定义的形式与代表的内涵语言相似,同时隐藏了实现细节. 抽象:一个概念或者想法不和任何特定的具体实例绑死. 目录 什么是抽象 抽象的形式 如何在J ...
- win7安装oracle10g数据库 提示“…实际版本为6.1”
1.最重要的是需要以管理员的身份操作 2.修改重要的文件 然后解压,在目录中找到refhost.xml(有两个,我的一个是在stage\prereq\db目录下,一个是在stage\prereq\db ...
- IBM的人工智能“沃森”首次确诊罕见白血病,只用了10分钟!
患者为一名60岁的女性,最初根据诊断结果,显示她患了急髓白血病.但在经历各种疗法后,效果并不明显. 根据东大医学院研究人员Arinobu Tojo的说法,他们利用Watson系统来对此病人进行诊断.系 ...
- 可选参数、命名参数、.NET的特殊类型、特性
1.可选参数和命名参数 1.1可选参数 语法: [修饰符] 返回类型 方法名(必选参数n,可选参数n) 注意: 1.必选参 ...
- 增强学习 | AlphaGo背后的秘密
"敢于尝试,才有突破" 2017年5月27日,当今世界排名第一的中国棋手柯洁与AlphaGo 2.0的三局对战落败.该事件标志着最新的人工智能技术在围棋竞技领域超越了人类智能,借此 ...
- phpexcl导出数据
<?php public function export_do_one(){ //excel 导出数据 import('ORG.Util.Page_new');// 导入分页类 ,修改了原来的P ...