PyTorch学习笔记

PyTorch基础介绍

PyTorch基础是张量,包含torch.autograd、torch.nn、torch.optim等子模块;包含多种损失函数,包括 MSE(均方误差 = L2 范数)、交叉熵损失和负熵似然损失(对分类器有用)等。

张量(Tensor):

支持在 CPU 和 GPU 之间进行切换。

提供了类似 NumPy 的接口,支持元素级运算。

支持自动求导,可以方便地进行梯度计算。

自动求导(Autograd):

PyTorch 内置的自动求导引擎,能够自动追踪所有张量的操作,并在反向传播时计算梯度。

通过 requires_grad 属性,可以指定张量需要计算梯度。

支持高效的反向传播,适用于神经网络的训练。

模型定义与训练

PyTorch 提供了 torch.nn 模块,允许用户通过继承 nn.Module 类来定义神经网络模型。使用 forward 函数指定前向传播,自动反向传播(通过 autograd)和梯度计算也由 PyTorch 内部处理。

神经网络模块(torch.nn):

  • 提供了常用的层(如线性层、卷积层、池化层等)。
  • 支持定义复杂的神经网络架构(包括多输入、多输出的网络)。
  • 兼容与优化器(如 torch.optim)一起使用。
  • torchvision:用于计算机视觉任务的数据集和模型。
  • torchtext:用于自然语言处理任务的数据集和预处理工具。
  • torchaudio:用于音频处理的工具包。
  • PyTorch Lightning:一种简化 PyTorch 代码的高层库,专注于研究和实验的快速迭代。

PyTorch torch.nn

nn.Module 类

nn.Module 是所有自定义神经网络模型的基类。用户通常会从这个类派生自己的模型类,并在其中定义网络层结构以及前向传播函数(forward pass)。

预定义层(Modules)

包括各种类型的层组件,例如卷积层(nn.Conv1d, nn.Conv2d, nn.Conv3d)、全连接层(nn.Linear)、激活函数(nn.ReLU, nn.Sigmoid, nn.Tanh)等。

容器类

nn.Sequential:允许将多个层按顺序组合起来,形成简单的线性堆叠网络。

nn.ModuleListnn.ModuleDict:可以动态地存储和访问子模块,支持可变长度或命名的模块集合。

损失函数(Loss Functions)

torch.nn 包含了一系列用于衡量模型预测与真实标签之间差异的损失函数,例如均方误差损失(nn.MSELoss)、交叉熵损失(nn.CrossEntropyLoss)等。

实用函数接口(Functional Interface)

nn.functional(通常简写为 F),包含了许多可以直接作用于张量上的函数,它们实现了与层对象相同的功能,但不具有参数保存和更新的能力。例如,可以使用 F.relu() 直接进行 ReLU 操作,或者 F.conv2d() 进行卷积操作。

初始化方法

torch.nn.init 提供了一些常用的权重初始化策略,比如 Xavier 初始化 (nn.init.xavier_uniform_()) 和 Kaiming 初始化 (nn.init.kaiming_uniform_()),这些对于成功训练神经网络至关重要。

Transformer 层

PyTorch 提供了完整的 Transformer 架构组件,包括 nn.Transformer, nn.TransformerEncoder, nn.TransformerDecoder 以及注意力机制 nn.MultiheadAttention 等。

归一化层

包括批归一化(BatchNorm)、层归一化(LayerNorm)、组归一化(GroupNorm)、实例归一化(InstanceNorm)和 RMSNorm 等。

PyTorch torch.nn

神经网络容器、全局钩子(Global Hooks)、线性层、卷积层、池化层、填充层(Padding Layers)、激活函数(非线性激活 - 加权求和类)、激活函数(非线性激活 - 其他)、归一化层、循环神经网络层、Transformer 层、注意力机制(Attention)、嵌入层(稀疏层)、Dropout 层、视觉层(Vision Layers)、损失函数、距离函数、并行层(DataParallel)、实用函数(nn.functional)、工具函数(nn.utils)、参数初始化(nn.init)、RNN 工具函数、剪枝函数(Pruning)、Flatten 层

全局钩子:

  1. PyTorch 全局钩子注册一次,作用于模型中全部 Module 网络层,无需遍历每一层逐个注册钩子PyTorch。
  2. 在所有层前向传播、反向传播过程中自动触发回调,可以读取、甚至修改每层输入输出张量与梯度。
  3. 用于模型调试、监控所有层激活与梯度,定位梯度爆炸 / 消失、NaN 异常
  4. 用于网络性能分析、统计各层耗时、显存占用。
  5. 适合第三方预训练模型,无需了解内部层结构,实现全局监控;调试结束可以一键移除钩子。
  6. 主要用于调试分析,不建议正式训练业务大量使用。

