赞
踩
参考课程: 李宏毅2021/2022春机器学习课程-
应用场景:输入是很多大小不一的向量,并且不同向量向量之间有一定的关系,但是实际训练的时候无法充分发挥这些输入之间的关系而导致模型训练结果效果极差。比如机器翻译问题(序列to序列的问题,机器自己决定多少个标签),词性标注问题(一个向量对应一个标签),语义分析问题(多个向量对应一个标签)等文字处理问题
Each vector has a label.
The whole sequence has a label.
传统的全连接神经网络无法考虑到上下文的关系,可以让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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。