问题标签 [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 - 可在 Python 模块 Sympy 中以矩阵形式使用的微分运算符
我们需要两个微分算子矩阵,[B]
例如[C]
:
这也可以应用于计算矢量场的旋度,例如:
为了使用 Sympy 解决这个问题,必须创建以下 Python 类:
当微分算子矩阵在左边相乘时,这个类单独解决。diff
仅当要区分的功能已知时才执行此处。
当微分运算符的矩阵在右侧相乘时,要解决此问题,必须按以下方式更改__mul__
核心类中的方法:Expr
它工作得很好,但是 Sympy 中应该有更好的本地解决方案来处理这个问题。有人知道它可能是什么吗?
python - 避免在 Python 模块 Sympy 中对 args 进行排序
我目前正在开发一个可以以矩阵形式放置的微分算子。sympy
在这种情况下,args
创建Mul
对象时列表的顺序对于保证仅在需要的地方执行区分非常重要。
问题是,当完成以下操作时:
它返回(t, x, z)
是因为args
发生了一些重新排列。如何避免args
被排序?
java - Java - 使用 Apache Commons 数学库计算推导
我在使用 apache commons 数学库时遇到问题。
我只想创建像 f(x) = 4x^2 + 2x 这样的函数,我想计算这个函数的导数
--> f'(x) = 8x + 2
我阅读了有关差异化的文章(http://commons.apache.org/proper/commons-math/userguide/analysis.html,第 4.7 节)。
有一个我不明白的例子:
在第 5 行,当然会发生编译错误。该函数f(x)
被调用但未定义。我做错了什么?
有没有人对apache commons数学库的微分/推导有任何经验,或者有人知道另一个可以帮助我的库/框架吗?
谢谢
r - 优化问题,非线性:从 R 中的目标和约束自动分析 Jacobian/Hessian?
在 R 中,当您仅提供优化问题的目标函数和约束时,是否可以分析地找到 Jacobian/Hessian/稀疏模式?
AMPL 可以做到这一点,据我所知,甚至 MATLAB 也可以做到这一点,但我不知道你是否需要 Knitro 来做到这一点。
但是,R 的所有优化工具(例如 nloptr)似乎都需要我自己输入梯度和 Hessian,这非常困难,因为我正在处理一个复杂的模型。
algorithm - 反向传播如何与反向自动微分相同(或不同)?
反向传播的维基百科页面有这样的说法:
用于计算梯度的反向传播算法已被多次重新发现,它是一种更通用的技术的特例,称为反向累积模式中的自动微分。
有人可以对此进行阐述,通俗地说吗?被区分的功能是什么?什么是“特例”?是使用的伴随值本身还是最终梯度?
更新:自从写这篇文章以来,我发现这在深度学习一书的第 6.5.9 节中有介绍。请参阅https://www.deeplearningbook.org/。我还发现这篇论文在以下主题上提供了丰富的信息:Haber 和 Ruthotto 的“深度神经网络的稳定架构”。
theano - Theano 是否支持变量拆分?
在我的 Theano 程序中,我想将张量矩阵分成两部分,每部分对误差函数都有不同的贡献。谁能告诉我自动微分是否支持这一点?
例如,对于一个张量矩阵变量M,我想将其拆分为M1=M[:300,]和M2=M[300:,],那么代价函数定义为0.5* M1 * w + 0.8*M2 *w。是否仍然可以使用 T.grad(cost,w) 获得梯度?
或者更具体地说,我想构建一个具有不同特征的自动编码器,在总成本中具有不同的权重。
感谢任何回答我问题的人。
python - theano 是如何实现计算每个函数的梯度的?
我对 Theano 的实现有疑问。theano如何通过以下函数(T.grad)获得每个损失函数的梯度?谢谢您的帮助。
haskell - 如何对复杂数据类型进行自动微分?
给定一个基于 Vector 的非常简单的 Matrix 定义:
(出于演示目的......我正在使用 hmatrix 但认为问题出在某种方式)
和一个误差函数 ( eq3
):
为什么编译器无法推断出正确的类型?
确切的错误信息是这样的:
haskell - 如何对hmatrix进行自动微分?
太棒了……事实证明,从假矩阵到hmatrix
数据类型的转变是不平凡的:)
序言供参考:
以及对gradientDescent
函数的调用:
编辑:这不是原始问题中的代码,而是尽可能地归结起来。GHC 需要对子功能进行一些限制go
,但链接问题中提出的答案不适用于此处。
edit2,从下面引用我自己的话:
我开始相信这是不可能的。
Matrix
要求它的元素在Element
类中。唯一的元素Double
,Float
以及它们的Complex
形式。所有这些都是不被接受的gradientDescent
。
所以基本上这与上面链接的问题相同,但是对于hmatrix
数据类型而不是我的手动处理的问题。
编辑3
Edward Kmett 和 Dominic Steinitz 之间的相关电子邮件对话:https ://mail.haskell.org/pipermail/haskell-cafe/2013-April/107561.html
haskell - 如何从自动微分中获得更多性能?
我很难优化一个依赖ad
sconjugateGradientDescent
函数完成大部分工作的程序。
基本上我的代码是用 Matlab 和 C 编写的旧论文代码的翻译。我没有测量它,但该代码每秒运行几次迭代。我的每次迭代大约需要几分钟...
该代码在此存储库中可用:
可以通过以下命令运行有问题的代码:
使用 GHC 分析工具,我已经确认下降实际上是花费大部分时间的部分:
(此处的交互式版本:https ://dl.dropboxusercontent.com/u/2359191/learngabors.svg )
-s
告诉我生产力很低:
从我收集的信息来看,有两件事可能会导致更高的性能:
拆箱:目前我使用自定义矩阵实现(在 中
src/Data/SimpleMat.hs
)。这是我可以ad
使用矩阵的唯一方法(请参阅:如何在 hmatrix 上进行自动微分?)。newtype Mat w h a = Mat (Unboxed.Vector a)
我的猜测是,由于拆箱和融合,使用类似矩阵类型会获得更好的性能。我发现了一些包含未装箱向量实例的代码,ad
但到目前为止,我还无法将这些与conjugateGradientFunction
.矩阵导数:在一封电子邮件中,我现在找不到 Edward 提到使用
Forward
矩阵类型的实例而不是用Forward
实例填充矩阵会更好。我对如何实现这一点有一个模糊的想法,但还没有弄清楚我将如何根据ad
s 类型类来实现它。
这可能是一个在 SO 上无法回答的问题,所以如果您愿意在这里帮助我,请随时在 Github 上与我联系。