梯度下降法优化

梯度下降优化

为何要优化

梯度下降是求每个点的梯度,然后从该点减去一个极小量,去进行梯度下降

但计算机是无法计算极小量的,所以必须有一个确定的步长,即学习率

根据一定步长来下山肯定会与最优的梯度下降路径有所偏差,那么如何去减小这个偏差就为梯度下降的优化带来了可能性。

批量梯度下降法(Batch Gradient Descent)

批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。

这样需要把所有数据都计算一遍才能走一步,而且可能使损失函数陷入局部最小

$\theta_i = \theta_i - \alpha\sum\limits_{j=1}^{m}(h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)}) - y_j)x_i^{(j)}$

随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。

$\theta_i = \theta_i - \alpha (h_\theta(x_0^{(j)}, x_1^{(j)}, ...x_n^{(j)}) - y_j)x_i^{(j)}$

随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快

SGD具有很强的波动性

  • 一方面,波动性使得SGD可以跳到新的和潜在更好的局部最优
  • 另一方面,这使得最终收敛到特定最小值的过程变得复杂,因为SGD会一直持续波动,难以收敛

小批量梯度下降法(Mini-batch Gradient Descent)

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,采用x个子样本来迭代

减少参数更新的方差,这样可以得到更加稳定的收敛结果

动量法 Momentum

上述的梯度下降法还是有一定的缺陷,例如在横轴方向上一直向前,但在纵轴方向上上下波动,此时可以依据历史数据去修正纵轴上的分量。

引入变量$v$充当速度的角色,代表参数在参数空间移动的方向和速度(假设参数为单位质量,则其可看作参数的动量),即可解决这一震荡问题,加快收敛

指数加权移动平均法 Exponentially Weighted Moving Average (EWMA)

$V_{(t)}=\beta V_{(t-1)}+(1-\beta) \nabla W_{(t)i}$

这是一个递推关系式,因为$\beta<0$,那么离当前点越远的历史数据权重越小

参数更新$W_{(t)i}=W_{(t-1)i}-\eta\nabla V_{t}$

可以理解为以前的更新有一定的惯性(物理里的动量),本次更新需要将这一部分抵消

Nesterov

Nesterov accelerated gradient(NAG)

不仅增加了动量项,并且在计算梯度时,使用了根据动量项预先估计的参数,在Momentum的基础上进一步加快收敛,提高响应性

AdaGrad

依据历史数据自适应学习率

适合稀疏数据(特征较少,信息不充足)

Adam

 

 

 

未完待续。。。

posted @ 2021-10-22 11:04  梦想家肾小球  阅读(150)  评论(0编辑  收藏  举报