2019-01-29 随机梯度下降(stochastic gradient descent)

随机梯度下降的思想也可以应用于线性回归、逻辑回归、神经网络或者其他依靠梯度下降来进行训练的算法中。

梯度下降法的问题是当m值很大时,计算这个微分项的计算量就变得很大,因为需要对所有m个训练样本求和,这被称为批量梯度下降(batch gradient descent)。“批量”就表示我们需要每次都考虑所有的训练样本。

批量梯度下降

随机梯度下降在每一步迭代中不用考虑全部的训练样本,只需要考虑一个训练样本。定义参数θ关于训练样(x(i),y(i))的代价等于二分之一倍的,我的假设h(x(i))跟实际输出y(i)的误差的平方。这个代价函数值实际上测量的是我的假设在某个样本(x(i),y(i))上的表现。

批量梯度下降vs随机梯度下降

随机梯度下降的算法:

1.将所有数据打乱:将所有m个训练样本重新排列,这就是标准的数据预处理过程(保证了我们在扫描训练集时我们对训练集样本的访问是随机的顺序,能让随机梯度下降稍微快一些收敛,跟批量梯度下降不同 )

2.在i等于1到m中进行循环,也就是对所有m个训练样本进行遍历,然后按照公式进行更新 θj

随机梯度下降

关注第一个样本然后把参数θ稍微修改一点,使其对第一个训练样本的拟合变得好一点,完成这个内层循环以后再转向第二个训练样本,然后还是稍微把参数修改一点让它对第二个样本的拟合更好一点,以此类推 直到完成所有的训练集。

随机梯度下降不需要等到对所有m个训练样本求和得到梯度项修改参数,而是只需要对单个训练样本求出这个梯度项,在单个样本的梯度项过程中开始优化参数了。对随机梯度下降来说,只需要一次关注一个训练样本,一点点把参数朝着全局最小值的方向进行修改了。

批量梯度下降的收敛过程会倾向于一条近似的直线,一直找到全局最小值。在你运行随机梯度下降的过程中,参数是朝着全局最小值的方向被更新的,但也不一定。它看起来是以某个比较随机、迂回的路径在朝全局最小值逼近。因为每一次迭代只需要保证对一个训练样本拟合,而不是所有样本,这会让参数朝向了一个错误的方向。两者之间的收敛形式是不同的:随机梯度下降是在某个靠近全局最小值的区域内徘徊,而不是直接逼近全局最小值并停留在那点,但实际上这并没有多大问题,只要参数最终移动到某个非常靠近全局最小值的区域内,只要参数逼近到足够靠近全局最小值,这也会得出一个较为不错的假设。

在随机梯度下降中,有一个外层循环,它决定了内层循环的执行次数。所以外层循环应该执行多少次呢,这取决于训练样本的大小,通常一次就够了最多到10次。如果我们有非常大量的数据,有上亿的样本,每次只需要考虑一个训练样本也能训练出非常好的假设,内循环只用做一次就够了。

你可能感兴趣的:(2019-01-29 随机梯度下降(stochastic gradient descent))