因此经典的梯度下降法在每次对模型参数进行更新时,需要遍历所有的训练数据。当M很大时,需要很大的计算量,耗费很长的计算时间,在实际应用中基本不可行。
为了解决该问题,随机梯度下降法,用单个样本的损失来近似平均损失,即
因此,随机梯度下降法用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速率。该方法也非常适用于数据源源不断到来的在线更新场景。
为了降低随机梯度的方差,从而使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际应用中我们会同时处理若干训练数据,该方法被称为小批量梯度下降法(Mini- Batch Gradient Descent)。假设需要同时处理m个训练数据
则目标函数及其梯度为
对于小批量梯度下降法的使用,有以下三点需要注意的地方。
(1)如何选取参数m?在不同的应用中,最优的m通常会不一样需要通过调参选取。一般m取2的幂次时能充分利用矩阵运算操作,所以可以在2的幂次中挑选最优的取值,例32、64、128、256等。
(2)如何挑选m个训练数据?为了避免数据的特定顺序给算法收敛带来的影响,一般会在每次遍历训练数据之前,先对所有的数据进行随机排序,然后在每次迭代时按顺序挑选m个训练数据直至遍历完所有的数据。
(3) 如何选取学习速率a? 为了加快收敛速率,同时提高求解精度,通常会采用衰减学习速率的方案:一开始算法采用较大的学习速率,当误差曲线进入平台期后,减小学习速率做更精细的调整。最优的学习速率方案也通常需要调参才能得到。
综上,通常采用小批量梯度下降法解决训练数据量过大的问题。每次更新模型参数时,只需要处理m个训练数据即可,其中m是一个远小于总数据量M的常数,这样能够大大加快训练过程。
以上就是梯度的基本概念,和一个基于梯度的实际优化的算法案例。梯度的理解对于机器学习尤其深度学习来说是至关重要的。更多梯度详解的书籍可以参阅花书《深度学习》中的第七章。