DCFormer: 动态组合多头自注意力

2024-08-26 22:36

本文主要是介绍DCFormer: 动态组合多头自注意力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        多头注意力(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中,输入依赖指的是注意力得分和权重矩阵的计算过程依赖于模型的输入数据。这种动态调整允许模型更好地适应不同的输入,从而提高处理复杂数据的能力。</

这篇关于DCFormer: 动态组合多头自注意力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109872

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

【Tools】大模型中的注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 在大模型中,注意力机制是一种重要的技术,它被广泛应用于自然语言处理领域,特别是在机器翻译和语言模型中。 注意力机制的基本思想是通过计算输入序列中各个位置的权重,以确

LeetCode:64. 最大正方形 动态规划 时间复杂度O(nm)

64. 最大正方形 题目链接 题目描述 给定一个由 0 和 1 组成的二维矩阵,找出只包含 1 的最大正方形,并返回其面积。 示例1: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 示例2: 输入: 0 1 1 0 01 1 1 1 11 1 1 1 11 1 1 1 1输出: 9 解题思路 这道题的思路是使用动态规划

Go组合

摘要 golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合 组合使用注意项 使用匿名引入的方式来组合其他struct 默认优先调用外层方法 可以指定匿名struct以调用内层方法 代码 package mainimport ("fmt")type People struct{}type Pe

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b