Transformer是一种基于注意力机制的深度学习模型,它在NLP领域取得了革命性的进展。该模型的主要特点(可以说一些关键术语):
1、自注意力机制(Self-Attention):该机制使得模型能够捕捉到序列内部的长距离依赖关系。
2、多头注意力(Multi-Head Attention):使用此机制来增强模型对不同位置信息的捕捉能力。
3、位置编码(Positional Encoding):引入位置编码,将序列中每个元素的位置信息编码到模型输入中,以帮助模型理解单词在序列中的位置。
4、编码器-解码器架构:编码器负责处理输入序列,解码器负责生成输出序列。
5、层次结构:Transformer模型通过堆叠多个编码器和解码器层来提高模型的性能。
Self-Attention(自注意力机制层)
自注意力机制(Self-Attention)能很好地解决RNN网络固有的计算效率不高和长程依赖问题,它允许模型并行处理整个序列,有效地捕获序列中的长距离依赖。这一机制的引入,让Transformer模型成为了一项重大技术突破,逐渐成为了如今NLP的主流研究方向,又影响到计算机视觉(CV)研究领域。自注意力机制,又称内部注意力机制,顾名思义,是一种将单个序列的不同位置关联起来以计算同一序列的表示的注意机制。注意力机制主要体现在相似度系数上,其反映对于一次查询当前资源中不同数据的重要程度,通过softmax等形式计算出该系数;实现聚焦重要数据,忽略不相关数据的注意力作用。
传统的注意力机制发生在Target的元素Query和Source中的所有元素之间,其权重的计算需要Target来参与。即在Encoder-Decoder模型中,Attention权重的计算不仅需要Encoder中的隐状态而且还需要Decoder中的隐状态。而自注意力机制中不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制。如在Transformer中在计算权重参数时,将文字向量转成对应的KQV,只需要在Source处进行对应的矩阵操作,用不到Target中的信息。
就是说自注意力机制和注意力机制的区别就在于,注意力机制的查询(Query)和键(Key)是不同来源的,而自注意力机制的查询(Query)和键(Key)则都是来自于同一组的元素,因此,自注意力机制也被称为内部注意力机制(intra-attention)。自注意力机制的优点是感受野大;缺点是需要大数据。
自注意力机制其实就是论文中所指代的“Scaled Dot-Product Attention“。论文作者说注意力机制可以描述为将query和一系列的key-value对映射到某个输出的过程,而这个输出的向量就是根据query和key计算得到的权重作用于value上的权重和。
Multi-head Attention(多头注意力机制)
多头注意力机制的架构(Multi-Head Attention)图,可以看到(V, K, Q)三个矩阵通过h个线性变换(Linear),分别得到h组(V, K, Q)矩阵,每一组(V, K, Q)经过Attention计算,得到h个Attention Score并进行拼接(Concat),最后通过一个线性变换得到输出,其维度与输入词向量的维度一致,其中h就是多头注意力机制的“头数”。在多头注意力机制中,其输出序列的长度与输入的Query序列的长度一致;在接受的三个序列Query、Key、Value中,其Key与Value是键值对,序列长度一定相同,Query序列长度可以与Key、Value长度不同。
所谓的多头注意力机制其实就是将原始的输入序列进行多组的自注意力处理过程;然后再将每一组自注意力的结果拼接起来进行一次线性变换得到最终的输出结果。
因为一段文字可能蕴含了比如情感维度、时间维度、逻辑维度等很多维度的特征,为了能从不同的维度抓住输入信息的重点,就又引入了多头注意力机制(multi-head attention)。所谓多头注意力,简单说就是把输入序列投影为多组不同的Query,Key,Value,并行分别计算后,再把各组计算的结果合并作为最终的结果,通过使用多头注意力机制,可以更好地捕获来自输入的多维度特征,提高模型的表达能力和泛化能力,并减少过拟合的风险。多头注意力机制的目的是为了从多个维度捕捉提取更多的特征,从多个“头”得到不同的Self-Attention Score,提高模型表现。