关于神经网络的调参经验技巧和调参顺序


前言

一、模型方面基本上都做得非常好了,因此真正需要调的参数其实并不多了,或者说调很多参数实际带来的提升都非常小了。

二、在训练一个深度学习模型的过程中,超参数选择什么最优,这是一个基于实验和经验的过程。需要不停的尝试,直到找到合适的参数值。 调参就是trial-and-error,没有其他捷径可以走,唯一的区别是有些人盲目的尝试, 有些人思考后再尝试.。快速尝试, 快速纠错这是调参的关键。

一、写在前面

超参数和参数区分

超参数:如学习率α、网络层数、每层隐藏单元数、学习率衰减值、mini-batch等需要人工选取的参数。

参数:这里所指的参数另外一种说法就是权重,需要被训练的参数。比如: W ∗ X + b W*X+b WX+b ,这里W、b就是参数。

超参数选取尺度的考虑

每一种超参数考虑的尺度是不一样的。比如隐藏层数、隐藏层单元数肯定是以线性尺度进行搜索。而如果是学习率α,就需要取对数了,因为学习率有可能从0.00001到0.1之间,因此选用对数搜索尺度更加合理。

二、调参顺序

1.learning rate

学习速率是最为重要的超参数

初始学习率很重要,学习率的变化策略也很重要。
参数更新时的学习率选择,需要根据尝试不同的学习率来确定。
可以画出损失函数随迭代次数的收敛图,选取学习率能使得代价函数收敛到最低的位置。

一个好的起点是从0.01尝试起
可选的几个常用值:

  • 0.01
  • 0.001
  • 0.0001
  • 0.00001
  • 0.000001

判断依据就是是验证集的误差(validation error)

2.batch size

当我们使用的梯度下降是建立在batch gradient decent基础之上时,合适的batch size对模型的优化是比较重要的。

  1. 这个参数倒不需要微调,在一个大致数量即可,常取 2 n 2^n 2n(GPU对2的幂次的batch可以发挥更佳的性能)。
  2. 但是太大的batch size会受GPU显存的限制,并且无限接近full batch的行为,速度会慢,所以不能无限增大; 也不能太小,太小了以后可能算法永远不会收敛。

一般情况下,可选的常用值:1,2,4,8,16,32,64,128,256

3.其他参数

3.1Hidden Units(隐含层单元数)

解决的问题的模型越复杂则用越多hidden units,但是要适度,因为太大的模型会导致过拟合。

通常来说3层的隐含层比2层的好,但是继续再深到4,5,6层……就没什么明显效果了(一个例外情况是CNN)

3.2epoch

应该要和模型表现搭配。如果模型已经过拟合了,就没必要继续跑了;相反,如果epoch太小,你epoch跑完了,模型的loss还在下降,模型还在优化,那么这个epoch就太小了,应该增加。

如果不想手动设置epoch数量,我们可以使用Early Stopping

3.3L1、L2

我们可以用可以用L1、L2等惩罚项的方法来防止过度拟合,所以调整正则化的参数可以根据模型表现来,过拟合的时候可以适当加大系数,非过拟合的时候可不调这个参数,毕竟跑一次模型得花不少时间。

3.4droupout

随机失活率一般设置为0.5。对越大越复杂的隐藏层,意味着过度拟合的可能性越大,所以失活率设置越高。

需要注意的是,除非算法过拟合,不然最好不需要用droupout等方法

3.5神经元层数,每层神经元个数

不应该因为害怕出现过拟合而使用小网络。相反,应该进尽可能使用大网络,然后使用正则化技巧来控制过拟合。

三、一句总结

调参可以说是一种无奈,理论认识很深的时候,参数就是so easy,所以还是要把大部分的精力放在认识水平的提高上

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值