您的位置:首页 > 其它

深度学习中的batch size 以及learning rate参数理解

2017-05-26 19:44 591 查看

batch size 参数

https://www.zhihu.com/question/32673260

在合理范围内,增大 Batch_Size 有何好处?

内存利用率提高了,大矩阵乘法的并行化效率提高

跑完一次epoch(全数据集)所需要的迭代次数减小,对于相同数据量的处理速度进一步加快

在一定范围内,一般来说batch size越大,其确定的下降方向越准,引起的训练震荡越小

盲目增大batch size 有什么坏处

内存利用率提高了,但是内存容量可能撑不住了

跑完一次epoch(全数据集)所需要的迭代次数减少,但是想要达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢

batch size 大到一定的程度,其确定的下降方向已经基本不再变化

fine tuning

http://bealin.github.io/2016/10/23/Caffe%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97%E2%80%94%E2%80%943Fine-tuning%E5%BE%AE%E8%B0%83%E7%BD%91%E7%BB%9C/

fine tuning 流程

准备数据集(包括训练数据和测试数据)

计算数据集的均值文件,因为某个特定领域的图像均值文件会跟ImageNet上的数据均值不太一样

修改网络最后一层的输出类别数,以及最后一层网络的名称,加大最后一层的参数学习速率

调整solver的配置参数

加载预训练模型的参数,启动训练

fine tuning 参数调整

一般fine tuning的方式,都是把learning rate(solver.prototxt)调低(为原来的十分之一),之后把训练模型的最后一层或者两层的学习速率调大一点————这就相当于,把模型的前面那些层的学习调低,使得参数更新的慢一点以达到微调的目的。但有可能会导致整个收敛速度变慢,因此还需要增加最大迭代次数。

需要调节的参数(solver.prototxt)主要包括:

base_lr:初始学习率,这个是非常重要的一个参数;momentum:一般设置为0.9,如果base_lr特别低的话也可以设置为0.99或0.999等 weight_decay:默认0.005,可以适当调整,类似于正则化项;

lr_policy:学习率变化策略,常见的有fixed(固定), inv,step等,详细的说明见http://stackoverflow.com/questions/30033096/what-is-lr-policy-in-caffe

最后如果loss出现不收敛的情况,可以尝试一下以下几种方法:

调小solver里的初始学习率

数据量小的话,可以只对最后几层的权重进行调整,前面权重保持不变,即把前面的学习率置为0,一定程度上限制了激活的大小,这样就限制了某一过大的误差的影响,这样可以避免迭代方向出现过大的变化。

在GPU可承受的范围内调大batch_size的大小(贾扬清的解释:理论上batch小是不会影响收敛的。小batch主要的问题是在FC层的计算可能会不是很efficient,如果实在无计可施,可以试试 ;网上其他博主的解释:batch比较小 ,导致样本覆盖面过低,产生了非常多的局部极小点,在步长和方向的共同作用下,导致数据产生了震荡,导致了不收敛 )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