问题标签 [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 投票
2 回答
1378 浏览

neural-network - 用于 DNN 训练的无 Hessian 优化与梯度下降

Hessian-Free (HF) 优化技术与用于训练深度神经网络 (DNN) 的梯度下降技术(例如随机梯度下降 (SGD)、批量梯度下降、自适应梯度下降)相比如何?

在什么情况下应该更喜欢 HF 技术而不是梯度下降技术?

0 投票
0 回答
1141 浏览

algorithm - 在神经网络中计算成本函数 hessian 的最有效方法

我正在编写一个MLP网络,我想实现该levenberg-marquardt 算法。对于levenberg-marquardt,每次迭代后的权重更新由以下公式给出:

但我找不到一个算法来计算(或有一个可接受的估计)hessian。我怎样才能做到这一点?

0 投票
0 回答
2018 浏览

r - 来自 R 中 optim 的错误 Hessian

我正在做一些极值分析。出于各种原因,我不想使用 fevd 包(首先我希望能够调整一些我无法做到的事情)。我编写了自己的代码。它大多非常简单,我以为我已经解决了所有问题。但是对于某些参数组合,我的对数似然分析(基于optim)得出的 Hessian 将不正确。

一步一步走过去。我的代码 - 或它的选定部分 - 看起来像这样:

在某些情况下,一切都很好。如果我运行我的例程和 fevd 例程,我会得到完全相同的结果。在某些情况下(在我的具体情况下,当 shape=-0.29 如此强烈地为负/weibull 时),我的例程会给出负方差和时髦的粗麻布。它并不总是错误的,但某些参数组合显然没有给出有效的 hessian (注意:参数仍然估计正确,含义与 fevd 结果相同,但协方差矩阵完全关闭)。

我发现这篇文章比较了两个程序的粗麻布,确实 optim 似乎很不稳定。但是,如果我只是在我的例程中替换 maxLik,它根本不会收敛(即使在收敛发生的情况下)。

我试图给出不同的初始值——即使是正确的值——但它就是不收敛。

我没有提供数据,因为我认为在我的示例中正确使用了 optim 例程。简而言之,对于某些参数组合,数值结果并不稳定。我的问题是:

1) 我在使用 maxLik 的方式上是否遗漏了什么?

2) 除了 maxLik 之外,还有其他优化例程可以从中提取粗麻布吗?

谢谢

0 投票
0 回答
623 浏览

scikit-learn - 如何在 scikit-learn 中进行逻辑回归后检索 Hessian?

我正在使用包 scikit-learn 来计算中等大数据集(300k 行,2k 列。这对我来说相当大!)的逻辑回归。

现在,由于 scikit-learn 不产生置信区间,我自己计算它们。为此,我需要计算并反转在最小值处评估的逻辑函数的 Hessian 矩阵。由于 scikit-learn 在优化时已经计算了 Hessian,如果我能检索它会很有效。

sklearn.classification.LogisticRegression中,有没有办法检索以最小值评估的 Hessian?

注意:这是一个中间步骤,实际上我只需要 Hessian 逆矩阵的对角线条目。如果有人有更直接的方法可以到达那里,我很想学习它。

0 投票
1 回答
2720 浏览

matlab - 查找函数的符号 Hessian 矩阵

我有伪代码函数f(x,y)=x+y,我想使用 Matlab 找到符号 Hessian 矩阵(2x2 二阶偏导数矩阵)。我该怎么做呢?

这是我的第一次尝试,与正确的语法相去甚远:

0 投票
0 回答
58 浏览

r - 计算 Hessian 的维度误差(最大似然)

鉴于我通过 for 循环强制 Hessian 成为 8x8,为什么我会收到错误,认为它是 2x1?

运行 8x8 Hessian 以在 nx8 回归数据集上生成 maxLik。得到一个错误,即 Hessian 是 2x1 而不是 8x8,即使这是在Hessian[i,j]<-中强制执行的。

  • 数据集 x 为 nxk (4406x8)。
  • 参数(估计器的初始迭代,maxLik 下的 start= 参数)向量是 8 个数字字符串,因此 loglambda 是 (nxk)%*%(8x1) 一个 nx1 向量。正确的?
  • 然后时刻是 nx1 * nx1 即 nx1 作为元素乘法。正确的?
  • 并且 Hessian 的每个元素都应该是标量,因为它是一个求和的 kx1 向量(来自时刻 %*% lambda)。这部分代码是不一致的。

