问题标签 [hessian-matrix]

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 投票
1 回答
247 浏览

matlab - 使用 syms、f 和 hessian 编写具有动态变量的函数以获取其 Hessian 矩阵

我的问题有 60 个变量(x1to x60),这是函数:

我想得到函数的 Hessian 矩阵fsyms不过,因为变量太多,对于and ,我不想一一写出来f

我知道我可以手动计算函数的 Hessian 矩阵,f因为该函数并不太难。不过我偶尔需要改变函数的形式,比如把函数改成(增加括号里的变量个数):

f因此,只要函数形式发生变化,我不想手动计算函数的 Hessian 矩阵。有没有更简单的方法可以在 MATLAB 中使用这 60 个变量syms进行编写f,以便我可以使用它hessian来获取 Hessian 矩阵f

0 投票
0 回答
152 浏览

optimization - 为什么我从 optim 得到错误的粗麻布矩阵,从而得到错误的协方差矩阵?

我尝试为数据集运行 MLE。我得到了与 glm 相同的系数。我通过在 optim 中使用 hessian 矩阵的结果来计算渐近协方差矩阵,甚至没有得到与协方差矩阵 glm 几乎相同的结果。我的错误在哪里?谢谢!

0 投票
0 回答
511 浏览

optimization - 带有 optim 或 numderiv 包的 Hessian 矩阵?

我对泊松分布的对数似然函数进行最大似然估计。在估计之后,我想计算系数的标准误差。为此,我需要粗麻布矩阵。现在我不知道应该使用哪个函数从 numderiv 包中获取 hessian 矩阵、optim() 或 hessian()。

这两个功能都给了我不同的解决方案。如果我尝试从我从 optim 得到的 hessian 计算标准错误,我会在结果中得到一个 NaN 条目。这两个函数用于计算 hessian 矩阵有什么区别?

0 投票
1 回答
797 浏览

python - 在 SymPy 中的 derived_by_array 结果中替换变量的值

我目前正在做一些关于多变量函数微积分的练习,并认为我会尝试制作自己的函数来确定任何函数在定义点处的梯度和粗麻布。我目前在尝试将结果矩阵替换为任意函数的坐标值时遇到问题。我已经设法解决了具体的例子,但是我尝试创建一个函数来解决用户定义的函数并不能正常工作。

这是迄今为止运行的基本功能。

这会产生以下结果,但是我的目标是将所需的值代入梯度和 hessian 矩阵以实现以下所需的结果。我设法使用以下方法达到了预期的结果。

查看此处提出的问题后,似乎压缩两个列表应该使 subs() 函数能够工作,但它目前不适合我。我试图遍历“变量”和“替换”以顺序应用 .subs(),但是我发现该函数仅在该方法链接到所有替换变量时才有效,如上面的示例所示。

有谁知道我如何为给定坐标应用 .subs() n 次以产生相关的梯度/粗麻布矩阵?

0 投票
1 回答
540 浏览

python - 通过 scipy.stats.fit() 从 MLE 检索优化结果?

我正在尝试通过 估计不同分布的参数scipy.stats."some_dist".fit(),并且在检索有关正在使用的优化过程的任何信息时遇到了极大的困难。具体来说,我正在寻找 Hessian,这是大多数实现的算法输出,如此所述。

对于所有的优化,SciPy 返回一个名为 的对象OptimizeResult,其中包含有用的信息,例如 Hessian,那么在.fit()调用相同优化的一些数据之后如何得到这个?

0 投票
1 回答
70 浏览

python - 训练后 TensorFlow Hessian 矩阵未更新

我正在尝试使用 tf.hessians 函数获取 Hessian 矩阵。虽然损失值和变量在每次训练后都会更新,但 Hessian 矩阵值保持不变。此外,它们不依赖于可以手动设置的初始变量值。实际上,我的问题与类似,尚未收到任何答案。这是我用于测试的代码:

以下是打印结果:

所以,cur_hess 没有更新,顺便说一下,它只包含 2 个元素而不是 4 个。如何修复它?此外,我尝试按照此处的建议两次应用 tf.gradients ,但值不会像 tf.hessians 那样更新。同时,tf.gradients 会正确计算一阶导数,并在每次训练循环后更改它们。谢谢。

