首页 > 其他分享 >Self-attention

Self-attention

时间:2023-05-18 11:47:43浏览次数:49  
标签:向量 Self attention FCN vec 输入

1.问题提出

全连接神经网络(FCN),可以很好的处理输入为1个向量(特征向量)的情况,但是如果输入是一组向量,FCN处理起来不太方便

以词性标记的问题为例

image-20230518103805431

对于处于同一个句子中的相同的2个单词saw,词性不同,前者为动词(V),后者为名词(N)

如果尝试使用FCN去解决这个问题,将每个单词转化为向量输入FCN,对于相同的2个单词,FCN的输出应该是相同的,不能根据单词在句子中所处的不同位置做出判断,FCN只关注外表

2.Self-Attention

2.1 定义

整体结构如下

image-20230518104232849

这样的结构可以叠加多层

image-20230518104446870

Self-attention内部结构如下

image-20230518104715685

输入原始向量\(\vec{a}\),经过Self-attention后输出经过处理的向量\(\vec{b}\),是考虑所在向量序列的上下文的输出

2.2 工作原理

2个向量的关联程度\(\alpha\)计算如下,即attention score

image-20230518104944170

分别计算\(a^1\)和\(a^1\)、\(a^2\)、\(a^3\)、\(a^4\)的关联程度\(\vec{\alpha_1}\),再经过softmax得到\(\vec{\alpha_1^\prime}\)

image-20230518105140493

再求出\(\vec{v}\),和刚刚求得的\(\vec{\alpha_1^\prime}\)作内积(加权求和),即得输入\(\vec{a^1}\)考虑上下文之后得最终输出\(\vec{b^1}\)

image-20230518105523336

以上处理是对向量\(\vec{a^1}\)输出\(\vec{b^1}\)的处理过程,同理对\(\vec{a^2}\)、\(\vec{a^3}\)、\(\vec{a^4}\)也做类似的处理,可得\(\vec{b^2}\)、\(\vec{b^3}\)、\(\vec{b^4}\)

2.3 矩阵表示

由输入向量序列得到Q、K、V矩阵

image-20230518111818120

attention score计算

image-20230518111929315

输出计算

image-20230518112005961

整体结构如下

image-20230518112057550

2.4 直观理解

  • 理解1:针对某一个具体得问题,对于向量序列中的某一个向量,比如\(\vec{a^1}\),如果\(\vec{a^1}\)和另外一个向量\(\vec{a^i}\)的关联程度比较大,则计算出来的attention score就比较大,加权求和得到最后的输出向量,就和\(\vec{a^i}\)比较相近
  • 理解2:q(query)、k(key)、v(value)
    • q,可以理解为要查询当前向量,想要或者其和序列中哪个向量关系更紧密
    • k,可以理解为对其他向量提取了一个关键字,用于和q计算关联程度
    • v,可以理解为其他向量对于最后输出向量的贡献值,(k,v可以结合起来考虑,类比键值对的概念理解)

3.multi-head Self-attention

为什么需要multi-head Self-attention?

一组权重\(W^q\)、\(W^k\)、\(W^v\),对应了输入序列中的一中关系,可能存在多种关系,所有需要多组参数,称之为multi-head

image-20230518112205868

4.Positional Encoding

上述Self-attention并没有考虑当前输入向量在整个输入向量序列中的位置关系,考虑对输入向量加上一个位置向量

位置向量\(e^i\)可以是手工设计的,也可以是从数据中学习出来的

image-20230518112514824

5.Self-attention vs RNN

RNN也用来处理向量序列输入,和Self-attention相比,最主要的区别是RNN不能并行处理,输出之间存在依赖关系,而Self-attention可以用矩阵的方式表达,是可以并行处理的。此外,如果RNN要考虑第一个向量和最后一个向量之间的关系,要传递很多次memory,比较难,而Self-attention任意两个向量之间是通过计算attention score衡量联系程度的,所以远距离向量之间的关系比较容易得出。

image-20230518112653640

标签:向量,Self,attention,FCN,vec,输入
From: https://www.cnblogs.com/dctwan/p/17411445.html

相关文章

  • TPA-LSTM/Attention-LSTM多变量回归预测(Matlab) 2.运
    TPA-LSTM/Attention-LSTM多变量回归预测(Matlab)2.运行环境为Matlab2020b;3.Train为训练集数据,Test为测试集数据,TPAMain.m为主程序,运行即可;其余m文件为子函数,无需运行,所有文件放在一个文件夹;4.运行需要GPUID:9966681769715968......
  • 分析游戏中的金钱交易:Multi-view Attention Networks
    文章目录1.摘要2.引入3.游戏数据描述3.1逆水寒中的游戏日志3.2社交图分析3.3行为序列3.4角色属性构造4.MVAN模型4.1multi-graphattentionnetwork4.2behaviourattentionnetwork4.3behaviourattentionnetwork4.4DataSourceAttentionNetwork5.模型效果5.1baseline......
  • E325: ATTENTION Found a swap file by the name "/etc/ssh/.sshd_config.swp"
    今天使用vim/etc/ssh/.sshd_config命令报下面这个错误 查询后发现是上次修改内容没有保存,意外退出造成的,生成了一个.swp文件。解决方法1)使用rm-f/etc/ssh/.sshd_config.swp删掉这个备份文件,然后重新编辑2)还原上次编辑结果,使用命令vim-r文件名命令恢复上次编辑结果,使......
  • 李宏毅self-attention笔记
     面对的问题是什么?复杂输入,多个变长的向量这里自然会想到RNN,后面会有比较具体的场景,可以是一段话,每个word一个向量,可以用onehot,但大多时候是用embedding可以是一段印频,每25ms一个向量,按10ms滑动,可以看出音频的数据量是非常大的也可以是一张图片。。。输出当然有多种形......
  • 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两......