2.4.1 导数与微分

求导是几乎所有深度学习优化算法的关键步骤

2.4.2 偏导数

2.4.3 梯度

2.4.4 链式法则

2.5.1 一个简单的例子

对函数y=2x⊤xy=2\mathbf{x}^{\top}\mathbf{x}y=2x⊤x关于列向量x\mathbf{x}x求导

  • 创建变量x并为其分配一个初始值
    在这里插入图片描述
  • 激活梯度追踪,找一个地方存储梯度
    • 梯度追踪机制:通过 requires_grad=True 启用梯度追踪后,PyTorch 会记录所有涉及 x 的操作,形成一个计算图。当调用 backward() 时,PyTorch 会沿着计算图反向传播,计算每个叶子节点(如 x)的梯度。
      在这里插入图片描述
  • 计算y
    在这里插入图片描述
  • 调用反向传播函数来自动计算y关于x每个分量的梯度
  • 验证这个梯度是否计算正确
    在这里插入图片描述
  • 计算另一个函数
    在默认情况下,PyTorch会累积梯度,我们需要清除之前的值
    在这里插入图片描述

2.5.2 非标量变量的反向传播

  • backward() 方法通常需要在标量张量上调用。如果 y 是非标量(如本例中的向量),有两种处理方式:
    • 先求和,再反向传播:在这里插入图片描述

    • 显式传入梯度权重:在这里插入图片描述

2.5.3 分离计算

  • y.detach()创建一个新张量u,其值与 y 相同,但不参与梯度计算。在反向传播时,u 被视为常数,梯度不会回溯到 y 或 x。
    在这里插入图片描述

2.5.4 python 控制流的梯度计算

  • 即使构建函数的计算图需要通过Python控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度
    在这里插入图片描述

2.5.5 小结

深度学习框架可以自动计算导数:我们首先将梯度附加到想要对其计算偏导数的变量上,然后记录目标值的计算,执行它的反向传播函数,并访问得到的梯度。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