注意力机制详解

简介: 注意力机制是Transformer核心,实现动态信息聚焦。涵盖自注意力、交叉注意力、多头(MHA)、分组(GQA)、多查询(MQA)及潜在注意力(MLA),在参数量、速度与质量间权衡。广泛应用于NLP与多模态任务,面试常考其原理与复杂度。

🎯 概述
注意力机制是Transformer架构的核心,允许模型在处理序列时动态地关注重要信息。
🏗️ 注意力机制类型
1️⃣ 自注意力机制 (Self-Attention, SA)
原理:序列中的每个元素关注序列中的其他所有元素
数学公式:
Self-Attention(X)=softmax(
d
k

XW
Q

(XW
K

)
T


)XW
V

代码示例:
2️⃣ 交叉注意力机制 (Cross-Attention, CA)
原理:一个序列关注另一个序列的信息
应用场景:
编码器-解码器架构
多模态融合
知识蒸馏
3️⃣ 多头注意力机制 (Multi-Head Attention, MHA)
原理:并行运行多个注意力头,捕获不同类型的关系
架构:
4️⃣ 分组注意力机制 (Grouped Query Attention, GQA)
原理:将查询头分组,每组共享键值头,平衡MHA和MQA
优势:
减少内存带宽需求
保持模型质量
推理加速
5️⃣ 多查询注意力机制 (Multi-Query Attention, MQA)
原理:所有查询头共享相同的键值头
特点:
显著减少内存带宽
推理速度提升
可能轻微影响质量
6️⃣ 多头潜在注意力 (Multi-Head Latent Attention, MLA)
原理:通过低秩投影减少键值缓存
DeepSeek创新:
低秩键值联合压缩
减少推理时KV缓存
保持表达能力
📊 注意力机制对比
机制
参数量
内存占用
推理速度
质量
MHA




GQA




MQA




MLA

极低


🎯 面试重点
高频问题
自注意力和交叉注意力的区别?
为什么需要多头注意力?
GQA和MQA的权衡?
如何计算注意力权重?
注意力机制的时间和空间复杂度?
实战分析
1
2
3
4
5
6
7

计算注意力复杂度

def attention_complexity(seq_len, d_model, n_heads):

# 计算注意力矩阵: O(n²d)
# 存储KV缓存: O(nhd)
time_complexity = seq_len * seq_len * d_model
space_complexity = seq_len * n_heads * (d_model // n_heads)
return time_complexity, space_complexity
相关文章
|
Java
Java - Java9 之后显示已过时 newInstance() 方法之解决方案
Java - Java9 之后显示已过时 newInstance() 方法之解决方案
950 0
|
11天前
|
存储 消息中间件 缓存
3.2. 发布订阅模型(Publish/Subscribe)
发布订阅模型通过交换机实现消息一对多分发,生产者将消息发给交换机,由其广播至多个绑定队列,每个队列的消费者均可接收消息。Fanout交换机为广播模式,支持消息同时推送至所有绑定队列,适用于通知、日志等场景。交换机不存储消息,若无队列绑定则消息丢失。
|
11天前
|
消息中间件 Java 测试技术
3 RabbitMQ工作模型
工作队列模型允许多个消费者绑定同一队列,实现消息的并发处理。通过设置`prefetch=1`,可实现“能者多劳”,即处理能力强的消费者自动接收更多消息,避免消息积压,提升整体处理效率。
|
11天前
|
运维 安全 Devops
生产环境缺陷管理
针对大型团队多分支开发中bug协同难、易漏修漏发等问题,我们基于go-git打造了通用型工具git-poison,实现分布式、自动化bug追溯与管理。通过“投毒-解毒-银针”机制,精准阻塞带未修复bug的发布,避免人为疏漏导致的生产故障,显著降低沟通成本,提升发布安全与效率,已在百人团队落地验证。
|
10天前
|
存储 安全 Java
认证源码分析与自定义后端认证逻辑
本文深入分析Spring Security认证流程,从UsernamePasswordAuthenticationFilter入手,解析用户登录请求如何通过AuthenticationManager委托给AuthenticationProvider进行认证,最终由UserDetailsService加载用户信息并完成身份验证。重点揭示了自定义认证逻辑的关键——实现UserDetailsService并返回包含权限的UserDetails对象,同时追踪认证成功后SecurityContext的更新机制及“记住我”功能的触发过程,全面梳理了整个认证链路的核心实现。
|
11天前
|
Arthas 前端开发 Java
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev→test→pre→prod)高效发布。涵盖各环境职责、分支管理、CI/CD流程及日志排查,结合Skywalking等工具实现链路追踪,提升发布效率与系统稳定性。
|
11天前
3.4.Direct交换机
Direct交换机根据RoutingKey精确匹配队列,实现消息的定向路由;而Topic交换机支持通配符绑定,RoutingKey为用.分隔的多个单词,可实现更灵活的消息匹配与分发。
|
11天前
|
消息中间件 存储 Java
4 高级队列(自学)
RabbitMQ惰性队列(LazyQueue)将消息直接存入磁盘,减少内存占用,支持百万级消息存储,避免因消息积压导致的性能问题。适用于消息量大、消费者处理慢的场景,如日志聚合。3.12版本后已成为默认队列类型。结合优先级队列可实现高效、灵活的消息处理。常用于异步解耦,如下单后异步清空购物车。
|
11天前
|
敏捷开发 Dubbo Java
需求开发人日评估
敏捷开发中,工时评估是关键环节。人日指一人完成任务所需天数,如1人日即一人一天。通常开发3人日,自测约0.3~0.5倍,联调与测试各约0.5倍,发布约2小时。常见需求如Excel导入导出2人日,单表增删改查1人日,跨服务调用或MQ消费各3人日,需综合考虑接口与依赖因素。
|
11天前
|
消息中间件 Java Docker
2 RabbitMQ入门
RabbitMQ是基于Erlang开发的开源消息中间件,支持AMQP协议,具备跨语言特性。通过生产者、消费者、队列、交换机及虚拟主机实现消息通信。结合SpringAMQP可快速实现消息收发,支持推拉两种模式,广泛用于异步处理、应用解耦等场景。