发布时间:2022-08-17 13:27
最近在阅读论文的过程中接触到了Multi-Head Attention的结构,脑子里的第一反应是都叫Attention,那Mutli-Head Attention 和 Self-Attention 之间是什么关系呢?
在网上查阅资料,记笔记,总结一下。
首先,简单介绍一下multi-head attention,我最早接触到这种结构是在Transformer的编码器结构中,不知道这种编码器结构并不影响你去了解multi-head attention。简单来说它是一种多个不同表示空间的获取方法,如果以文本识别为例,一个attention就对应一个空间,那么有多个attention自然就可以获得多个空间。multi-head attention 为attention提供了多个表示子空间(representation subspaces),在每个attention中,采用Q、K、V权重矩阵(一种权重表示方式),这使得每个矩阵都通过随机初始化生成。
值得注意的是multi-head attention并不是独立的结构,它自身无法单独完成训练,但在使用过程中可以通过堆叠形成深层结构。常用于文本分类等场景的特征提取部分。
在对self-attention进行介绍之前,先来了解一下attention机制。
早在attention机制诞生之前,CNN、RNN及变体模型就已经存在了,那为何还要引入注意力机制呢?
主要原因:
1.算力限制:哪怕在今天一些复杂的模型依旧会受到算力的限制;
2.对于算法的优化:人们一直都在追求让神经网络能像人一样思考,但对于长距离的依赖问题,LSTM(长短期记忆)只能在一定程度上进行缓解,其“记忆”能力并不算强。
什么是attention?
当人在看一张图片时,大脑会主动将注意力放在有用的信息上,这是大脑的注意力机制。本质上讲是从一堆信息中筛选出最有用的信息,而在上文提到的权重就是衡量信息价值的标准。
举例来说:我只能看到3人中的继科儿,他的权重是最大的!
self-attention:
自注意力机制是注意力机制的变体,减少了对于外部信息的依赖,更擅长捕捉特征的内部相关性。
以文本处理任务为例,通过计算单词之间的相互影响,估计单词之间的依赖程度。
最终,通过计算我们训练的神经网络就可以预估单词 it 指代的具体信息最可能是animal,实现上下文关联。
总结:
相比于传统CNN,注意力机制参数更少、运行速度更快。
multi-head attention 可以视作将多个attention并行处理,与self-attention最大的区别是信息输入的来源。self-attention的输入是统一的,multi-head attention的输入通过随机初始化映射到不同子空间,这使得模型可以从不同角度看同一问题,有时可以收获更好的效果。