这节课中介绍了循环神经网络的第二部分,主要引入了注意力机制,介绍了注意力机制的应用以及如何理解,在此基础上建立了注意力层以及transformer架构

注意力机制

上次我们没有提到sequence to sequence的RNN结构:



以文字翻译应用为例,我们可以看到它由编码器与解码器组成,先是将我们要翻译的句子拆分成一个个输入向量,和之前vanilla架构做的事情一样,经过权重矩阵不断生成新的隐藏层,最终得到最初的解码状态与一个上下文向量,相当于把原始的信息都编码到这两个结果之中,然后解码器再利用上下文向量与s,不断生成新的s,同时将输出的y作为新输入向量。

但是这种结构的问题在于解码器使用的是同一个固定大小的上下文向量,当我们这个输入向量很长很长,比如有1000或者10000时,那么此时一个上下文向量很难去存储所有的编码信息。

我们可以想到,如果,我们为解码器的每一层都创建一个上下文向量,就可以解决上述问题,这就引入了注意力机制:



我们使用一个全连接网络计算s与不同隐藏层之间的匹配程度,得到e11,e12......,然后再经过一个softmax,得到一个概率分布a11,a12.....,我们可以用这个概率分布去对隐藏层进行线性组合,这样就产生了第一个上下文向量,这些权重就被称为注意力权重

这里的直觉是不同的上下文向量可以去关注输入向量最匹配的部分,从而去理解不同部分的信息

然后我们将上述部分扩大成循环形式即可,之前是用s0生成c1,然后我们用s1生成c2,再用c2计算s2与y2:

我们将上述结构引用到语言翻译中,并且可视化注意力权重的结果:



可以看到对角线上重合的说明这些英语单词与法语单词是按照顺序相对应的,中间有一部分虽然英语与法语单词不是按照顺序对应,但是注意力机制也还是发现了它们之间的关系,红色部分就是对应出现错误的部分

应用与理解

我们其实可以发现注意力机制并不关心输入向量以及隐藏层是否按照顺序,这种性质可以使它应用到更广泛的领域:



我们可以将隐藏层替换为使用cnn从图像中提取的特征图,应该注意力机制,我们可以关注图像的不同区域,并且将不同区域翻译为对应的语言:



这里的理解是注意力机制很像人的眼睛,因为人眼只有在某些方向上才能看清,所以我们的眼睛看东西的时候经常处于运动扫视的状态,和注意力机制关注在不同的step关注不同的区域很像:

注意力层

引入了注意力机制,我们自然想能够把其抽象为更模块化的注意力层,这样我们就能够将其嵌入到不同的神经网络之中

我们先理解一下注意力层中的三个重要概念:查询,键,与值(下图来自沐神ai):

注意力层相较于我们之前的结构主要有三个变化:

首先是我们要将之前的全连接层判断相似性换成点积,并且是控制大小的点积,回忆softmax函数的性质,显然过大的数字会导致梯度消失:

其次是我们要引入多个查询向量:

最后由于之前输入向量组X有两个作用,一个是计算key,一个是计算最终输出结果的value,我们可以将其分开,通过引入两个可学习的矩阵,分别计算key vector与value vector:

更进一步地,我们可以定义查询向量组也由x得到,这样我们就有了key matrix value matrix与query matrix三个可学习矩阵

同时我们也可以发现,交换输入向量的顺序,输出向量顺序也会改变:

注意力层还有很多变体,比如masked attention layer,把相似矩阵中的某些值设置为无穷小,这样能够屏蔽掉某些输入向量的影响,使得我们的输出值只与之前的某些输入有关:

多头注意力层,我们可以使用不同的可学习的权重矩阵得到不同的注意力对应的输出,再将它们拼接在一起,这样可以帮助我们关注输入的不同部分,同时也有利于并行计算

卷积神经网络与注意力层结合:

transformer

利用注意力层我们就可以去构建transformer结构:



输入向量先经过注意力层,经过layer normalization,每个标准化的向量经过不同的mlp,再经过layer normalization输出,同时在适当的地方加入残差连接

将上述的transformer block多个拼接起来,我们就得到了仅仅使用注意力机制的transformer架构(常常使用多头注意力):

使用迁移学习,我们可以训练transformer架构,并且将其应用到nlp领域的任务:

