AdaGrad
详细
梯度下降算法以及动量方法都有一个共同点,即对于每一个参数都用相同的学习率(步长)进行更新。但是在实际应用中,各参数的重要性肯定是不同的,所以对于不同的参数要进行动态调整,采取不同的学习率,让目标函数能够更快地收敛。
AdaGrad:将每一个参数的每一次迭代的梯度取平方,然后累加并开方得到 r,最后用全局学习率除以 r,作为学习率的动态更新。
α是全局学习率,r是累计梯度量,初始值为0,g表示当前迭代的梯度值。从 AdaGrad 算法的计算过程中可以看出,随着不断地迭代,r 的值会越来越大(梯度的平方为正值),那么在每一轮迭代中学习率会越来越小,也就是说当前位置的梯度对参数的影响也越来越小。简单地讲,AdaGrad 算法在初始时鼓励收敛,随着迭代的深入慢慢变成惩罚收敛,速度也越来越慢。
- 优点:学习率将随着梯度的倒数增长,也就是说较大梯度具有较小的学习率,而较小的梯度具有较大的学习率,可以解决普通的sgd方法中学习率一直不变的问题
- 缺点:还是需要自己手动指定初始学习率,而且由于分母中对历史梯度一直累加,学习率将逐渐下降至0,并且如果初始梯度很大的话,会导致整个训练过程的学习率一直很小,从而导致学习时间变长。
AdaDelta
详细
主要是为了解决AdaGrad中存在的问题
改进方法1:
- 在一个窗口w中对梯度进行求和,而不是对梯度一直累加
- 因为存放 w 之前的梯度是低效的,所以可以用对先前所有梯度均值(使用RMS即均方根值实现)的一个指数衰减作为代替的实现方法。
将累计梯度信息从全部历史梯度变为当前时间向前的一个窗口期内的累积:
相当于历史梯度信息的累计乘上一个衰减系数ρ,然后用(1−ρ)作为当前梯度的平方加权系数相加。
改进方法2:
通过牛顿法可以知道,牛顿法迭代步长是f''(x),二阶牛顿迭代公式为(求最小值):
可以看出牛顿算法的迭代步长是二阶近似的解析解,不需要我们手动指定学习率。
RMSProp
详细
RMSProp和AdaDelta类似,关键是否用替换超参数学习率
网友评论