Optimization Algorithm
Some Source From: deeplearning.ai
GD、SGD和Mini-Batch Gradient Descent
三者关系,
SGD∈MiniBatch Gradient Descent∈GD
GD是针对所有样本计算梯度,SGD是随机抽取一个样本计算梯度,Mini-Batch Gradient Descent则是折中地抽取部分样本计算梯度。同时由于SGD是最小化单个样本的损失函数,并不是朝着全局最优方向,因此波动较大,Batch-GD虽然精度高,但是在样本量过大的情况下,计算量会过大。
Mini-Batch Gradient Descent
- 从训练集抽取
m
个大小的Batch样本
{x(1),...,x(m)} - 梯度估计
g^←1m∇θ∑iL(f(x(i)),y(i)) - 更新
θ←θ−ϵg^
在Mini-Batch Gradient Descent中由于随机采样引入的噪源1,其梯度估计并不会在极小值处小时,而使用全部样本时梯度下降到极小值时,整个代价函数的真实梯度也会变得很小甚至为0,因此Batch-GD下降可以使用固定的学习速率。实践中,一般会线性衰减学习速率到第 τ 次迭代:
ϵk=(1−α)ϵ0+αϵτ其中α=kτ
其中参数选择为 ϵ0,ϵτ,τ ,通常 τ 被设为反复遍历训练样本所需的迭代次数, ϵτ 设为 1% 的 ϵ0 。主要问题是如何设置 ϵ0 ,若 ϵ0 太大,学习曲线将会剧烈振荡,代价函数会明显增加,如果学习速率太慢,那么学习进程会缓慢。如果初始学习速率太低,那么学习可能会卡在一个相当高的损失值。通常,就总训练时间和最终损失值而言,最优初始学习速率会高于大约迭代100步后输出最好效果的学习速率。因此,通常最好是检测最早的几轮迭代,使用一个高于此时效果最佳学习速率的学习速率,但又不能太高以致严重的不稳定性。在文献2 3中对随机梯度下降有更详细的分析.
mini-batch size
- Small data set( size < 2000 ) : use batch gradient descent
- Typical mini-batch size : 64, 128, 256, … ( 2n better )
- Make sure mini-batch size fits in CPU/GPU memory
- Search for the much better number about the hyper parameter
Some algorithms faster than gradient descent
Exponentially weighted averages
Original data :
θt
Vt=αVt+1+(1−α)θt
Means
Vt≈11−α∑i=t−11−αtθi
Much better Computarion and memory efficiency, but the effect of the ordinary average is better.
Bias Correction
To correct the preceding value on the warmed up,
Vt=Vt1−αt
Gradient descent with momentum
On iteration t :
Compute
dw,db
on batch(minibatch)
Vdw=αVdw+(1−α)dww=w−αVdw
Decrease the wave, speed up toward the optimal( could use larger learning rate )
RMSprop
RMSprop(root mean square )
On iteration t :
Compute
dw,db
on batch(mini-batch)
Sdw=αSdw+(1−α)(dw)2w=w−αSdwSdw−−−√
the effect same as momentum
Avoid dividing by 0
Adam
Adam means adaptive moment estimation
Combine momentum and RMSprop together
On iteration t :
Compute
dw,db
on batch(mini-batch)
Vdw=α1Vdw+(1−α1)dwSdw=α2Sdw+(1−α2)(dw)2Vdw=Vdw1−αt1Sdw=Sdw1−αt2w=w−βVdwSdw+ϵ−−−−−−√
Hyperparameters choice
β:needs to be tuneα1:0.9α2:0.999ϵ:10−8