李宏毅机器学习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,可以反复的进行下去。
self-attention的原理:
李宏毅机器学习self-attention
b1-b4都是考虑了输入的全部向量的输出。
李宏毅机器学习self-attention
根据a1,找出跟a1相关的所有向量,用α表示,那么怎么决定a1跟a4有多相关呢?使用attention模组,常用的还是dot-product
李宏毅机器学习self-attention
怎么套用在self-attention里面呢?接下来就是分别计算a1-a4之间的dot-produc。
李宏毅机器学习self-attention

分别计算a1-a4的关联性,计算完之后通过一个soft-max函数(也可以用relu)进行归一化得到α’。
李宏毅机器学习self-attention

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

α,b的计算方式同理也可以用矩阵的方法。
李宏毅机器学习self-attention
从上面可以看出,整个过程唯一需要学习的参数就是Wq,Wk,Wv三组参数。

self-attention的进阶版-multi-head self-attention
head的数量属于hype parameter,需要自己调参。
李宏毅机器学习self-attention
α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之间进行计算,即只跟自己序号相等的之间的向量进行计算。
李宏毅机器学习self-attention
李宏毅机器学习self-attention

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

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

版权声明:本文为博主I松风水月原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_38683460/article/details/123174468

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年3月1日 下午4:34
下一篇 2022年3月1日 下午4:53

相关推荐