原文发表于:2019-11-26
简介
- 深度学习模型的效果优化离不开优化器,本节主要介绍TensorFlow中常见的优化器和应用。
FTRL
FTRL(Follow the Regularized Leader)是一种用于稀疏数据的优化算法,它通过对每个特征的学习率进行自适应调整,以提高模型的性能和收敛速度。FTRL优化器的参数包括学习率(learning rate)、L1正则化项(L1 regularization)、L2正则化项(L2 regularization)等。
在设置FTRL优化器的参数时,没有固定的规则,需要根据具体任务和数据集的特点进行调整。以下是一些通用的参数设置技巧:
-
学习率:学习率决定了参数更新的步长。较大的学习率可以加速收敛,但可能导致不稳定或错过最优解。较小的学习率则可能收敛较慢,但更稳定。初始学习率可以通过试验不同的值来确定,例如从一个相对较大的值开始,然后逐渐减小。
-
L1正则化项:L1正则化项用于控制模型的稀疏性,即促使不重要的特征权重变为零。较大的L1正则化强度会增加模型的稀疏性,但可能会导致一些重要特征被过度惩罚。可以通过试验不同的L1正则化强度来找到合适的值。
-
L2正则化项:L2正则化项用于防止过拟合,它对模型的复杂度进行惩罚。较大的L2正则化强度会使模型更加平滑,但可能会影响模型的灵活性。同样,可以通过试验不同的L2正则化强度来找到合适的值。
此外,还可以考虑使用自适应学习率方法,如Adagrad、Adadelta或RMSProp,这些方法可以根据梯度的历史信息自动调整学习率,进一步提高优化性能。
需要注意的是,参数调整是一个迭代的过程,需要根据模型的性能和训练集、测试集的结果进行评估和调整。可以使用交叉验证等技术来选择最优的参数组合。
SGD
SGD全称Stochastic Gradient Descent,随机梯度下降,1847年提出。每次选择一个mini-batch,而不是全部样本,使用梯度下降来更新模型参数。它解决了随机小批量样本的问题,但仍然有自适应学习率、容易卡在梯度较小点等问题。
SGDM
SGDM即为SGD with momentum,它加入了动量机制,1986年提出。
Adagrad
它利用迭代次数和累积梯度,对学习率进行自动衰减,2011年提出。从而使得刚开始迭代时,学习率较大,可以快速收敛。而后来则逐渐减小,精调参数,使得模型可以稳定找到最优点。
在 AdaGrad 算法中,梯度的更新公式如下:
对于参数 $\theta$ ,其梯度更新公式为:
其中:
- $\theta_{t + 1, i}$ 表示在第 $t + 1$ 次迭代时的第 $i$ 个参数
-
$\theta_{t,i}$ 表示在第 $t$ 次迭代时的第 $i$ 个参数
-
$\eta$ 是学习率
-
$g_{t,i}$ 是第 $t$ 次迭代时第 $i$ 个参数的梯度
-
$G_{t}$ 是一个对角矩阵,其中每个对角元素 $G_{t,ii}$ 是从开始到第 $t$ 步的梯度平方和,即 $G_{t,ii} = \sum_{k = 1}^{t}g_{k,i}^{2}$
-
$\epsilon$ 是一个很小的常数,是为了防止分母为 0,一般取值为 $1e^{-8}$ 等较小的值
AdaGrad优化器的优点包括:
-
自适应学习率:AdaGrad能够根据参数的历史梯度信息自动调整学习率。对于频繁出现的特征,学习率会逐渐降低,以避免过度调整;而对于稀疏特征,学习率会相对较大,有助于更快地学习这些特征。
-
对稀疏数据友好:在处理稀疏数据时,AdaGrad能够更好地处理不同特征的重要性,因为它可以根据特征的出现频率来调整学习率。
-
易于实现:AdaGrad的算法相对简单,易于实现和理解。
然而,AdaGrad优化器也存在一些缺点:
-
学习率衰减过快:由于AdaGrad会累积梯度的平方,随着训练的进行,学习率会迅速衰减,可能导致训练提前停止,尤其是在训练后期,模型可能无法收敛到最优解。
-
对非平稳目标函数效果不佳:如果目标函数的性质在训练过程中发生变化,AdaGrad可能无法快速适应这种变化,因为它的学习率调整是基于历史梯度信息的。
-
可能导致梯度消失:在某些情况下,AdaGrad的学习率可能会变得非常小,导致梯度消失,模型无法继续学习。
总的来说,AdaGrad优化器在某些情况下表现出色,但在处理复杂问题时可能需要结合其他优化器或调整策略来使用。
DC-ASGD
《Asynchronous Stochastic Gradient Descent with Delay Compensation》总结
-
研究背景:
- 随着深度学习的发展,使用大规模训练数据学习大型神经网络变得常见,异步随机梯度下降(ASGD)被广泛用于并行训练,但存在延迟梯度问题,即局部工作者添加的梯度可能基于过时的全局模型,导致训练轨迹不稳定,收敛速度慢,且模型精度可能不如顺序SGD。
-
问题设置:
- 介绍了深度神经网络(DNN)及其通过ASGD进行的并行训练,ASGD效率高但存在梯度延迟问题,具体表现为在添加梯度时,全局模型可能已被其他工作者更新,导致添加的梯度与当前全局模型不匹配。
-
延迟补偿方法:
-
梯度分解与泰勒展开:通过泰勒展开将梯度函数g(wt +τ)在wt处展开,发现ASGD使用的是零阶近似,忽略了高阶项,而使用泰勒展开的更多项可以更准确地逼近正确梯度。
-
黑塞矩阵近似:计算黑塞矩阵成本高,通过证明梯度的外积是黑塞矩阵的渐近无偏估计,并引入权重进行优化,同时采用对角化技巧减少存储,得到了黑塞矩阵的廉价近似器Diag(λG(w))。
-
-
算法描述:
- 提出Delay - Compensated ASGD(DC - ASGD)算法,使用Diag(λG(w))来补偿梯度延迟,更新规则为,该算法在参数服务器框架下实现,与ASGD相比,DC - ASGD在局部工作者上没有额外通信成本和计算要求,在参数服务器上的额外计算开销较小,且空间需求增加不大。
-
收敛性分析:
- 给出了非凸情况的收敛性结果,假设损失函数平滑且非凸,引入一些记号简化表达,DC - ASGD的收敛速度与ASGD相同,但对延迟的容忍性更好,可行范围为,当且时,DC - ASGD优于ASGD,实际上ASGD是DC - ASGD的极端情况()。
-
实验结果:
- 在CIFAR - 10和ImageNet数据集上评估DC - ASGD,有两个版本的实现(DC - ASGD - c和DC - ASGD - a),与ASGD和SSGD相比,DC - ASGD性能显著更好,能赶上顺序SGD,在分类精度和收敛速度上取得了很好的平衡,验证了延迟补偿技术的有效性。
-
结论:
- 本文提出了DC - ASGD算法来解决ASGD中的延迟梯度问题,实验结果表明它比同步SGD和异步SGD更准确,接近顺序SGD的性能,未来计划在更大的计算机集群上测试,并研究泰勒展开中高阶项的经济近似以实现更有效的延迟补偿。
RMSProp
它与Adagrad基本类似,只是加入了迭代衰减
RMSProp(Root Mean Square Propagation)算法中参数的更新公式如下:
首先,计算梯度的平方的指数加权移动平均:
其中,是在第步时梯度平方的指数加权移动平均值,是衰减率(一般取值左右),是第步的梯度
参数的更新公式为:
其中,是第步的参数,是更新后的参数,是学习率,是一个很小的常数(如),用于数值稳定性,防止分母为。
Adam
Adam是SGDM和RMSProp的结合,它基本解决了之前提到的梯度下降的一系列问题,比如随机小样本、自适应学习率、容易卡在梯度较小点等问题,2015年提出。
如何选择优化器
五大优化器其实分为两类,SGD、SGDM,和Adagrad、RMSProp、Adam。使用比较多的是SGDM和Adam。
AdaGrad | RMSProp | Adam |
---|---|---|
参考
- http://blog.csdn.net/xierhacker/article/details/53174558