问题标签 [autodiff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
655 浏览

python - 使用 Jax 的偏导数?

我对 Jax 文档感到困惑,这就是我想要做的:

和错误:

我参考官方教程代码:

结果:

我在这里做错了什么?我收集key到正在以某种重要的方式使用,但我无法弄清楚为什么/如何它是必要的。要回答这个问题,请根据需要调整第一个块中的代码以消除错误。

0 投票
1 回答
83 浏览

r - rcpparmadillio 中的自导函数?

我想通过 Rcpp 计算函数 f 的导数。我刚刚在 https://cran.r-project.org/web/packages/StanHeaders/vignettes/stanmath.html找到了一些资源,这些资源使用了 stan headers 和 rcppEigen。由于我的所有程序都是由 rcpparmadillio 编码的,所以我想知道如何通过 rcpparmadillio 和 stan 标头(可能是其他 AD 包)访问自导函数。

0 投票
1 回答
44 浏览

python-3.x - 如何对质量、质心、惯性等进行 MultibodyPlant 计算的梯度?

我看到了Underactuated:System Identification的当前章节和相应的笔记本,它目前是通过符号来完成的。

我想尝试使用前向模式自动微分(“autodiff” viaAutoDiffXd等)进行系统识别之类的东西,只是为了检查可伸缩性之类的东西,更好地了解 Drake 中的符号和 autodiff 选项等。

作为使用 autodiff 进行系统识别的第一步,我如何获取MultibodyPlant相对于惯性参数(例如质量)的量梯度(例如广义力、正向动力学等)?


  • 注意:在撰写本文时,Underactuated 章节 + 笔记本的永久链接:sysid.html , sysid.ipynb
0 投票
1 回答
149 浏览

python - 如何为 softmax 编写 JAX 自定义向量-雅可比积 (vjp)

为了理解 JAX 的反向模式自动差异,我尝试为 softmax 编写一个 custom_vjp,如下所示:

但是当我调用 jacrev 时,我收到关于 VJP 结果结构与 softmax 输入结构不匹配的错误:

但是,当我打印它们都具有形状 (3,) 但 JAX 似乎不同意的形状时,您可以看到?(实际上输入和输出是 3 x 3 矩阵,但这是因为 JAX 试图在 jacrev 中对 JVP 进行 vmap,因此一次性拉回 R(3) 的整个基础(即 3x3 单位矩阵)。

注意:如果我直接使用 jax.grad 或 jax.vjp,我会得到同样的错误。

0 投票
0 回答
35 浏览

python-3.x - 在 Keras/Tensorflow 中创建自定义损失函数时指定梯度函数

到目前为止,我只通过使用预定义的损失函数、优化器、数据集等来使用 Keras/Tensorflow 来接触深度学习。

我现在有兴趣在 Keras/Tensorflow 中为分类模型创建自定义损失函数(尽管我的问题也与回归模型相关)。我在书籍和stackoverflow上看到了几个自定义损失函数的例子,创建这样的函数不是问题。

(我对损失函数有一些想法,但我的问题并不针对其中任何一个。)

但是,我知道要执行反向传播,需要计算我的损失函数相对于模型参数的梯度。所以反向传播需要计算损失与softmax输出的导数,softmax输出与前一层的导数,等等(通过链式法则)。

问题

  1. 用户/建模者是否需要在纸上计算第一组导数(损失函数与 softmax),然后将其显式实现为函数,以便它可以“插入”Keras/TF?我见过的所有示例都使用了 autodiff,我相信它在数值上近似于所有这些,并且消除了用户实现任何梯度计算的需要。我正在考虑的方法是指定损失与输出的梯度,然后让 autodiff 担心早期级别的所有其他梯度。我的猜测是这个问题的答案是否定的,因为我从未见过它记录在案。我想这正是 autodiff 所做的:自动区分而不用担心损失函数的函数形式。
  2. 即使不需要指定任何渐变,它甚至可能吗?
  3. 假设有可能,这样做是否可以通过提高输出层梯度的准确性来加速反向传播?

我得到的印象是您只需提供损失函数(自定义或预定义)。您让 autodiff 处理所有梯度计算,而不必担心函数形式。

0 投票
1 回答
44 浏览

swift - 如何为带有可选参数的函数定义回调?

这是一个最小的例子:

我收到以下编译器错误:

我尝试将回调的返回类型定义为Optional<Double>.TangentVector,但这给了我错误,即我的回调的返回值为incompatible with return type 'Optional<Double>.TangentVector'

0 投票
1 回答
53 浏览

swift - Swift AutoDiff:我们如何使结构具有一个成员变量,该成员变量是多个参数的可微函数?

我想要以下内容:

但是编译器抱怨Error: Abort trap: 6并且堆栈跟踪的开始是

如果成员变量是一个参数的函数,则程序构建:

但不允许有两个或多个参数。

我们可以编写一个函数,它具有两个参数的可微函数作为参数:

如果一个函数可以有这种类型的参数,为什么结构不能有这种类型的成员变量?

0 投票
0 回答
31 浏览

tensorflow - 如何在张量流中获得粗粒度的操作级图

我想使用 tensorflow 来获取完整的计算图(包括前向、后向和参数更新)。我尝试了 tf.functions,但我得到的图太细了,因为许多操作(例如 Adam)被分成更小的运算符(add、mul、div 等)。那么有什么方法可以得到粗粒度的操作级图吗?非常感谢!

0 投票
1 回答
71 浏览

julia - 加速 Zygote.jl AD

我正在使用 Julia 的Zygote.jl包来计算期权希腊字母(即期权价格相对于参数的导数)的自动差异能力。请参阅下面使用 Black Scholes 计算看涨期权的希腊字母。在我的笔记本电脑上运行需要 40 秒。我做错了什么会导致它花费这么多时间吗?

我的猜测是,当Zygote必须通过 进行区分时,困难的部分就来了Distributions,但我不确定。

编辑:使用SpecialFunctions(to build a cdffunction from erf) 而不是Distributions让我缩短到 25 秒。见下文:

0 投票
0 回答
49 浏览

c++ - 使用 autodiff 包的问题:“致命错误:autodiff/forward/dual.hpp:没有这样的文件或目录”

我正在尝试使用该autodiff

我试图实现他们的第一个例子。我的代码如下:

我从我的 Ubuntu 终端使用 编译它g++ autodiff2.cpp -std=c++1z,但出现以下错误:

我该如何解决这个问题?