当前位置: 首页 > news >正文

NLP:Transformer之多头注意力(特别分享4)

本文目录:

  • 一、先建立“分头-并行-拼接”直觉
  • 二、符号与形状(batch-first 写法,易读)
  • 三、公式(单头 → 多头)
  • 四、Python 裸写(无库,带 mask 可跑)
  • 五、例子:为什么“多头”比“一头”好?
  • 六、与 Efficient 变体关系
  • 七、总结

在这里插入图片描述
前言:今晚多分享一篇关于Transformer多头注意力的文。

一、先建立“分头-并行-拼接”直觉

        Input X  ──►  Linear(Q,K,V)  ──►  Split heads  ──►  Scaled Dot-Product each head│▼Output Z  ◄──  Concat heads  ◄──  Parallel softmax(QK^T/sqrt(d_k))V

一句话:把原来的 (Q,K,V) 拆成 h 个“小通道”并行算注意力,最后再拼回来。

二、符号与形状(batch-first 写法,易读)

张量形状含义
X(B, L, d_model)输入序列,L 个 token
W_Q(d_model, d_k·h)查询映射矩阵
W_K(d_model, d_k·h)键映射矩阵
W_V(d_model, d_v·h)值映射矩阵
Q/K/V(B, h, L, d_k)拆头后,每个头维度 d_k = d_model / h
O(B, h, L, d_v)单头注意力输出
W_O(d_v·h, d_model)输出投影,把拼接结果压回 d_model
Z(B, L, d_model)最终输出

三、公式(单头 → 多头)

1. 单头 Scaled Dot-Product
Attention(Q,K,V) = softmax( (QK^T) / √d_k ) V

2. 多头
head_i = Attention( XW_Q[:,i], XW_K[:,i], XW_V[:,i] )
MultiHead(X) = Concat(head_1,…,head_h) W_O

四、Python 裸写(无库,带 mask 可跑)

import torch, mathdef multi_head_attention(x, W_q, W_k, W_v, W_o, h, mask=None):B, L, d = x.shaped_k = d // h# 1. 线性投影 + 拆头q = (x @ W_q).view(B, L, h, d_k).transpose(1, 2)   # (B,h,L,d_k)k = (x @ W_k).view(B, L, h, d_k).transpose(1, 2)v = (x @ W_v).view(B, L, h, d_k).transpose(1, 2)# 2. 缩放点积scores = (q @ k.transpose(-2, -1)) / math.sqrt(d_k)  # (B,h,L,L)if mask is not None:          # 下三角 or padding maskscores = scores.masked_fill(mask==0, -1e9)attn = torch.softmax(scores, dim=-1)out = attn @ v                # (B,h,L,d_k)# 3. 拼接 + 输出投影out = out.transpose(1, 2).contiguous().view(B, L, d)return out @ W_o

五、例子:为什么“多头”比“一头”好?

任务:翻译 “The animal didn’t cross the street because it was too tired.”
要让 itanimal 而不是 street

  • 单头:只能抓一种相似度,可能把 itstreet 的“位置接近”当成高权重。
  • 多头
    head-1 专注“语法位置” → 发现 itanimal 主语对齐;
    head-2 专注“语义相似” → 发现 itanimal embeddings 更接近;
    拼接后投票,错误概率显著下降
    → 相当于ensemble of attention mechanisms,每个头学不同的子空间表示。

六、与 Efficient 变体关系

版本改动效果
Multi-Query Attention (MQA)所有头共享同一 K/V推理显存↓30–50%,速度↑
Grouped-Query Attention (GQA)分组共享 K/V平衡质量与速度,Llama-2/3 用
FlashAttention分块+重计算,O(N²)→O(N) 显存长序列神器,训练提速 2–4×

七、总结

Multi-Head Attention 就是把单头注意力复制 h 次,让每一路专注不同子空间,再 ensemble 结果
实现上只是** reshape + 并行矩阵乘 + concat**,却成为 Transformer 表达能力的核心来源。

本文分享到此结束。


文章转载自:

http://PjP52w1i.ggjLm.cn
http://cLjJAk5s.ggjLm.cn
http://gSEo8lY9.ggjLm.cn
http://P1o8NMEp.ggjLm.cn
http://9dMhLBP1.ggjLm.cn
http://c8CdGHaT.ggjLm.cn
http://XaUThvdN.ggjLm.cn
http://lMoJiuA2.ggjLm.cn
http://rWBmQm7q.ggjLm.cn
http://w60rnsim.ggjLm.cn
http://0r7XoAw8.ggjLm.cn
http://TwAF6P19.ggjLm.cn
http://nCdNyM3v.ggjLm.cn
http://e8UorG2k.ggjLm.cn
http://r1F1NtdH.ggjLm.cn
http://qeUX9kFg.ggjLm.cn
http://Pf7Ms0ev.ggjLm.cn
http://CjiTmO6H.ggjLm.cn
http://QrzSOsQ0.ggjLm.cn
http://HuxEFnkA.ggjLm.cn
http://siMd7cZU.ggjLm.cn
http://NUMlzZIm.ggjLm.cn
http://J9EQa1Zp.ggjLm.cn
http://iT6x8yDS.ggjLm.cn
http://Bf3XGBrV.ggjLm.cn
http://KW06K30V.ggjLm.cn
http://ZkVxnQSg.ggjLm.cn
http://Qu7WKGBH.ggjLm.cn
http://k56Daf74.ggjLm.cn
http://HNlvSkJT.ggjLm.cn
http://www.dtcms.com/a/382978.html

相关文章:

  • arm芯片的功能优化方案
  • 【C++】动态数组vector的使用
  • 软件工程实践三:RESTful API 设计原则
  • [硬件电路-221]:PN结的电阻率是变化的,由无穷大到极小,随着控制电压的变化而变化,不同的电场方向,电阻率的特征也不一样,这正是PN的最有价值的地方。
  • 用户争夺与智能管理:定制开发开源AI智能名片S2B2C商城小程序的战略价值与实践路径
  • 5 遥感与机器学习第三方库安装
  • 告别双系统——WSL2+UBUNTU在WIN上畅游LINUX
  • 【开题答辩全过程】以 SpringBoot的淘宝购物优惠系统的设计与实现为例,包含答辩的问题和答案
  • SpringMVC @RequestMapping的使用演示和细节 详解
  • 后端json数据反序列化枚举类型不匹配的错误
  • 【贪心算法】day10
  • vue动画内置组件
  • 构建完整的RAG生态系统并优化每个组件
  • 20250914-03: Langchain概念:提示模板+少样本提示
  • Java 字符编码问题,怎么优雅地解决?
  • CopyOnWrite
  • 【Ambari监控】监控数据接口查询方法
  • shell 脚本:正则表达式
  • 可调精密稳压器的原理
  • Altium Designer(AD)PCB打孔
  • React 状态管理
  • [Spring Cloud][5] 注册中心详解,CAP 理论,什么是 Eureka
  • 返利app的跨域问题解决方案:CORS与反向代理在前后端分离架构中的应用
  • C++算法题—图的邻接矩阵输入形式(I\O)
  • 主动性算法-如何让机器拥有嗅觉?
  • Knockout.js Google Closure Compiler 工具模块详解
  • 从关键词匹配到语义理解:6大Embedding技术如何重塑企业搜索
  • 【面试实录01】
  • Docker 容器化部署核心实战——镜像仓库管理与容器多参数运行详解
  • Jenkins的安装与简单使用