对于随机梯度下降的乱序操作不太理解
来源:6-7 scikit-learn中的随机梯度下降法
管一三四
2018-11-09
for i_iter in range(n_iters):
indexes = np.random.permutation(m)
X_b_new = X_b[indexes,:]
y_new = y[indexes]
for i in range(m):
gradient = dJ_sgd(theta, X_b_new[i], y_new[i])
theta = theta - learning_rate(i_iter * m + i) * gradient
关于这段代码不太理解
随机梯度下降的这段代码中,对于乱序排序,按照视频里的说法是随机的看一遍,最后再对每个样本迭代一次,每次的顺序不同是不是为了避免陷入局部最低点??就像是每次的起始位置发生改变是吗??
写回答
1回答
-
每次的顺序不同,就是为了更加体现这个随机!这两重循环其实相当于随机取了 n_iters * m 次样本,计算梯度,进行梯度下降的搜索工作,同时,保证了,这个过程,每个样本的信息都用到了(都用到了n_iters次)。
为什么要随机?是的,为了避免陷入局部最低点。同时,这样做,算法性能效率也更高,因为每次梯度计算,只使用了一个样本:)
继续加油!:)
012018-11-11
相似问题