【问题标题】:How does Pytorch's `autograd` handle non-mathematical functions?Pytorch 的 `autograd` 如何处理非数学函数?
【发布时间】:2020-10-05 23:45:56
【问题描述】:

在我的训练过程中,我倾向于使用大量对torch.cat() 的调用并将张量复制到新的张量中。 autograd如何处理这些操作?这些操作会影响梯度值吗?

【问题讨论】:

  • torch.cat 是数学意义上的函数(当仅限于给定形状的张量时——但由于 Python 类型系统的表达能力差而产生的这种限制对于您想要处理的几乎所有函数都是必需的使用 PyTorch 的 autograd)。是什么让你不这么认为?
  • (提示:连接 R^m 和 R^n 的元素以获得 R^(m+n) 的元素是数学意义上的函数。从这里你可以恢复 torch.cat确实如此,但有上述警告。)

标签: python pytorch


【解决方案1】:

正如 cmets 中所指出的,cat 是一个数学函数。例如,我们可以用更传统的数学符号将cat 的以下(特殊情况)定义写成

这个函数 w.r.t 的雅可比行列式。它的任何一个输入都可以表示为

由于雅可比行列式定义明确,您当然可以应用反向传播。

实际上,您通常不会用这种符号定义这些操作,并且以这种方式对 pytorch 使用的 cat 操作进行一般定义会很麻烦。

也就是说,autograd 在内部使用向后算法考虑这种“索引样式”操作的梯度,就像任何其他函数一样。

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2021-02-22
    • 2017-10-27
    • 2023-01-01
    • 2020-05-12
    • 2021-02-22
    相关资源
    最近更新 更多