提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、什么是multi-headed(多头注意力机制)
- 二、multi-headed
- 三、multi-headed结果
- 四、堆叠多层
- 总结
前言
在实践中,当给定相同的查询、键和值的集合时,我们希望模型可以基于相同的注意力机制学习到不同的行为,然后将不同的行为作为知识组合起来,例如捕获序列内各种范围的依赖关系(例如,短距离依赖和长距离依赖)。因此,允许注意力机制组合使用查询、键和值的不同的 子空间表示(representation subspaces)可能是有益的。
一、什么是multi-headed(多头注意力机制)
从多头注意力的结构图中,貌似这个所谓的多个头就是指多组线性变换,但是并不是,只使用了一组线性变换层,即三个变换张量对 Q、K、V 分别进行线性变换,这些变化不会改变原有张量的尺寸,因此每个变换矩阵都是方阵,得到输出结果后,多头的作用才开始显现,每一个头开始从词义层面分割输出的张量,也就是每一个头都先获得一组 Q、K、V进行注意力机制的计算,但是句子中的每个词的表示只获得一部分,也就是只分割了最后一维的词嵌入向量,这就是所谓的多头,将每个头获取的输入送到注意力机制中就形成了多头注意力机制。
二、multi-headed
- 通过不同的head得到多个特征表达
- 将所有特征拼接在一起
- 可以通过再一层的全连接来降维
更直观的来看上面的结构图,也就是一个词向量经过不同的权重矩阵得到不同的K,Q,V,在各自进行线性映射得到对应的Z特征,在进行拼接得到学习到的所有特征,最后进行一层全连接进行降维得到输出特征。
三、multi-headed结果
- 不同的注意力结果得到的特征向量表达也不相同
- 可以看到下图的第一个head和第二个head学习到的特征结果不同各有优点
四、堆叠多层
- 训练一层往往是不够的,往往会增加几层甚至是十几层都是有可能的
- 但无论多少层其计算方法都是相同的
总结
与使用单独的一个注意力池化不同,我们可以独立学习得到h组不同的 线性投影(linear projections)来变换查询、键和值。然后,这h组变换后的查询、键和值将并行地进行注意力池化。最后,将这h个注意力池化的输出拼接在一起,并且通过另一个可以学习的线性投影进行变换,以产生最终输出。这种设计被称为多头注意力,其中h个注意力池化输出中的每一个输出都被称作一个头。
- 多头注意力融合了来自于相同的注意力池化产生的不同的知识,这些知识的不同来源于相同的查询、键和值的不同的子空间表示。
- 基于适当的张量操作,可以实现多头注意力的并行计算。