问题标签 [gradient-descent]

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 回答
185 浏览

regression - 梯度下降不收敛

这是我自己用matlab语言实现的梯度下降算法

编辑 工作算法

我已将此算法应用于以下训练数据集。最后一列是输出变量。在这里,我们有 15 个不同的功能。

由于我不知道的原因,当我在 50 次迭代后绘制成本函数 J 以检查它是否趋于收敛时,我发现它没有收敛。你能帮我理解吗?是实施错误还是我应该做点什么?

0 投票
0 回答
238 浏览

neural-network - 在 Pybrain 中使用梯度检查检查神经网络的正确性

我编写了这个虚拟代码来检查简单网络的正确性(根据此处的文档),但是每当我将输入数量增加到 30 以上时,我都会收到以下错误:

(“不正确的梯度”,数组[...])

('不正确的模块:',完全连接'完全连接 - 7':'bias' ->hidden0',[...])

两种情况下的这些方括号都包含一个巨大的数组,由于大小,我无法在此处发布。在我的实际代码中,我试图解决一个有 62 个输入的分类问题,所以我需要构建一个可以处理这么多输入的网络。我还尝试增加隐藏层的数量,以及隐藏层中的神经元数量(我尝试了甚至 50 个),但这并没有帮助。这是代码:

我不知道这是否相关,不过,我现在有 900 个数据样本,我预计很快还会有 1000 个样本左右。

0 投票
1 回答
61 浏览

machine-learning - 预训练神经网络输入的梯度下降以实现目标 y 值

我有一个训练有素的神经网络,可以将我的输入适当地映射到我的输出。那么是否可以指定所需的 y 输出,然后使用梯度下降法来确定获得该输出的最佳输入值?

使用反向传播时,使用权重的偏导数和误差函数来按比例调整权重;有没有办法对输入值本身和目标 y 值做类似的事情?

0 投票
0 回答
96 浏览

python - fmin_cg 没有足够小化

在做的时候,只是一个简单的梯度下降实现(预测一条st线,以样本点作为输入),我用迭代方法非常准确地预测了这条线,但是使用fmin_cg(),精度下降了,首先想到的是增加函数中的 'maxiter' 参数,但令人惊讶的是它根本没有任何影响,(结果与 maxiters = 1 和 1000 相同)。所以我想到了两个问题:1.为什么dre没有影响。fmin_cg() 计算 f 和 fprime 的次数,结果的准确性不应该与其成正比。 2. fmin_cg()(如果提供了 apt fprime)保证返回 f 可能最小的参数。

我的代码:

成本函数:

完整代码: http: //ideone.com/IbB3Gb(两个版本,只是注释第 4 行和第 5 行需要切换):)

0 投票
1 回答
205 浏览

neural-network - 如何为神经网络处理添加并发性?

据我了解,神经网络的基础是有几个输入、权重和输出。可能有隐藏层增加了整个事物的复杂性。

如果我有 100 个输入、5 个隐藏层和一个输出(是或否),大概会有很多连接。某处的顺序100^5。通过梯度下降进行反向传播似乎需要很长时间。

如何以并行(并发)的方式设置反向传播以利用多核处理器(或多个处理器)。

这是一个与语言无关的问题,因为我只是想理解结构。

0 投票
0 回答
468 浏览

matlab - 如何提高 MATLAB 神经网络工具箱中的梯度下降反向传播速度?

我目前正在训练数百种不同排列的神经网络。使用 Levenberg-Marquardt 反向传播产生的结果相对较快,但是我更喜欢现在出于学术原因使用梯度下降。不幸的是,梯度下降非常慢,以至于我只是停止它,因为训练所有网络需要很长时间。

有没有办法加快梯度下降过程,最好不涉及并行计算技术?

0 投票
1 回答
2747 浏览

java - Java中梯度下降逻辑回归的实现

我已经在 J​​ava 中实现了带有梯度下降的逻辑回归。好像效果不太好(没有正确分类记录;y=1的概率很大。)不知道我的实现是否正确。代码我已经翻了好几遍了,还是不行找到任何错误。我一直在关注 Andrew Ng 在 Course Era 上的机器学习教程。我的 Java 实现有 3 个类。即:

  1. DataSet.java : 读取数据集
  2. Instance.java:有两个成员:1. double[] x 和 2. double label
  3. Logistic.java :这是使用梯度下降实现逻辑回归的主要类。

这是我的成本函数:

J(Θ) = (- 1/m ) [Σ m i=1 y (i) log( h Θ ( x (i) ) ) + (1 - y (i) ) log(1 - h Θ (x (一世)))]

对于上面的成本函数,这是我的梯度下降算法:

重复 (

Θ j := Θ j - α Σ m i=1 ( h Θ ( x (i) ) - y (i) ) x (i) j

(同时更新所有 Θ j

)

谁能告诉我我做错了什么?提前致谢!:)

0 投票
0 回答
437 浏览

machine-learning - ADADELTA 在神经网络中保留随机初始化的权重

我正在尝试使用 ADADELTA 算法在 MNIST 数据集上训练 2 个隐藏层 tanh 神经网络。

这是我的设置的参数:

  • Tanh 激活函数
  • 2个隐藏层,784个单元(与输入单元数相同)
  • 我在输出层使用带有交叉熵损失的 softmax
  • 我随机初始化权重,扇形约为 15,标准差为 1/sqrt(15) 的高斯分布权重
  • 我正在使用 10 的 minibatch 大小和 50% 的 dropout。
  • 我正在使用 ADADELTA 的默认参数 (rho=0.95, epsilon=1e-6)
  • 我检查了我的导数与自动微分

如果我运行 ADADELTA,起初它会在错误中有所收获,并且我可以看到第一层正在学习识别数字的形状。它在对数字进行分类方面做得不错。但是,当我长时间运行 ADADELTA(30,000 次迭代)时,很明显出现了问题。虽然目标函数在几百次迭代后停止改进(并且内部 ADADELTA 变量停止变化),但第一层权重仍然具有与它们初始化时相同的稀疏噪声(尽管在该噪声之上学习了真实特征)。

为了说明我的意思,这里是网络可视化的示例输出。 内部状态的可视化

请注意第一层权重中的像素噪声,尽管它们具有结构。这与初始化它们的噪声相同。

没有一个训练示例具有像这种噪声这样的不连续值,但由于某种原因,ADADELTA 算法从未将这些异常值权重降低到与它们的邻居一致。

到底是怎么回事?

0 投票
1 回答
270 浏览

java - 梯度下降应用于词分类任务的特征向量包

我一遍又一遍地观看了Andrew Ng 的视频,但我仍然不明白如何将梯度下降应用于我的问题。

他几乎只处理高级概念解释领域,但我需要的是底层战术见解。

我的输入是以下形式的特征向量:

例子:

字典是:

所以作为向量的文档看起来像:

根据我所见,梯度下降算法如下所示:

在此处输入图像描述

我目前的理解是α是学习率,x (i)是一个特征,在上面的例子中Document 2,x (3) =2。

y (i)是标签,在我的情况下,我试图预测Document与特定特征向量相关的,例如 y (0)将与 相关联Document 1,& y (1)将表示Document 2

可能会有很多文档,比如说 10 个,所以在这种情况下,我可以有 5 个与 y (0)相关联的文档和 5 个与 y (1)m = 10相关联的文档。

我不明白的第一件事是, Θ 0和 Θ 1的作用是什么?

我认为它们是权重值,与感知器算法一样,我将它们应用于特征的值,以努力哄骗该特征,不管其固有值如何,输出与其关联的标签的值. 那是对的吗?所以我一直在将 Θ 值与感知器的权重值相等,这准确吗?

此外,我不明白我们正在采用什么梯度。我真的不想再听到关于在山上行走之类的高级解释,实际上,对于我刚刚在上面详述的情况,我们采用什么梯度?两个后续迭代中的权重?一个特征的价值和它的真实标签?

感谢您的考虑,任何见解将不胜感激。

0 投票
1 回答
220 浏览

java - 计算 Theta 更新规则的梯度输出

由于它使用 sigmoid 函数而不是零/一激活函数,我猜这是计算梯度下降的正确方法,对吗?

下面的代码我正在尝试更新我的 Θ 值(相当于感知器中的权重,不是吗?),我在相关问题LEARNING_RATE * localError * feature_matrix__train[p][i] * output_gradient[i]中为此目的给出了这个公式。我从我的感知器中注释掉了重量更新。

这个新的更新规则是正确的方法吗?

output_gradient 是什么意思?这相当于我在我的calculateOutput方法中计算的总和吗?


更新 现在我更新了一些东西,看起来更像这样: