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

c - fminunc 如何优化梯度下降中的学习率(步长比例)值?

我目前正在研究一种机器学习算法,我注意到当我使用 Matlabfminunc时,与手动更新参数时相比,算法收敛到全局最小值的速度非常快(迭代次数很少):

thetas[j] = thetas[j] - (alpha*gradient)/sampleNum;

我认为这是因为我天真地假设alpha(步长比例)是恒定的。

那么,如何fminunc在 C 中实现类似的东西呢?

我试着从一个大的开始,alpha如果当前的成本比以前的成本大,我会调整它。当最小化函数的形状不是线性时,就会出现问题,因为alpha最初可以得到一个非常小的值,并且当函数形状趋于“平坦”时无法返回到更大的值(并且可以采取更大的步骤) .

0 投票
1 回答
7693 浏览

machine-learning - 梯度下降随机更新 - 停止标准和更新规则 - 机器学习

我的数据集具有m特征和n数据点。设w是一个向量(待估计)。我正在尝试使用随机更新方法实现梯度下降。我的最小化功能是least mean square.

更新算法如下图所示:

其中<x>m特征的原始向量,<y>是真实标签的列向量,并且alpha是常数。

我的问题:

  • 现在根据wiki,我不需要遍历所有数据点,当错误足够小时我可以停止。这是真的吗?

  • 我不明白这里的停止标准应该是什么。如果有人可以提供帮助,那就太好了。

  • 使用这个公式 - 我使用过for loop- 是否正确?我相信(<w>.<x_i> - <y_i>) * x_t是我的∆Q(w)

0 投票
2 回答
2410 浏览

machine-learning - 为什么使用函数的导数而不是实际函数来计算局部最小值?

在机器学习回归问题中,为什么要为导函数而不是实际函数计算局部最小值?

示例:http ://en.wikipedia.org/wiki/Gradient_descent

梯度下降算法用于寻找函数$$的局部最小值

带导数

在这里,为了使用函数 (A) 的梯度下降算法找到局部最小值,他们使用了 (A) 的导数函数,即函数 (B)。

0 投票
2 回答
1202 浏览

python - 线性回归\梯度下降python实现

为了学习目的,我正在尝试使用梯度下降法从头开始实现线性回归。我的代码的一部分真的让我很烦。出于某种原因,在我运行一行代码后变量x正在被更改,我不确定为什么。

变量如下。x并且y是 numpy 数组,我在这个例子中给了它们随机数。

代码是:

一旦我运行上面的代码x就不再是一个列表了。它仅成为变量 n 或列表中的最后一个元素。

0 投票
1 回答
161 浏览

matlab - 为什么梯度下降算法的解总是朝着正确的方向发展?

我对经典梯度下降算法有疑问。最近我想实现一个函数拟合程序,提供观察数据以及给定函数的参数。我使用的方法是梯度下降算法,因为函数的导数可用。假设给定函数参数,我可以根据函数创建模拟数据:

下图显示了模拟数据(模糊星号点)以及势函数(红色): 在此处输入图像描述 从图中可以看出,在这个例子中有两个参数需要估计,一个是中心点位置 p,另一个是是标准推导增量,函数写为

在此处输入图像描述

其中 A 和 B 可以认为是已知的。那么如果我想使用梯度下降算法,我应该做两件事:一是分别为两个未知参数(p和delta)定义函数的导数,二是调用梯度下降算法。但是,我发现令人困惑的是,在迭代过程中,估计参数之一(delta)并不总是朝着正确的方向发展:

在此处输入图像描述

但是,我确实注意到,目标函数(拟合点与估计函数之间的平方距离之和)总是变得更小: 在此处输入图像描述

那么我的问题是为什么解决方案并不总是朝着正确的方向发展,即使最终它们可以到达正确的位置。谢谢!

0 投票
1 回答
1823 浏览

r - 如何使用梯度下降进行预测

根据以下数据,我尝试使用gradeint 下降来预测哪些标签将与新用户相关联。请注意,这些数字仅用于说明目的,实际上这些数字对应于单词。

