【机器学习】李宏毅——自注意力机制(Self-attention)
前面我们所讲的模型,输入都是一个向量,但有没有可能在某些场景中输入是多个向量,即一个向量集合,并且这些向量的数目并不是固定的呢?

这一类的场景包括文字识别、语音识别、图网络等等。
那么先来考虑输出的类型,如果对于输入是多个数目不定的向量,可以有以下这几种输出方式:
- 每个向量对应一个输出:输出的数目与输入向量的数目一致,例如下图的词性识别、语调识别、状态识别等等:

- 只有单个输出:这种应用于例如判断一段话的正负面作用、语音辨认说话者等等,如下图:

- 机器自己决定输出多少个结果(seq2seq):如翻译、语音转文字等等。
Sequence Labeling(输入输出数目一致)
最简单的思路当然是将每一个向量单独作为一个输入,然后将其丢入到一个全连接之中,每个单独产生结果。但是这种方法的问题在于没办法考虑前后向量之间的联系。那么转换另一个思路就是开一个window,每次将window中的向量一起输入到全连接网络中,如下图:

这种方式的问题在于如果遇到某些场景需要全部向量都考虑,但是我们无法事先知道这个场景中向量的数目,我们也就很难调整我们的window去适应。在这种情况下就需要用到自注意力机制了。
Self-attention
可以将自注意力机制看成一层,其接受所有向量的输入,然后输出的数目跟输入的数目的是一样的,可以认为它的每个输出都是考虑了整个向量集之后的结果,之后再将这些输出每个单独放入一个全连接网络中来得到输出,这样可以显著的降低全连接网络的参数量。并且这个也可以多次使用,自注意力后FC再自注意力再FC等等。

那么接下来的问题就是这个机制如何接受输入并作出相应的输出。这边以第一个向量对应的第一个输出为例:

- 计算每个输入向量之间的关联性:计算关联性\(\alpha\)有很多种方法:

最常见的是这种Dot-product,就是将两个向量分别乘以一个矩阵,得到新的向量,然后再进行点乘得到一个数值,也就是\(\alpha\)
计算出两两向量之间的相关性后进行Sortmax:如下图:

对每个向量再乘以一个另外的矩阵得到一个新的向量,再进行加权和得到结果:

哪一个向量对应的\(\alpha\)(attention score)越大,那么得到的b就越接近于它所计算出来的\(v\),这就是最终结果了。
从矩阵角度理解全过程
- 由于每一个输入向量都需要计算\(q,k,v\)三个向量,因此可以利用矩阵的形式更加简洁方便的进行计算:

- 计算\(\alpha\)也是同理:

- 计算b也是转换成矩阵操作:

而经过上述的分析,可以看到需要学习的参数只有\(W^q,W^k,W^v\)而已。
Multi-head Self-attention
这是认为不同的输入向量之间可能不止有一种相关性,因此:

各种参数都有多重,只不过各自算各自的。
Position embedding
在前面的自注意力过程中,我们并没有关注到各个输入向量之间的位置信息!这在一些场景里面是很关键的一部分信息,但是我们只是计算了各自的相关性没有考虑到位置信息,因此需要加上Position embedding:

只需要在每个输入向量上加上一个\(e^i\)即可,这个里面就包含了具体的位置信息,而如何产生\(e^i\)仍然是一个在研究的问题。
CNN与Self-attention
事实上,CNN是受限制的Self-attention,也就是Self-attention的特例,Self-attention可以通过某些设计和限制就可以变成CNN,完成和CNN同样的任务。
RNN与Self-attention
RNN也是处理输入是向量序列问题的算法,其具体过程就是一开始有一个memory,它和第一个输入向量一起输入到RNN中将会输出一个向量,该向量一方面放入全连接网络中得到一个输出,另一方面和下一个输入向量一起作为下一个RNN的输入,以此类推。

