深度学习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/7/29 19:13:08 阅读更多 →
AI生成服装设计稿:3步实现从提示词输入到可量产样衣的全流程闭环

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

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

2026/7/29 19:13:08 阅读更多 →
专业的三彩斗拱哪个好

专业的三彩斗拱哪个好

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

2026/7/29 19:13:08 阅读更多 →

最新新闻

SmoothScroll性能优化指南:打造60fps的流畅列表体验

SmoothScroll性能优化指南:打造60fps的流畅列表体验

SmoothScroll性能优化指南:打造60fps的流畅列表体验 【免费下载链接】smooth-scroll Smooth collection scrolling 项目地址: https://gitcode.com/gh_mirrors/smoo/smooth-scroll 在移动应用开发中,列表滚动的流畅度直接影响用户体验。SmoothScr…

2026/7/29 19:32:25 阅读更多 →
基于Dify和LLM构建企业级私有化智能助手实战指南

基于Dify和LLM构建企业级私有化智能助手实战指南

1. 项目概述:构建私有化智能助手的核心价值在数字化转型浪潮中,企业级智能助手正从云端SaaS服务向私有化部署快速演进。不同于ChatGPT等通用产品,私有化智能助手能深度集成企业内部知识库、业务流程和权限体系,实现真正的"AI…

2026/7/29 19:32:25 阅读更多 →
计算机毕业设计之基于Python的民宿评论数据情感分析系统

计算机毕业设计之基于Python的民宿评论数据情感分析系统

随着消费者对旅游体验的追求不断提高,选择合适的民宿成为了影响旅游体验的关键因素之一。然而,目前市场上的民宿信息繁杂,用户难以筛选出真正符合自己需求的民宿。因此,本文旨在通过开发该基于python的民宿评论数据情感分析系统&a…

2026/7/29 19:32:24 阅读更多 →
计算机毕业设计之基于Python的新闻热点数据清洗和可视化展示系统

计算机毕业设计之基于Python的新闻热点数据清洗和可视化展示系统

在当今信息时代,新闻热点数据对于了解社会动态、把握舆论趋势具有重要意义。然而,海量的网络数据混杂着各种非结构化信息,如何从中有效提取和清洗出有价值的数据成为一项技术挑战。基于这一背景,开发了一款基于Python的新闻热点数…

2026/7/29 19:32:24 阅读更多 →
物联网智能锁技术落地:解决网约房/民宿身份核验与远程授权难题

物联网智能锁技术落地:解决网约房/民宿身份核验与远程授权难题

随着共享住宿行业规范化监管升级,网约房、民宿普遍面临入住身份核验不闭环、权限管理滞后、人工运维成本高、安全隐患频发四大核心问题。传统密码锁、机械门锁无法对接官方监管体系,存在人证不符、无证入住、权限滞留等漏洞,不仅违反公安住宿…

2026/7/29 19:31:24 阅读更多 →
AG Kit错误恢复案例:AI Agent系统故障处理实例

AG Kit错误恢复案例:AI Agent系统故障处理实例

AG Kit错误恢复案例:AI Agent系统故障处理实例 【免费下载链接】ag-kit 项目地址: https://gitcode.com/GitHub_Trending/an/ag-kit AG Kit作为一款模块化AI Agent工具包,在复杂的自动化任务中难免会遇到各类系统故障。本文将通过实际案例&#…

2026/7/29 19:31:24 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