对于随机梯度下降的乱序操作不太理解

来源: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回答

liuyubobobo

2018-11-09

每次的顺序不同,就是为了更加体现这个随机!这两重循环其实相当于随机取了 n_iters * m 次样本,计算梯度,进行梯度下降的搜索工作,同时,保证了,这个过程,每个样本的信息都用到了(都用到了n_iters次)。


为什么要随机?是的,为了避免陷入局部最低点。同时,这样做,算法性能效率也更高,因为每次梯度计算,只使用了一个样本:)


继续加油!:)

0
1
管一三四
非常感谢!
2018-11-11
共1条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5850 学习 · 2437 问题

查看课程