机器学习中大部分为优化问题,而绝大部分优化问题都可以使用梯度下降法处理。
梯度下降法的数学原理是函数沿着梯度方向具有最大变化率,那么在优化目标函数时沿着负梯度方向去减少函数值,以此达到优化目标。
通过迭代的方式寻找最优参数,最优参数是指是目标函数达到最小值时的参数。
如果目标函数是凸函数,那么梯度下降的解是全局最优解,不过在一般情况下,梯度下降无法保证全局最优。
Q1 随机梯度下降与小批量随机梯度下降
梯度下降法是使用所有样本的平均损失值来更新参数,这样做可以使得下降更准确,但是对应的是如果数据量过大的话会带来极为庞大的计算量,因为每次参数更新都会遍历所有数据。
随机梯度下降(SGD)每次使用单个样本的损失来近似平均损失,但是会导致准确度不高,常常出现偏差,并且导致目标函数收敛不稳定,甚至不收敛。
小批量随机梯度下降就是为了降低随机梯度的方差,使得模型迭代更加非稳定。通过批量训练还有个优点就是利用高度优化的矩阵运算以及并行计算框架。
Q2 动量算法
动量方法有点类似于二阶梯度算法,从形式上来看,动量算法引入了变量v充当速度,以及超参数a,a一般取0.5,0.9,0.99,分别表示2倍,10倍,100倍。
动量算法是为了解决鞍点问题,也可以用于SGD加速,特别是针对高曲率、小幅度但是方向一致的梯度对象。
和物理的近似,一个小球如果没有惯性,从山上落下只要到达平缓地区就会立即停下,然而也有可能是山上的平地,所以动量模型就相当于增加了惯性,离开平缓的梯度部分。
随机梯度下降法每次更新的步长只是梯度乘以学习率;而动量算法的步长还取决于历史梯度序列的大小和排列;当若干连续的梯度方向相同时,步长会被不断增大。
Q3 NAG算法(Nesterov动量)
NAG是对参数施加当前速度后才进行梯度计算的。这个设计使得算法有了对前方环境预判的能力,换句话讲,NAG算法相当于在标准动量方法中添加一个修正因子,并且在计算参数的梯度时,在损失函数中减去了动量项。
Q4 自适应学习率算法
学习率决定了参数空间搜索的步长,所以非常重要。但也比较难设置。
过大的学习率会导致优化方向变得不稳定。过小的学习率会使得模型收敛于局部最优解。因此,学习率的设置对于模型来讲有着很显著的影响。
而自适应学习率算法可以根据训练的进度来自动调节学习率的大小,在刚开始的时候参数的值距离最优解很远,所以采用偏大的学习率。随着参数值越来越逼近最优值,应该使用比较小的学习率。
以下介绍3种重要的自适应率学习算法。
(1) AdaGrad
AdaGrad算法虽然可以自动适应学习率,但还需要设定一个学习率γ,这并不是实际的学习率,而是与以往参数的模的和成反比的,具有损失最大偏导数的参数学习率下降比较快,而具有小偏导数的参数在学习率上下降比较小。
(2) RMSProp
RMSrop算法是AdaGrad算法的升级版,在非凸优化问题上表现很好,因为它使用指数衰减来处理历史信息,可以使得模型在找到凸结构后快速收敛。
RMSProp可以解决AdaGrad在多隐层网络中过早结束训练的缺点,适合处理非平稳的目标,但同时也引入了新的超参数衰减系数,并且依旧依赖于全局学习率。
(3)Adam
Adam(Adaptive Moment Estimation)是非常常见的深度学习训练时使用的优化器、相比于AdaGrad,它能让每次迭代的学习率都处在一定的范围内,因而比较稳定。
优化算法的选择并没有绝对的原则,没有那个算法具有绝对优势,应根据具体任务来选择,事实上在面对具体问题时,可以考虑将Adam和RMSprop都训练一遍,比较差距再选择较好的优化器。
Q5试比较牛顿迭代法与梯度下降法
首先介绍牛顿迭代法的基本思想,在现有极小点的估计值xk 的附近,对f(x)做二阶泰勒展开,从该点的附近找到极值点的下一个估计值。
牛顿迭代算法:
- 给定初值X0和精度阈值β,并令k=0
- 计算gk和Hk
- 若||gk||<β,则停止迭代,否则确定搜索方向dk=-Hk-1×gk
- 计算新的迭代点Xk+1=Xk+dk
- 令k=k+1,转到步骤2)
由上可得梯度下降法与牛顿下降法最大区别是梯度下降法使用的梯度信息是一阶导数,而牛顿法除了使用一阶导数外,还会使用二阶导数的信息。
牛顿法的优点是收敛快,能使用更少的迭代次数找到最优解,缺点是每一步都要求解目标函数的海森矩阵的逆矩阵,计算量非常大。
- 本文链接:https://www.tjzzz.com/posts/8f1cedf9.html
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。