问题标签 [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 回答
912 浏览

artificial-intelligence - 激活函数和初始权重的选择对神经网络是否陷入局部最小值有任何影响吗?

我昨天发布了这个问题,询问我的神经网络(我正在使用随机梯度下降通过反向传播进行训练)是否陷入局部最小值。以下论文讨论了 XOR 神经网络中的局部最小值问题。第一篇说不存在局部最小值问题,而下一篇论文(一年后写)说在 2-3-1 XOR 神经网络中存在局部最小值问题(作为另外,我使用的是 3-3-1,即输入层和隐藏层的偏差)。这两个都是摘要(我无法访问完整的论文,所以我无法阅读它):

还有另一篇论文 [PDF]说最简单的 XOR 网络没有局部最小值,但它似乎不是在谈论 2-3-1 网络。

现在回到我的实际问题:我找不到任何讨论激活函数的选择、初始权重以及这对神经网络是否会陷入局部最小值的影响。我问这个问题的原因是,在我的代码中,我尝试使用标准的 sigmoid 激活函数和双曲正切激活函数。我注意到在前者中,我只有大约 20% 的时间会被卡住,而在后者中,我往往会更频繁地被卡住。每当我第一次初始化网络时,我也会随机化我的权重,所以我想知道一组随机权重是否更倾向于让我的神经网络“卡住”。

就激活函数而言,由于误差最终与激活函数产生的输出有关,我认为有影响的(即误差表面发生变化)。然而,这只是基于直觉,我更喜欢一个具体的答案(对于这两点:初始权重和激活函数的选择)。

0 投票
1 回答
3708 浏览

matlab - 如何在matlab中为神经网络编写梯度下降代码?

我正在尝试在 MATLAB 中实现“随机梯度下降”。我完全遵循了算法,但我得到了一个非常非常大的 w (系数)用于预测/拟合函数。我的算法有错误吗?

我正在尝试为我的神经网络编写梯度下降。

我的最终网络输出为 (net2) 并希望输出为 (d) 我将这 2 个参数放入公式中:E=0.5*(d^2-net2),我得到了 E。

所以我的问题是我如何使用E?我怎样才能在matlab中写我的鳕鱼?以及如何将我的权重更新为 W?请帮助我。谢谢。

0 投票
2 回答
7423 浏览

java - 反向传播算法

我在网上找到了一个示例,其中包含一种反向传播错误并调整权重的方法。我想知道这到底是如何工作的,以及使用了什么权重更新算法。会不会是梯度下降?

0 投票
9 回答
26259 浏览

machine-learning - 梯度下降似乎失败了

我实现了梯度下降算法来最小化成本函数,以获得确定图像是否具有良好质量的假设。我在 Octave 中做到了。这个想法在某种程度上基于Andrew Ng的机器学习课程中的算法

因此,我有 880 个值“y”,其中包含从 0.5 到 ~12 的值。我在“X”中有 50 到 300 的 880 个值,应该可以预测图像的质量。

遗憾的是,该算法似乎失败了,经过一些迭代后,theta 的值非常小,以至于 theta0 和 theta1 变为“NaN”。我的线性回归曲线有奇怪的值......

这是梯度下降算法的代码: ( theta = zeros(2, 1);, alpha= 0.01, iterations=1500)

这是成本函数的计算:

0 投票
4 回答
16564 浏览

matlab - Gradient descent and normal equation method for solving linear regression gives different solutions

I'm working on machine learning problem and want to use linear regression as learning algorithm. I have implemented 2 different methods to find parameters theta of linear regression model: Gradient (steepest) descent and Normal equation. On the same data they should both give approximately equal theta vector. However they do not.

Both theta vectors are very similar on all elements but the first one. That is the one used to multiply vector of all 1 added to the data.

Here is how the thetas look like (fist column is output of Gradient descent, second output of Normal equation):

What can cause the difference in theta(1, 1) returned by gradient descent compared to theta(1, 1) returned by normal equation? Do I have bug in my code?

Here is my implementation of normal equation in Matlab:

Here is code for gradient descent:

I pass exactly the same data X and y to both functions (I do not normalize X).

Edit 1:

Based on answers and comments I checked few my code and run some tests.

First I want to check if the problem can be cause by X beeing near singular as suggested by @user1489497's answer. So I replaced pinv by inv - and when run it I really got warning Matrix is close to singular or badly scaled.. To be sure that that is not the problem I obtained much larger dataset and run tests with this new dataset. This time inv(X) did not display the warning and using pinv and inv gave same results. So I hope that X is not close to singular any more.

Then I changed normalEque code as suggested by woodchips so now it looks like:

However the problem is still there. New normalEque function on new data that are not close to singular gives different theta as gradientDesc.

To find out which algorithm is buggy I have run linear regression algorithm of data mining software Weka on the same data. Weka computed theta very similar to output of normalEque but different to the output of gradientDesc. So I guess that normalEque is correct and there is a bug in gradientDesc.

Here is comparison of thetas computed by Weka, normalEque and GradientDesc:

I also computed errors as suggested by Justin Peel's answer. Output of normalEque gives slightly lesser squared error but the difference is marginal. What is more when I compute gradient of cost of theta using function cost (the same as the one used by gradientDesc) I got gradient near zero. Same done on output of gradientDesc does not give gradient near zero. Here is what I mean:

This would suggest that gradient descent simply did not converge to global minimum... But that is hardly the case as I run it for thousands of iterations. So where is the bug?

0 投票
4 回答
10905 浏览

c++ - C++ 库中的快速梯度下降实现?

我正在寻找运行梯度下降优化以最小化变量实例化的成本。我的程序在计算上非常昂贵,所以我正在寻找一个可以快速实现 GD 的流行库。推荐的图书馆/参考资料是什么?

0 投票
0 回答
63 浏览

c++ - C++ 库中的快速梯度下降实现?

可能重复:
C++ 库中的快速梯度下降实现?

我正在寻找运行梯度下降优化以最小化变量实例化的成本。我的程序在计算上非常昂贵,所以我正在寻找一个可以快速实现 GD 的流行库。推荐的图书馆/参考资料是什么?

0 投票
5 回答
43918 浏览

machine-learning - 梯度下降和牛顿梯度下降有什么区别?

我了解梯度下降的作用。基本上,它试图通过缓慢地沿着曲线向下移动来向局部最优解移动。我想了解计划梯度下降和牛顿法之间的实际区别是什么?

从 Wikipedia 中,我读到了这条短线“牛顿法使用曲率信息采取更直接的路线”。这在直觉上意味着什么?

0 投票
3 回答
17773 浏览

machine-learning - 带约束的梯度下降(拉格朗日乘数)

我正在尝试使用梯度下降在 N 个参数中找到函数的最小值。但是我想这样做,同时将参数的绝对值之和限制为 1(或 <= 1,没关系)。出于这个原因,我使用拉格朗日乘数法,所以如果我的函数是 f(x),我将最小化 f(x) + lambda * (g(x)-1) 其中 g(x) 是参数的绝对值之和。

现在据我了解,当 g(x)=1 时,该函数的梯度仅为 0,因此找到局部最小值的方法应该找到我的函数的最小值,其中我的条件也满足。问题是这个添加我的函数是无界的,所以梯度下降只是找到越来越大的 lambdas 和越来越大的参数(绝对值)并且永远不会收敛。

目前我正在使用 CG 的 python (scipy) 实现,所以我真的更喜欢不需要我自己重写/调整 CG 代码但使用现有方法的建议。

0 投票
1 回答
3427 浏览

machine-learning - 梯度下降与 fminunc

当使用完全相同的数据时,我正在尝试运行梯度下降并且无法获得与内置 fminunc 八度音程相同的结果

我的代码是

当给定示例 (X,y) 和参数 (theta) 时,costFunction 计算成本和梯度。

一个内置的 octave 函数 fminunc 也调用 costFunction 并使用相同的数据在更少的迭代中找到更好的答案。

鉴于 octave 使用相同的成本函数,我假设 costFunction 是正确的。

我已经尝试降低学习率,以防我达到局部最小值并增加迭代次数,成本停止下降,所以我认为它似乎找到了最小值,但最终的 theta 仍然有更大的成本并且是没有准确的地方

即使 fminunc 使用更好的 alogoritm,梯度下降最终是否应该通过足够的迭代和更小的学习率找到相同的答案?

或者谁能​​看到我做错了什么?

感谢您的任何帮助。