Attention(注意力机制)

  • Attention for Image
  • Attention for Machine Translation
  • Self-Attention

没有image-Attention:看图说话


整个网络属于分类任务。

Question:为什么不采用最后一层?

因为最后一层缺乏泛化能力(Lack of generalization capability)

LSTM部分

将CNN全连接层(FC4096)获得的向量称为v,通过线性转换获得矩阵Wih,引入LSTM网络中,获得函数:
$$h=tanh(W_{xh}\times x+w_{hh}\times h+Wih\times v)$$

同时,通过$Softmax$函数获得一个分布输出,得到概率最大值。

循环训练模型

缺陷!!!

  • 错误叠加
    如果某一部分错误,那后面也会错误
  • Debug:错误在哪里?
    上述方法生成的每一个描述,依赖于上一描述。
  • 图像中的多个对象可能输出不同结果

image-Attention:看图说话

将注意力集中到图像中的某个或某几个对象,从而提高准确度。

大致流程

图片 -> CNN ->分为$N\times N = L$个区域,每个区域提取特征向量D -> 非线性转换f获得$h_0$ -> 获得$a_1$表示相关性:

$z$是加权平均值

完整表示生成第一个单词:

生成所有单词:

No attendtion:机器翻译-Seq2Seq模型

缺陷:

  • Long-term Dependence
    可以捕获短时间的关系,但是长时间的关系无法捕获。例如$W_3$可以捕获$W_1$,但是$W_{50}$难以捕获$W_1$。在利用梯度下降的方法进行计算的是时候,很容易出现梯度爆炸或者梯度消失。

    所以长句子的翻译通常不是很准确

  • bottleneck problem
    在Multimodel Learning中的中间向量来自左侧的输出结果,但是中间向量直接影响输出结果,所以中间向量被称为bottleneck

    一但中间向量出现问题,那么后面就出现输出错误。这个问题称为bottlenect problem

  • 注意力较差,可解释性较差。

Attention:机器翻译-Seq2Seq模型

大致流程

Encoder 部分变化不大,但是在生成第一个单词的时候,要将注意力放在第一个词。

那么How to do it?

分别计算$h_1$与$v_i$的内积:获得:score:$h_1\cdot v_1, h_1\cdot v_2, h_1\cdot v_3$
然后通过Normalization获得一个和为1的权重向量,求加权平均数$z_1$:

Self-Attention

Transformer

时序模型必然存在梯度问题。我们尝试使用非时序类模型来实现时序模型的特点,即捕获相关性。
Transformer是深度学习模型,纵向深度很深。Transformer也是一个Encoder-Decoder模型。

拆分可分为:

Feed Forward负责非线性转换,Self-Attention是关键。

Self-Attention详解

$x_1,x_2$代表的是输入的Embedding,定义了三个不同矩阵$W^Q,W^K,W^V$,那么$x_1\times W^Q = q_1,x_2\times W^Q = q_2,x_1\times W^K = k_1 ......$ 。

我们需要捕获不同单词之间的dependence,所以我们需要计算当前单词与其他单词的相关性,即使用当前单词的Queries分别与当前的词的Keys和其他单词的Keys求内积获得Score。

Score通过Normalization获得权值和为1的多个值。然后通过每个值分别与Values求加权平均值获得$z$
$$z_i = (softmax_i\times V_i+softmax_i\times V_{i+1}+......)$$

为什么在归一化之前要除以$8\sqrt{d_k}$?
$8\sqrt{d_k}$是一个实验值,$d_k$是向量的纬度,直接获得的Score值较大,直接通过softmax转换会使差距过大,导致部分权值失效。

通过这样的计算,可以获得某个单词与其他单词的关系:

颜色越深表示关系Score值越大,则关系越深。显然,"It"指的是"animal",所以"animail"颜色最深。

