问题标签 [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.
regression - 梯度下降不收敛
这是我自己用matlab语言实现的梯度下降算法
编辑 工作算法
我已将此算法应用于以下训练数据集。最后一列是输出变量。在这里,我们有 15 个不同的功能。
由于我不知道的原因,当我在 50 次迭代后绘制成本函数 J 以检查它是否趋于收敛时,我发现它没有收敛。你能帮我理解吗?是实施错误还是我应该做点什么?
neural-network - 在 Pybrain 中使用梯度检查检查神经网络的正确性
我编写了这个虚拟代码来检查简单网络的正确性(根据此处的文档),但是每当我将输入数量增加到 30 以上时,我都会收到以下错误:
(“不正确的梯度”,数组[...])
('不正确的模块:',完全连接'完全连接 - 7':'bias' ->hidden0',[...])
两种情况下的这些方括号都包含一个巨大的数组,由于大小,我无法在此处发布。在我的实际代码中,我试图解决一个有 62 个输入的分类问题,所以我需要构建一个可以处理这么多输入的网络。我还尝试增加隐藏层的数量,以及隐藏层中的神经元数量(我尝试了甚至 50 个),但这并没有帮助。这是代码:
我不知道这是否相关,不过,我现在有 900 个数据样本,我预计很快还会有 1000 个样本左右。
machine-learning - 预训练神经网络输入的梯度下降以实现目标 y 值
我有一个训练有素的神经网络,可以将我的输入适当地映射到我的输出。那么是否可以指定所需的 y 输出,然后使用梯度下降法来确定获得该输出的最佳输入值?
使用反向传播时,使用权重的偏导数和误差函数来按比例调整权重;有没有办法对输入值本身和目标 y 值做类似的事情?
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 行需要切换):)
neural-network - 如何为神经网络处理添加并发性?
据我了解,神经网络的基础是有几个输入、权重和输出。可能有隐藏层增加了整个事物的复杂性。
如果我有 100 个输入、5 个隐藏层和一个输出(是或否),大概会有很多连接。某处的顺序100^5
。通过梯度下降进行反向传播似乎需要很长时间。
如何以并行(并发)的方式设置反向传播以利用多核处理器(或多个处理器)。
这是一个与语言无关的问题,因为我只是想理解结构。
matlab - 如何提高 MATLAB 神经网络工具箱中的梯度下降反向传播速度?
我目前正在训练数百种不同排列的神经网络。使用 Levenberg-Marquardt 反向传播产生的结果相对较快,但是我更喜欢现在出于学术原因使用梯度下降。不幸的是,梯度下降非常慢,以至于我只是停止它,因为训练所有网络需要很长时间。
有没有办法加快梯度下降过程,最好不涉及并行计算技术?
java - Java中梯度下降逻辑回归的实现
我已经在 Java 中实现了带有梯度下降的逻辑回归。好像效果不太好(没有正确分类记录;y=1的概率很大。)不知道我的实现是否正确。代码我已经翻了好几遍了,还是不行找到任何错误。我一直在关注 Andrew Ng 在 Course Era 上的机器学习教程。我的 Java 实现有 3 个类。即:
- DataSet.java : 读取数据集
- Instance.java:有两个成员:1. double[] x 和 2. double label
- 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))
谁能告诉我我做错了什么?提前致谢!:)
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 算法从未将这些异常值权重降低到与它们的邻居一致。
到底是怎么回事?
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的作用是什么?
我认为它们是权重值,与感知器算法一样,我将它们应用于特征的值,以努力哄骗该特征,不管其固有值如何,输出与其关联的标签的值. 那是对的吗?所以我一直在将 Θ 值与感知器的权重值相等,这准确吗?
此外,我不明白我们正在采用什么梯度。我真的不想再听到关于在山上行走之类的高级解释,实际上,对于我刚刚在上面详述的情况,我们采用什么梯度?两个后续迭代中的权重?一个特征的价值和它的真实标签?
感谢您的考虑,任何见解将不胜感激。
java - 计算 Theta 更新规则的梯度输出
由于它使用 sigmoid 函数而不是零/一激活函数,我猜这是计算梯度下降的正确方法,对吗?
下面的代码我正在尝试更新我的 Θ 值(相当于感知器中的权重,不是吗?),我在相关问题LEARNING_RATE * localError * feature_matrix__train[p][i] * output_gradient[i]
中为此目的给出了这个公式。我从我的感知器中注释掉了重量更新。
这个新的更新规则是正确的方法吗?
output_gradient 是什么意思?这相当于我在我的calculateOutput
方法中计算的总和吗?
更新 现在我更新了一些东西,看起来更像这样: