注意力机制详解

简介: 注意力机制是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操作
1801 0
|
存储 iOS开发
SwiftUI极简教程17:Gestures手势的使用
SwiftUI极简教程17:Gestures手势的使用
1433 0
SwiftUI极简教程17:Gestures手势的使用
|
5月前
|
机器学习/深度学习 自然语言处理 算法
主流分词算法
分词器将文本转为模型可处理的数字序列,主流算法有BPE、WordPiece和SentencePiece。BPE高效但中文支持弱;WordPiece用于BERT,适合英文;SentencePiece语言无关,支持中文。实战中需根据语言选择算法,并合理设置词汇表大小与特殊标记,解决OOV等问题。
|
机器学习/深度学习 人工智能 数据库
【表面缺陷检测】表面缺陷检测数据集汇总
本文收集整理了16个表面缺陷检测相关的数据集,并对每个数据集的特点进行了简单的介绍。
【表面缺陷检测】表面缺陷检测数据集汇总
|
机器学习/深度学习 编解码 文件存储
YOLOv5改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
YOLOv5改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
1940 1
|
决策智能
Multi-Agent实践第2期: @智能体 你怎么看?
我们将带你体验如何实现一个更具互动性的多智能体群聊:你可以直接"@"提及某个智能体来引发对话。
|
2月前
|
JSON 算法 API
​​​​​​​调用1688按图搜索商品API接口指南
本文详解1688按图搜商品API的调用方法:涵盖注册应用、获取密钥、图片上传(URL或Base64)、签名生成、参数拼接与POST请求全流程,并附Python示例代码及安全注意事项,助开发者快速集成图像搜索能力。(239字)
566 0
|
机器学习/深度学习 搜索推荐 算法
多任务学习之mmoe理论详解与实践
多任务学习之mmoe理论详解与实践
多任务学习之mmoe理论详解与实践
|
7月前
|
机器学习/深度学习 人工智能 芯片
42_大语言模型的计算需求:从GPU到TPU
随着2025年大语言模型技术的持续突破和规模化应用,计算资源已成为推动AI发展的关键驱动力。从最初的CPU计算,到GPU加速,再到专用AI加速器的崛起,大语言模型的计算需求正在重塑全球数据中心的基础设施架构。当前,全球AI半导体市场规模预计在2027年将达到2380亿美元(基本情境)甚至4050亿美元(乐观情境),这一增长背后,是大语言模型对计算能力、内存带宽和能效比的极致追求。
951 0
|
12月前
|
机器学习/深度学习 搜索推荐 PyTorch
基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
本文详细讲解了如何在昇腾平台上使用PyTorch训练推荐系统中的经典模型DIN(Deep Interest Network)。主要内容包括:DIN网络的创新点与架构剖析、Activation Unit和Attention模块的实现、Amazon-book数据集的介绍与预处理、模型训练过程定义及性能评估。通过实战演示,利用Amazon-book数据集训练DIN模型,最终评估其点击率预测性能。文中还提供了代码示例,帮助读者更好地理解每个步骤的实现细节。