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

attn_scores注意力分计算-记录

querys 是2*6*2,keys也是2*6*2

attn_scores=querys @ keys.transpose(1,2)

attn_scores 最终维度是 2×6×6;数值上是两个矩阵的批量矩阵乘法结果,每个样本对应一个 6×6 的注意力分数矩阵
transpose(1,2) 交换 keys 的第 1 维和第 2 维:keys 原始维度:[2, 6, 2] → 交换后:[2, 2, 6](第一个位置批维度不变)

PyTorch 中@是批量矩阵乘法,规则:
对于维度为 [B, M, N] 的张量 A 和 [B, N, P] 的张量 B
A@B 的结果维度是 [B, M, P](B 是批次,保持不变;M×N 乘 N×P 得到 M×P)

importtorch# 1. 构造querys和keys(维度2×6×2,用简单数值方便计算)querys=torch.tensor([# 第0个样本(6个token,每个token2维)[[1,0],[2,1],[0,1],[3,2],[1,1],[0,0]],# 第1个样本(6个token,每个token2维)[[0,1],[1,0],[2,2],[1,2],[0,2],[2,1]]],dtype=torch.float32)# shape=(2,6,2)keys=torch.tensor([# 第0个样本的keys(和querys结构一致)[[1,2],[0,1],[1,0],[2,1],[0,2],[1,1]],# 第1个样本的keys[[2,0],[1,1],[0,2],[2,1],[1,0],[0,2]]],dtype=torch.float32)# shape=(2,6,2)# 2. 执行transpose和矩阵乘法keys_T=keys.transpose(1,2)# shape=(2,2,6)attn_scores=querys @ keys_T# shape=(2,6,6)# 3. 输出结果print("attn_scores维度:",attn_scores.shape)# 输出:torch.Size([2, 6, 6])print("\n第0个样本的注意力分数矩阵(6×6):")print(attn_scores[0].numpy())# 每个值是query token和key token的点积

输出结果解读:
attn_scores维度: torch.Size([2, 6, 6])

第0个样本的注意力分数矩阵(6×6):

