Ter*_*how 7 machine-learning gradient-descent
我已经通过一些在线资源教自己机器学习,但我有一个关于梯度下降的问题,我无法弄清楚.
梯度下降的公式由以下物流回归给出:
Repeat {
?j = ?j??/m?(h?(x)?y)xj
}
Run Code Online (Sandbox Code Playgroud)
?j变量j的系数在哪里; ?是学习率; h?(x)是假设; y是实数值,xj是变量j的值.m是训练集的数量.h?(x),y适用于每个训练集(即总和符号的用途).
这是我感到困惑的地方.
我不清楚总和是代表我的整个训练集还是我已经完成了多少次迭代.
例如,假设我有10个训练样例.如果我在每个训练样例之后执行梯度下降,那么我的系数将会非常不同,如果我在所有10个训练样例之后执行梯度下降.
请参阅下文第一种方式与第二种方式的不同之处:
第一种方式
第二种方式
我希望这能解释我的困惑.有谁知道哪种方法是正确的?
编辑:添加成本函数和假设函数
cost function = ?1/m?[ylog(h?(x))+(1?y)log(1?h?(x))]
h?(x) = 1/(1+ e^-z)
and z= ?o + ?1X1+?2X2 +?3X3...?nXn
Run Code Online (Sandbox Code Playgroud)
您描述它的第二种方式是执行渐变下降的正确方法.真实梯度取决于整个数据集,因此梯度下降的一次迭代需要使用所有数据集.(对于任何可以采用渐变的学习算法都是如此)
"第一条道路"接近于被称为随机梯度下降的东西.这里的想法是,将整个数据集用于一次更新可能会过度,特别是如果某些数据点是冗余的.在这种情况下,我们从数据集中选择一个随机点 - 主要是设置m = 1.然后,我们根据数据集中单个点的连续选择进行更新.通过这种方式,我们可以以与Gradient Descent的一次更新大致相同的成本进行更新.但是每次更新都有点嘈杂,这使得最终解决方案难以收敛.
这些方法之间的妥协称为"MiniBatch".采用整个数据集的梯度是一整轮的"批处理"处理,因为我们需要手头的整个数据集.相反,我们将做一个小批量,只选择整个数据集的一小部分.在这种情况下,我们设置k,1 <k <m,其中k是迷你批次中的点数.我们选择k个随机数据点来从每次迭代创建梯度,然后执行更新.重复直到收敛.显然,增加/减少k是速度和准确度之间的权衡.
注意:对于随机和小批量梯度下降,重要的是随机抽取/选择下一个数据点.如果对每个数据点使用相同的迭代顺序,则可能会得到非常奇怪/糟糕的结果 - 通常会偏离解决方案.
| 归档时间: |
|
| 查看次数: |
2153 次 |
| 最近记录: |