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采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送 ...
随机推荐
- Docker Hub工作流程-Docker for Web Developers(6)
在Github上创建项目仓库 和创建其他Github项目一样,在Github创建一个仓库,然后在仓库里面增加一个dockerfile,然后提交并推送到Github上. 我已经创建的仓库地址:https ...
- javascript基础数据类型与引用类型
javascript一共有6种数据类型 有5种基本类型:Null,String Number,Boolean,Undefined 和一种引用类型Object 基础类型在内存中存在于栈空间中,例如 va ...
- javascript事件委托机制详解
以个人前端工作面试经历来看,javascript事件委托是问的最多的一类题目之一,熟悉事件委托能够了解你对于javascript的掌握程度. 面试官可能问一下问题,现在有5个li待办事件,需要实现当点 ...
- JS性能优化之怎么加载JS文件
IE8+等实行并行下载,各JS下载不受影响,但仍阻塞其他资源下载 如: 图片 所以首要规则就是:将JS放在body底部(推荐) 加载100kb的单个文件比4个25kb的文件快(减少外链文件数量)(脚本 ...
- Greenplum——大数据时代高性能的数据仓库与BI应用平台
一. Greenplum简介 大数据是个炙手可热的词,各行各业都在谈.一谈到大数据,好多人认为就是Hadoop.实际上Hadoop只是大数据若干处理方案中的一个.现在的SQL.NoSQL.NewSQL ...
- Mac: 易用设置
Mac是一个类unix系统,因此很多命令是类似于Linux的.例如其中的Terminal, shell等等.但是软件源鉴于国内的网络环境,是不方便配置的. 中文输入法快速切换. 在不同的语言中可以用组 ...
- 用超链接a来提交form表单
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- docker 17 安装
docker17 安装 新增一键安装命令: curl -sSL https://get.docker.com/ | sh 以下为手动安装过程 翻译自 Get Docker for Ubuntu Doc ...
- accp8.0转换教材第9章JQuery相关知识理解与练习
自定义动画 一.单词部分: ①animate动画②remove移除③validity有效性 ④required匹配⑤pattern模式 二.预习部分 1.简述JavaScript事件和jquery事件 ...
- 流行框架(angularj基础)