当前位置:   article > 正文

【深度学习】自注意力机制与Transfomer结构_transformer的自注意力机制可以考虑整个序列的上下文

transformer的自注意力机制可以考虑整个序列的上下文

学习笔记(深度学习)

参考课程: 李宏毅2021/2022春机器学习课程-

一、自注意力机制

应用场景:输入是很多大小不一的向量,并且不同向量向量之间有一定的关系,但是实际训练的时候无法充分发挥这些输入之间的关系而导致模型训练结果效果极差。比如机器翻译问题(序列to序列的问题,机器自己决定多少个标签),词性标注问题(一个向量对应一个标签),语义分析问题(多个向量对应一个标签)等文字处理问题
输入是一组向量

1.sequence to sequence模型:输入一句话做词性标注,输入一段语音识别为文字等

在这里插入图片描述
Each vector has a label.

2.输出长度为1(语句情感分析,语音识别)

在这里插入图片描述
The whole sequence has a label.

Self-Attention机制

在这里插入图片描述
传统的全连接神经网络无法考虑到上下文的关系,可以让FC可以考虑一个window,但是如果让一个window包括整个序列,但是这会让FC参数非常多,变得很复杂。
在这里插入图片描述
自注意力机制考虑一整个序列的上下文,进行特征提取,生成新的向量,再进行训练。这个向量b是考虑了所有的输入向量对a1产生的影响才得到的,这里有四个词向量a对应就会输出四个向量b
在这里插入图片描述
Dot-product得到相关参数α:两个向量作为输入,直接输出α,具体是输入的两个向量分别乘不同的矩阵,得到q,k,然后进行点乘即可得到α
在这里插入图片描述

计算出a1和每一个向量的关联性之后(包括自己)。再做一个softmax,也可以用别的函数,比如relu,这样就把相关程度归一化,通过数值就可以看出哪些向量是和a1最有关系
在这里插入图片描述
Wq和Wk为权重矩阵,需要学习来更新,用a1去和Wq相乘,得到一个向量q,然后使用a2和Wk相乘,得到一个数值k。最后使用q和k做点积,得到α。α也就是表示两个向量之间的相关联程度。得到α‘(1,1)这些之后,要根据α‘来抽取重要的信息,每一个向量乘以一个新的W(v)得到新的向量b1:
W(v):先求v,v就是键值value,v和q、k计算方式相同,也是用输入a乘以权重矩阵W,得到v后,与对应的α′ 相乘,每一个v乘与α’后求和,就可以得到输出b1。
如果 a1 和 a2 关联性比较高, α1,2′ 就比较大,那么,得到的输出 b1 就可能比较接近 v2 ,即attention score决定了该vector在结果中占的分量

在这里插入图片描述
以此类推可以得到b2/b3/b4,b1到b4不是依次产生的,是同时计算得到。
这一系列过程也可以通过矩阵相乘来表示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中,wq,wk,wv是模型需要学习的参数:
在这里插入图片描述
模型变形:Multi-head Self-attention,因为相关性有很多种不同的形式,有很多种不同的定义,所以有时不能只有一个q,要有多个q,不同的q负责不同种类的相关性
和上面一样,用a乘权重矩阵W得到qi,然后再用qi乘两个不同的W,得到两个不同的q^{i,n},i代表的是位置,有两个head,代表这个问题有两种不同的相关性,k和v也需要有多个,两个k、v的计算方式和q相同,都是先算出来ki和vi,然后再乘两个不同的权重矩阵

在这里插入图片描述
在这里插入图片描述
最后,把b{i,1},b{i,2}拼接成矩阵再乘权重矩阵W,得到b^i,也就是这个self- attention向量ai的输出

在训练self attention的时候,实际上对于位置的信息是缺失的,没有前后的区别,上面讲的a1,a2,a3不代表输入的顺序,只是指输入的向量数量,不像rnn,对于输入有明显的前后顺序,比如在翻译任务里面,对于“机器学习”,机器学习依次输入。而self-attention的输入是同时输入,输出也是同时产生然后输出的
Positional Encoding:在输入向量时一般加入一个位置特征的向量
Each position has a unique positional vector

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/906611
推荐阅读
相关标签