深度学习10——pytorch与数学前置
1. 张量形状与广播机制张量与形状张量可以理解为多维数组atorch.tensor([1,2,3])# shape: [3]btorch.tensor([[1,2,3],[4,5,6]])# shape: [2, 3]常见形状[3] 一维张量包含 3 个数字 [2, 3] 二维张量2 行 3 列 [B, S, D] 三维张量常见于 Transformer其中B batch_size批次中的样本数量 S seq_len每个样本的 token 数量 D d_model每个 token 的向量维度广播机制广播机制用于检查两个不同形状的张量能不能像形状相同一样进行逐元素运算。逐元素运算包括ab a-b a*b a/b广播从最后一维开始比较。每一维满足以下任意条件即可两个维度相同。其中一个维度是1可以扩展。其中一个张量不存在该维度可以看作大小为1。否则不能广播。例如atorch.tensor([[1,2],[3,4]])# shape: [2, 2]btorch.tensor([1,2])# shape: [2]从右往左对齐a: [2, 2] b: [ 2]b缺少第一维可以逻辑上扩展为[ [1, 2], [1, 2] ]所以ab结果为[ [2, 4], [4, 6] ]结果形状仍然是[2, 2]广播通常只是逻辑上的扩展不一定真的复制数据。另一个例子[2, 3, 4] [1, 1, 4]可以广播为[2, 3, 4]但下面不能广播[2, 3] [2, 4]因为最后一维的3和4不相同也没有一个是1。2.nn.Linear与nn.Embeddingnn.Linearnn.Linear建立一个线性层把一个向量转换成另一个向量。layernn.Linear(3,2)表示输入3 个特征 输出2 个特征它包含两个可学习参数weight.shape [2, 3] bias.shape [2]计算公式y x weight.T bias其中 矩阵乘法 weight.T 权重矩阵的转置例如xtorch.randn(4,3)layernn.Linear(3,2)ylayer(x)形状变化x: [4, 3] y: [4, 2]表示一次处理 4 个样本每个样本从 3 维向量变成 2 维向量。Linear 只改变最后一维xtorch.randn(2,5,4)layernn.Linear(4,6)ylayer(x)形状变化[2, 5, 4] - [2, 5, 6]可以理解为一共有 2 × 5 个向量 每个向量从 4 维变成 6 维前面的维度不变只有最后一维被线性层处理。nn.Embeddingnn.Embedding是一张可训练的向量表输入整数编号输出该编号对应的向量。例如embeddingnn.Embedding(num_embeddings10000,embedding_dim768)含义num_embeddings 10000 可以查询 10000 个编号 embedding_dim 768 每个编号对应一个 768 维向量Embedding 内部的参数矩阵形状是[10000, 768]合法编号范围是0 到 9999假设 Tokenizer 将“我喜欢猫”转换为我 - 15 喜欢 - 203 猫 - 78代码input_idstorch.tensor([15,203,78])# shape: [3]xembedding(input_ids)# shape: [3, 768]nn.Embedding相当于执行xembedding.weight[input_ids]也就是取出参数矩阵的第 15、203、78 行。需要注意Token ID 只是查表编号没有大小和距离含义。例如“猫”的 ID 是 78“狗”的 ID 是 79不代表“狗比猫大”也不代表它们天然相似。Batch 输入实际训练时通常一次输入多个序列input_idstorch.tensor([[15,203,78,0],[26,203,91,4]])# shape: [2, 4]经过 Embeddingxembedding(input_ids)形状变化[B, S] - [B, S, D] [2, 4] - [2, 4, 768]含义是2 个序列 每个序列有 4 个 token 每个 token 被转换成 768 维向量Embedding 向量如何得到刚创建 Embedding 时每个 token 的向量通常是随机初始化的。训练时前向传播 - 计算 Loss - 反向传播 - 更新 Embedding 参数如果某些 token 经常出现在相似上下文中它们对 Loss 产生的影响可能相似参数更新方向也可能相似因此向量可能逐渐接近。3. 矩阵乘法与转置矩阵乘法矩阵乘法使用A B或者torch.matmul(A,B)形状规则[m, n] [n, k] - [m, k]左边矩阵的列数必须等于右边矩阵的行数。例如A.shape [2, 3] B.shape [3, 4] A B - [2, 4]矩阵乘法中的每个结果是左边的一行和右边的一列对应相乘后求和result[i, j] A 第 i 行与 B 第 j 列对应相乘后求和逐元素乘法逐元素乘法使用*atorch.tensor([1,2,3])btorch.tensor([10,20,30])a*b# [10, 40, 90]两个张量需要形状相同或者能够广播。区别* 对应位置相乘 矩阵乘法行与列相乘后求和转置转置就是交换矩阵的行和列。A [ [1, 2, 3], [4, 5, 6] ]形状[2, 3]转置后A.T [ [1, 4], [2, 5], [3, 6] ]形状变成[3, 2]二维矩阵可以写A.T对于高维张量通常明确指定要交换的两个维度x.transpose(-2,-1)它表示只交换最后两个维度。例如[B, H, S, d] - transpose(-2, -1) [B, H, d, S]高维张量做矩阵乘法时最后两个维度是矩阵维度 前面的维度是批次维度通用形状规则[..., m, n] [..., n, k] - [..., m, k]4. Transformer 中的常见形状与多头拆分常用符号B batch_size 一个批次中的样本数量 S seq_len 每个序列的 token 数量 D d_model 每个 token 的总向量维度 H num_heads 注意力头的数量 d head_dim 每个注意力头的向量维度需要满足D H * d例如d_model 768 num_heads 12 head_dim 64 768 12 * 64从 Token ID 到 Q、K、V输入 Token IDinput_ids: [B, S]经过 Embedding[B, S] - Embedding [B, S, D]然后使用三个不同的线性层生成 Q、K、VQq_proj(x)Kk_proj(x)Vv_proj(x)其中q_projnn.Linear(D,D)k_projnn.Linear(D,D)v_projnn.Linear(D,D)形状不变Q: [B, S, D] K: [B, S, D] V: [B, S, D]虽然形状相同但三个 Linear 使用不同参数所以得到的内容不同Q当前 token 想寻找什么 K当前 token 可以用什么特征被匹配 V当前 token 实际要传递的信息多头拆分多头拆分是把每个 token 的一个大向量拆成多个小向量每个注意力头处理一个小向量。假设B 2 S 5 D 8 H 2 d 4因为8 2 * 4首先使用reshape拆开最后一维QQ.reshape(B,S,H,d)形状变化[B, S, D] - [B, S, H, d] [2, 5, 8] - [2, 5, 2, 4]然后调整维度顺序QQ.permute(0,2,1,3)形状变化[B, S, H, d] - [B, H, S, d] [2, 5, 2, 4] - [2, 2, 5, 4]K 和 V 进行相同处理Q、K、V: [B, H, S, d]多头拆分不是增加数据量而是把D重新看作H * d例如8 个特征 - 2 个 head - 每个 head 处理 4 个特征实际是在 Q、K、V 经过可学习的线性投影后沿最后一个特征维度拆分。不同 head 使用不同的参数和特征子空间因此可能学习到不同的注意力模式。注意力分数的形状拆分后Q: [B, H, S, d] K: [B, H, S, d]先转置 K 的最后两个维度K_TK.transpose(-2,-1)得到K_T: [B, H, d, S]然后scoresQ K_T只看最后两个维度[S, d] [d, S] - [S, S]所以整体形状是[B, H, S, d] [B, H, d, S] - [B, H, S, S]最后两个S表示每个查询 token 对每个被关注 token 的分数每个 head 都会得到一张独立的[S, S]注意力分数矩阵。5. Padding Mask 与 Causal MaskMask 用于告诉注意力机制哪些位置不能被关注通常在 Softmax 之前使用scoresscores.masked_fill(mask,float(-inf))attention_weightstorch.softmax(scores,dim-1)因为softmax(-inf) 约等于 0所以被屏蔽位置的注意力权重会变成 0。Mask要解决的问题屏蔽内容Padding Mask忽略补齐位置PADtokenCausal Mask防止看到未来信息当前 token 后面的 tokenPadding Mask一个 Batch 中的序列长度可能不同句子 A我 喜欢 猫 PAD 句子 B你 喜欢 吃 苹果PAD只是为了让序列长度相同不是真实内容。Padding Mask 告诉模型注意力计算时不要关注 PAD。假设False 可以关注 True 需要屏蔽Padding Mask 可以表示为[ [False, False, False, True ], [False, False, False, False] ]原始形状[B, S]为了应用到注意力分数scores.shape [B, H, S, S]通常将其扩展为padding_maskpadding_mask[:,None,None,:]形状[B, S] - [B, 1, 1, S]然后通过广播应用到所有 head 和所有查询 token。计算 Loss 时也要忽略 Padding 位置loss_fnnn.CrossEntropyLoss(ignore_indexpad_token_id)需要区分Padding Mask 注意力计算时不要关注 PAD。 ignore_index 计算 Loss 时不要计算 PAD 位置的损失。Causal MaskCausal Mask 主要用于 GPT 等自回归语言模型当前 token 不能看到它后面的未来 token。假设序列为我 喜欢 吃 苹果允许的注意力关系是我 - 我 喜欢 - 我、喜欢 吃 - 我、喜欢、吃 苹果 - 我、喜欢、吃、苹果允许查看的位置可以表示为1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1如果使用True表示需要屏蔽可以生成上三角 Maskcausal_masktorch.triu(torch.ones(S,S,dtypetorch.bool),diagonal1)结果False True True True False False True True False False False True False False False False这样模型训练时就不能通过未来 token 提前看到答案。Padding Mask 和 Causal Mask 可以同时使用combined_maskpadding_mask|causal_mask可以简单记为Padding Mask这个位置是补出来的不是真实内容不要看。 Causal Mask这个位置属于未来现在不能看。

