多头注意力(MHA)是Transformer的关键组成部分。在MHA中,注意力头是独立工作的,导致注意得分矩阵的低秩瓶颈和注意头冗余等问题。动态组合多头注意(dynamic Composable Multi-Head Attention, DCMHA)是一种参数化和计算效率高的注意力结构,它解决了MHA的不足,并通过动态组合注意头来提高模型的表达能力。DCMHA的核心是一个Compose函数,它以输入依赖的方式转换注意力得分和权重矩阵。DCMHA可以在任何Transformer体系结构中作为MHA的直接替代品,以获得相应的DCFormer。
DCFormer 是一种高级的序列模型,它采用了动态权重投影和滑动窗口机制来高效处理长序列数据,并在注意力计算上实现更灵活的表达。
DCFormer通过灵活、动态的注意力机制来高效处理长序列数据,基于多头自注意力的结构增强其性能:①动态权重投影:根据输入动态生成查询、键和值的权重矩阵,避免固定权重导致的表达能力限制。②滑动窗口机制:在处理长序列时引入局部注意力机制,限制注意力计算的范围,从而减少计算开销和内存使用。③Chunked Attention:序列被划分为多个快,模型逐块进行计算,使得模型可以在处理长序列时分段执行,从而保持计算效率。
动态权重投影
动态权重投影的核心思想是让模型根据输入动态地生成注意力权重,而不是像标准 Transformer 那样使用固定的查询、键和值矩阵。其实现方式主要有两步:
动态生成权重矩阵:模型通过输入 x
生成动态权重,来构建查询、键和值的投影矩阵。即,对于每个输入序列片段(token),生成不同的投影矩阵。这避免了固定投影矩阵可能对模型能力的限制,并能够捕捉输入序列中的变化。
注意力前后投影:在计算查询和键的点积之前,模型会先根据动态权重对其进行预投影(pre-projection),得到一个初步的查询-键关联矩阵(logits);在点积注意力之后,再进行后投影(post-projection),进一步调整最终的注意力分布。
前投影指的是对查询和键向量进行线性变换;
W_q = [[1, 0], [0, 1]] # 查询前投影矩阵
W_k = [[1, 0], [0, 1]] # 键前投影矩阵
Q_proj = np.dot(Q, W_q) # 对查询进行前投影
K_proj = [np.dot(K1, W_k), np.dot(K2, W_k), np.dot(K3, W_k)] # 对每个键进行前投影
然后,计算查询与每个键的点积(即注意力分数);
attention_scores = [np.dot(Q_proj, K1_proj), np.dot(Q_proj, K2_proj), np.dot(Q_proj, K3_proj)]
后投影指的是用这些注意力分数计算最终的注意力分布。注意力分布可以通过softmax函数获得;
attention_probs = np.exp(attention_scores) / np.sum(np.exp(attention_scores))
后投影可能涉及一个线性变换矩阵W_o,这个矩阵对注意力分布进行进一步加工,从而得到最终的注意力概率分布。
attention_probs_final = np.dot(attention_probs, W_o)
动态权重投影可以生成更细粒度的权重,从而提升推理质量。
对角加权
对角加权通过动态权重投影(Dynamic Weight Projection)来实现。一个基于输入内容动态调整权重的过程。
对角加权指的是权重矩阵是对角矩阵。只有矩阵的对角线元素是非零的,而其余元素都是零。在模型需要对不同维度的特征进行独立缩放或加权时经常会被使用。对角加权类似于给每个特征分配一个单独的“调节器”,用来调整每个特征的重要性。
[2, 0, 0]
[0, 3, 0]
[0, 0, 1]
对角加权:意味着将这个对角矩阵与数据相乘,调整每个特征的“权重”。在上面的例子中,假设有一个特征向量 [x1, x2, x3]
,那么应用这个对角矩阵后,你得到的结果是 [2*x1, 3*x2, 1*x3]
,即对每个特征进行了单独的加权。
假设在处理一个图像分类问题,每张图像有三个通道:红色通道、绿色通道、蓝色通道。你可能想让模型更加关注红色通道的内容,而减少蓝色通道的影响。你可以使用一个对角矩阵 [2, 1, 0.5]
来对三个通道进行加权,这样红色通道的影响被放大了两倍,而蓝色通道的影响被减半。
1、计算动态权重:模型根据输入的查询向量(query vector)和预定义的参数(如
dd
参数)来计算动态权重。dd
参数会生成一个包含对角加权信息的向量或矩阵。
动态权重的计算通过一系列的线性变换和非线性激活函数(GELU)完成。
2、应用动态权重:在计算查询和键之间的相似性时,会对每个头的结果进行动态调整,尤其是对角线上的元素。
3、组合权重与对角加权:这些经过对角加权处理的相似性分数(logits)会与值(value)向量进行加权求和,得到最终的输出。
滑动窗口机制
滑动窗口机制旨在减少长序列的注意力计算开销。通常情况下,Transformer 的自注意力机制是全局的,即每个 token 都会与序列中的所有其他 token 进行交互,导致随着序列长度的增加,计算量和内存需求呈指数增长。
滑动窗口机制通过引入局部注意力,将每个 token 的注意力计算限制在一个固定大小的窗口范围内。也就是说,对于序列中的每一个位置,模型只计算其相邻的某些 token 的注意力,而不是与整个序列交互。
窗口大小:窗口的大小是预先设定的,控制了每个 token 只关注相邻多少个 token。例如,窗口大小为 128,则每个 token 只与其前后 128 个 token 进行交互。
窗口滑动:在推理过程中,窗口随着序列的进展向前滑动,逐步覆盖整个序列。每次推理时,只处理窗口内的局部信息。
动态权重投影和滑动窗口机制
动态权重投影和滑动窗口机制的结合,可以很好地平衡灵活性和效率:
局部注意力下的动态权重投影:滑动窗口机制限制了注意力计算的范围,但为了保证局部注意力的质量,DCFormer 通过动态权重投影生成与当前窗口相关的权重矩阵。这意味着,虽然每个 token 只与其邻近的 token 进行交互,但这些交互的权重是动态调整的,可以根据局部上下文生成更细粒度的注意力分布。
避免信息丢失:滑动窗口机制在推理时,局部注意力可能会带来信息丢失或忽视全局依赖的风险。动态权重投影通过动态调整注意力分布,使得局部注意力仍然能够捕捉关键的全局依赖,弥补了滑动窗口可能带来的限制。
高效计算:由于滑动窗口机制限制了每次的注意力计算范围,而动态权重投影又确保了注意力的细致性和有效性,因此两者的结合可以在保持模型效果的同时,极大降低计算复杂度和内存开销。
引言
动态可组合多头注意力(DCMHA) :通过动态组合注意力头来提高模型的表达能力。DCMHA的核心是Compose函数,以输入依赖的方式转换注意力得分和权重矩阵。DCMHA可以在任何Transformer体系结构中作为MHA的直接替代品,以获得相应的DCFormer。
通常在传统的注意力机制中,注意力得分和权重矩阵的计算方式是固定的,只依赖于模型的参数。而在DCMHA中,输入依赖指的是注意力得分和权重矩阵的计算过程依赖于模型的输入数据。这种动态调整允许模型更好地适应不同的输入,从而提高处理复杂数据的能力。</