随着优化/学习过程的进行,降低学习率(lr)是常见的做法。但是,不清楚学习率应该如何根据迭代次数减少。
如果你使用 DIGITS 作为Caffe的界面,您将能够直观地看到不同的选择如何影响学习率。
的 固定: 强> 在整个学习过程中,学习率保持不变。
的 INV: 强> 学习率下降为〜 1/T
1/T
的 步: 强> 学习速率是分段常数,每X次迭代都会丢失
的 多重步骤: 强> 任意间隔的分段常数
您可以确切地了解如何在函数中计算学习速率 SGDSolver<Dtype>::GetLearningRate ( 解算器/ sgd_solver.cpp 行~30)。
SGDSolver<Dtype>::GetLearningRate
最近,我遇到了一种有趣且非常规的学习速率调整方法: Leslie N. Smith的作品“没有更麻烦的学习率猜测游戏” 。莱斯利在他的报告中建议使用 lr_policy 在减少和减少之间交替 增加 学习率。他的工作还建议如何在Caffe中实施这一政策。
lr_policy
如果你看看里面 /caffe-master/src/caffe/proto/caffe.proto 文件(你可以在网上找到它 这里 )你会看到以下描述:
/caffe-master/src/caffe/proto/caffe.proto
// The learning rate decay policy. The currently implemented learning rate // policies are as follows: // - fixed: always return base_lr. // - step: return base_lr * gamma ^ (floor(iter / step)) // - exp: return base_lr * gamma ^ iter // - inv: return base_lr * (1 + gamma * iter) ^ (- power) // - multistep: similar to step but it allows non uniform steps defined by // stepvalue // - poly: the effective learning rate follows a polynomial decay, to be // zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power) // - sigmoid: the effective learning rate follows a sigmod decay // return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize)))) // // where base_lr, max_iter, gamma, step, stepvalue and power are defined // in the solver parameter protocol buffer, and iter is the current iteration.