DeepFM模型调参

Ref: https://tech.meituan.com/2018/06/07/searchads-dnn.html

影响神经网络的超参数非常多,神经网络调参也是一件非常重要的事情。工业界比较实用的调参方法包括:

  • 网格搜索/Grid Search:这是在机器学习模型调参时最常用到的方法,对每个超参数都敲定几个要尝试的候选值,形成一个网格,把所有超参数网格中的组合遍历一下尝试效果。简单暴力,如果能全部遍历的话,结果比较可靠。但是时间开销比较大,神经网络的场景下一般尝试不了太多的参数组合。
  • 随机搜索/Random Search:Bengio在“Random Search for Hyper-Parameter Optimization”10中指出,Random Search比Grid Search更有效。实际操作的时候,可以先用Grid Search的方法,得到所有候选参数,然后每次从中随机选择进行训练。这种方式的优点是因为采样,时间开销变小,但另一方面,也有可能会错过较优的超参数组合。
  • 分阶段调参:先进行初步范围搜索,然后根据好结果出现的地方,再缩小范围进行更精细的搜索。或者根据经验值固定住其他的超参数,有针对地实验其中一个超参数,逐次迭代直至完成所有超参数的选择。这个方式的优点是可以在优先尝试次数中,拿到效果较好的结果。

我们在实际调参过程中,使用的是第3种方式,在根据经验参数初始化超参数之后,按照隐层大小->学习率->Batch Size->Drop out/L1/L2的顺序进行参数调优

1. 隐层的层数和大小: 两层 512  256  我们也尝试了3层,4层的隐层,提升效果不是很大,而且训练时间较长,可能导致梯度消失、梯度爆炸、以及过拟合。 隐层大小(512,256) 对比了 128-128,512-256,512-256-128,521-256-256-128  四种中选择

增加隐层数可以降低网络误差,提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。

Ref:   https://segmentfault.com/q/1010000014818306    http://sofasofa.io/forum_main_post.php?postid=1000320

如何形象的理解隐层大小越大,效果越好 https://www.zhihu.com/question/65403482

2.学习率:最后选择0.001

3. BatchSize :最后选择1000

4.Dropout:神经元保留比例为0.8

5.L1 取值10-4; L2=10-4

DeepFM模型最后采用 sigmoid  final_activation='sigmoid'

隐层激活函数采用: activation='relu'

损失函数呐 采用二元交叉熵损失

优化器采用adam,

优化指标AUC

2. 

MultiTextCNN  中有关 调参的。

 

 

 

 

 

 

网络常见的一些问题也可以通过超参的设置来解决:

  • 过拟合
    • 网络宽度深度适当调小,正则化参数适当调大,Dropout Ratio适当调大等。
  • 欠拟合
    • 网络宽度深度适当调大,正则化参数调小,学习率减小等。
  • 梯度消失/爆炸问题
    • 合适的激活函数,添加Batch Normalization,网络宽度深度变小等。
  • 局部最优解
    • 调大Learning Rate,合适的优化器,减小Batch Size等。
  • Covariate Shift :
    • 这个指的是训练集的数据分布和预测集的数据分布不一致,这样的情况下如果我们在训练集上训练出一个分类器,肯定在预测集上不会取得比较好的效果。
    • 深度学习网络在训练时容易受到输入层分布变化和前面层参数变化的影响,所以训练时需要用较低的学习率,且对参数初始化非常敏感。这一现象即为internal covariate shift。
    • 增加Batch Normalization,网络宽度深度变小等。BN负责调整特征分布回到原始的数据分布

 

 

 

 

 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页