自适应学习速率?

来源:互联网 发布:淘宝快速抢到现货经验 编辑:程序博客网 时间:2024/05/16 04:31

前言

在监督学习中,我们都或多或少的意识到学习速率η是一个对模型相当重要的参数。η太大收敛快,但是也可能导致算法在最优值附近徘徊而无法收敛。η太小,参数更新及其缓慢,收敛也相应的十分缓慢。更重要的是,学习速率“太大”和“太小”完全是由经验判断的。在某些模型下η105就算小了,但是在其他模型下η取这个值可能就很大。

那么有木有方法,能够让学习速率也可以自适应的调整?

我们知道,超参数是不能通过某个模型自身的学习算法来进行优化的。例如,在多项式回归中,使用普通的范数L2作为损失函数,利用梯度下降进行算法训练。其中多项式的次数是一个超参数,如果使用模型本身去调节这个超参数的,那么模型很倾向于让多项式次数变得相当大,因为这么做可以让误差带来显著的减低,然而这却很容易出现过拟合现象。

故而,对于超参数的训练,我们一般会设计另外一个训练算法而不使用原训练模型,学习速率也是一样。

本文,介绍最近几种吊炸天、鲁棒性比较强的自适应学习速率调整算法。

AdaGrad

Adaptive Gradient

基本原理

这个算法出于的考虑是,如果某个参数的梯度的改变较大就会有一个较小的学习速率,梯度改变较大就有一个较小的学习速率。

伪代码

输入:
全局学习速率η,模型的初始参数θ(代指所有的模型参数),参数δ,一般δ设置为107这种数量级。
流程:
初始化梯度累计变量r=0
While 算法没有停止 do

从训练集选择某个包含m个样本的batch.
计算这个batch的梯度:g=θL,其中L是模型的损失函数
计算累计平方梯度:ri=ri+gigi, 其中 xy定义为计算 x,y的内积,rii,gii
计算更新: θi=ηδ+rigi
更新参数:θ=θ+θ

end While

缺陷

太过于重视历史梯度,导致学习速率过早的猛增或猛减。

RMSProp

RMSProp算法是由大佬Hinton提出来的,经验上该算法是一种有效且特别实用的自适应算法。与AdaGrad相比,它最大的不同就是引入参数ρ来调节历史梯度,免得历史梯度太大。

伪代码

这里写图片描述

原创粉丝点击