news 2026/10/16 5:07:49

attn_scores注意力分计算-记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 的两大核心模块

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 4:24:35

软件测试—即时通讯测试方法

一、即时通讯实现方式 1.短轮询(Short Polling) 短轮询是一种客户端定期向服务器发送HTTP请求以检查是否有新数据的简单技术。无论服务器是否有新数据,客户端都会在固定的时间间隔后再次请求。 实现机制 客户端向服务器发送HTTP请求&#xff…

作者头像 李华
网站建设 2026/10/15 11:24:00

免费在线制作家庭小户型平面图的详细教程和设计模板大全

良功绘图网站 (https://www.lghuitu.com ) 一、引言:小户型平面图设计的核心价值与工具选择逻辑 在房价高企的当下,小户型住宅成为众多家庭的首选。如何在有限的空间内实现功能与美观的平衡,平面图设计是关键第一步。一份精准的小户型平面图…

作者头像 李华
网站建设 2026/10/15 23:04:03

小型工厂工艺流程图制作_在线设计装配/焊接/冲压工艺流程模板

良功绘图网站 (https://www.lghuitu.com ) 在小型工厂的日常运营中,工艺流程图是连接生产环节、规范操作标准、提升效率的核心工具。无论是装配、焊接还是冲压等核心生产流程,一份清晰、准确的工艺流程图能帮助工厂梳理工序逻辑、减少操作失误、降低沟通…

作者头像 李华
网站建设 2026/10/14 11:08:21

大语言模型训练原理解析:ChatGPT背后的技术原理与应用价值

大语言模型训练分为三步:预训练阶段通过互联网数据训练基础预测模型;监督微调阶段通过问答数据让模型学会回答问题;强化学习阶段让模型自行探索最佳解法,产生思维链。大模型本质是统计学预测器,通过预测下一个token生成…

作者头像 李华
网站建设 2026/10/14 5:05:56

【实时无功-有功控制器的动态性能】【带有电流控制的两级电压源变流器(VSC)】采用αβ阿尔法-贝塔转换进行电流反馈的实时无功功率控制器附Simulink仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码及仿真…

作者头像 李华
网站建设 2026/10/15 16:30:04

Flutter for OpenHarmony:用 StatefulWidget 实现基础用户交互

Flutter for OpenHarmony:用 StatefulWidget 实现基础用户交互 作者:灰灰勇闯IT 时间:2026年1月 适用环境:OpenHarmony 4.0 Flutter for OpenHarmony SDK 本文目标:掌握 StatefulWidget、setState()、按钮点击、文本输…

作者头像 李华