1.随机梯度下降
随机梯度下降(SGD)很可能是一般机器学习中应用最多的优化算法。学习率是SGD中的一个重要的参数,在实践中,有必要随着训练时间的推移逐渐降低;但是在批量梯度下降时,由于整个代价函数会降到0,所以批量梯度下降可以使用固定的学习率。SGD中学习率的选择是与其说是科学不如说是一门艺术。优化效果和收敛率是优化算法两个重要的指标。
2.动量
动量就是累积梯度,速度的概念有方向和大小。作用可以解决hessian矩阵的病态(损失函数为椭圆的情况)。nesterov动量在梯度计算中也加入了速度。在批量梯度下降时,netervo动量可以加速收敛,但是在随机梯度下降中没有改进。
3.自适应算法
学习率对模型性能有着很大的影响。动量算法在一定程度上可以避免参数空间敏感于某些方向的问题,但是会引入另一个参数。
delta-bar-delta:偏导符号相同,学习率增加;偏导符号变化。学习率减小。
AdaGrad:独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方和的平方根。效果就是在参数空间中更为平缓的倾斜方向会取得更大的进步。缺点:从训练开始时积累梯度会导致有效学习率过早和过量的减少。
RMSProp:修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。AdaGrad旨在应用于凸问题时快速收敛。在非凸情况下,梯度的积累使得在最终达到的凸碗时学习率变得特别小。RMSProp使用指数衰减平均以丢弃遥远的历史。
Adam:Adam对于超参数的选择相当鲁棒。动量加入梯度一阶矩估计,加入偏置修正。
4.参数初始化
深度学习的求解受到初始化的影响,原因1它是迭代求解,2问题太复杂。 初始化点可以影响收敛快慢,收敛点代价高低,以及影响泛化能力。
优化角度和泛化角度对初始化参数有着有不同的观点,优化观点建议权重足够大,但是正则化希望其小一点。对于初始化对于泛化的理解,我们知道的唯一特性是需要在不同单元间“破坏对称性”。几种参数初始化方法:https://blog.csdn.net/choose_c/article/details/100633361