前面我们所讲的模型,输入都是一个向量,但有没有可能在某些场景中输入是多个向量,即一个向量集合,并且这些向量的数目并不是固定的呢

这一类的场景包括文字识别、语音识别、图网络等等。

那么先来考虑输出的类型,如果对于输入是多个数目不定的向量,可以有以下这几种输出方式:

  • 每个向量对应一个输出:输出的数目与输入向量的数目一致,例如下图的词性识别、语调识别、状态识别等等

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

  • 机器自己决定输出多少个结果(seq2seq):如翻译、语音转文字等等

Sequence Labeling(输入输出数目一致)

最简单的思路当然是将每一个向量单独作为一个输入,然后将其丢入到一个全连接之中,每个单独产生结果。但是这种方法的问题在于没办法考虑前后向量之间的联系。那么转换另一个思路就是开一个window,每次将window中的向量一起输入到全连接网络中,如下图:

这种方式的问题在于如果遇到某些场景需要全部向量都考虑,但是我们无法事先知道这个场景中向量的数目,我们也就很难调整我们的window去适应。在这种情况下就需要用到自注意力机制了。

Self-attention

可以将自注意力机制看成一层,其接受所有向量的输入,然后输出的数目跟输入的数目的是一样的,可以认为它的每个输出都是考虑了整个向量集之后的结果,之后再将这些输出每个单独放入一个全连接网络中来得到输出,这样可以显著的降低全连接网络的参数量。并且这个也可以多次使用,自注意力后FC再自注意力再FC等等。

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

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

最常见的是这种Dot-product,就是将两个向量分别乘以一个矩阵,得到新的向量,然后再进行点乘得到一个数值,也就是\(\alpha\)

  1. 计算出两两向量之间的相关性后进行Sortmax:如下图:

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

哪一个向量对应的\(\alpha\)(attention score)越大,那么得到的b就越接近于它所计算出来的\(v\),这就是最终结果了

从矩阵角度理解全过程

  1. 由于每一个输入向量都需要计算\(q,k,v\)三个向量,因此可以利用矩阵的形式更加简洁方便的进行计算:

  1. 计算\(\alpha\)也是同理:

  1. 计算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)的更多相关文章

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

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

  2. 【注意力机制】Attention Augmented Convolutional Networks

    注意力机制之Attention Augmented Convolutional Networks 原始链接:https://www.yuque.com/lart/papers/aaconv 核心内容 ...

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

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

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

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

  5. 注意力机制(Attention Mechanism)应用——自然语言处理(NLP)

    近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展.基于注意力(attention)机制的神经网络成为了最近神经网络研究的一个热点,下面是一些基于attention机制的神经网络在 ...

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

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

  7. 【学习笔记】注意力机制(Attention)

    前言 这一章看啥视频都不好使,啃书就完事儿了,当然了我也没有感觉自己学的特别扎实,不过好歹是有一定的了解了 注意力机制 由于之前的卷积之类的神经网络,选取卷积中最大的那个数,实际上这种行为是没有目的的 ...

  8. 注意力机制---Attention、local Attention、self Attention、Hierarchical attention

    一.编码-解码架构 目的:解决语音识别.机器翻译.知识问答等输出输入序列长度不相等的任务. C是输入的一个表达(representation),包含了输入序列的有效信息. 它可能是一个向量,也可能是一 ...

  9. 用卷积神经网络和自注意力机制实现QANet(问答网络)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 在这篇文章中,我们将解决自然语言处理(具体是指问答)中最具挑战性 ...

  10. 注意力机制和Seq2seq模型

    注意力机制 在"编码器-解码器(seq2seq)"⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息.当编码器为循环神经⽹络时,背景变量 ...

随机推荐

  1. 使用FastDFS打造一款高可用的分布式文件系统

    FastDFS 介绍 参考: http://www.oschina.net/p/fastdfs FastDFS 是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文 ...

  2. 初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

    转载自:https://cloud.tencent.com/developer/article/1433280 文章目录1.Prometheus & Grafana 介绍1.1.Prometh ...

  3. 【前端必会】不知道webpack插件? webpack插件源码分析BannerPlugin

    背景 不知道webpack插件是怎么回事,除了官方的文档外,还有一个很直观的方式,就是看源码. 看源码是一个挖宝的行动,也是一次冒险,我们可以找一些代码量不是很大的源码 比如webpack插件,我们就 ...

  4. ERP 与 CRM 之间有什么联系?

    ERP与CRM都涉及到客户的管理,在客户信息数据里很大一部分是重合的,可以共用的,即ERP里的客户信息可以为CRM所用,CRM的客户信息,亦可为ERP所用!在关系上可以理解为CRM就是ERP的最前端, ...

  5. Vue+vant移动端处理弹窗不能滑动问题

    自己在做项目开发时,使用vantUI组件,在项目中遇到了弹窗组件里面当内容过多时,会出现滚动卡顿或者不能滚动问题,开始一直以为是自己的样式写的有问题,检查下来才发现并不是,而是弹窗组件的问题,于是找到 ...

  6. PHP全栈开发(八):CSS Ⅹ 导航栏制作

    学习了这么久的CSS,我们现在也可以小试牛刀一下了,我们使用我们学会的CSS知识来制作一个导航栏. 我们都知道,在现代的导航栏里面,最普遍的就是使用无序列表来制作导航栏. 我们可以使用如下代码来制作一 ...

  7. SQL---ltrim()和rtrim()函数的使用

    背景 去除字符串首尾空格大家肯定第一个想到trim()函数,不过在sqlserver中是没有这个函数的,却而代之的是ltrim()和rtrim()两个函数. 看到名字所有人都 知道做什么用的了,ltr ...

  8. 九、docker swarm主机编排

    一. 什么是Docker Swarm Swarm 是 Docker 公司推出的用来管理 docker 集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/do ...

  9. python tcp select 多路复用

    1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 # 文件名:tcpserver.py 4 5 import socket 6 import time 7 ...

  10. Python基础之模块:3、os模块 sys模块 json模块 json实战

    目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...