python - PyTorch Autograd 自动微分功能

标签 python machine-learning computer-vision pytorch

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

最佳答案

这是个好问题! 通常,自动微分 (AutoDiff) 的思想是基于多变量链式法则,即 \frac{\partial x}{\partial z} = \frac{\partial x}{\partial y}\cdot \frac{\partial y}{\partial z} .
这意味着您可以通过“代理”变量 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/

相关文章:

python - 如何通过切片范围有效地索引到一维 numpy 数组

python - 如何在发表评论后重定向我的用户

algorithm - 从原始视频中获取运动向量

c++ - 图像 C++ 上有太多黑色区域的 OpenCV 校正

python - Fabric 可以使用 telnet 来执行 run() 命令吗?

python - 删除一个数据框中同时也在另一个数据框中的所有行的最快/最Python式的方法是什么?

python - 使用 k-近邻,无需分成训练集和测试集

tensorflow - .tflite模型每次初始化相同的检测框

python-3.x - 何时不使用张量

c# - 无法加载文件或程序集 'Magick.NET-x86.DLL' 或其依赖项之一