我只是想知道,PyTorch 如何跟踪张量上的操作(在 .requires_grad
设置为 True
之后它如何自动计算梯度。请帮助我理解 autograd
背后的想法。谢谢。
最佳答案
这是个好问题!
通常,自动微分 (AutoDiff
) 的思想是基于多变量链式法则,即
.
这意味着您可以通过“代理”变量 y 表示 x 相对于 z 的导数;事实上,这允许您将几乎所有操作分解为一堆更简单(或原子)的操作,然后这些操作可以“链接”在一起。
现在,像 Autograd
这样的 AutoDiff
包所做的只是简单地存储这种原子操作 block 的导数,例如除法、乘法等。
然后,在运行时,您提供的前向传递公式(由多个这些 block 组成)可以轻松地转换为精确导数。同样,如果您认为 AutoDiff 没有完全按照您的要求进行操作,您也可以为自己的操作提供导数。
AutoDiff 相对于导数近似值(如 finite differences)的优势很简单,这是一个精确解。
如果您对它的内部工作原理更感兴趣,我强烈推荐 AutoDidact project ,旨在简化自动微分器的内部结构,因为通常还涉及很多代码优化。 另外,这个 set of slides我参加的讲座对理解很有帮助。
关于python - PyTorch Autograd 自动微分功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51054627/