首页 > 其他分享 >李宏毅self-attention笔记

李宏毅self-attention笔记

时间:2023-04-28 21:35:58浏览次数:35  
标签:Attention RNN 李宏毅 self attention context Self 向量

 

面对的问题是什么?

复杂输入,多个变长的向量

这里自然会想到RNN,后面会有比较

具体的场景,

可以是一段话,每个word一个向量,可以用one hot,但大多时候是用embedding

可以是一段印频,每25ms一个向量,按10ms滑动,可以看出音频的数据量是非常大的

也可以是一张图片。。。

输出当然有多种形式,这个和RNN也很像

但是我们这里只讨论第一种,输入n个向量,输出n个值

这种模型有多种选择,

最简单的,就是每个向量经过一个FC,得到一个值就好了,问题自然是没有上下文,比如例子I saw a saw,没法区分两个saw的不同

自然的改进,就是把上下文都传进FC,这里的window决定了context的大小,问题就在于window的大小如何选择

所以这里提出Self-attention模型

模型会对所有的向量,并给每个向量加上context,这个想法很直觉,问题是怎么做到的,参考Attention is all you need,名字霸气

注意模型是可以多层叠加的

首先定义attention

attention代表向量之间的相关性,有多种计算方法,最常用的是dot product,输入乘上参数矩阵后做点积

第一步,算attention score,query代表自己,key代表其他向量

第二步做归一化,soft-max是一种归一化方式,可以用其他

第三步根据attention值抽取各个向量信息,相关性越大attention越高,对应的向量在最终求和后的b中起的作用也越大

这样就把所有的context都融入到输入中,形成新的向量b

 这里只是把上面的过程,变成矩阵计算

最终需要学习的参数,只有那一组W

后面看下Self-attention相关的研究

Multi-head,多头,相关性可能有多种,所以要用多头来建模不同的相关性

Self-attention是所有向量一起算的,和RNN不同,后面还会讲到,这样高效

但是丢失了位置信息,所以这个研究希望加入positional encoding来建模位置信息

前面说了Speech,音频信息是非常大的

self-attention模型本身是计算量很大的,所以如果向量太长就有问题

所以这里的思路就是要truncated,就是要tradeoff,那准确率换性能

这里很有意思,和CNN比较

结论是,CNN是简化的self-attention,反之,self-attention是泛化的cnn

这个也很直觉,CNN只是考虑卷积范围内的context,而self-attention是考虑全部的context

越是泛化的模型,越是需要更多的数据集,所以后面的试验也证明Self-Attention需要更多的训练集来达到效果

 

这里比较和RNN,结论就是大部分情况下,Self-Attention是可以替换到RNN的,技术变化的真快,现在RNN已经是昨日黄花了

原因主要是,Self-Attention更高效,并行算的,而RNN是一个个算过去

RNN保留context的机制更加复杂,而Self-Attention是自然的获得所有的context

GNN,也可以用Self-Attention,这样只需要算有edge的节点间的attention,更高效

Self-Attention有很多的变种,因为它作为transformer的主要技术,变种都叫各种former

但是基本都是在准确率和计算效率之间做tradeoff

 

标签:Attention,RNN,李宏毅,self,attention,context,Self,向量
From: https://www.cnblogs.com/fxjwind/p/17363192.html

相关文章

  • rust中的self与Self
    selfself是一个代表类型实例(或者是类型的引用或者是值)的关键字,在Rust的方法中使用self可以引用当前类型的实例或者类型本身。具体来说,当我们定义一个方法时,使用self关键字作为方法的第一个参数可以让我们在调用该方法时直接访问类型实例本身structPoint{x:f32,......
  • Python很多时候要从键盘连续输入一个数组,并用空格隔开;Python爬取一些数据;python pip安
    Python要从键盘连续输入一个数组,并用空格隔开,Python中的实现方法如下:str=input(‘以空格为间隔连续输入一个数组:’)然后在键盘中输入,会·得到的str为一个字符串,要将其转为一个列表有两种方法方法一:a=[int(n)forninstr_in.split()]方法二:a=list(map(int,str.strip().sp......
  • SelfCAD:免费云端三维建模软件
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生SelfCAD是一款基于云端的三维建模软件,它是一个全功能的CAD软件,具有易于使用的界面和强大的工具,适合初学者和专业设计师使用。以下是SelfCAD的详细介绍:云端软件:SelfCAD是一个基于云端的软件,意味着您无需下载和安装......
  • Attention Is All You Need—transformer详解
    AttentionIsAllYouNeed论文transformer代码以下大部分是根据论文理解进行的总结和概括,如有疑问,欢迎交流~transformer仅仅使用注意力机制,没有使用任何的卷积或者RNN结构。传统RNN结构的当前隐层状态\(h_t\)需要当前时刻的输入以及上一时刻的隐状态输入\(h_{t-1}\),受到这一......
  • Attention
    参考:https://blog.csdn.net/weixin_52668444/article/details/115288690传统的机器翻译为例子来说明为什么我们需要Attention。encoder的工作原理和RNN类似,将词向量输入到Encoder中之后,我们将最后一个hiddenstate的输出结果作为encoder的输出,称之为context。Context可以理解成......
  • 使用ServiceSelf解决.NET应用程序做服务的难题
    1ServiceSelf为.NET泛型主机的应用程序提供自安装为服务进程的能力,支持windows和linux平台。功能自我服务安装自我服务卸载自我服务日志监听2自我服务安装虽然.NetCore提供了Microsoft.Extensions.Hosting.Systemd和Microsoft.Extensions.Hosting.WindowsServices两......
  • SelfDefinedDataset显示没有属性get_datasets
    get_datasets是一个PyTorchLightning框架中的方法,用于返回数据加载器中包含的训练、验证和测试数据集。如果你的自定义数据集类没有该方法,则会出现AttributeError:'YourDataset'objecthasnoattribute'get_datasets'错误。要解决这个问题,你需要在自定义数据集类中实现g......
  • NLP深度网络中self.embedding(x)词嵌入后降维方法
    在自然语言处理中的循环神经网络中,经常使用torch定义类,self.embedding(x)中,x是输入,介绍self.embedding(x)返回结果,以及结果的形状,并解释这个形状在自然语言处理中的循环神经网络中,使用PyTorch定义类时通常会包含一个嵌入层(embeddinglayer)。在嵌入层中,使用self.embedding(x)语......
  • Heterogeneous Graph Attention Network
    目录概符号说明HANNode-levelattentionSemantic-levelattention代码WangX.,JiH.,ShiC.,WangB.,CuiP.,YuP.andYeY.Heterogeneousgraphattentionnetwork.WWW,2019.概Attention+异构图.符号说明\(\mathcal{G}=(\mathcal{V,E})\),图;\(\phi:......
  • Hugging News #0414: Attention 在多模态情景中的应用、Unity API 以及 Gradio 主题构
    每一周,我们的同事都会向社区的成员们发布一些关于HuggingFace相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「HuggingNews」,本期HuggingNews有哪些有趣的消息,快来看看吧!社区动向Attention在视觉领域的应用注......