umich cv-6-2 注意力机制
这节课中介绍了循环神经网络的第二部分,主要引入了注意力机制,介绍了注意力机制的应用以及如何理解,在此基础上建立了注意力层以及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 注意力机制的更多相关文章
- Non-local Neural Networks 原理详解及自注意力机制思考
Paper:https://arxiv.org/abs/1711.07971v1 Author:Xiaolong Wang, Ross Girshick, Abhinav Gupta, Kaiming ...
- CVPR2021| 继SE,CBAM后的一种新的注意力机制Coordinate Attention
前言: 最近几年,注意力机制用来提升模型性能有比较好的表现,大家都用得很舒服.本文将介绍一种新提出的坐标注意力机制,这种机制解决了SE,CBAM上存在的一些问题,产生了更好的效果,而使用与SE,CBA ...
- (转)注意力机制(Attention Mechanism)在自然语言处理中的应用
注意力机制(Attention Mechanism)在自然语言处理中的应用 本文转自:http://www.cnblogs.com/robert-dlut/p/5952032.html 近年来,深度 ...
- 注意力机制(Attention Mechanism)在自然语言处理中的应用
注意力机制(Attention Mechanism)在自然语言处理中的应用 近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展.基于注意力(attention)机制的神经网络成为了 ...
- 自然语言处理中的自注意力机制(Self-attention Mechanism)
自然语言处理中的自注意力机制(Self-attention Mechanism) 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中,之前我对早期注意力 ...
- TensorFlow LSTM 注意力机制图解
TensorFlow LSTM Attention 机制图解 深度学习的最新趋势是注意力机制.在接受采访时,现任OpenAI研究主管的Ilya Sutskever提到,注意力机制是最令人兴奋的进步之一 ...
- 深度学习之注意力机制(Attention Mechanism)和Seq2Seq
这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1.注意力机制是为了解决什么问题而提出来的? 2.软性注意力机制的数学原理: 3.软性注意力机制. ...
- Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutor ...
- DeepLearning.ai学习笔记(五)序列模型 -- week2 序列模型和注意力机制
一.基础模型 假设要翻译下面这句话: "简将要在9月访问中国" 正确的翻译结果应该是: "Jane is visiting China in September" ...
- AAAI2018中的自注意力机制(Self-attention Mechanism)
近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中.随着注意力机制的深入研究,各式各样的attention被研究者们提出,如单个.多个.交互式等等.去年 ...
随机推荐
- opensbi入门
OpenSBI 入门 声明 本文为本人原创,未经允许,严禁转载. FW_JUMP FW_PAYLOAD FW_DYNAMIC FW_JUMP OpenSBI 带跳转地址的固件(FW_JUMP)是一种仅 ...
- Python数据分析易错知识点归纳(五):横向对比
五.横向对比 排序 # 列表 a.sort() # 修改原列表,返回值为None!!!!!这里很容易出错 sorted(a) # 生成新的列表 # 嵌套列表的排序(若是对字典排序,需先用list()转 ...
- Django message组件
使用message组件要在seetings中配置 ①INSTALLED_APPS (项目需要什么功能都放在这 既可以有数据库,又可以写代码,html文件,和自己写的APP一个道理) ②MIDDLE ...
- Bug_ku source (WEB) wp
在源代码中注释中发现了flag,提交发现是假的. 我们打开kali用dirserch扫描一下网站后台目录吧 发现.git ,这题应该是一个git泄露的题,用wget吧文件下载到本地,-r 选项的作用是 ...
- 创建python虚拟环境并打包python文件
前言 当需要为一个离线环境部署python应用时,离线环境可能缺少各种python环境,有docker的话可以用docker,没有docker可以用pyinstaller打包成二进制文件.pyinst ...
- 【go笔记】标准库-strconv
前言 标准库strconv提供了字符串类型与其他常用数据类型之间的转换. strconv.FormatX()用于X类型转字符串,如strconv.FormatFloat()用于浮点型转字符串. str ...
- python实现在函数中捕获某个异常,然后将异常的具体信息写入error.txt文件中;
在程序开发中,如果对某些代码的执行不能确定(程序语法完全正确) 可以增加try来捕获异常 try这个关键字来捕获异常try:尝试执行的代码except:出现错误的处理 def func(): try: ...
- 为 VitePress 网站添加 RSS 订阅支持
省流:使用 vitepress-plugin-rss 这个插件 前言 在看许多个人博客站点的时候,右上角总会有个RSS订阅的标志 恰好我的博客也是基于 VitePress 搭建的,就想看看能不能也实现 ...
- 淘宝商品详情 API的使用说明
淘宝平台提供了 API 接口可以用于获取淘宝商品详情信息.通过 API 接口,我们可以获取到商品的基本信息.价格.评论及评价等详细信息.以下是使用说明: 获取淘宝API账号 在获取淘宝商品详情 API ...
- 简单聊一聊SpringBoot的约定优于配置
Spring Boot的约定优于配置 对于今天聊的SpringBoot的约定优于配置,我打算从三个方面去展开: 1.什么是约定优于配置 1> 约定优于配置是一种软件设计的范式,其核心思想:使用一 ...