MHA & MQA & GQA & MLA

0. 引言

引入多头注意力机制是为了让每个注意力机制去优化每个词汇的不同特征部分,从而均衡同一种注意力机制可能产生的偏差,从而增强模型的表达能力。

因为Transformer的encoder和decoder两个部分结构不同,在计算多头注意力时也会有些许不同。而后续的大模型大多数用的都是 decoder-only 结构,这种结构天然适合做KV-Cache,这是一种以空间换时间的策略,为了减少KV-Cache的内存占用就有了后面的MQA(Multi-Query Attention),GQA(Grouped-Query Attention)以及MLA(Multi-head Latent Attention)。

此篇博文介绍一下从MHA、MQA、GQA到MLA的进化历程。

简单来讲:

  • 在 MHA(Multi Head Attention) 中,每个头有自己单独的 key-value 对。标准的多头注意力机制,h个Query、Key 和 Value 矩阵。
  • 在 MQA(Multi Query Attention) 中只会有一组 key-value 对,多头注意力的一种变体,也是用于自回归解码的一种注意力机制。与MHA不同的是,MQA 让所有的头之间共享同一份 Key 和 Value 矩阵,每个头只单独保留了一份 Query 参数,从而大大减少 Key 和 Value 矩阵的参数量。
  • 在 GQA(Grouped Query Attention) 中,会对 attention 进行分组操作,query 被分为 N 组,每个组共享一
计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统与大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型与激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参与电网互动(V2G)、需求侧响应等课题提供仿真平台和技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学与科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑与算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
### MHAMQA的区别及应用场景 #### 多头注意力(MHA) 多头注意力(Multi-Head Attention, MHA)是一种经典的注意力机制,其核心思想是通过多个并行的注意力层来捕获输入序列的不同子空间特征[^3]。具体来说: - **工作原理** 在 MHA 中,Query (Q)、Key (K) 和 Value (V) 都会经过独立的线性变换,生成多个“头”(Heads)。每个头分别计算自己的注意力权重,并最终将这些头的结果拼接起来并通过另一个线性投影得到输出。 - **优点** - 能够捕捉更加多样化的上下文关系。 - 提供更高的表达能力,适合复杂的建模需求。 - **缺点** - 参数量较大,尤其是在长序列场景下,内存消耗显著增加。 - 计算成本较高,可能不适合资源受限环境下的高效部署。 #### 多查询注意力(MQA) 多查询注意力(Multi-Query Attention, MQA)可以视为 MHA 的简化版本,在某些特定条件下能够大幅降低计算开销[^4]。以下是它的主要特性: - **工作原理** 不同于 MHA 中每个 Query 对应一组独立的 Key 和 Value 投影矩阵,MQA 将所有的 Query 共享同一个 Key 和 Value 矩阵 \( K_{\text{shared}}, V_{\text{shared}} \)。这意味着无论有多少个 Query “头”,它们都基于相同的 Key 和 Value 进行计算。 - **优点** - 显著减少参数数量和存储需求,特别是在大规模推理任务中表现出色。 - 更加高效的计算流程,特别适用于实时性和低延迟要求较高的场合。 - **缺点** - 表达能力和灵活性较弱,无法像 MHA 那样充分挖掘数据中的多样化模式。 - 性能在一些复杂任务上的表现可能会有所下降。 #### 应用场景对比 - **MHA的应用场景**: 当前主流的大规模预训练模型如 BERT 或 T5 均采用标准形式的 MHA 结构。这类结构非常适合需要高度精确表示的任务,比如自然语言理解和机器翻译等。 - **MQA的应用场景**: 主要集中在对速度敏感或者硬件资源有限的情况下,例如在线聊天机器人服务(如 ChatGPT 解码阶段)、移动设备端轻量化模型以及边缘计算领域内的各种应用。 ```python # 示例代码展示两种方法的主要差异 import torch from torch import nn class MHAttention(nn.Module): def __init__(self, d_model=512, num_heads=8): super(MHAttention, self).__init__() assert d_model % num_heads == 0 self.d_k = d_model // num_heads self.num_heads = num_heads # 定义三个全连接层用于 QKV 投射 self.W_q = nn.Linear(d_model, d_model) self.W_k = nn.Linear(d_model, d_model) self.W_v = nn.Linear(d_model, d_model) def forward(self, q, k, v): batch_size = q.size(0) # 投射操作 q = self.W_q(q).view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2) k = self.W_k(k).view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2) v = self.W_v(v).view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2) scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.d_k) attn_weights = F.softmax(scores, dim=-1) output = torch.matmul(attn_weights, v) return output.transpose(1, 2).contiguous().view(batch_size, -1, self.num_heads * self.d_k) class MQAttention(nn.Module): def __init__(self, d_model=512, num_heads=8): super(MQAttention, self).__init__() self.d_k = d_model // num_heads self.num_heads = num_heads # 只定义单个 KV 投射层 self.W_q = nn.Linear(d_model, d_model) self.shared_W_k = nn.Linear(d_model, self.d_k) self.shared_W_v = nn.Linear(d_model, self.d_k) def forward(self, q, k, v): batch_size = q.size(0) # 查询投射保持不变 q = self.W_q(q).view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2) # 使用共享的键值向量 shared_k = self.shared_W_k(k) shared_v = self.shared_W_v(v) scores = torch.matmul(q, shared_k.unsqueeze(1)).squeeze() / math.sqrt(self.d_k) attn_weights = F.softmax(scores, dim=-1) output = torch.matmul(attn_weights.unsqueeze(1), shared_v.unsqueeze(1)).squeeze() return output.view(batch_size, -1, self.num_heads * self.d_k) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

comli_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值