Adagrad
将优化算法的框架搬来. 首先定义符号. 为待优化参数, 为目标函数, 为初始学习率.
在每步中:
计算目标函数关于当前参数的梯度:
根据历史梯度计算一阶动量和二阶动量: ;
计算当前时刻的下降梯度:
根据下降梯度更新参数:
Adagrad
从Adagrad开始, 将自适应学习率引入到优化算法中. 自适应学习率指的是对于网络中的每个参数, 其学习率都是不同的, 而且是自动调整适应的. 这对于网络的优化是很有帮助的. 神经网络中的参数很多, 且角色不同. 对于经常更新的参数, 我们已经积累了大量关于它的知识, 不希望被单个样本影响太大, 希望学习速率慢一些; 对于偶尔更新的参数, 我们了解的信息太少, 希望能从每个偶然出现的样本身上多学一些, 即学习速率大一些.
这样自适应学习率与就与参数的历史更新频率联系在了一起. 怎样去衡量更新频率, 使用二阶动量, 即该参数迄今为止所有梯度的平方和:
二阶动量是在框架的第三部引入的:
上式相当于学习率由变成了. 为了避免分母为0, 一般会在分母上加上一个小的平滑项.
可以看到, 参数更新的幅度越大, 即参数更新的越频繁, 二阶动量就越大, 学习率就越低, 实现了对不同表现的参数的差异化学习.
优点
当梯度更新较大时, 能够约束梯度; 更新较小时, 能够放大梯度, 加快收敛
对于稀疏数据处理较好
问题
是单调递增的, 会使得学习率逐渐递减至0, 可能会导致训练的提前结束
仍需要设置全局的学习率
最后更新于