介绍 torch autograd

使用 torch,几乎没有理由从头开始编写反向传播代码。它的自动微分功能称为 autograd,可跟踪需要计算梯度的操作以及如何计算它们。在这个由四部分组成的系列的第二篇文章中,我们更新了简单的手工编码网络以使用 autograd。

来源:RStudio AI博客

上周,我们了解了如何从头开始编写一个简单的网络,只使用 torch 张量。预测、损失、梯度、权重更新——所有这些我们一直在自己计算。今天,我们做出了一个重大改变:也就是说,我们省去了繁琐的梯度计算,让 torch 为我们完成。

从头开始​​的简单网络 torch 张量 torch

不过,在此之前,让我们先了解一些背景知识。

使用 autograd 自动微分

autograd

torch 使用一个名为 autograd 的模块来

torch autograd
    记录对张量执行的操作,并存储进入反向传播后需要执行的操作以获得相应的梯度。
  • 记录对张量执行的操作,以及
  • 记录对张量执行的操作,以及

  • 存储进入反向传播后需要执行的操作以获得相应的梯度。
  • 存储进入反向传播后需要执行的操作以获得相应的梯度。

    这些预期动作在内部存储为函数,当需要计算梯度时,这些函数按顺序应用:应用从输出节点开始,计算出的梯度依次通过网络传播回去。这是一种反向模式自动微分的形式。

    传播 返回 反向模式自动微分

    Autograd 基础知识

    Autograd

    作为用户,我们可以看到一些实现。作为此“记录”发生的先决条件,必须使用 require_grad = TRUE 创建张量。例如:

    require_grad = TRUE

    需要明确的是,x 现在是一个张量,必须根据该张量计算梯度 - 通常,该张量表示权重或偏差,而不是输入数据。如果我们随后对该张量执行某些操作,将结果分配给 y,

    x 相对于哪个 y

    我们发现 y 现在有一个非空的 grad_fn,它告诉 torch 如何计算 y 相对于 x 的梯度:

    y grad_fn torch y x
    MeanBackward0
    MeanBackward0 计算 Backward() Backward() x grad y x 火炬 x1