✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

《PyTorch入门精华》


1 前言
    1.1  PyTorch安装

    1.2  显卡驱动的困惑

    1.3  CUDA安装注意事项

    1.4  cuDNN的介绍

    1.5  Pytorch Lightning介绍

    1.6  PyTorch学习之道

    1.7  PyTorch快速入门

    1.8  PyTorch调参之道

    1.9  PyTorch调参套件

    1.10  手动创建虚拟环境

2 深度学习之数学基础
    2.1  希腊字母解读

    2.2  梯度的物理意义

    2.3  图解梯度下降法

    2.4  图解梯度上升法

    2.5  自然梯度

    2.6  泰勒公式的介绍

    2.7  信息与信息熵

    2.8  重要性采样

    2.10  欧几里得范数

    2.11  特征值和特征向量

    2.12  似然函数的理解

    2.13  矩阵秩的深刻理解

3 PyTorch入门疑难点
4 PyTorch全局设置
    4.1  全局设置当前设备

    4.2  全局设置浮点精度

5 PyTorch GPU分布式训练
    5.1  PyTorch GPU基础操作

    5.2  DataParallel用法详解

    5.3  GPU分布式训练模型

    5.4  CUDA_VISIBLE_DEVICES

    5.5  device详细说明

    5.6  to(device)和.cuda()

    5.7  CUDA设备索引

    5.8  GPU设备索引

6 向量的基础与核心
    6.1  Tensor的组成与存储

    6.2  Tensor的grad属性

    6.4  Tensor的叠加

    6.5  禁用梯度计算

    6.6  向量的保存和加载

    6.7  参数向量

    6.8  叶子节点

    6.9  detach原理

    6.10  requires_grad属性

    6.11  Tensor与Numpy互换

    6.12  张量cat操作

    6.13  零维张量

    6.15  squeeze/unsqu...函数

    6.16  argmax和max的区别

    6.17  torch.as_tensor的应用

7 神经网络基础
    7.2  PyTorch计算图

    7.3  查看网络权重参数

    7.4  保存模型

    7.5  Adam相关面试题

    7.6  Train模式和Eval模式

    7.7  线性网络

    7.8  双线性网络

    7.9  惰性线性层

    7.10  PyTorch中的自动微分

    7.12  Dropout机制

    7.13  半精度训练

    7.14  Xavier初始化

    7.15  注意力机制

    7.16  Dataset数据处理

    7.17  StepLR学习率调度器

    7.18  词嵌入的理解

    7.19  TensorDataset的使用

    7.20  模型的保存与加载

    7.21  ModuleList和Sequential

    7.22  Batch Normalization介绍

8 计算机视觉基础知识
    8.1  通道的深刻理解

    8.2  1x1卷积的作用

    8.3  特征提取和可视化

    8.4  反卷积的推导

    8.5  理解卷积

    8.7  空洞卷积

    8.8  池化层的作用

    8.9  感受野与特征图

    8.10  NMS算法

    8.11  特征图尺寸计算

9 循环神经网络基础
    9.2  RNN的介绍

10 注意力机制
    10.1  位置编码的作用

    10.2  位置编码的种类

    10.4  Embedding本质理解

    10.6  Transformer VS CNN/RNN

    10.7  ELMo介绍

11 PyTorch归一化
    11.2  层归一化技术详解

12 激活函数相关内容
    12.1  激活函数简介

    12.2  万能逼近定理

    12.3  指数函数的学习

    12.4  Sigmoid函数的介绍

    12.5  Tanh函数的介绍

    12.6  Softmax函数的实现

    12.7  ReLU函数的介绍

    12.8  Leaky Relu函数的介绍

    12.9  ReLu与非线性的理解

    12.10  Parametric ReLU函数

    12.11  ELU函数介绍

    12.12  神经元死亡的问题

13 思考题的答案
    13.1  思考题的答案解密

PyTorch 中的自动微分:深入理解 Autograd

创建时间:2025-02-18 更新时间:2025-02-18 阅读次数:1555 次

PyTorch 作为当下最流行的深度学习框架之一,其动态计算图和自动微分功能功不可没。本文将深入探讨 PyTorch 的自动微分机制 Autograd,帮助你更好地理解其工作原理并应用于实际项目中。

一、计算图与自动微分

在深度学习中,训练神经网络的核心是计算损失函数关于模型参数的梯度,并利用梯度下降等优化算法更新参数。手动计算梯度对于复杂的网络结构来说十分繁琐且容易出错。PyTorch 的 Autograd 模块正是为了解决这一问题而设计的。

Autograd 的核心思想是自动构建计算图并计算梯度。计算图是一种有向无环图 (DAG),其中节点代表张量或操作,边代表数据流。PyTorch 会在每次前向传播时动态构建计算图,并记录所有执行的操作。在反向传播时,Autograd 会沿着计算图逆向传播,利用链式法则计算每个节点的梯度。

二、Tensor 与 Autograd

在 PyTorch 中,Tensor 是 Autograd 的核心数据结构。每个 Tensor 都有一个 requires_grad 属性,用于指示是否需要跟踪其操作历史以计算梯度。当 requires_grad=True 时,PyTorch 会记录所有对该 Tensor 的操作,并构建计算图。

import torch

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x * 2
z = y.mean()
z.backward()

print(x.grad)  # 输出: tensor([0.6667, 0.6667, 0.6667])

在上面的例子中,我们创建了一个 Tensor x 并设置 requires_grad=True。然后对 x 进行一系列操作得到 z。调用 z.backward() 后,PyTorch 会自动计算 z 关于 x 的梯度,并存储在 x.grad 中。

三、Autograd 的工作原理

Autograd 的工作原理可以概括为以下几个步骤:

前向传播: 执行用户定义的操作,构建计算图。

记录操作: 每个 Tensor 都有一个 grad_fn 属性,指向创建该 Tensor 的操作函数。

反向传播: 从输出 Tensor 开始,沿着计算图逆向传播,调用每个 grad_fn 计算梯度。

累积梯度: 将计算得到的梯度累加到对应 Tensor 的 grad 属性中。

四、Autograd 的高级用法

除了基本的自动微分功能,Autograd 还提供了一些高级功能:

控制梯度计算: 可以使用 torch.no_grad() 或 Tensor.detach() 来暂时禁用梯度计算,以提高计算效率。

自定义 Autograd 函数: 可以通过继承 torch.autograd.Function 来定义自定义的 Autograd 函数,实现更复杂的操作。

高阶梯度: PyTorch 支持计算高阶梯度,例如 Hessian 矩阵,这对于一些高级优化算法非常有用。

五、总结

PyTorch 的 Autograd 模块为深度学习提供了强大的自动微分功能,极大地简化了模型训练过程。理解 Autograd 的工作原理对于高效使用 PyTorch 至关重要。希望本文能够帮助你更好地理解 Autograd,并将其应用于你的深度学习项目中。

本教程共117节,当前为第67节!
本教程最新修订时间为:2026-08-07 09:17:18

📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:程序出海:中国程序员当下最大的机遇>>>>>>