[机器学习基础] 随机梯度下降法 SGD 简介

我们首先回忆一下梯度下降法

梯度下降法

方法结构

目的:求 g ( t ) g(t) g(t) 的极小值点

方法:

  • 随机初始化 t ∗ = t 0 t^*=t_0 t=t0
  • for i = 1,…,M 更新参数
    t i = t i − 1 − η ∗ ∂ g ∂ t ∣ t = t i − 1 \quad\qquad t_i=t_{i-1}-\eta*\dfrac{\partial g}{\partial t}\bigg|_{t=t_{i-1}} ti=ti1ηtgt=ti1

统计学习中的梯度下降法

对于一个统计学习任务,我们给定训练集 T = { ( x i , y i ) } i = 1 , . . . , n \mathcal T=\{(x_i,y_i)\}_{i=1,...,n} T={(xi,yi)}i=1,...,n ,给定备选预测函数集 { f ( ⋅ , w ) } w ∈ W \{f(\cdot,w)\}_{w\in\mathcal W} {f(,w)}wW ,给定目标函数 L ( f ( ⋅ , w ) , T ) L(f(\cdot,w),\mathcal T) L(f(,w),T)

我们的目的是通过梯度下降法是找到最优的 w ∈ W w\in\mathcal W wW 使得目标函数最小。

在这里:

g ( t ) = L ( f ( ⋅ , w ) , T ) t = w g(t)=L(f(\cdot,w),\mathcal T)\quad t=w g(t)=L(f(,w),T)t=w

梯度下降法需要求梯度 ∂ g ∂ t \dfrac{\partial g}{\partial t} tg ,在这里也就是需要 ∂ L ( f ( ⋅ , w ) , T ) ∂ w \dfrac{\partial L(f(\cdot,w),\mathcal T)}{\partial w} wL(f(,w),T)

如果我们选定的目标函数为各样本损失的均值,即 L ( f ( ⋅ , w ) , T ) = 1 n ∑ i = 1 n E ( x i , y i , w ) L(f(\cdot,w),\mathcal T)=\dfrac{1}{n}\sum\limits_{i=1}^nE(x_i,y_i,w) L(f(,w),T)=n1i=1nE(xi,yi,w) ,(若目标函数为MSE,则 E ( x i , y i , w ) = ( f ( x i , w ) − y i ) 2 E(x_i,y_i,w)=(f(x_i,w)-y_i)^2 E(xi,yi,w)=(f(xi,w)yi)2 )那么

∂ L ( f ( ⋅ , w ) , T ) ∂ w = 1 n ∑ i = 1 n ∂ E ( x i , y i , w ) ∂ w \dfrac{\partial L(f(\cdot,w),\mathcal T)}{\partial w} =\dfrac{1}{n}\sum\limits_{i=1}^n\dfrac{\partial E(x_i,y_i,w)}{\partial w} wL(f(,w),T)=n1i=1nwE(xi,yi,w)

我们发现每一次求梯度都要用到所有样本,这样参数更新效率比较低。

随机梯度下降法可以缓解这一问题。

随机梯度下降法

随机梯度下降法(SGD)是一类近似求梯度的方法,每次使用小部分样本甚至只使用一个样本来求梯度进行参数更新。

最简单的SGD使用如下方法近似梯度:
1 ∣ S ∣ ∑ j ∈ S ∂ E ( x j , y j , w ) ∂ w ≈ 1 n ∑ i = 1 n ∂ E ( x i , y i , w ) ∂ w \dfrac{1}{|S|}\sum\limits_{j\in S}\dfrac{\partial E(x_j,y_j,w)}{\partial w}\approx \dfrac{1}{n}\sum\limits_{i=1}^n\dfrac{\partial E(x_i,y_i,w)}{\partial w} S1jSwE(xj,yj,w)n1i=1nwE(xi,yi,w)
其中 S ⊂ { 1 , . . . , n } S\subset\{1,...,n\} S{1,...,n} ∣ S ∣ |S| S 被称为batch size,当 ∣ S ∣ = n |S|=n S=n 时这种方法就是纯正的梯度下降法。

我们一般把训练参数过程中 所有样本被使用一轮 称为一个epoch。

帮助理解:

如果 ∣ S ∣ |S| S 可以被 n n n 整除,那么我们有

参 数 更 新 次 数 = n ∣ S ∣ ∗ e p o c h   n u m b e r 参数更新次数=\dfrac{n}{|S|}*epoch\ number =Snepoch number

当然目前有许多中SGD的变形方法,有的加入了“惯性”,如动量方法,有的加入了“环境感知”,如AdaGrad方法,还有融合多种想法的Adam方法等等,这里不过多阐述。

你可能感兴趣的:(机器学习基础,机器学习)