问题标签 [automatic-differentiation]
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.
python - 如何区分函数的函数?
我正在尝试使用ad
我知道 y(x) 和 z(y) 的库来区分 z(x) wrt x。如果我无法通过分析找到 z(x),我该如何进行微分?换句话说,我试图避免如下所示的链式规则计算:
julia - Julia 中的自动微分:Hessian 与 ReverseDiffSparse
如何使用自动微分(最好使用ReverseDiffSparse
)评估 Julia 中函数的 Hessian?在下面的示例中,我可以计算和评估点处的values
梯度JuMP
:
现在我想要 Hessian at values
。我尝试更改以下内容:
但我得到一个错误。
作为参考,交叉发布在有用的 Julia Discourse 论坛上。
haskell - Haskell Linear + AD,实现 Metric for Forward?
我正在尝试diff
从ad
包中使用函数Quaternion a -> Quaternion a
或更普遍地Metric a => a -> a
依赖quadrance
.
我不确定解决此问题的最佳方法是什么,因为Forward
没有 Metric 实例并且使用Metric
' 类型,因为* -> *
我什至不确定它是否可能(即强制 Forward 的子类型具有 Metric 实例) .
我想知道如何解决这个问题,我并没有接受 Metric 实例的想法,只是想获得diff
四元数上的任意函数。
julia - Julia ForwardDiff 是否适用于涉及 ODE 集成和嵌套自动微分的非常全面的函数?
我需要使用卡尔曼滤波技术估计连续离散非线性随机动态系统的参数。
我将使用 ODE 中的 Julia ode45() 并自己实现扩展卡尔曼滤波器来计算对数似然。ODE 完全用 Julia 编写,ForwardDiff 支持原生 Julia 函数的微分,包括嵌套微分,这也是我需要的,因为我想在我的 EKF 实现中使用 ForwardDiff。
ForwardDiff 会像我描述的对数似然那样处理如此全面的函数的微分吗?
tensorflow - 将 TensorFlow 梯度计算分成两个(或更多)部分
是否可以部分使用 TensorFlow 的tf.gradients()
函数,即 - 从某个张量的损失和该张量的权重计算梯度,然后将它们相乘以获得从损失到权重的原始梯度?
例如,设W,b
一些权重,设x
一个网络的输入,设y0
表示标签。
假设一个前向图,例如
我们可以计算tf.gradients(loss,W)
然后应用(跳过一些细节)optimizer.apply_gradients()
来更新W
。
然后我尝试使用 提取中间张量,var=tf.get_default_graph().get_tensor_by_name(...)
然后计算两个梯度:g1=tf.gradients(loss,var)
和g2=tf.gradients(var,W)
。然后,根据链式法则,我会期望 和 的维度能够计算g1
出来g2
,以便我可以g=g1*g2
在某种意义上写作,然后返回tf.gradients(loss,W)
。
不幸的是,这种情况并非如此。尺寸不正确。每个渐变的维度都是“wrt 变量”的维度,因此第一个渐变和第二个渐变之间没有对应关系。我错过了什么,我该怎么做?
谢谢。
machine-learning - Julia ReverseDiff:如何仅对输入的一个子集采用梯度?
在我的数据流中,我查询数据库的一个小子集,使用这些结果构建大约十几个数组,然后,给定一些参数值,计算一个似然值。然后重复数据库的一个子集。我想计算似然函数相对于参数而不是数据的梯度。但是 ReverseDiff 计算所有输入的梯度。我怎样才能解决这个问题?具体来说,我怎样才能构造一个 ReverseDiff.Tape 对象
TL;DR:如何结合随机梯度下降和 ReverseDiff?(我不喜欢使用 ReverseDiff。它似乎是适合这项工作的工具。)
看来这必须是一种常见的编码模式。它一直在我的领域中使用。但我错过了一些东西。Julia 的范围规则似乎破坏了范围/匿名函数方法,并且 ReverseDiff 保留了生成的磁带中的原始数据值,而不是使用变异值。
一些不起作用的示例代码
python - 有限差分导数数组值函数
假设我有以下代码
有没有一种快速的方法来计算这样一个函数的所有导数(单一和混合)?该模块应该在数组级别执行经典的有限差分技术,即将元素添加h= tol
到数组变量(取决于导数),计算函数并除以h
。
(我的真实案例要复杂得多,因为它涉及来自我无法修改的 DLL 的数组值函数……变量的数量是任意的,请不要专注于这个特定的玩具示例)
tensorflow - Chainer 中的 grad_outputs 与 Tensorflow 中的 grad 用于后向函数
我想将一些具有自定义渐变的自定义操作从 Chainer 转换为 Tensorflow。前传比较简单,我已经有了。但是对于向后传递,我永远无法使优化工作。让我们假设 Chainer 中的反向传递是这样的:
我在 Tensorflow 中通过以下方式做到了这一点:
根据我在网上找到的文档,我认为grad_outputs
和grads
的计算方式相同。但不知何故我失败了。
任何人都可以对此有所了解吗?那将不胜感激。
python - Python:逐点定义表达式的区分?
我有一个逐点定义的函数。它源于一种存款情况,您每月存入 1k 美元,利息为 5%,您使用 Numpy 绘制。有多种方法可以计算边际利息,例如有限差分、自动导数、符号差分和手动(此处涵盖了某些方面,但采用封闭形式):
在 Python 中,代码没有边际差异:
在这里区分plotInterests
函数(逐点定义函数)以查看每个月的利息的最简单方法是什么?Python 中的有限差分、自动导数和符号差分的状态如何,它们可以在这里用 Python 3 稳健地计算吗?
haskell - Haskell中如何实现自动微分?
所以我有一个双数课程:
现在我想编写一个函数,它接受一个数值函数并将其导数作为数值函数。(使用自动微分)。
这是我想出的:
现在举个例子sin
,这是我得到的:
我不知道错误消息告诉我什么。我试过玩弄,forall
但我不能采用通用函数,通过它坚持对偶并返回一个通用函数。
那么我如何迭代autoDiff
以获得更高的导数,甚至在 Haskell 的类型系统中是否有可能呢?