(CV学习笔记)Attention的更多相关文章

  1. C# Emgu CV学习笔记二之图像读写的两种方法

    http://blog.csdn.net/marvinhong/article/details/6800450 图像显示在控件loadPictureBox上 方法一 //读取图像001.jpg Int ...

  2. (CV学习笔记)看图说话(Image Captioning)-2

    实现load_img_as_np_array def load_img_as_np_array(path, target_size): """从给定文件[加载]图像,[缩 ...

  3. (CV学习笔记)看图说话(Image Captioning)-1

    Background 分别使用CNN和LSTM对图像和文字进行处理: 将两个神经网络结合: 应用领域 图像搜索 安全 鉴黄 涉猎知识 数字图像处理 图像读取 图像缩放 图像数据纬度变换 自然语言处理 ...

  4. Emgu cv 学习笔记

    http://www.cnblogs.com/CoverCat/p/5003363.html emgu中imagebox与picturebox imagebox 是emgu   设置好厚,新出现的控件 ...

  5. (CV学习笔记)梯度下降优化算法

    梯度下降法 梯度下降法是训练神经网络最常用的优化算法 梯度下降法(Gradient descent)是一个 ==一阶最优化算法== ,通常也称为最速下降法.要使用梯度下降法找到一个函数的 ==局部最小 ...

  6. 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...

  7. OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置

    摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的, ...

  8. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  9. 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二

    今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...

随机推荐

  1. RabbitMQ简介、安装、基本特性API--Java测试

    新的阅读体验地址:http://www.zhouhong.icu/post/141 本篇文章所有的代码:https://github.com/Tom-shushu/Distributed-system ...

  2. .net 程序员的centos命令总结

    1,ssh相关 在初始化一台云服务器的时候,第一件事情就是去把该关的门都关上,首先第一关就是禁用root登录,禁用密码登录,顺便改一下远程登录端口,让登录都通过ssh密钥对来进行,阿里云里有密钥对管理 ...

  3. 绿色物流-智慧仓储监控管理 3D 可视化系统

    前言 随着电子商务产业的迅速发展,快递爆仓已成为了困扰仓储物流的一大难题.大量的碎片化订单,传统仓储管理和运作方式已无法满足,加速仓储物流管理的智能化.自动化升级创新,延伸而出的智慧物流概念成为物流行 ...

  4. Poj3660(floyd)

    题目传送门 题意:编号为1-N的奶牛参加比赛,告诉我们m场比赛结果试问有几头奶牛的排名可以确定. 题解:其实就是一个传递闭包的模板题,用Floyd把所有有联系的比赛结果串在一起. Ac 代码: #in ...

  5. N皇后求解。万万没想到,只用一个一维数组就搞定了。还体现了回溯。

    一.啥是N皇后?先从四皇后入手 给定一个4x4的棋盘,要在棋盘上放置4个皇后.他们的位置有这样的要求,每一列,每一行,每一对角线都能有一个皇后. 你可能会对这个对角线有疑惑,其实就是每一个小正方形的对 ...

  6. 拇指记者深入Android公司,打探事件分发机制背后的秘密

    前言 聊到事件分发,很多朋友就会想到view的dispatchTouchEvent,其实在此之前,Android还做了很多工作. 比如跨进程获取输入事件的方式?在dispatchTouchEvent责 ...

  7. 201871030116-李小龙 实验一 软件工程准备——Blog

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

  8. Kafka核心技术与实战,分布式的高性能消息引擎服务

    Kafka是LinkedIn开发并开源的一套分布式的高性能消息引擎服务,是大数据时代数据管道技术的首选. 如今的Kafka集消息系统.存储系统和流式处理平台于一身,并作为连接着各种业务前台和数据后台的 ...

  9. Linux 用户和用户组管理(useradd userdel groupadd groupdel)

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. Linux系统用户账户的 ...

  10. 期末考试复习c#时总结的抽象类与接口的一些区别

    抽象类: (1)抽象类中可以定义抽象方法,属性,变量 (2)抽象类的派生类必须实现所有的抽象方法.要求所有的派生非抽象类都要用override重写实现抽象方法. (3)抽象类可以存放抽象方法,属性,也 ...