10分钟教你深度学习的调参

linxinzhe 2018-03-20 11:47:00 196

两类需要调参的参数(parameters)

  1. 优化类的参数:学习率(learning rates)、mini batch、训练代数(epochs)
  2. 模型类的参数:隐含层数(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,但是别一看到上升就停,再观察一下,因为有可能只是暂时的现象,这时候停止反而训练会不充分
early stopping

模型类的参数

隐含层单元数Hidden Units

  • 解决的问题的模型越复杂则用越多hidden units,但是要适度,因为太大的模型会导致过拟合
  • 可以增加Hidden Units数量直到validation error变差
  • 通常来说3层的隐含层比2层的好,但是4,5,6层再深就没什么明显效果了
    ,一个例外情况是CNN

RNN的调参

  • RNN内参数
    1. 选择CELL类型,常用LSTM和GRU
    2. stack多少个layer,通常两层
  • 用作RNN模型前端的word embedding层的embedding数量控制在 50-200之间

关于我:

linxinzhe,全栈工程师,目前供职于某世界500强银行的金融科技部门(人工智能,区块链)。

GitHub:https://github.com/linxinzhe

欢迎留言讨论,也欢迎关注我~
我也会关注你的哦!