推荐系统的模型应该如何调参?哪些超参数(如:learning rate, batch size, embedding size, regularization)更加重要?


谢邀,个人觉得重要程度排序如下:

  1. learning rate。这个值很重要,太大了会不收敛,太小了会学的太慢(让你以为它不收敛)。最优值从1e-4到1e-1的数量级都碰到过,原则大概是越简单的模型的learning rate可以越大一些。
  2. regularization。最普遍的是L2-norm,重要性在不同的模型里面也不一样。印象中最优值从1e-8到1e-4数量级都有,这个值其实也取决于你的代码里L2是怎么实现的,比如embedding matrix的L2有没有除以batch size等。
  3. embedding size,感觉大部分推荐系统的演算法对embedding size都不是太敏感,甚至有时候一位数都足够了(主要取决于数据的稀疏程度)。大部分情况下,8~32的embedding size可能是比较好的选择,如果你是按照2的幂进行调参的话。
  4. batch size,更多的是影响演算法的运行速度,batch size越大,速度越快,但效果会有所下降。小规模数据集(100万条以下interaction)的batch size大概在几十到几百比较合适,大规模数据集里面,有时候你不得不把batch size设大一点(几万),不然跑起来实在太慢了。
  5. dropout,感觉没有太大的用处,除非你的模型里面dense layer很多且很大。
  6. epoch,没什么可以调的,看到指标例如AUC下降了且没有回升的迹象就可以停了,或者直接写个early stopping就可以。


没有做过推荐系统但是最近在帮太子爷写课程大作业,遭遇了很烦心的调参问题不请自来答一下。做的是简单的带监督的图像分类问题,用的keras。学习率决定了这个模型能不能训起来,数据增强决定了这个模型能不能上90,(手动微笑脸)调了两天的参val acc和acc一直差15%以上,万念俱灰上了imagedategenerator,神奇的好了……

然后dropout效果真的不好,上bn的时候不要上l2正则,不要问我为什么…batchsize和epoch这种值一般你也不会设的很夸张的…

最后。我觉得调参也是神学…没什么道理可言,没什么经验借鉴,就自己疯狂试就行了…


斗胆回答。拿我实际的经验来说,learning rate调起来效果最明显,0.01-0.001之间吧,其次是embedding size,个人觉得根据实际算力,一般10就够了,几十也行。然后是正则系数和优化演算法。


我在做股票模型,说一些经验之谈,learning rate>dropout>sample weight >l1l2> optimal method 。


调学习率learning rate


最关键的是lr,再有就是画出loss曲线,基本就可以看出来问题


实践证明只调 learning rate 基本能解决80%的调参需求,其他的和普遍经验值相差不大就行了。


推荐阅读:
相关文章