文章目录

  • 问题描述
  • Encoder-Decoder结构
  • 机器翻译问题
    • 基本模型结构
    • 注意力机制
  • Image Caption Generation
    • 基本模型结构
    • 注意力机制

问题描述

Image Caption Generation又称为图像描述生成、图像字幕生成等,主要目的是根据图像生成一段文本描述。2016年,Kelvin Xu 等人提出了经典的CNN+RNN with Attention结构来解决这一问题,原文链接为:原文地址,本篇博文侧重于对该模型的原理进行分析。在介绍模型前,我们有必要先回顾一下经典的Encoder-Decoder结构,并了解该结构在机器翻译问题上的应用。


Encoder-Decoder结构

顾名思义,Encoder-Decoder结构由一个Encoder和一个Decoder构成,Encoder对输入数据进行编码,而Decoder对编码进行解码。该结构的一个典型应用就是自编码器(Auto-Encoder),其结构如下图所示。

    AutoEncoder的主要功能是特征提取,以图像数据为例,其工作过程为:Encoder将输入图像编码为一个特征矢量,而Decoder将特征矢量恢复为一幅图像,我们期望输入图像和解码图像尽可能一致。若模型能够实现对压缩数据的复原,我们就认为Encoder得到的特征矢量表示了原图像不可忽略的特征。原理上,AutoEncoder提取到的图像特征可用于分类器模型的训练。


机器翻译问题

机器翻译的目的是将一种语言的文本翻译成另一种语言的文本,也可以使用Encoder-Decoder结构进行解决。

基本模型结构

解决机器翻译问题的基本模型结构如下图所示。Encoder部分由一系列LSTM单元实现,对包括起始符和结束符的句子进行编码,得到表示原文本全局信息的特征矢量(图中黑色实线)。Decoder部分也由一系列LSTM单元实现,实现对特征矢量的逐步解码。Decoder部分每个LSTM单元的输入是Encoder编码矢量(图中黑色实线)和前一个LSTM单元输出矢量(图中红色实线)的串联,当解码至终止符时停止解码。

注意力机制

观察上面的模型结构可以发现,Encoder和Decoder之间只使用了一个代表原文本全局信息的特征矢量进行连接,这将严重的影响解码效果。若原文本的长度过长,Decoder很难根据原文本的全局信息实现逐个单词的精确解码。
    实际上,人类在进行翻译的时候往往不是读完整个句子再进行翻译,而是边读边翻译,即翻译每个单词的时候只关注原文本的一些局部信息就可以完成精确翻译。假设我们要将原文本 “I love you” 翻译为“我爱你”,在翻译‘我’时,我们仅需要关注 ‘I’ 而不需要关注其他单词,在翻译‘爱’时,我们仅需要关注 ‘love’ 而不需要关注其他单词。实际上,只关注某些局部信息进行解码就是我们常说的注意力机制,带注意力机制的机器翻译模型如下图所示。

    从模型中可以看到,Encoder和Decoder不再使用单一的特征矢量进行连接,而是在Decoder部分引入了注意力机制。Encoder部分仍然使用一系列LSTM单元对原文本进行编码,而Decoder在每一步解码时关注原文本的不同部分进行解码。Decoder部分每个LSTM单元的输入为注意力单元的输出(图中黑色实线)和上一个LSTM单元输出矢量(图中红色实线,第一个LSTM单元使用起始符的编码矢量)的串联。而每个注意力单元的输出是Encoder每个LSTM单元输出矢量的加权平均(图中紫色实线)和Decoder前一个LSTM单元隐层矢量(图中黄色实线)的叠加,其中每条紫色实线的权值代表不同的注意力大小。


Image Caption Generation

基本模型结构

Image Caption Generation问题的基本模型与机器翻译问题的基本模型十分相似,也由一个Encoder和一个Decoder组成,模型结构如下图所示。

    Encoder部分通常使用CNN(例如Inception结构、Resnet结构等)将输入图像转换为一系列特征图像,以ResNet-101网络(不包括最后的池化层和全连接层)为例,它可以将299×299的输入图像转换为2048张14×14的特征图,通过reshape操作,我们可以得到一个表示图像全局信息的特征矢量。Decoder部分仍使用一系列LSTM单元实现,每个LSTM单元的输入是Encoder编码矢量(图中黑色实线)和前一个LSTM单元输出矢量(图中红色实线)的串联。

