python - PyTorch Autograd 自动微分功能
问题描述
我只是想知道,PyTorch 如何跟踪张量上的操作(在.requires_grad
设置为之后True
以及它以后如何自动计算梯度。请帮助我理解背后的想法autograd
。谢谢。
解决方案
这是一个很好的问题!一般来说,自动微分(AutoDiff
)的思想是基于多变量链式法则,即
。
这意味着您可以通过“代理”变量 y 来表示 x 关于 z 的导数;事实上,这允许您将几乎所有操作分解为一组更简单(或原子)的操作,然后这些操作可以“链接”在一起。
现在,什么AutoDiff
包喜欢Autograd
做,只是存储这样一个原子操作块的导数,例如,除法,乘法等。然后,在运行时,您提供的前向传递公式(由这些块中的多个组成)可以很容易地变成精确的导数. 同样,如果您认为 AutoDiff 不能完全按照您的意愿行事,您也可以为您自己的操作提供衍生产品。
AutoDiff 优于诸如有限差分之类的导数近似的优势在于这是一个精确的解决方案。
如果您对它的内部工作方式进一步感兴趣,我强烈推荐AutoDidact 项目,该项目旨在简化自动微分器的内部,因为通常还涉及大量代码优化。此外,我参加的讲座中的这组幻灯片对理解很有帮助。
推荐阅读
- filter - 在 Tableau 中运行筛选行的总和
- r - 在哪里编写和保存 dockerfile?
- python - 代码打印“n”而不是“if”。我不知道为什么会这样
- macos - 来自 x86_64 程序集匿名函数的总线错误
- json - 使用 Python 3 将文本文件中的 Json 字符串转换为 Json 文件
- reactjs - 是否可以在高阶组件中从 HOC 渲染中的渲染中排除某些包装的组件
- json - Windows Batch - 为 ffmpeg 处理提取值
- php - 如何使用 php、dom 文档和 xpath 获取内部 div 类名的数组?
- scala - Scala Spark Convert Dataframe 并从每一行获取所有唯一 ID 及其类型
- javascript - 在 rt.t_start 和 rt.end 相等的情况下看到很长的 BoomerangJS t_done 时间