批量梯度下降法BGD
计算所有样本的误差平均值,作为目标函数。
批量梯度下降法(Batch Gradient Descent,BGD)是梯度下降法最常用的形式,具体做法:在更新参数时使用所有的样本来进行更新。
求梯度的时候用了所有m个样本的梯度数据。BGD容易得到最优解,但由于每次考虑所有样本,速度很慢。
随机梯度下降法SGD
每次只选择一个样本进行计算。
随机梯度下降法(Stochastic Gradient Descent,BGD)和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅采用一个样本j来求梯度。对应的更新公式是:
SGD迭代速度快,但不一定每次都朝着收敛的方向。
随机梯度下降法和批量梯度下降法是两个极端,各有优劣
训练速度:SGD每次仅仅采用一个样本来迭代,训练速度很快,而BGD在样本量很大的时候,训练速度不能让人满意。
准确度:SGD仅仅用一个样本决定梯度方向,导致解很有可能不是最优。
收敛速度:SGD一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。
但值得一提的是,SGD在处理非凸函数优化的过程当中有非常好的表现,由于其下降方向具有一定随机性,因此能很好的绕开局部最优解,从而逼近全局最优解。
小批量梯度下降法MBGD
选择一部分数据。
小批量梯度下降法(Mini_batch Gradient Descent,MBGD)是批量梯度下降法和随机梯度下降法的折中,也就是对于m个样本,采用x个子样本来迭代,1<x<m,一般可以取x=10,也可以根据样本的数据调整x的值。对应的更新公式:
BGD会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算。当数据量大的时候,每个参数的更新都会很慢。
SGD以高方差频繁更新,优点是使得SGD会跳到新的、潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加复杂。
MBGD将结合了BGD和SGD的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中可以采用这种方法,将数据一个batch 一个batch的送进去训练。
在使用上述三种方法时有两个问题是不可避免的
1、如何选择合适的学习率(learning rate)
自始至终保持同样的学习率显然不太合适,开始学习参数的时候,距离最优解比较远,需要一个较大的学习率能够快速逼近最优解。当参数接近最优解时,继续保持最初的学习率,容易越过最优点,在最优点附近震荡。
2、如何在参数选择合适的学习率。对每个参数都保持同样的学习率也不合理的,有些参数更新频繁,学习率可以适当小一点。有些参数更新缓慢,学习率就应该大一点。
针对以上问题,提出了诸如Adam,动量法等优化方法。