umich cv-6-2 注意力机制的更多相关文章

  1. Non-local Neural Networks 原理详解及自注意力机制思考

    Paper:https://arxiv.org/abs/1711.07971v1 Author:Xiaolong Wang, Ross Girshick, Abhinav Gupta, Kaiming ...

  2. CVPR2021| 继SE,CBAM后的一种新的注意力机制Coordinate Attention

    前言: 最近几年,注意力机制用来提升模型性能有比较好的表现,大家都用得很舒服.本文将介绍一种新提出的坐标注意力机制,这种机制解决了SE,CBAM上存在的一些问题,产生了更好的效果,而使用与SE,CBA ...

  3. (转)注意力机制(Attention Mechanism)在自然语言处理中的应用

    注意力机制(Attention Mechanism)在自然语言处理中的应用 本文转自:http://www.cnblogs.com/robert-dlut/p/5952032.html  近年来,深度 ...

  4. 注意力机制(Attention Mechanism)在自然语言处理中的应用

    注意力机制(Attention Mechanism)在自然语言处理中的应用 近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展.基于注意力(attention)机制的神经网络成为了 ...

  5. 自然语言处理中的自注意力机制(Self-attention Mechanism)

    自然语言处理中的自注意力机制(Self-attention Mechanism) 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中,之前我对早期注意力 ...

  6. TensorFlow LSTM 注意力机制图解

    TensorFlow LSTM Attention 机制图解 深度学习的最新趋势是注意力机制.在接受采访时,现任OpenAI研究主管的Ilya Sutskever提到,注意力机制是最令人兴奋的进步之一 ...

  7. 深度学习之注意力机制(Attention Mechanism)和Seq2Seq

    这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1.注意力机制是为了解决什么问题而提出来的? 2.软性注意力机制的数学原理: 3.软性注意力机制. ...

  8. Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译

    前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutor ...

  9. DeepLearning.ai学习笔记(五)序列模型 -- week2 序列模型和注意力机制

    一.基础模型 假设要翻译下面这句话: "简将要在9月访问中国" 正确的翻译结果应该是: "Jane is visiting China in September" ...

  10. AAAI2018中的自注意力机制(Self-attention Mechanism)

    近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中.随着注意力机制的深入研究,各式各样的attention被研究者们提出,如单个.多个.交互式等等.去年 ...

随机推荐

  1. CF1829H Don't Blame Me题解

    题意: 给定一个长度为 \(n\) 的数组,选择它的一个子序列(不一定要连续的),问有多少种选法使得它们 AND 的值的二进制表示法中有 \(k\) 个 \(1\). 思路: 这个题就是一个简单的 D ...

  2. 【Java】并行执行任务

    在实际的应用上,我们平时需要调用第三方的接口,可能会调用多个接口,串行执行的话, 就需要等待所有的接口调用完成之后才获取到结果,那我们有没有并行的方法的呢? 串行执行 以下是三个接口,假设他们额的执行 ...

  3. 【git】基于JGit通过ssh-url拉取指定commit-id的代码

    实现 1️⃣ pom依赖: <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>o ...

  4. Seeion相关

    存储会话数据有两种方式: Cookie 1) 存储在浏览器端,通过服务器发送cookie数据 2) 使用cookie存储会话数据,相对不安全(可以cookie查到一些用户安全) 3) 从存储数据类型来 ...

  5. Mysql基础5-用户及权限管理

    一.介绍 DCL:Data Control Language(数据控制语言),用来管理数据库用户,控制数据库的访问,权限. 二.用户管理 1.查询用户 语法: 1.use mysql; 2.selec ...

  6. 2021-6-17 plc连接

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. C# 多线程访问之 SemaphoreSlim(信号量)【进阶篇】

    SemaphoreSlim 是对可同时访问某一共享资源或资源池的线程数加以限制的 Semaphore 的轻量替代,也可在等待时间预计很短的情况下用于在单个进程内等待. 由于 SemaphoreSlim ...

  8. go语言实用工具编写要这样学

    写作目的 本篇章写作有以下目的: 介绍go语言的基础知识,这里你会发现go语言学习成本较低,与python语言相似. 介绍go语言的常用标准库,这里你会发现go语言的标准库已经非常强大,python语 ...

  9. 基于Prometheus搭建监控平台

    目录 前言 配置server单节点 prometheus.service 配置node节点 配置mysql监控 在数据库中添加exporter账户 修改mysql_exporter的配置 添加serv ...

  10. 压测工具sysbench的使用

    前言 sysBench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.sysbench提供如下测试: (1)CPU性能 (2)磁盘IO性能 (3)调度程 ...