[[ 1. 0. 1. 2. 0. 1.] # 第0个query token对6个key token的分数 [ 4. 1. 2. 5. 2. 3.] # 第1个query token对6个key token的分数 [ 2. 1. 0. 1. 2. 1.] [ 7. 2. 3. 8. 4. 5.] [ 3. 1. 1. 3. 2. 2.] [ 0. 0. 0. 0. 0. 0.]]

数值计算验证(以第 0 个样本的第 0 个 query token 为例):
querys[0,0] = [1, 0]
keys [0,:, :] = 6 个 key token 的 2 维向量:

  • 和第 0 个 key token [1,2] 的点积:1×1 + 0×2 = 1 → 对应矩阵 [0,0] 位置的 1
  • 和第 1 个 key token [0,1] 的点积:1×0 + 0×1 = 0 → 对应矩阵 [0,1] 位置的 0
  • … …
    最终得到 6×6 矩阵,每个位置的值是「query 的第 i 个 token」和「key 的第 j 个 token」的点积(即注意力分数)

核心意义(大模型注意力机制中的关注程度)

6×6 的矩阵就是注意力分数矩阵,含义是:
每个样本有 6 个 token,矩阵中 attn_scores[b, i, j] 代表「第 b 个样本中,第 i 个 token 对第 j 个 token 的关注程度」
后续会对这个矩阵做dropout、softmax归一化,得到和为 1 的注意力权重
再和 values 相乘,实现 “每个 token 融合其他 token 的信息”

维度结论:attn_scores = 2×6×6(batch=2,每个样本对应 6×6 的注意力分数矩阵)
计算逻辑:批量矩阵乘法,[2,6,2]@[2,2,6] → [2,6,6]
数值意义:每个元素是 query token 和 key token 的点积,代表二者的相似度(注意力分数)

dropout

训练过程中随机忽略一些隐藏层单元来有效“丢弃”它们,减少模型对特定隐藏层单元的依赖
避免过拟合,同时dropout仅在训练期间使用

nn.Dropout:
对输入张量的每个元素,以概率p(默认0.5)随机设置为0,同时将未被设置0的元素乘以 1/(1-p) 进行缩放
保证输入的期望均值不变

importtorchimporttorch.nnasnn# 1. 定义Dropout层(p=0.5)dropout=nn.Dropout(p=0.5)# 2. 构造输入张量(值全为10,方便计算均值)x=torch.ones(10000)*10# 1万个元素,每个都是10print("原始输入均值:",x.mean().item())# 输出:10.0# 3. 训练模式下执行Dropout(默认train=True)torch.manual_seed(42)# 固定随机种子,结果可复现x_drop=dropout(x)# 4. 计算Dropout后的均值print("Dropout后均值:",x_drop.mean().item())# 输出≈10.0(因随机采样,略有浮动)print("Dropout后非零元素值:",x_drop[x_drop!=0][0].item())# 输出:20.0(10×2)# 5. 验证模式下(eval),Dropout不生效dropout.eval()x_drop_eval=dropout(x)print("验证模式下均值:",x_drop_eval.mean().item())# 输出:10.0(无任何变化)

Dropout 是大模型(GPT/BERT/LLaMA)中防止过拟合的核心手段,主要用在这些位置:
全连接层(FeedForward):大模型的 FFN 层(如 GPT 的 MLP)会在激活函数后加 Dropout(p=0.1~0.3)
注意力层(Attention):部分模型会在注意力权重计算后加 Dropout,防止对个别 token 过度关注
嵌入层(Embedding):少量模型会在词嵌入后加 Dropout,降低高频词的过拟合风险

大模型中的FFN 层是Feed-Forward Network(前馈网络)的缩写,也常被称作Position-wise Feed-Forward Network(逐位置前馈网络),是 Transformer 架构(GPT/BERT/LLaMA 等大模型的核心骨架)中编码器 / 解码器层的核心组件之一,和多头注意力层(Multi-Head Attention)并列成为 Transformer 的两大核心模块

http://www.jsqmd.com/news/299583/

相关文章:

  • 多头注意力中的张量重塑
  • 第二周作业wp
  • 吐血推荐专科生必用TOP9AI论文网站
  • Python 调用大模型(LLM) - 努力-
  • Python核心语法-Python自定义模块、Python包 - 努力-
  • 亲测好用9个一键生成论文工具,助本科生轻松写论文!
  • 为什么您的机房必须选择本地化 U 位资产管理系统?供应商服务深度解析
  • 人群仿真软件:Vadere_(3).用户界面操作
  • 人群仿真软件:Vadere_(1).Vadere简介与安装
  • 人群仿真软件:Vadere_(2).Vadere基本操作与界面
  • AI原生应用领域:思维树带来的变革
  • 免费工艺流程模板下载_在线编辑建筑/汽车/物流工艺流程图图表
  • 亲测好用!8个AI论文平台测评,研究生毕业论文必备
  • 第三十四周 学习周报
  • 提升效率:如何为企业挑选完美的RFID解决方案
  • 智能座舱:汽车内饰的交互革命
  • 学校教室多功能布局平面图在线设计的实用技巧和方法
  • 柔性生产:小批量定制与大规模生产的完美融合
  • LoRA微调的指标
  • 循环经济在不同行业的应用前景比较
  • 【避坑指南】Listing 莫名被限流?可能是图片里的“中文残留”害了你!揭秘 AI 如何实现 100% 深度清洗
  • 为什么标准化要用均值0和方差1?
  • 状态仅适用于类组件,或者使用 React 的 Hook 时可以在函数组件中使用。
  • 人群仿真软件:Vadere_(5).仿真场景设计
  • 【技术解析】为什么 Google 翻译搞不定电商图?揭秘 AI Inpainting 技术如何实现“无痕”图片翻译
  • 人群仿真软件:Vadere_(6).Vadere中的障碍物设置
  • 【Python自动化】不懂代码怎么批量修图?这款 AI 工具把“脚本思维”封装成了傻瓜式软件!
  • 【SAA】SpringAI Alibaba学习笔记(二):提示词Prompt - 详解
  • Java 核心语法精讲:注释、标识符、关键字与数据类型
  • 2026 追番日记