0 投票
1 回答
416 浏览

tensorflow - 使用 TensorFlow hessian 进行二阶偏导测试

二阶偏导数检验是判断临界点是最小值、最大值还是鞍点的简单方法。我目前正在考虑在 tensorflow 中为简单的神经网络实现这样的测试。以下权重集用于对具有 2 个输入、1 个隐藏层、2 个隐藏单元和 1 个输出单元的 XOR 神经网络进行建模:

现在可以按如下方式获得梯度和粗麻布:

mse_op网络的 MSE 误差在哪里。

梯度和粗麻布计算都很好。梯度的维度等于原始输入的维度。粗麻布的维度明显不同。

问题:这是一个好主意,甚至可以方便地计算通过应用于给定权重集生成的粗麻布的特征值吗?tf.hessian特征值是否能代表我认为它们所代表的东西 - 即,我能否说如果总体上同时存在正值和负值,那么我们可以得出结论,该点是点?

到目前为止,我已经尝试了以下开箱即用的方法来计算每个粗麻布的特征值:

1,2 和 4 工作,但第三个炸弹出来,抱怨Dimensions must be equal, but are 2 and 1 for 'SelfAdjointEigV2_2' (op: 'SelfAdjointEigV2') with input shapes: [2,1,2,1].我应该以某种方式重塑粗麻布并继续,还是我完全走错了路?

0 投票
1 回答
2472 浏览

python - XGBoost python自定义目标函数

根据文档, http: //xgboost.readthedocs.io/en/latest/python/python_api.html 如果我们要定义自定义目标函数,它应该有签名

在哪里

但是,如果我们有损失函数,取决于 N 个变量,我们应该有 NxN 的二阶导数矩阵,但我们的 hess 形状只有 Nx1。我们应该排除“交叉变量”衍生品吗?或者还有什么?

0 投票
1 回答
1693 浏览

python - 在展平的参数张量上使用 tf.gradients 或 tf.hessians

假设我想计算一个标量值函数关于某些参数 W 的 Hessian 矩阵(例如,前馈神经网络的权重和偏差)。如果您考虑以下代码,实现一个经过训练以最小化 MSE 损失的二维线性模型:

您希望session.run(tf.hessian,feed_dict={})返回一个 2x2 矩阵(等于 W)。事实证明,因为params是一个 2x2 张量,所以输出是一个形状为 [2, 2, 2, 2] 的张量。params虽然我可以轻松地重塑张量以获得我想要的矩阵,但当成为不同大小的张量列表时(例如,当模型是深度神经网络时),这个操作似乎非常麻烦。

似乎有两种解决方法:

  • 展平params为一维张量,称为flat_params

    这样tf.hessians(loss, flat_params)自然会返回一个 2x2 矩阵。然而,正如在为什么 Tensorflow Reshape tf.reshape() 会破坏梯度流中所指出的那样?对于 tf.gradients(但也适用于 tf.hessians),tensorflow 无法在图中看到 和 之间的符号链接,params并且flat_paramstf.hessians(loss, flat_params)引发错误,因为梯度将被视为None.

  • https://afqueiruga.github.io/tensorflow/2017/12/28/hessian-mnist.html中,代码作者反其道而行之,首先创建了 flat 参数并将其部分重塑为self.params. 这个技巧确实有效,并为您提供了具有预期形状(2x2 矩阵)的粗麻布。但是,在我看来,当你有一个复杂的模型时,这会很麻烦,如果你通过内置函数(如tf.layers.dense,..)创建模型,则无法应用。

是否没有直接的方法可以从中获取 Hessian 矩阵(如本例中的 2x2 矩阵)tf.hessians,何时self.params是任意形状的张量列表?如果没有,您如何自动调整输出张量的形状tf.hessians

0 投票
1 回答
207 浏览

minimize - 最小化功能不会显示粗麻布

我最小化了一个函数,并且需要它的(逆)Hessian 用于标准误差。

该函数给了我这个(逆)Hessian:

我希望这里有一个矩阵?我试过list(hess_inv)了,但这不起作用。

PS我是否更正了对角线值的平方根等于标准误差?