学习率在神经网络训练中可以说是最重要也是最难调的超参数,下面结合博文(https://blog.csdn.net/hacker_long/article/details/85054085)总结caffe中常见的学习率改变策略。
变化策略
caffe框架中的策略包括:fixed,step,exp,inv,multistep,poly,sigmoid。
- fixed:
即学习率固定,这个是最简单的学习率变化策略(不变),配置文件中只需要一个参数,实际中用得比较少,原因是:为了避免跳过全局最优,当参数状态越来越逼近全局最优点时,我们应该降低学习率。
lr_policy: "fixed"
base_lr: 0.01
- step:
在迭代固定的次数之后以一定的比例降低学习率,这个策略很常用,是一种离散的学习率变化策略简单且非常优秀。
lr_policy: "step"
base_lr: 0.01
stepsize: 10000
gamma: 0.1
- multistep:
在迭代预设的不同次数后以一定的比例降低学习率,这个策略也很常用,也是一种离散的学习率变化策略简单且非常优秀,与step不同的是学习率发生改变的迭代次数不均匀。
lr_policy: "multistep"
gamma: 0.5
stepvalue: 10000
stepvalue: 30000
stepvalue: 60000
-
exp:
表达式为:new_lr = base_lr * (gamma^iter),它符合指数函数的变化规律,是一种连续的学习率变化策略
这种策略的学习率衰减非常快,gamma越大学习率衰减越慢,在caffe中以iter为指数而iter通常非常大,所以学习率衰减仍然非常快。
exp变化策略中学习率随迭代次数变化曲线 -
inv:
表达式为:new_lr = base_lr * (1 + gamma * iter)^(-power),从表达式可看出,inv中参数gamma控制曲线的下降速率,而参数power控制曲线在饱和状态下学习率达到的最低值。
inv变化策略中学习率随迭代次数变化曲线 -
poly:
表达式为:new_lr = base_lr * (1 - iter / maxiter)^power,从表达式可以看出学习率曲线主要由power值控制。当power = 1时,学习率曲线为一条直线。当power < 1时,学习率曲线为凸状。当power > 1时,学习率曲线为凹状
poly变化策略中学习率随迭代次数变化曲线 -
sigmoid:
表达式为:new_lr = base_lr * (1 / (1 + exp(-gamma * (iter - stepsize)))),其中,参数gamma控制学习率变化速率,gamma < 0时学习率才会下降,但是caffe中不支持。
poly变化策略中学习率随迭代次数变化曲线
各策略的表现
下图为各学习策略下学习率随迭代次数变化曲线(caffe中type = sigmoid不能进行学习率下降,所以不做对比)
在训练数据集大小9000,batchsize=64,可知10000次迭代时,epoch=64*10000/9000>70,在该学习率下应该已经充分训练了,实验结果如下(文中开头博主做的实验)。
总结
- step、multistep两个方法的收敛效果最好,虽然他们最离散但并不影响收敛结果
- 其次是exp、poly,这两个策略能取得和step、multistep相当的结果,但不见得比他们优秀
- inv、fixed的收敛效果最差