而它们的区别在于:
- 对不同位置的考虑:在RNN中如果最后一个黄色的输出向量希望它能够与第一个输入的蓝色向量有关,那么就需要蓝色向量从一开始输入就一直被记得,直到最后一个;而在Self-attention则不用考虑到这个问题,计算就已经是统筹兼顾了
- 计算的平行性:RNN是无法进行平行计算的,而Self-attention是可以的。
【机器学习】李宏毅——自注意力机制(Self-attention)的更多相关文章
- 深度学习之注意力机制(Attention Mechanism)和Seq2Seq
这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1.注意力机制是为了解决什么问题而提出来的? 2.软性注意力机制的数学原理: 3.软性注意力机制. ...
- 【注意力机制】Attention Augmented Convolutional Networks
注意力机制之Attention Augmented Convolutional Networks 原始链接:https://www.yuque.com/lart/papers/aaconv 核心内容 ...
- (转)注意力机制(Attention Mechanism)在自然语言处理中的应用
注意力机制(Attention Mechanism)在自然语言处理中的应用 本文转自:http://www.cnblogs.com/robert-dlut/p/5952032.html 近年来,深度 ...
- 注意力机制(Attention Mechanism)在自然语言处理中的应用
注意力机制(Attention Mechanism)在自然语言处理中的应用 近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展.基于注意力(attention)机制的神经网络成为了 ...
- 注意力机制(Attention Mechanism)应用——自然语言处理(NLP)
近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展.基于注意力(attention)机制的神经网络成为了最近神经网络研究的一个热点,下面是一些基于attention机制的神经网络在 ...
- CVPR2021| 继SE,CBAM后的一种新的注意力机制Coordinate Attention
前言: 最近几年,注意力机制用来提升模型性能有比较好的表现,大家都用得很舒服.本文将介绍一种新提出的坐标注意力机制,这种机制解决了SE,CBAM上存在的一些问题,产生了更好的效果,而使用与SE,CBA ...
- 【学习笔记】注意力机制(Attention)
前言 这一章看啥视频都不好使,啃书就完事儿了,当然了我也没有感觉自己学的特别扎实,不过好歹是有一定的了解了 注意力机制 由于之前的卷积之类的神经网络,选取卷积中最大的那个数,实际上这种行为是没有目的的 ...
- 注意力机制---Attention、local Attention、self Attention、Hierarchical attention
一.编码-解码架构 目的:解决语音识别.机器翻译.知识问答等输出输入序列长度不相等的任务. C是输入的一个表达(representation),包含了输入序列的有效信息. 它可能是一个向量,也可能是一 ...
- 用卷积神经网络和自注意力机制实现QANet(问答网络)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 在这篇文章中,我们将解决自然语言处理(具体是指问答)中最具挑战性 ...
- 注意力机制和Seq2seq模型
注意力机制 在"编码器-解码器(seq2seq)"⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息.当编码器为循环神经⽹络时,背景变量 ...
随机推荐
- 论文解读(FedGAT)《Federated Graph Attention Network for Rumor Detection》
论文信息 论文标题:Federated Graph Attention Network for Rumor Detection论文作者:Huidong Wang, Chuanzheng Bai, Ji ...
- 2流高手速成记(之三):SpringBoot整合mybatis/mybatis-plus实现数据持久化
接上回 上一篇我们简单介绍了基于SpringBoot实现简单的Web开发,本节来看Web开发中必不可少的内容--数据持久化 先看项目结构: 1. 创建数据表 打开mysql,打开数据库 test (没 ...
- 国产电脑可较为流畅运行的Windows系统
系统是Windows2003,内置了WPS和IE8,使用QEMU TCG运行,速度慢,凑合能用. 使用前先sudo apt install qemu-system-x86,把压缩包中的2003.qco ...
- Flutter Cocoon 已达到 SLSA 2 级标准的要求
文/ Jesse Seales, Dart 和 Flutter 安全工作组工程师 今年年初,我们发布了 Flutter 2022 产品路线图,其中「基础设施建设」这部分提到:2022 年 Flutte ...
- 使用HTML表单收集数据
1.什么是表单 在项目开发过程中,凡是需要用户填写的信息都需要用到表单. #2.form标签 在HTML中我们使用form标签来定义一个表单.而对于form标签来说有两个最重要的属性:action和m ...
- Hudi 数据湖的插入,更新,查询,分析操作示例
Hudi 数据湖的插入,更新,查询,分析操作示例 作者:Grey 原文地址: 博客园:Hudi 数据湖的插入,更新,查询,分析操作示例 CSDN:Hudi 数据湖的插入,更新,查询,分析操作示例 前置 ...
- 云计算_Apache CloudStack
注:基于系统版本CentOS 7.2.1511部署 修改主机名/IP地址/hosts解析 hostnamectl set-hostname centos1 hostnamectl set-hostna ...
- vue3学习记录(新特性)
总概 1) 性能提升 打包大小减少 41% 初次渲染快 55%,更新渲染快 133% 内存减少 54% 使用 Proxy 代替 defineProperty 实现数据响应式 重写虚拟 DOM 的实现和 ...
- 6.channels 配置websocket
Django默认不支持websockey,需要Django支持的话需要安装第三方组件 django channels 是django支持websocket的一个模块. 1.安装 pip3 in ...
- JavaScript基础复盘补缺
语法规范 JavaScript严格区分大小写,对空格.换行.缩进不敏感,建议语句结束加':' JavaScript 会忽略多个空格.您可以向脚本添加空格,以增强可读性. JavaScript 程序员倾 ...