因此,如果添加了一个新用户:“user5”并且我知道该用户的标题和组,我可以在“r”中使用梯度下降来预测用户可能需要哪些标签?

0 投票
1 回答
4309 浏览

cuda - CUDA 中的梯度下降优化

我将编写我的第一个相对较大的 CUDA 项目作为用于机器学习目的的梯度下降优化。我想从关于 CUDA 的一些有用的本机功能的群众智慧中受益,这些功能可能是在项目中使用的捷径。有什么想法/建议吗?

0 投票
2 回答
10467 浏览

python - 如何确定梯度下降算法中的学习率和方差?

我上周开始学习机器学习。当我想做一个梯度下降脚本来估计模型参数时,我遇到了一个问题:如何选择合适的学习率和方差。我发现,不同的(学习率,方差)对可能会导致不同的结果,有些有时你甚至无法收敛。此外,如果更改为另一个训练数据集,一个精心挑选的(学习率,方差)对可能不起作用。例如(下面的脚本),当我将学习率设置为 0.001,方差设置为 0.00001 时,对于 'data1',我可以得到合适的 theta0_guess 和 theta1_guess。但是对于'data2',他们无法使算法收敛,即使我尝试了几十个(学习率,方差)对仍然无法达到收敛。

因此,如果有人能告诉我是否有一些标准或方法来确定(学习率,方差)对。

0 投票
2 回答
2578 浏览

machine-learning - 梯度下降:我们是否在 GD 中的每一步都迭代所有的训练集?或者我们是否为每个训练集更改 GD?

我已经通过一些在线资源自学了机器学习,但我有一个关于梯度下降的问题,我无法弄清楚。

梯度下降的公式由以下逻辑回归给出:

其中θj是变量 j 的系数;α是学习率;hθ(x)是假设;y是实际值,xj是变量 j 的值。m是训练集的数量。hθ(x),y是针对每个训练集的(即,这就是求和符号的用途)。

这就是我感到困惑的地方。

我不清楚求和是否代表我的整个训练集或到目前为止我已经完成了多少次迭代。

例如,假设我有 10 个训练示例。如果我在每个训练示例之后执行梯度下降,那么我的系数将非常不同,如果我在所有 10 个训练示例之后执行梯度下降。

请参阅下面的第一种方式与第二种方式有何不同:

第一种方式

  • 第 1 步:由于系数初始化为 0,因此 hθ(x)=0
  • 步骤 2:对第一个训练示例执行梯度下降。 求和项仅包含 1 个训练示例
  • 第 3 步:现在为训练示例 1 和 2 使用新系数... 求和项包括前 2 个训练示例
  • 第 4 步:再次执行梯度下降。
  • 第 5 步:现在使用新系数训练示例 1,2 和 3...求和项包括前 3 个训练示例
  • 继续直到收敛或使用所有训练示例。

第二种方式

  • 第 1 步:由于系数初始化为 0,因此所有 10 个训练示例的 hθ(x)=0
  • 第 2 步:使用所有 10 个训练示例执行 1 步梯度下降。系数将不同于第一种方式,因为求和项包括所有 10 个训练示例
  • 第 3 步:再次对所有 10 个训练示例使用新系数。总和项包括所有 10 个训练示例
  • 第 4 步:执行梯度下降并继续对所有示例使用系数,直到收敛

我希望这能解释我的困惑。有谁知道哪种方式是正确的?

编辑:添加成本函数和假设函数

0 投票
2 回答
11731 浏览

machine-learning - 梯度下降收敛 如何决定收敛?

我通过在线资源(即 coursera 的机器学习)学习了梯度下降。然而,提供的信息只是说重复梯度下降直到它收敛。

他们对收敛的定义是使用成本函数相对于迭代次数的图表,并观察图表何时变平。因此,我假设我会执行以下操作:

或者,我想知道确定收敛的另一种方法是否是观察系数接近它的真实值:

那么收敛是基于成本函数还是系数?以及我们如何确定精度值?它应该是系数的百分比还是总成本函数?