相关新闻

如何在Apple Silicon上高效部署Z-Image-Turbo-bf16:专业级的AI绘图实战指南

如何在Apple Silicon上高效部署Z-Image-Turbo-bf16:专业级的AI绘图实战指南

如何在Apple Silicon上高效部署Z-Image-Turbo-bf16:专业级的AI绘图实战指南 【免费下载链接】Z-Image-Turbo-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Z-Image-Turbo-bf16 Z-Image-Turbo-bf16是一款专为Apple Silicon优化的AI图像生…

2026/10/9 9:36:36 阅读更多 →
AI生成服装设计稿:3步实现从提示词输入到可量产样衣的全流程闭环

AI生成服装设计稿:3步实现从提示词输入到可量产样衣的全流程闭环

更多请点击: https://codechina.net 第一章:AI生成服装设计稿:3步实现从提示词输入到可量产样衣的全流程闭环 AI正深度重构服装产业的设计范式。当前主流工作流已突破“概念草图→数字绘图→打版→样衣制作”的传统线性链条,转向…

2026/10/6 0:23:47 阅读更多 →
专业的三彩斗拱哪个好

专业的三彩斗拱哪个好

嘿,老朋友,咱们今天聊聊三彩斗拱这事儿。这些年,我一直在古建材料这块儿打转,特别是对三彩斗拱情有独钟。你要是问我哪个好,那得先从整个行业说起,毕竟了解了行业的痛点和需求,才能更好地挑到合…

