我的数据集包含m
个功能和n
个数据点。设w
为向量(待估计)。我正在尝试用随机更新方法实现梯度下降。我的最小化函数是least mean square
。
更新算法如下所示:
for i = 1 ... n data:
for t = 1 ... m features:
w_t = w_t - alpha * (<w>.<x_i> - <y_i>) * x_t
其中<x>
是m
个要素的原始向量,<y>
是真实标签的列向量,alpha
是常量。
我的问题:
现在根据wiki,我不需要遍历所有数据点,我可以在错误足够小时停止。这是真的吗?
我不明白这里的停止标准应该是什么。如果有人可以帮助解决这个问题,那就太棒了。
使用此公式 - 我在for loop
中使用 - 是否正确?我相信(<w>.<x_i> - <y_i>) * x_t
是∆Q(w)
。
答案 0 :(得分:4)
现在根据wiki,我不需要遍历所有数据点,当错误足够小时我可以停止。这是真的吗?
当您拥有非常庞大的训练集并且所有数据点都非常昂贵时,尤其如此。然后,您将在K随机更新之后(即在处理K训练示例之后)检查收敛标准。虽然这是可能的,但通过一个小的训练集来做这件事并没有多大意义。人们做的另一件事是随机化处理训练样本的顺序,以避免在原始中有太多相关的例子,这可能导致“虚假”的收敛。
我不明白这里的停止标准应该是什么。如果有人能帮助解决这个问题,那就太好了。
有几个选择。我建议尝试尽可能多的人,并根据实证结果做出决定。
使用这个公式 - 我用于循环 - 这是正确的吗?我相信(w.x_i - y_i)* x_t 是我的ΔQ(w)。
它应该是 2 *(w.x_i - y_i)* x_t 但是这并不是什么大不了的,因为你无论如何都要乘以学习率 alpha 。