我们首先回忆一下梯度下降法
目的:求 g ( t ) g(t) g(t) 的极小值点
方法:
对于一个统计学习任务,我们给定训练集 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)}w∈W ,给定目标函数 L ( f ( ⋅ , w ) , T ) L(f(\cdot,w),\mathcal T) L(f(⋅,w),T)
我们的目的是通过梯度下降法是找到最优的 w ∈ W w\in\mathcal W w∈W 使得目标函数最小。
在这里:
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} ∂t∂g ,在这里也就是需要 ∂ L ( f ( ⋅ , w ) , T ) ∂ w \dfrac{\partial L(f(\cdot,w),\mathcal T)}{\partial w} ∂w∂L(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=1∑nE(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} ∂w∂L(f(⋅,w),T)=n1i=1∑n∂w∂E(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} ∣S∣1j∈S∑∂w∂E(xj,yj,w)≈n1i=1∑n∂w∂E(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 参数更新次数=∣S∣n∗epoch number
当然目前有许多中SGD的变形方法,有的加入了“惯性”,如动量方法,有的加入了“环境感知”,如AdaGrad方法,还有融合多种想法的Adam方法等等,这里不过多阐述。