注意力机制详解

简介: 注意力机制是Transformer核心,通过自注意力、交叉注意力等实现序列间动态关联。多头、分组、多查询等变体在效率与性能间权衡,广泛应用于大模型设计,助力高效长序列建模与推理优化。

🎯 概述
注意力机制是Transformer架构的核心,允许模型在处理序列时动态地关注重要信息。
🏗️ 注意力机制类型
1️⃣ 自注意力机制 (Self-Attention, SA)
原理:序列中的每个元素关注序列中的其他所有元素
数学公式:
$\text{Self-Attention}(X) = \text{softmax}\left(\frac{XW_Q(XW_K)^T}{\sqrt{d_k}}\right)XW_V$
代码示例:
import torch
import torch.nn as nn

class SelfAttention(nn.Module):
def init(self, d_model, d_k, d_v):
super().init()
self.w_q = nn.Linear(d_model, d_k)
self.w_k = nn.Linear(d_model, d_k)
self.w_v = nn.Linear(d_model, d_v)
self.scale = torch.sqrt(torch.FloatTensor([d_k]))

def forward(self, x, mask=None):
    Q = self.w_q(x)
    K = self.w_k(x)
    V = self.w_v(x)

    scores = torch.matmul(Q, K.transpose(-2, -1)) / self.scale

    if mask is not None:
        scores = scores.masked_fill(mask == 0, -1e9)

    attention = torch.softmax(scores, dim=-1)
    return torch.matmul(attention, V)

2️⃣ 交叉注意力机制 (Cross-Attention, CA)
原理:一个序列关注另一个序列的信息
应用场景:
● 编码器-解码器架构
● 多模态融合
● 知识蒸馏
3️⃣ 多头注意力机制 (Multi-Head Attention, MHA)
原理:并行运行多个注意力头,捕获不同类型的关系
架构:
class MultiHeadAttention(nn.Module):
def init(self, d_model, n_heads):
super().init()
assert d_model % n_heads == 0

    self.d_model = d_model
    self.n_heads = n_heads
    self.d_k = d_model // n_heads

    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)
    self.w_o = nn.Linear(d_model, d_model)

def forward(self, query, key, value, mask=None):
    batch_size = query.size(0)

    # 线性变换并分头
    Q = self.w_q(query).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)
    K = self.w_k(key).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)
    V = self.w_v(value).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)

    # 注意力计算
    scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.FloatTensor([self.d_k]))

    if mask is not None:
        mask = mask.unsqueeze(1).unsqueeze(1)
        scores = scores.masked_fill(mask == 0, -1e9)

    attention = torch.softmax(scores, dim=-1)
    context = torch.matmul(attention, V)

    # 合并多头
    context = context.transpose(1, 2).contiguous().view(
        batch_size, -1, self.d_model
    )

    return self.w_o(context)

