深度学习的训练方法可参见我之前的文章深度学习的训练,以下则是调参的手法及典型值。
两类需要调参的参数(parameters)
- 优化类的参数:学习率(learning rates)、mini batch、训练代数(epochs)
- 模型类的参数:隐含层数(hidden layers)、模型结构的参数(如RNN)
优化类的参数
一、学习率 Learning Rate
一个好的起点是从0.01尝试起 可选的几个常用值:
- 0.01
- 0.001
- 0.0001
- 0.00001
- 0.000001
判断依据:验证集的误差(validation error)
常用策略:
- 学习率衰减(learning rate)
- 如果选用了Adam和Adagrad的作为优化器(optimizer),则他们自带了可自适应的学习率(adaptive learning rate)
二、Mini Batch
可选的常用值:1,2,4,8,16,【32】,64,128,256
推荐32比较常用。32、64、128、256都比较合适
256比较大,一次性计算的多,速度会快,但因为矩阵计算量较大,内存可能超过
小的mini batch size可能因为收敛的抖动比较厉害反而不容易卡在局部最低点 但是mini batch也不能太大,反而准确率下降。
三、Training Iterations/Epochs
要选择合适的Epochs,就可以用early stopping的方法:
- 具体就是观察validation error上升时就early stop,但是别一看到上升就停,再观察一下,因为有可能只是暂时的现象,这时候停止反而训练会不充分
模型类的参数
一、隐含层单元数Hidden Units
- 解决的问题的模型越复杂则用越多hidden units,但是要适度,因为太大的模型会导致过拟合
- 可以增加Hidden Units数量直到validation error变差
- 通常来说3层的隐含层比2层的好,但是4,5,6层再深就没什么明显效果了 ,一个例外情况是CNN
二、RNN的调参
- 选择CELL类型,常用LSTM和GRU
- stack多少个layer,通常两层
- 用作RNN模型前端的word embedding层的embedding数量控制在 50-200之间