线性层:

  1. nn.Linear为线性全连接层,执行运算 \(y=xW^T+b\),完成特征维度映射。
  2. 将输入特征从in_features维映射到out_features维,实现特征加权融合。
  3. 常用于网络输出头,完成分类、回归任务输出;也用于网络内部特征变换。
  4. 本身是线性变换,无非线性表达能力,需要配合激活函数才能拟合复杂数据分布。
  5. 包含可学习参数权重 W 与偏置 b,参与反向传播更新。

卷积层 CNN:

CNN(卷积神经网络),擅长网格空间数据 (图像),核心:滑动卷积核提取局部空间特征没有记忆状态,全部时间步可以并行计算。

  1. 卷积层通过卷积核滑动,提取图像局部特征,如边缘、纹理、轮廓。
  2. 完成通道维度变换,将输入通道映射为指定数量的输出特征通道。
  3. 通过卷积核、步长、填充参数调整特征图空间分辨率,步长大于 1 可实现下采样。
  4. 使用局部连接与权值共享,相比全连接层显著减少参数量,减轻过拟合。
  5. 属于线性变换,需要搭配激活函数引入非线性;多层堆叠可以增大感受野。

池化层:

  1. 池化层实现特征图空间维度下采样,缩小特征图高和宽,通道数保持不变
  2. 降低特征规模,减少后续网络计算量与显存消耗。
  3. 聚合局部特征:最大池化保留显著特征;平均池化平滑特征。
  4. 带来一定平移不变性,提升模型对目标微小位置偏移的鲁棒性。
  5. 增大感受野;池化层无学习参数,不参与权重更新

填充层:

填充层 = 给张量 "加边框",目的是控制尺寸 + 保护边界信息,两种写法(卷积参数 / 独立 Pad 层)按场景二选一即可。

激活函数:

给神经网络引入非线性。激活函数是深度学习的 "开关" 和 "闸门"------ 决定信息是否流动、梯度能否回传、输出落在哪个范围,缺了它,网络再深也只是一次线性变换。

归一化层:

把每层的输入分布拉回到均值为 0、方差为 1 的标准分布,解决训练中的 "分布漂移" 问题,让网络更稳定、收敛更快。

循环神经网络层 (RNN / LSTM / GRU)

循环神经网络专门处理序列数据 (文本、时间序列、语音),核心特点:带记忆,一步步按顺序处理输入,保存上一步的状态,把历史信息带到下一步

Transformer 层:

Transformer 核心是自注意力机制 Self‑Attention ,出自《Attention Is All You Need》,既可以处理序列(文本、时间序列),不需要像 RNN 那样逐时间步串行计算,可以全部并行 ,擅长捕捉长距离依赖关系

  1. CNN:看局部窗口
  2. RNN:顺着顺序一步步读,记忆慢慢往后传
  3. Transformer:一眼看完整个序列,任意两个位置直接建立联系

注意力机制(Attention):

人的注意力:看东西时,不会同等看待所有信息,重点关注关键部分,弱化无关部分。

神经网络里的Attention :让模型在处理某一个位置时,给序列中各个元素分配不同权重,权重高 = 重点关注,权重低 = 忽略。

传统 RNN 问题:

  • 只靠最后一个隐藏状态承载全部信息,长序列前面信息容易丢失;
  • 每一步只能依赖上一步输出,无法直接跳转到很远的位置。

注意力解决:不需要一步步传递,可以直接计算序列任意位置之间的关联程度

相关推荐
Capricorn198836 分钟前
个人知识库接入大模型频现“幻觉引用”?排查 RAG 溯源失效问题,解析知芽构建可信第三大脑的底层架构
大数据·论文阅读·人工智能·笔记·架构·论文笔记
陈年老古董1 小时前
深度学习入门笔记:从神经元到深度神经网络
人工智能·笔记·深度学习·神经网络·学习
2601_967100423 小时前
护眼灯哪个牌子更好更专业耐用?专业长效护眼台灯品牌推荐,品质过硬
学习·护眼·台灯
疯狂打码的少年3 小时前
【数据库技术】关系完整性约束(实体/参照/用户定义)
运维·服务器·数据库·笔记
微露清风3 小时前
快慢指针算法学习记录
学习·算法·快慢指针
sunshine22 girl3 小时前
Angular7,9,学习笔记四 父子组件传值,组件之间传值
笔记·学习
lilian2334 小时前
HarmonyOS 7 新特性(四)|沉浸光感:空间材质、性能分级与降级策略
前端·pytorch·华为·harmonyos·材质
蒸蒸yyyyzwd4 小时前
cpp选手秋招学习笔记 day18
笔记·学习
HugoStudio_SWAN4 小时前
C++ CMD 互动动画:按键触发爆炸效果
开发语言·c++·学习·程序人生