优化算法

  在深度学习神经网络模型中,通常使用标准的随机梯度下降算法更新参数,学习率代表参数更新幅度的大小,即步长。当学习率最优时,模型的有效容量最大,最终能达到的效果最好。学习率和深度学习任务类型有关,合适的学习率往往需要大量的实验和调参经验。探索学习率最优值时需要注意如下两点:

  学习率不是越小越好。学习率越小,损失函数的变化速度越慢,意味着我们需要花费更长的时间进行收敛

  学习率不是越大越好。只根据总样本集中的一个批次计算梯度,抽样误差会导致计算出的梯度不是全局最优的方向,且存在波动。在接近最优解时,过大的学习率会导致参数在最优解附近震荡,损失难以收敛

  当前已经形成了四种比较成熟的优化算法:SGD、Momentum、AdaGrad和Adam

    SGD: 随机梯度下降算法,每次训练少量数据,抽样偏差导致的参数收敛过程中震荡。

    Momentum: 引入物理“动量”的概念,累积速度,减少震荡,使参数更新的方向更稳定

    AdaGrad: 根据不同参数距离最优解的远近,动态调整学习率。学习率逐渐下降,依据各参数变化大小调整学习率。

    Adam: 由于动量和自适应学习率两个优化思路是正交的,因此可以将两个思路结合起来,这是当前广泛应用的算法。

  在我们训练神经网络的时候,训练参数初始值不同也会导致模型收敛速度和最终训练效果的不同。

  在PaddlePaddle框架中,MNIST模型中用到的Conv2DLinear层都有weight_attrbias_attr两个参数,默认为None,表示使用默认的权重参数属性。

  paddle.ParamAttr可创建一个参数属性的对象,用户可设置参数的名称name、初始化方式initializer、学习率learning_rate、正则化规则regularizer、是否需要训练trainable、梯度裁剪方式need_clip、是否做模型平均do_model_average等属性。其参数初始化方式initializer默认值为None,表示权重参数采用Xavier初始化方式,偏置参数采用全0初始化方式。Xavier初始化方式可以缓解梯度消失的问题。

  在我们的实际应用中,由于训练数据有限、数据获取较难、训练资源有限等原因,往往利用在大规模开源数据集上训练得到的模型参数作为我们自己模型的初始值(也称为预训练模型),这样可以加速网络训练、并得到较高精度。

posted @ 2023-11-01 23:27  花都八达鸟  阅读(83)  评论(0)    收藏  举报