这节课中介绍了循环神经网络的第二部分,主要引入了注意力机制,介绍了注意力机制的应用以及如何理解,在此基础上建立了注意力层以及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. Auto.Core

    Auto Core (基于AspectCore) 介绍 AutoCore是基于 .Net Standard 2.1用于简化 ASP.NET Core开发,AutoCore 在 AspectCore 的 ...

  2. PTA 21级数据结构与算法实验6—图论

    目录 7-1 邻接矩阵表示法创建无向图 7-2 邻接表创建无向图 7-3 图深度优先遍历 7-4 单源最短路径 7-5 列出连通集 7-6 哈利·波特的考试 7-7 家庭房产 7-8 森森美图 7-9 ...

  3. Java计算日期之间相差时间和解决浮点类型精度过长

    计算日期之间相差 此处相差计算以分钟为单位,自行可根据业务场景更改 /** * 测试时间相差分钟 */ @Test public void getTime() { SimpleDateFormat s ...

  4. Blazor提取出Razor类库,没有css的class的智能提示

    最开始从stackoverflow上找到了答案,有两种办法,但都不太理想 后来自己找了新的办法,其实很简单,把要用的css复制到Razor类库的wwwroot文件夹中,默认是不会复制到引用Razor类 ...

  5. U8接口开发

    https://console-docs.apipost.cn/preview/b9674fcd9949865b/a5a249fb27736c15 模块 单据 功能说明 库存管理       其他出库 ...

  6. Python爬虫实战之提高CSDN访问量

    python爬虫之建立代理池(一)_CodingInCV的博客-CSDN博客 python爬虫之建立代理池(二)_CodingInCV的博客-CSDN博客 前面2篇分别介绍了从2个免费代理网站爬取免费 ...

  7. 我真的想知道,AI编译器中的IR是什么?

    随着深度学习的不断发展,AI 模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对 AI 框架的持续迭代. AI 编译器就 ...

  8. mysql注释的方法

    单行注释:"#", "--", 多行注释:/**/ 参考链接:https://www.cnblogs.com/JiangLe/articles/6897403. ...

  9. go创建web项目分别在windows和linux部署

    转载请注明出处: 要在Linux服务器上运行Go的Web项目,可以按照以下步骤进行操作: 在服务器上安装Go:首先,在Linux服务器上安装Go编程语言.你可以从官方网站(https://golang ...

  10. 【译】基于XAML的跨平台框架对比分析

    多年来,基于XAML的UI框架已经有了很大的发展.下面的图表是最好的说明.这些框架主要包含:支持跨平台应用的Avalonia UI, Uno Platform和 .NET MAUI.事实上,除了Ava ...