首页 > 解决方案 > PyTorch Autograd 自动微分功能

问题描述

我只是想知道,PyTorch 如何跟踪张量上的操作(在.requires_grad设置为之后True以及它以后如何自动计算梯度。请帮助我理解背后的想法autograd。谢谢。

标签: pythonmachine-learningcomputer-visionpytorch

解决方案


这是一个很好的问题!一般来说,自动微分(AutoDiff)的思想是基于多变量链式法则,即 \frac{\partial x}{\partial z} = \frac{\partial x}{\partial y}\cdot \frac{\partial y}{\partial z}
这意味着您可以通过“代理”变量 y 来表示 x 关于 z 的导数;事实上,这允许您将几乎所有操作分解为一组更简单(或原子)的操作,然后这些操作可以“链接”在一起。
现在,什么AutoDiff包喜欢Autograd做,只是存储这样一个原子操作块的导数,例如,除法,乘法等。然后,在运行时,您提供的前向传递公式(由这些块中的多个组成)可以很容易地变成精确的导数. 同样,如果您认为 AutoDiff 不能完全按照您的意愿行事,您也可以为您自己的操作提供衍生产品。

AutoDiff 优于诸如有限差分之类的导数近似的优势在于这是一个精确的解决方案。

如果您对它的内部工作方式进一步感兴趣,我强烈推荐AutoDidact 项目,该项目旨在简化自动微分器的内部,因为通常还涉及大量代码优化。此外,我参加的讲座中的这组幻灯片对理解很有帮助。


推荐阅读