2026/9/29 10:07:56 阅读更多 →

最新新闻

Spring Boot汽车销售服务管理系统:从数据库设计到前后端部署全解析

Spring Boot汽车销售服务管理系统:从数据库设计到前后端部署全解析

最近有不少同学在挑毕业设计题目,我的建议是别一上来就找那种花里胡哨的“人工智能区块链”标题,先问问自己:这系统我能不能完整讲清楚、能不能真正跑起来。汽车销售服务管理系统就是这么个经典选题——业务脉络清晰,技术栈主流&a…

2026/10/13 17:31:43 阅读更多 →
DAX度量值嵌套实战:上下文传递、VAR与CALCULATE的应用

DAX度量值嵌套实战:上下文传递、VAR与CALCULATE的应用

很多人第一次接触度量值的嵌套使用,都会觉得它不过是在公式里多套几层函数、多引用几个度量值。直到某零售项目的看板里,销售额、达成率、环比、同比、健康度评分全挤在一起时,才发现嵌套真正的难点根本不是“怎么写公式”,而是“…

2026/10/13 17:31:43 阅读更多 →
AnyPS5项目解析:PS5手柄跨平台兼容性与蓝牙HID技术实现

AnyPS5项目解析:PS5手柄跨平台兼容性与蓝牙HID技术实现

我无法根据当前输入内容生成符合要求的博文。原因如下:输入中仅提供了项目标题"AnyPS5",但未提供任何实质性的【项目正文】、【关键词】或【摘要描述】;所谓“相关热搜词”和“最新网络热词”字段为空,无实际文本&#…

2026/10/13 17:31:43 阅读更多 →
R语言无监督聚类实战:K-means与层次聚类核心原理及调参指南

R语言无监督聚类实战:K-means与层次聚类核心原理及调参指南

1. 为什么无监督聚类值得你花时间搞明白做数据分析的人迟早会撞上这样一个场景:手里攥着一份数据,有几十个甚至上百个特征列,但偏偏没有标签。你没法做分类,也没法做回归,因为压根不知道“正确答案”长什么样。这时候聚…

2026/10/13 17:31:43 阅读更多 →
2022美赛C题完整解题链路:从预测建模到回测避坑指南

2022美赛C题完整解题链路:从预测建模到回测避坑指南

简介:这是一份面向美赛参赛者和数模爱好者的2022年C题完整资料包,针对“数据建模与预测”类赛题提供从问题分析、模型构建到代码落地的全流程参考。资源共31个文件,以Python脚本、可视化图表、模型权重及说明文档为主,压缩包大小约…

2026/10/13 17:31:43 阅读更多 →
高效离职面谈:四种实战方法搞定主动与被动离职

高效离职面谈:四种实战方法搞定主动与被动离职

离职面谈这事儿,说大不大,说小不小。很多业务负责人和刚入行的HR伙伴把它当成一个“过场”,员工提离职了,约个时间聊二十分钟,问问“为啥走啊”“下家去哪啊”,然后填张表就算交差了。但真正在组织里待久了…

2026/10/13 17:30:42 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →