【问题标题】:Automatic Differentiation:numerical or exact?自动微分:数值还是精确?
【发布时间】:2021-02-22 20:20:11
【问题描述】:

我有一个关于自动微分的问题,尤其是在 Pytorch 中,因为我正在使用这个库。例如,我已经看到自动微分给出了表达式相对于变量的偏导数。

但是,据我所见,结果总是在特定点给出,这意味着它是一个带有数值的张量。我的问题如下:假设我们定义了一个由两个变量组成的函数: f(x,y)= x² + y² .

Pytorch 是否能够返回对应于 f 对 x 或 y 的偏导数的函数?即返回如下定义:

> def partial_f_x:

      return 2*x

  def partial_f_y:
    
      return 2*y

因为即使这里的函数 f 相当简单,如果 Pytorch 可以给我们一个导数的公式(取决于不同的变量),而不是给出给定点的数值,那将会很有趣,因为如果我们不知道导数的表达式。

所以,如果我总结一下:Pytorch 是否能够返回复杂函数导数的公式?还是只返回一个张量,其中包含给定点的导数的数值?

非常感谢!

【问题讨论】:

标签: math pytorch automatic-differentiation


【解决方案1】:

这不是 pytorch 获取导数的方式。大多数(可能是所有)计算包都使用近似方法来获得导数值,而不是推导导数函数,因此它们不关心数学术语中的导数是什么。

如果您正在寻找类似的东西,您可以尝试使用 sympy 库进行符号数学。这是一个例子:

import sympy as sym

x = sym.Symbol('x')
y = sym.Symbol('y')

sym.diff(x**2 + y**2, x, 1)
# => 2*x

sym.diff(x**2 + y**2, y, 1)
# => 2*y

然后进行评估,您可以简单地替换您要用于变量的值:

dfdx.subs(y,1)
# => 2

【讨论】:

  • “大多数(可能所有)计算包都使用近似方法来获得导数值,而不是推导导数函数”——根据 Pytorch,这似乎不正确到我为响应上述 OP 而发布的链接。
  • 非常感谢您的回答,但是如果我们有数据点 (x , f(x) ) 用函数 f 表示点及其值,我们制作一个神经网络来找出哪个它使用 Pytorch 逼近的函数?我们真的可以得到一个函数而不是不同点的数值吗?如果不能,那么学习函数的目的是什么?谢谢
  • @RobertDodier 感谢您的参考,我想我在这个意义上是不正确的,因为我正在深入研究 pytorch 实现细节的机制。
  • @sosam “学习功能”是什么意思?你指的是目标函数还是损失​​函数?
猜你喜欢
  • 2020-01-23
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多