4️⃣ 分组注意力机制 (Grouped Query Attention, GQA)
原理:将查询头分组,每组共享键值头,平衡MHA和MQA
优势:
● 减少内存带宽需求
● 保持模型质量
● 推理加速
5️⃣ 多查询注意力机制 (Multi-Query Attention, MQA)
原理:所有查询头共享相同的键值头
特点:
● 显著减少内存带宽
● 推理速度提升
● 可能轻微影响质量
6️⃣ 多头潜在注意力 (Multi-Head Latent Attention, MLA)
原理:通过低秩投影减少键值缓存
DeepSeek创新:
● 低秩键值联合压缩
● 减少推理时KV缓存
● 保持表达能力
📊 注意力机制对比
机制 参数量 内存占用 推理速度 质量
MHA 高 高 慢 高
GQA 中 中 中 高
MQA 低 低 快 中
MLA 低 极低 快 高
🎯 面试重点
高频问题

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

    计算注意力复杂度

    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
    📚 深入阅读
    ● Transformer基础结构
    ● 位置编码详解
    ● [主流大模型结构](
相关文章
|
开发工具 Python
milvus的delete操作
milvus的delete操作
1928 0
|
机器学习/深度学习 人工智能 数据库
【表面缺陷检测】表面缺陷检测数据集汇总
本文收集整理了16个表面缺陷检测相关的数据集,并对每个数据集的特点进行了简单的介绍。
【表面缺陷检测】表面缺陷检测数据集汇总
|
决策智能
Multi-Agent实践第2期: @智能体 你怎么看?
我们将带你体验如何实现一个更具互动性的多智能体群聊:你可以直接"@"提及某个智能体来引发对话。
|
机器学习/深度学习 编解码 文件存储
YOLOv5改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
YOLOv5改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
2047 1
|
机器学习/深度学习 搜索推荐 算法
多任务学习之mmoe理论详解与实践
多任务学习之mmoe理论详解与实践
多任务学习之mmoe理论详解与实践
|
10月前
|
机器学习/深度学习 自然语言处理 算法
主流分词算法
分词器将文本转为模型可处理的数字序列,主流算法有BPE、WordPiece和SentencePiece。BPE高效但中文支持弱;WordPiece用于BERT,适合英文;SentencePiece语言无关,支持中文。实战中需根据语言选择算法,并合理设置词汇表大小与特殊标记,解决OOV等问题。
|
7月前
|
人工智能 Linux API
从部署到精通!OpenClaw阿里云/本地多端搭建+百炼Coding Plan API配置实战,进阶功能与避坑指南
2026年OpenClaw(Clawdbot)作为开源AI代理框架的热门选择,凭借本地运行的隐私性、可扩展的技能体系和强大的任务处理能力,成为开发者打造专属AI助手的核心工具。而想要让OpenClaw的能力发挥到极致,不仅需要完成基础的部署工作,更要掌握AGENTS.md配置、记忆系统优化、子Agent并行任务、Cron定时任务等进阶功能,同时对接阿里云百炼Coding Plan免费大模型API,实现云边协同的智能体验。本文将从阿里云部署、本地MacOS/Linux/Windows11全系统部署、阿里云百炼API配置、核心进阶功能调优到全流程常见问题解答,带来一站式实战教程,让新手也能快速从部
1337 8
|
7月前
|
人工智能 Linux API
OpenClaw+大模型构建超级个体工作流:阿里云、MacOS/Linux/Windows11部署详细步骤与自动化开发实战
在AI辅助开发全面普及的2026年,掌握OpenClaw智能体编排框架,搭配高性能大模型,能够快速实现从需求分析、代码生成、单元测试到部署上线的全流程自动化,让个人开发者实现“一人成团队”的超级个体工作模式。本文基于实战场景,完整讲解OpenClaw环境配置、MiniMax与千问/Coding Plan API对接、多模型回退保障、自动化项目生成流程,同时提供2026年阿里云服务器部署、MacOS/Linux/Windows11本地部署详细步骤,搭配全套可直接运行代码命令与常见问题解决方案,帮助开发者快速从手动编码转向AI指挥模式,大幅提升开发效率。
1019 6
|
8月前
|
人工智能 运维 自然语言处理
2026年无影云电脑极速部署OpenClaw(Clawdbot)阿里云官方全流程指南
OpenClaw(原Clawdbot/Moltbot)作为阿里云生态下的AI自动化代理工具,凭借“自然语言交互+自动化任务执行+插件化扩展”的核心能力,已成为个人办公提效、中小企业轻量化数字化转型的关键工具。2026年阿里云无影云电脑针对OpenClaw推出“一键部署”方案,无需手动配置服务器环境、编写命令行代码,仅通过图形化界面即可完成从环境搭建到功能验证的全流程,彻底打破技术门槛,非专业用户也能在15分钟内完成部署。本文将以阿里云无影云电脑为核心载体,详细拆解OpenClaw的部署、配置、功能验证与运维全流程,包含可视化操作步骤与关键代码命令,覆盖新手到进阶用户的全需求。
1047 4
|
10月前
|
存储 NoSQL 关系型数据库
什么是 Geohash 编码?
Geohash编码将经纬度转换为字符串,通过不断二分地球坐标区间,交叉合并经纬编码,再转为Base32简化表示。它用短字符串标识位置,支持高效空间索引与查询,广泛应用于Redis、MySQL等系统。

热门文章

最新文章