代码改变世界

模型调参

2018-07-17 18:00  xplorerthik  阅读(501)  评论(0编辑  收藏  举报

1、神经网络调参

由简单到复杂

不同的特征分通道输入,对于某一路特征过拟合的情况下,可以输出前加大dropout的概率,降低它的影响能力(FM的思想)

迭代次数很少验证数据就达到最优,可以考虑增大网络dropout的概率

BN层可以降低模型对初始化的敏感性

  • learning rate: 1 0.1 0.01 0.001, 一般从1开始尝试。很少见learning rate大于10的。学习率一般要随着训练进行衰减。衰减系数一般是0.5。 衰减时机,可以是验证集准确率不再上升时,或固定训练多少个周期以后。 
    不过更建议使用自适应梯度的办法,例如adam,adadelta,rmsprop等,这些一般使用相关论文提供的默认值即可,可以避免再费劲调节学习率。对RNN来说,有个经验,如果RNN要处理的序列比较长,或者RNN层数比较多,那么learning rate一般小一些比较好,否则有可能出现结果不收敛,甚至Nan等问题。

  • 网络层数: 先从1层开始。

  • 每层结点数: 16 32 128,超过1000的情况比较少见。超过1W的从来没有见过。

  • batch size: 128上下开始。batch size值增加,的确能提高训练速度。但是有可能收敛结果变差。如果显存大小允许,可以考虑从一个比较大的值开始尝试。因为batch size太大,一般不会对结果有太大的影响,而batch size太小的话,结果有可能很差。

  • clip c(梯度裁剪): 限制最大梯度,其实是value = sqrt(w1^2+w2^2….),如果value超过了阈值,就算一个衰减系系数,让value的值等于阈值: 5,10,15

  • dropout: 0.5

  • L2正则:1.0,超过10的很少见。

  • 词向量embedding大小:128,256

  • 正负样本比例: 这个是非常忽视,但是在很多分类问题上,又非常重要的参数。很多人往往习惯使用训练数据中默认的正负类别比例,当训练数据非常不平衡的时候,模型很有可能会偏向数目较大的类别,从而影响最终训练结果。除了尝试训练数据默认的正负类别比例之外,建议对数目较小的样本做过采样,例如进行复制。提高他们的比例,看看效果如何,这个对多分类问题同样适用。 
    在使用mini-batch方法进行训练的时候,尽量让一个batch内,各类别的比例平衡,这个在图像识别等多分类任务上非常重要。

     

2、样本数量估计

从模型的角度考虑:至少为vc维的10倍

从数据的角度考虑:不太好确定