原文链接:Word embedding factor based multi-head attention | Artificial Intelligence Review
多头注意力机制线性地将查询、键和值投影到不同的子空间中,允许模型从不同的角度理解输入序列,并利用输入句子序列中有关令牌之间关系的信息。
Transformer、Bert等基于多头注意力机制的深度学习模型存在两个问题:
第一,头的数量总是手动设置的,并且不清楚在面对新的NLP任务时,我们应该设置多少头才能达到最佳性能。
第二,当这些头将自注意力机制中的查询、键和值投影到不同的子空间时,它们的实际意义缺乏合理的解释。
多头注意力机制的改进:
1.引入了分歧正则化来多样化注意力分布,增强了模型捕获不同特征的能力。
2.提出了一种改进多头协作的方法,这表明当前的方法可能无法充分利用不同头的协作潜力。
3.提出了动态组合多头注意力机制(DCMHA ),通过动态组合注意力头来增加模型的表达能力。
这些方法主要通过改进位置编码、通道和空间压缩以及信息传递机制来提高多头注意力,从而提高Transformer或BERT等模型的性能和效率。然而,它们并没有解决注意力头数量的自动选择和注意力机制的可解释性问题。
针对上述问题,本文提出一种新的注意力机制——基于因子分析的多头注意力机制。
首先,在自注意力机制计算过程之前,对输入的词向量进行因子分析。通过语言模型获得的预训练词嵌入已经包含了关于单词的句法和语义信息,而因子分析可以用来识别嵌入矩阵所有维度之间的可能关系。
第二,多头注意力中的头数可以根据因子分析中确定的公因子个数来确定。此外,自注意力机制中的查询、键和值可以根据公共因子和原始词嵌入维度之间的对应关系进行识别。
第三,我们为查询、键和值设计了一种新的线性投影方法,在使用较少参数的情况下,在实践中取得了有竞争力的性能。通过我们的方法和后续的投影规则得到的查询、键和值与典型的多头注意力机制相比,在语义上更加聚焦,具有更强的可解释性。
最后,类似于典型的多头注意力机制,将每个头计算得到的新表达式合并作为输出。该方法可以用于任何使用自注意力机制的NLP任务。在本文中,我们将说明使用BERT作为背景的方法,因为它在其架构中使用了自注意力机制。
因子分析是一种从一组变量中提取公共因子的统计方法,可分为两类:验证性因子分析和探索性因子分析。验证性因素分析通常用于检验变量与因素之间关系的预定假设,而探索性因素分析在没有预定假设的情况下,探索可能存在的关系并提取公因子。
因子分析的目的与主成分分析类似, 要把多个变量的信息压缩到少数几个变量中, 压缩的结果称为“因子”, 因子需要起到把变量分组的作用。
模型架构
该模型的整体架构与BERT等基于Transformer编码器的模型一致。输入数据首先经过一个词嵌入层,得到每个视图的初始嵌入向量。然后经过注意力层,注意力层由多头注意力机制和基于位置的全连接前馈网络组成。注意力层由N个相同的层堆叠而成。每层有两个子层。第一种是本文提出的FAM Attention层,第二种与传统框架相同。我们还在两个子层的周围使用了一个残差连接,然后使用层归一化。最后,通过线性层得到输出。