注意力机制

与机器翻译问题类似,在每一步解码时关注图像的不同局部进行解码能从一定程度上提高解码精度,引入注意力机制的模型如下图所示。在原模型的基础上,Decoder部分每个LSTM单元的输入变为注意力单元的输出(图中黑色实线)和前一个LSTM单元输出矢量(图中红色实线)的串联,而每个注意力单元的输入是若干个特征图的加权平均(图中紫色实线)和Decoder部分上一个LSTM单元的隐层矢量(图中黄色实线)。

Image Caption Generation原理简介相关推荐

  1. 从Image Caption Generation理解深度学习

    作者:李理 from: http://geek.csdn.net/news/detail/97193 Part I 从Image Caption Generation理解深度学习(1) 0. 前面的话 ...

  2. 遗传算法(GA)的原理简介与应用【python实现】

    遗传算法(GA)的原理简介与应用[python实现] 算法原理简介与实现 算法框架 关于GA求解过程中一些结果的讨论 SA-GA总结与体会 算法原理简介与实现 遗传算法(Genetic Algorit ...

  3. CRT显示器原理简介

    CRT显示器原理简介---摘自< FPGA PROTOTYPING BY VERILOG EXAMPLES >By-- Pong P. Chu   (Cleveland State Uni ...

  4. javascript原理_JavaScript程序包管理器工作原理简介

    javascript原理 by Shubheksha 通过Shubheksha JavaScript程序包管理器工作原理简介 (An introduction to how JavaScript pa ...

  5. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  6. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

  7. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  8. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  9. 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )

    文章目录 一.主线程中的 Handler 与 Looper 二.Handler 原理简介 一.主线程中的 Handler 与 Looper Android 系统中 , 点击图标启动一个应用进程 , 就 ...

最新文章

  1. Selenium基础知识
  2. [动画工具] Animations
  3. 2011年计算机一级考试题,2011年计算机一级考试模拟试题及参考答案(1)
  4. sparkTransformation算子
  5. 总结之:CentOS 6.5 LAMP分主机平台的搭建及测试
  6. SQL大圣之路笔记——SQL 行转列,列转行
  7. frame越过另一个frame_Python3.6实现一个简单的文本编辑器
  8. 2019.7.26随堂笔记
  9. 断网重启路由器就好_电脑断网重启路由器就好了怎么回事
  10. 深圳学校积分计算机,深圳计算机 初级证书入户积分吗,看这里就知道了!
  11. 使用OpenCV和Python进行人脸识别
  12. 关于安装不上tesseract和opencv以及稀里糊涂的解决方案
  13. 测试人员如何区分前端和后台BUG方法流程
  14. 不同cpu matlab,求助大神,为何不同机器运行MATLAB结果不同
  15. 解决vue-admin-template插件element UI组件默认英文改中文
  16. java 类型参数推断
  17. 以下python注释代码中_以下 Python注释代码不正确的是()
  18. 正弦函数泰勒展开c语言,C++ 学习笔记_0012_函数(泰勒展开式、三角函数表)
  19. SEO搜索引擎优化方式
  20. 项目中使用过的Soc

热门文章

  1. DataFactory造数-前期准备工作(DF安装、myodbc32的安装与配置、Oracle客户端的安装与配置)
  2. movidius 神经计算棒 ncsdk windows 平台 支持 配置 教程
  3. 程序员工资为什么普遍很高,原来是因为这个。。。
  4. 华为防火墙产品介绍及工作原理
  5. 优秀工程师应该具备哪些素质_优秀的工程师该具备什么能力?
  6. 父母的期许与自己的愿望
  7. 机器学习的五大分类,监督学习 无监督学习 半监督学习 迁移学习 增强学习
  8. 每周一品 · 音圈电机(VCM)中的磁性材料
  9. ionic(mui、elementUI)自定义字体图标
  10. 电机qudong电路