PyTorch - 术语
PyTorch - 核心概念
Section titled “PyTorch - 核心概念”本章介绍理解和使用 PyTorch 至关重要的基本术语 terminologies 和概念 concepts。
PyTorch Tensor 与 NumPy
Section titled “PyTorch Tensor 与 NumPy”PyTorch Tensor 是一种多维数组 multi-dimensional array,概念上类似于 NumPy 的 ndarray。然而,Tensor 具有关键优势:它们可以移动到 GPU 上进行加速计算,并且是 PyTorch 自动微分引擎 Autograd 的基础。
虽然 Tensor 和 NumPy 数组通常可以相互转换(例如,torch.from_numpy(),tensor.numpy()),但在 PyTorch 生态系统内构建和训练神经网络时,PyTorch Tensor 至关重要。它们支持一套丰富的操作,与 NumPy 非常相似。
Tensor 与 Autograd
Section titled “Tensor 与 Autograd”Autograd 是 PyTorch 的自动微分 automatic differentiation 引擎。当 Tensor 的 requires_grad 属性设为 True 时,PyTorch 开始跟踪在其上执行的所有操作。这种跟踪动态地构建了一个计算图 computational graph。
在完成前向传播 forward pass(从输入到输出的计算)后,对标量输出(例如 损失 loss)调用 .backward() 会自动计算该标量相对于所有 requires_grad=True 并对此有贡献的 Tensor 的梯度 gradients。这些梯度累积在其 .grad 属性中。此机制是通过反向传播 backpropagation 训练神经网络的基础。
之前,PyTorch 使用 Variable 包装器 wrapper 围绕 Tensor 来进行 autograd。现在这已弃用 deprecated;Tensor 本身直接处理所有 requires_grad 和梯度跟踪功能。
PyTorch 以其使用动态计算图 dynamic computational graphs(也称为“define-by-run”,即“运行即定义”)而闻名。这意味着表示模型计算的图在代码执行时即时构建。这提供了极大的灵活性,特别是对于结构根据输入数据而变化的模型(例如,处理变长序列的 RNN,或条件计算)。
这与旧版 TensorFlow 等框架形成对比,后者主要使用静态图 static graphs(“define-then-run”,即“先定义后运行”),其中整个图在执行前预先定义。虽然 TensorFlow 2.x 现在也默认使用 eager execution(动态图),但 PyTorch 的设计理念始终围绕这种动态特性,这使得它对于重视灵活性和易于调试的 Python 程序员和研究人员非常直观。
torch.optim 包
Section titled “torch.optim 包”torch.optim 包提供了用于训练神经网络的各种优化算法 optimization algorithms 的实现。一旦使用 .backward() 计算出梯度,就使用优化器 optimizer 来更新模型的参数(权重 weights 和偏差 biases)。
常用的优化器包括随机梯度下降 (SGD)、Adam、RMSprop 等。你使用模型的参数和学习率 learning rate 初始化一个优化器,然后在 loss.backward() 后调用 optimizer.step() 来应用更新。关键在于每次调用 loss.backward() 之前都要调用 optimizer.zero_grad(),以清除来自前一次迭代的旧梯度。
并行计算与 torch.multiprocessing
Section titled “并行计算与 torch.multiprocessing”PyTorch 支持各种形式的并行计算 parallelism。torch.multiprocessing 是 PyTorch 对 Python multiprocessing 模块的封装 wrapper。它通常用于通过使用多个 CPU 核心并行准备数据批次,同时 GPU 忙于模型计算来加速数据加载(例如,通过 DataLoader 的 num_workers 参数)。
对于模型训练,PyTorch 提供了 torch.nn.DataParallel 用于在单机上进行简单的多 GPU 训练(通过在不同 GPU 上分配批次),以及 torch.nn.parallel.DistributedDataParallel 用于更高级、更高效的多机分布式训练。这些是构建在 PyTorch 核心 Tensor 和 Autograd 功能之上的更高级工具。