θ=θ−η⋅∇θJ(θ)
每迭代一步,都要用到训练集所有的数据。
θ=θ−η⋅∇θJ(θ;x(i);y(i))
通过每个样本来迭代更新一次,以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。
缺点:
θ=θ−η⋅∇θJ(θ;x(i:i+n);y(i:i+n))
为了避免SGD和标准梯度下降中存在的问题,对每个批次中的n个训练样本,这种方法只执行一次更新。
vt=γvt−1+η⋅∇θJ(θ)
θ=θ−vt
在参数更新时,一定程度上保留更新之前的方向。在训练的过程中,参数的更新方向十分依赖当前的batch,因此不稳定。加入momentum后,能够让参数一定程度上按照之前变化方向进行更新,使参数更稳定的更新。
优点:
vt=γvt−1+η⋅∇θJ(θ−γvt−1)
θ=θ−vt
NAG 法则首先(试探性地)在之前积累的梯度方向(棕色向量)前进一大步,再根据当前地情况修正,以得到最终的前进方向(绿色向量)。这种基于预测的更新方法,使我们避免过快地前进,并提高了算法地响应能力,大大改进了 RNN 在一些任务上的表现。
其实,momentum项和nesterov项都是为了使梯度更新更加灵活,对不同情况有针对性。但是,人工设置一些学习率总还是有些生硬。
gt,i=∇θJ(θi)
θt+1,i=θt,i−ηGt,ii+ϵ√⋅gt,i
θt+1=θt−ηGt+ϵ√⊙gt
Adagrad是一个基于梯度的优化算法,它的主要功能是:它对不同的参数调整学习率,具体而言,对低频出现的参数进行大的更新,对高频出现的参数进行小的更新。
优点:
缺点:
E[g2]t=γE[g2]t−1+(1−γ)g2t
Δθt=−ηE[g2]t+ϵ√gt
Δθt=−ηRMS[g]tgt
E[Δθ2]t=γE[Δθ2]t−1+(1−γ)Δθ2t
RMS[Δθ]t=E[Δθ2]t+ϵ−−−−−−−−−√
Δθt=−RMS[Δθ]t−1RMS[g]tgt
θt+1=θt+Δθt
Adadelta法是Adagrad法的一个延伸,它旨在解决它学习率不断单调下降的问题。相比计算之前所有梯度值的平方和,Adadelta 法只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。
优点:
缺点:
E[g2]t=0.9E[g2]t−1+0.1g2t
θt+1=θt−ηE[g2]t+ϵ√gt
RMSprop也将学习率除以了一个指数衰减的衰减均值。
优点:
缺点:
mt=β1mt−1+(1−β1)gt
vt=β2vt−1+(1−β2)g2t
m^t=mt1−βt1
v^t=vt1−βt2
θt+1=θt−ηv^t√+ϵm^t
利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,使学习率在每一次更新的时候都有一个固定范围的步长,让参数更新时保持稳定。
优点:
在构建神经网络模型时,选择出最佳的优化器,以便快速收敛并正确学习,同时调整内部参数,最大程度地最小化损失函数。
算法 | 优点 | 缺点 | 适用情况 |
---|---|---|---|
牛顿法 | 收敛速度快 | 靠近极小值时收敛速度减慢,求解Hessian矩阵的逆矩阵复杂,容易陷入鞍点 | 不适用于高维数据 |
拟牛顿法 | 收敛速度快,不用计算二阶导数,低运算复杂度 | 存储正定矩阵,内存消耗大 | 不适用于高维数据 |
批量梯度下降 | 目标函数为凸函数时,可以找到全局最优值 | 收敛速度慢,需要用到全部数据,内存消耗大 | 不适用于大数据集,不能在线更新模型 |
随机梯度下降 | 避免冗余数据的干扰,收敛速度加快,能够在线学习 | 更新值的方差较大,收敛过程会产生波动,可能落入极小值,选择合适的学习率比较困难 | 适用于需要在线更新的模型,适用于大规模训练样本情况 |
小批量梯度下降 | 降低更新值的方差,收敛较为稳定 | 选择合适的学习率比较困难 | |
Momentum | 能够在相关方向加速SGD,抑制振荡,从而加快收敛 | 需要人工设定学习率 | 适用于有可靠的初始化参数 |
Nesterov | 梯度在大的跳跃后,进行计算对当前梯度进行校正 | 需要人工设定学习率 | |
Adagrad | 不需要对每个学习率手工地调节 | 仍依赖于人工设置一个全局学习率,学习率设置过大,对梯度的调节太大。中后期,梯度接近于0,使得训练提前结束 | 需要快速收敛,训练复杂网络时;适合处理稀疏梯度 |
Adadelta | 不需要预设一个默认学习率,训练初中期,加速效果不错,很快,可以避免参数更新时两边单位不统一的问题。 | 训练后期,反复在局部最小值附近抖动 | 需要快速收敛,训练复杂网络时 |
RMSprop | 解决 Adagrad 激进的学习率缩减问题 | 依然依赖于全局学习率 | 需要快速收敛,训练复杂网络时;适合处理非平稳目标 - 对于RNN效果很好 |
Adam | 对内存需求较小,为不同的参数计算不同的自适应学习率 | 需要快速收敛,训练复杂网络时;善于处理稀疏梯度和处理非平稳目标的优点,也适用于大多非凸优化 - 适用于大数据集和高维空间 |