机器学习系列手记(七):优化算法之随机梯度下降法

优化算法

随机梯度下降法

      在机器学习中,优化问题的目标函数通常可以表示成
在这里插入图片描述
      其中 θ \theta θ 是待优化的模型参数, x x x 是模型输入, f ( x , θ ) f(x,\theta) f(x,θ) 是模型的实际输出, y y y 是模型的目标输出,函数 L L L 刻画了模型在数据 ( x , y ) (x,y) (x,y) 上的损失, P d a t a P_{data} Pdata 表示数据的分布, E E E 表示期望。因此, L ( θ ) L(\theta) L(θ) 刻画了当参数为 θ \theta θ时,模型在所有数据上的平均损失。
      我们希望能够找到平均损失最小的模型参数,也就是求解优化问题
θ ∗ = a r g m i n L ( θ ) \theta^*=arg min L(\theta) θ=argminL(θ)
      经典的梯度下降法采用所有训练数据的平均损失来近似目标函数,即
机器学习系列手记(七):优化算法之随机梯度下降法_第1张图片
其中 M M M 为训练样本的个数。模型参数的更新公式为
θ t + 1 = θ t − α ▽ L ( θ t ) \theta_{t+1}=\theta_t-\alpha ▽L(\theta_t) θt+1=θtαL(θt)
      因此,经典的梯度下降法在每次对模型参数进行更新时,需要遍历所有的训练数据。当 M M M 很大时,这需要很大的计算量,耗费很长的计算时间,在实际应用中基本不可行。
      为了解决这个问题,随机梯度下降法(Stochastic Gradient Descent,SGD)用单个训练样本的损失来近似平均损失,即
在这里插入图片描述
      因此,随机梯度下降法用单个训练数据即可对模型参数进行一次更新,大大加快了收敛速率。该方法也非常适用于源源不断到来的在线更新场景。
      为了降低随机梯度的方差,从而使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,在实际应用中我们会同时处理若干训练数据,该方法被称为小批量梯度下降法(Mini-Batch Gradinet Descent)。假设需要同时处理 m m m 个训练数据{ ( x i 1 , y i 1 ) , . . . , ( x i m , y i m ) (x_{i_{1}},y_{i_{1}}),...,(x_{i_{m}},y_{i_{m}}) (xi1,yi1),...,(xim,yim)},则目标函数及其梯度为
机器学习系列手记(七):优化算法之随机梯度下降法_第2张图片
      对于小批量梯度下降法的使用,有以下三点需要注意:
      (1)如何选取参数 m m m。在不同应用中,最优的 m m m 通常会不一样,需要通过调参选取。一般 m m m 取为2的幂次时能充分利用矩阵运算操作,如选取32、64、128等。
      (2)如何挑选 m m m 个训练数据。为了避免数据的特定顺序给算法收敛带来影响,一般会在每次遍历训练数据之前,先对所有的数据进行随机排序,然后在每次迭代时按顺序挑选 m m m 个训练数据直至遍历完所有的数据。
      (3)如何选取学习率 α \alpha α。为了加快收敛速率,同时提高求解精度,通常会采用衰减学习率的方案:一开始算法采用较大的学习率,当误差曲线进入平台期后,减小学习速率做更精细的调整。最优的学习速率方案也通常需要调参才能得到。
      综上,通常采用小批量梯度下降法解决训练数据量过大的问题。每次更新模型参数时,只需要处理 m m m 个训练数据即可,其中 m m m 是一个远小于总数据量 M M M 的常数,这样能够大大加快训练过程。

你可能感兴趣的:(机器学习系列手记,机器学习,算法,人工智能)