子图( 2 )说明了FAM 注意力机制。这里的S - D Attention表示尺度化的点积注意力
FAM注意力机制
使用预训练的词向量模型(Word2vec、Glove2vec),可以正常地初始化词嵌入层中的参数,并以微调的方式帮助训练整个语言模型。这些WVM产生的词嵌入向量被认为在一定程度上具有表示相关句子的一些句法和语义信息的能力。从一个特定的词向量机中得到一个词嵌入向量矩阵W =
,其中k是词汇量的大小,d是嵌入维数,我们假设d维向量可以从不同的角度来表示每个词的含义。作者通过对W进行探索性因子分析来考察d个维度之间潜在的相似关系,从而对词向量表示有更深入的理解。
探索性因子分析尝试识别出基础变量(或称因子)来解释在一组观察到的变量中体现的相关模式。因子分析通常用于数据降维,其目的是识别出少数几个因子来解释大多数在众多显性变量中所观测到的方差。因子分析也可用于生成关于因果机制的假设或过滤变量以用于随后的分析。
BERT 中的典型多头注意力涉及将查询、键和值线性地投影到h个不同的子空间中,以学习来自h个不同视图的输入表示。如果输入数据是句子对,这些输入是由词嵌入,位置编码和额外段嵌入的加法和产生的。h是多头注意力机制中的头数,通常手动设置为8,12或16。作者通过应用因子分析结果来决定头的个数,并得到这h个不同的子空间,这比规范的手动设置更具有实际意义。
词嵌入的语义分解
为确定词头个数及其对应的维度,采用因子分析法对词嵌入的所有维度进行降维分解。首先,需要对词嵌入矩阵W进行巴特利特的球型检验和KMO检验,以检验W是否适合做因子分析。因子分析模型的拟合方法主要有3种:极小残差算法 、最大似然法和主成分分析法 ( PCA ) 。在这项研究中,选择了PCA,因为它可以很容易地计算W的特征值和公因子的累积方差贡献。PCA在实际实验中也有较快的计算速度。对于h < d个公共因子的因子分析的代数表示见下面的公式:
式中:Wi表示原始词嵌入矩阵的第i维向量,i = 1,2,· · ·,d;Fj表示公因子,j = 1,2,..,h;ei表示Wi的具体因子;Vi ( j )表示权重,表示Wi与公共因子fj相关联的程度,即因子载荷。
头的个数通过如下结果决定:
首先,计算W的协方差矩阵为C,并对C的特征值进行降序排序;
其次,观察特征值的下降趋势,找出特征值开始下降的点。在实际中,我们识别这种下降的标准是基于一个明确且自动的标准:当当前特征值与下一个特征值的差值小于上一个特征值与当前特征值的差值时,我们选择"头"的数量。这个概念类似于因子分析中的碎石图,曲线斜率开始趋于平缓的点意味着向特征值差异逐渐减小的过渡。其数学表达式为eh - e(h + 1 )< e(h - 1) - eh,其中eh表示按降序排列的第h个特征值。此时,将公共因子数h设为该点特征值的累加数;
第三,利用PCA对W进行因子分析,将公共因子设置为h,得到d个维度与h个因子的对应关系,即每个维度属于哪个因子。
查询、键和值的不同投影
作者采用了一种精细的线性投影设计,使得模块能够对输入信息获得更深入的理解。这不同于典型自注意力中的多传感头注意力,它直接将整个输入投影到相同大小的不同子空间中。根据上一节因子分析的结果,得到了由原始词嵌入矩阵X分解得到的h个成分{ c1,c2,· · ·,ch }:
其中,Disassemble ( X )函数是指对输入矩阵X进行因子分析,b是批次大小,l是序列长度,len_fi是fi的长度。fi表示一个列表{ di1,di2,· · ·,dlen _ fi i },其中fi中的len_fi维度属于第i个公因子。显然,fi的长度之和等于d,如下式所示。
然后将聚合的h部分进行单独的缩放点积自注意力:
式中:qi∈Rlen _ fi * len _ fi、ki∈Rlen _ fi * len _ fi和vi∈Rlen _ fi * len _ fi均为可学习的线性投影矩阵,其大小由fi的长度决定。最后,将输出c′1,c′2,· · ·,c′h按照X中d维的原始相对顺序组合在一起。
如图2所示,相同颜色的尺寸表示它们属于一个相同的公因子,而不同特定颜色打印的所有d维尺寸属于不同的公因子,这应该与因子分析结果一致。属于同一公因子的尺寸在拆卸过程中合并在一起。在实现新颖的FAM注意力机制后,在合并过程中所有维度都恢复到原来的位置。

其中b表示批大小,l表示序列长度,d表示每个嵌入的长度。
S-D Attention表示尺度化的点积注意力
算法进阶的理论阐释
因子分析的本质可以理解为将相关的维度聚为一类,将相关性较小的维度分离出来,相当于根据嵌入的语义进行聚类。
传统的多头注意力通过线性投影将整个嵌入映射到相同大小的几个子空间,相当于将嵌入的所有维度平均分配。
作者的方法在应用线性投影之前先对输入进行因子分析,类似于从语义角度对嵌入维度进行聚类。
方差常用来衡量信息的不确定性或信息的混乱程度。
作者的方法得到的类内偏差平方和Var(X)小于或等于传统方法得到的类内偏差平方和Var(Xold):
计算Q、K、V的过程实质上是对原始矩阵的一次线性变换。作者的方法Q、K、V的参数矩阵大小比传统方法小,经过线性变换后,数据的总方差会更小。
作者的方法得到的方差比传统方法的小,信息混淆程度更低,提高了模型的学习有效性。
传统多头注意力中的参数总数为:

作者提出的新型自注意力机制中的可学习参数总数为:

比较得到如下结果:
注意力机制包括三个步骤:
( 1 )将输入投影到子空间,( 2 )自注意力和( 3 )级联后的最终投影。
表1比较了每个步骤的FAM层和典型多头注意力层的计算复杂度。

复杂度的差异仅在于从步骤( 1 )开始的线性投影,即矩阵乘法的底层。
选取的公因子个数的影响
由PCA理论可知,增加主成分的个数会导致更多信息被保留。

(b)显示了我们的方法在不同数量的注意力头下的性能,使用FAM Attention块对所有模型进行处理。
横轴表示公共因子(头数),纵轴表示对应注意力头数的模型预测准确率。
随着公共因子个数的增加,模型性能有所提升,但提升程度随着公共因子个数的变大而减小。
当词嵌入的长度一定时,较大数量的注意力头导致从原始变量中提取的因子保留的信息量更大,导致这些因子表达的语义子空间更细致、更鲜明。由这些注意力头计算得到的新词嵌入更加准确。

增加注意力头的数量虽然可以提高模型精度,但也会导致计算效率降低。因此,为了在有效性和效率之间取得平衡,不能无限制地增加头数。