李宏毅机器学习self-attention

self-attention想要解决的问题是什么呢?
目前遇到的问题都是输入一个或者一排向量,输出一个类别或者一个向量。对于更复杂的问题怎么办呢?
如果输入的是一排向量并且向量的个数是会改变的呢?如文字处理,每次输入的句子不一样长度,文字怎么表示成向量呢,可以用one-hot编码或者word-embeding;一段声音信号;一个graph也是一堆向量组成;一个分子也是一堆向量,一个原子可以是一个向量。
输出是什么呢
三种可能性:
1.每个向量都有一个label,输入多少向量输出多少向量。(如词性标注,音标处理,graph的每个节点)
2.一整个sequence只需要输出一个label。(如留言的正面和负面评价,语音辨识谁说的话,分子辨识)
3.不知道输出多少个label。(如翻译)
输入跟输出一样
每个向量都有一个label,如词性标注问题,输入一个句子,每个单词都是一个向量(one-hont编码),i saw a saw。第一个saw和第二个saw是一样的怎么处理呢?解决方法:可以考虑每个单词的前后五个向量,但是句子的长度是会发生变化的,当句子过长或者过短的时候怎么处理呢?从而引出self-attention技术。

在这里插入图片描述
输出的四个向量都是考虑一整排的向量的输出。得到的向量可以再做一次 self-attention,可以反复的进行下去。
self-attention的原理:
在这里插入图片描述
b1-b4都是考虑了输入的全部向量的输出。
在这里插入图片描述
根据a1,找出跟a1相关的所有向量,用α表示,那么怎么决定a1跟a4有多相关呢?使用attention模组,常用的还是dot-product
在这里插入图片描述
怎么套用在self-attention里面呢?接下来就是分别计算a1-a4之间的dot-produc。
在这里插入图片描述

分别计算a1-a4的关联性,计算完之后通过一个soft-max函数(也可以用relu)进行归一化得到α’。
在这里插入图片描述

得到α’后就要根据α’来抽取sequence里面的重要资讯,用α’来乘上v,最终得到b1,因为α’是归一化后得到的,所以得到的b1跟哪个α越接近说明α1跟那个α越相关,同理得到b2-b4,b1-b4是同时被计算出来的。
在这里插入图片描述
接下来用矩阵的角度重新分析上面的self-attention的过程
在这里插入图片描述
在这里插入图片描述
q1 =(Wq)(α1),从而有q1q2q3q4 =(Wq)(α1α2α3α4),令q1q2q3q4 = Q,α1α2α3α4 = I,同理得到Q,K,V
在这里插入图片描述
在这里插入图片描述

α,b的计算方式同理也可以用矩阵的方法。
在这里插入图片描述
从上面可以看出,整个过程唯一需要学习的参数就是Wq,Wk,Wv三组参数。

self-attention的进阶版-multi-head self-attention
head的数量属于hype parameter,需要自己调参。
在这里插入图片描述
α1,α2计算得到qi,ki,vi后,在进行一次矩阵计算得到qi1,qi2,ki1,ki2,vi1,vi2,常用的方法是直接进行qi,ki,vi的向量等分,如qi=[1,0,1,1],head=2,那么qi1=[1,0],qi2=[1,1],ki,vi计算方法同理。
注意:qi1只和ki1,vi1之间进行计算,即只跟自己序号相等的之间的向量进行计算。
在这里插入图片描述
在这里插入图片描述

计算得到bi1,bi2之后进行拼接乘上一个矩阵得到bi
从上面的分析可以发现self-attention少了一个很重要的信息-位置信息,如果觉得位置信息比较中啊哟怎么办呢?可以把位置信息塞进去,使用positional encoding技术,每一个位置有一个向量ei
在这里插入图片描述
加上一个ei就知道有位置信息了
在这里插入图片描述
如上图是第一次提出的位置编码
self-attention不仅可以用在nlp,语音,图像都可以用self-attention,但是用在语音辨识,图像处理方向时计算量非常大,怎么解决呢?
在语音辨识时,可以只看一小部分向量,至于看多少取决于自己的需要,图像处理方向目前衍生出的有detr,vit,swin transformer等模型

self-attention和cnn的比较:
在这里插入图片描述
self-attention是计算每个向量像素之间的关系,二cnn是一个感受野,可以理解为self-attention是cnn的复杂版本,其实cnn就是self-attention的特例。
越复杂的模型越是需要更多的数据,数据不够容易overfitting,小的模型在数据比较少的时候如果限制设置的好就不容易overfitting
self-attention和rnn的比较:
self-attention可以并行计算,考虑了所有的向量。rnn只能进行串行计算,只考虑已经输入的向量,跟后面的向量没关系。
在这里插入图片描述
self-attention也可以用在graph上面,知道哪些节点之间是关联的

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I松风水月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值