200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 深度学习优化算法大全系列4:AdaGrad(Adaptive Gradient)

深度学习优化算法大全系列4:AdaGrad(Adaptive Gradient)

时间:2020-10-18 11:17:18

相关推荐

深度学习优化算法大全系列4:AdaGrad(Adaptive Gradient)

1.参数调整

之前提到的SGD-Momentum(动量), NAG等算法,都是针对梯度的方向做相关优化,而且使用的都是一阶动量。而神经网络有许多超参数(Hyper-Parameter),这些超参数的选择也是模型选择调优的一项重要工作,因此很多算法工程师也自己戏谑为"调参工程师"或者"调包侠",就可以看出参数的重要性。

在经典的梯度下降中,不同的变量,采用的是一个全局的学习率。但是实际情况中,不同的变量对于目标函数的依赖不同。举个简单的例子,对于有些参数,因为特征出现次数多属于稠密特征,可能在训练开始不就以后就收敛达到极值。但是对于有些参数来说,可能需要训练很长时间才能达到收敛,因此不同的参数其实需要不同的学习率。

神经网络中的超参数主要有以下几种:

1.学习率(Learning Rate)

2.初始权重(Weight Initialization)

3.网络层数(Layers)

4.神经元数量(Units)

5.正则化参数(Regularizer|Normalization)

SGD-M, NAG等算法,并没有针对上述超参数进行优化。而Duchi et.al 则推出AdaGrad,自适应来调整学习率。

2.算法流程

假定初始参数为θ\thetaθ, 初始全局学习率ϵ\epsilonϵ,小常数δ\deltaδ主要为了数值计算稳定,一般可以取10−710^{-7}10−7

算法步骤:

初始化梯度历史累积r=0r=0r=0

如果不满足终止条件,如下步骤循环:

1.从训练集中采样m个样本x(1)x^{(1)}x(1), x(2)x^{(2)}x(2)…, x(m)x^{(m)}x(m),对应的标签为y(i)y^{(i)}y(i)。

2.计算当前梯度:g=▽θ∑iL(f(x(i);θ),y(i))g = \bigtriangledown_\theta \sum_i L(f(x^{(i)}; \theta), y^{(i)})g=▽θ​∑i​L(f(x(i);θ),y(i))

3.累积历史梯度的平方和: r=r+g⊙gr = r + g \odot gr=r+g⊙g

4.计算梯度更新:Δθ=ϵδ+r⊙g\Delta \theta = \frac {\epsilon}{\delta + \sqrt r} \odot gΔθ=δ+r​ϵ​⊙g

5.更新参数:θ=θ−Δθ\theta = \theta - \Delta \thetaθ=θ−Δθ

3.算法特点

算法流程中,核心是第3,4步。第三步是计算梯度的历史累积平方法,第四步是对参数的学习率进行一个自适应的调整。根据上面的公式不难看出AdaGrad有如下特点:

1.刚开始训练阶段,梯度累积量较小,此时学习率比较大,收敛速度较快。

2.训练后期,梯度积累量较大,此时学习率减小,收敛速度较慢。

3.之前我们提到的SGD-Momentum, NAG等算法,都使用的是一阶动量。而 AdaGrad在累积历史梯度时使用了二阶动量。

4.AdaGrad对稀疏特征比较友好,因为稀疏特征出现频率不高,哪怕是在训练后期,针对系数特征也可以保持一个比较大的学习率。

5.累积动量是单调递增的,学习率会逐渐降低到0,有可能会导致训练提前结束,也有可能导致后面的数据无法学习到有用的内容。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。