主要的 qn 是,即使部分不是正确的维度(可能),Hessian[i,j <- -sum(vector) 应该形成一个标量,通过 {i,j} 在 1:8 循环中应该强制8x8。为什么这不起作用?

0 投票
1 回答
82 浏览

r - Hessian 是 -1 * Hessian 在使用 optim 找到函数最大值时

我想找到函数的最大值:

我可以使用以下代码进行“详尽”搜索:

该函数的最大值为11872whend1 = 76d2 = 80

我还可以使用optim以下代码找到最大值:

我将上面的函数乘以-1得到最大值,并注意到这段代码返回的最大值是真正最大值的负数。此外,此代码返回的 Hessian 是真正的 Hessian * -1:

直到现在我才意识到这一点,也没有在optim页面上看到它。我应该担心吗?如果有,在什么情况下?

语句中是否有一个选项可以在optim找到最大值时返回原始函数的真正 Hessian 而不是 -1 * 原始函数?或者我应该知道,当我搜索最大值(而不是搜索最小值)并自己更正 Hessian 时,Hessian 乘以 -1?

0 投票
1 回答
684 浏览

python - 贝叶斯神经网络:Hessian 的计算

我正在尝试在 Python 中编写几种类型的 ANN 算法,以便更好地理解/直觉这些算法。我没有使用 Scikit-learn 或任何其他现成的软件包,因为我的目标是教育而不是实用。作为一个示例问题,我使用 MNIST 数据库(http://yann.lecun.com/exdb/mnist/)。

虽然我执行了简单的 1 隐藏层 NN 和卷积 NN,但我成功地避免了任何二阶优化方法,因此没有计算 Hessian 矩阵。然而,然后我到了贝叶斯神经网络,为了优化超参数,Hessian 的计算是强制性的。

在我的全连接网络中,有 784 个输入、300 个隐藏单元和 10 个输出单元。所有这些都会产生 238200 个权重(+ 偏差)。当我尝试计算甚至近似 Hessian(通过梯度的外积)时,Python 会通知“MemoryError”。即使我将权重数量减少到 ~40000 并且没有显示错误消息,我的计算机也会在几分钟后卡住。据我了解,问题在于理想的矩阵非常庞大。我浏览了几篇关于贝叶斯神经网络的文章,注意到作者通常使用不超过 10 或 20 个输入和隐藏单元的网络架构,因此参数比我少得多。但是,我没有看到任何关于此类限制的明确声明。

为了将贝叶斯方法应用于 MNIST 的 NN,我该怎么做?

更一般地说:是否可以将贝叶斯方法应用于此(238200 个权重)甚至更大的架构?或者也许它只适用于相对较小的网络?

0 投票
0 回答
94 浏览

python - python的任何优化器模块都支持具有奇异Hessian矩阵的对象函数吗?

我想用有界约束和线性不等式约束(即总和 wi*xi ≤ b)来解决约束最小化。然而,目标函数的 Hessian 矩阵可能是奇异的。

我已经用方法尝试了minimizeinscipy.optimize模块SLSQP,但没有运气。一个简化的问题如下:

我们可以看到优化器给出了错误的结果。是否有任何 python 模块可以满足要求?谢谢。

0 投票
2 回答
995 浏览

python - 在 Theano 中结合标量和向量来计算 Hessian

我正在尝试使用 Theano 来计算函数相对于向量以及几个标量的粗麻布(编辑:也就是说,我本质上希望将标量附加到我正在计算粗麻布的向量上) . 这是一个最小的例子:

我的第一次尝试是:

哪个失败了AssertionError: tensor.hessian expects a (list of) 1 dimensional variable as 'wrt'

我的第二次尝试是将 A、b 和 c 与:

哪个失败了DisconnectedInputError: grad method was asked to compute the gradient with respect to a variable that is not part of the computational graph of the cost, or is used only by a non-differentiable operator: Join.0

在这种情况下计算粗麻布的正确方法是什么?

更新:为了澄清我在寻找什么,假设 A 是一个 2 元素向量。那么 Hessian 将是:

对于示例函数,它y应该是:

因此,如果我们要定义一个函数:

然后,假设我们可以hy成功计算,我们会期望输出:

在我的实际应用中,A有25个元素,y比较复杂,但是思路是一样的。