深度学习优化算法大全系列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等算法,并没有针对上述超参数进行优化。而2010年Duchi et.al 则推出AdaGrad,自适应来调整学习率。

2.算法流程

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

算法步骤:
初始化梯度历史累积 r = 0 r=0 r=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 = ▽ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) g = \bigtriangledown_\theta \sum_i L(f(x^{(i)}; \theta), y^{(i)}) g=θiL(f(x(i);θ),y(i))
3.累积历史梯度的平方和: r = r + g ⊙ g r = r + g \odot g r=r+gg
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,有可能会导致训练提前结束,也有可能导致后面的数据无法学习到有用的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值