8得票1回答
PyTorch自动微分:运行时错误“grad can be implicitly created only for scalar outputs”是什么意思

我希望深入了解Pytorch自动求导; 我想观察一个简单张量通过下面的sigmoid函数后的梯度: import torch from torch import autograd D = torch.arange(-8, 8, 0.1, requires_grad=True) with...

14得票2回答
反向传播和反向自动微分有何相同之处(或不同之处)?

Wikipedia关于反向传播算法的页面中提到: 计算梯度的反向传播算法已经被发现多次,并且是一种称为反向累积模式下的自动微分技术的特殊情况。 能否有人用通俗易懂的语言解释一下这个声明?这里所微分的函数是什么?“特殊情况”是什么?使用的是伴随值本身还是最终梯度? 更新:自写此文以来,我发现...

14得票7回答
Scheme / Common Lisp / Clojure中的自动微分库

我听说 McCarthy 发明 Lisp 的一个最初的动力之一就是为了编写自动微分系统。尽管如此,我的谷歌搜索没有找到任何用于此目的的库/宏。是否存在任何Scheme/Common Lisp/Clojure库(宏)可接受函数 F 并返回计算 F 的导数 dF/dx 的函数? 我希望它支持具有...

7得票1回答
结合Eigen和CppAD

我想在Eigen线性代数中使用CppAD提供的自动微分机制。一个示例类型是Eigen::Matrix< CppAD::AD,-1,-1>。由于CppAD::AD是一个自定义的数字类型,因此必须提供这种类型的NumTraits。CppAD在文件cppad/example/cppad_...

10得票1回答
TensorFlow在梯度计算过程中如何处理不可微节点?

我理解自动微分的概念,但无法找到任何关于tensorflow如何计算非可微函数的误差梯度的解释,例如在我的损失函数中使用tf.where或在我的图形中使用tf.cond。虽然它能够正常工作,但我想了解tensorflow如何通过这些节点反向传播误差,因为没有公式可以从中计算梯度。

7得票2回答
Numeric.AD和类型问题

我正在尝试使用Numeric.AD和自定义Expr类型进行工作。我希望计算用户输入表达式的符号梯度。第一次尝试使用常量表达式效果很好: calcGrad0 :: [Expr Double] calcGrad0 = grad df vars where df [x,y] = eval...

8得票3回答
TensorFlow中的Wengert List在哪里?

TensorFlow使用反向模式自动微分(reverse mode AD),如https://github.com/tensorflow/tensorflow/issues/675所示。 反向模式自动微分需要一种称为Wengert List的数据结构-请参见https://en.wikipe...

11得票1回答
优化创建过多垃圾(非堆栈溢出)的列表函数。

我有一个Haskell函数,它导致程序大于50%的分配,并使60%的运行时间由GC占用。我使用小堆栈(-K10K)运行,因此没有堆栈溢出,但我能否使这个函数更快,分配更少? 这里的目标是计算矩阵乘以向量的积。例如,我不能使用hmatrix,因为这是使用ad自动微分包的更大函数的一部分,所以我...

59得票3回答
为什么C++编译器不进行更好的常量折叠?

我正在研究加快一个大型C++代码段的方法,其中包含用于计算雅各比矩阵的自动导数。这涉及在实际残差中进行一定量的工作,但根据剖析执行时间,大部分工作都是在计算雅各比矩阵中完成的。 这让我感到惊讶,因为大多数雅各比矩阵是从0和1向前传播的,因此工作量应该是该函数的2-4倍,而不是10-12倍。为...

12得票4回答
有没有Haskell语言的反向模式自动微分的可行实现?

我看过的最相关的Haskell实现是前向模式,位于http://hackage.haskell.org/packages/archive/fad/1.0/doc/html/Numeric-FAD.html。 最相关的研究似乎是针对Scheme相关另一种函数语言的反向模式,位于http://w...