推荐系统再思考:从机器学习到深度学习

再次回到推荐系统方向的工作, 相比几年前 2018/19 很多认知出现了变化,对我来说很有意义,写出来作为记录也分享给大家。

曾经的主流ctr模型是 deep+wide model,出自google的经典论文。 从业界的演进路线来说, 最开始是大规模LR,模型很简单,f(x) = sigmoid(w*x+b), 主要的提升性能的方式就是特征工程和工程上做到极致,前者因为模型能力有限,手动提特征,越多越好,尤其是交叉类特征,因为LR不具备特征交叉/组合的能力,表达能力极为有限,工程上的问题是大规模稀疏id类特征的训练/预估,在线学习的系统架构,包括实时样本拼接,实时训练和实时取最新权重做预估。接着是FM/FFM模型大放异彩,解决了交叉特征过于稀疏的问题, 算是LR的改进版。之后类似deep+wide,concatenate(FFM, LR) 接几层全连接层,通常2/3层,因为更深没有测出效果, 而且预估的机器成本增加很多。

我个人背景是再深度学习大火之后自学的相关知识,属于野路子,看《统计学习方法》和使用 scikit-learn 入门,缺乏对机器学习/深度学习整体脉络的理解,认知比较肤浅,完全没有意识到深度学习这时再CV/NLP带来的巨大进步,end2end无需特征工程,更深的网络更强的建模能力,比如residual network有一百多层,更没有看到pre train + fine tune,unsupervised learning这些新范式的强大能力,最近几个月chatgpt大火,看李沐大神的视频才体会到这一切。

再回到推荐系统业界的做法,其实19年阿里的文章DIN之类的深度学习网络已经出现,在我的视角还没有理解,从组内senior同事得到的经验是更深的全连接层试过没什么用,这个结论应该有非常强的局限性,教训多思考为什么。现在想来有一些原因,公司使用的训练框架是自研的,对LR/FFM有非常多的调优,比如ftrl算法,bias/vec的初始化/优化器调优,对于神经网络却非常少投入,简单尝试多层MLP很有可能比不过充分调优的LR/FFM,后者做了充分的特征工程,调参,从现在的视角来看,如果没有合适的优化器,一些tricky,比如warnup, decay,batch size/learning rate调参,模型结构多做调整,没有说随便做做神经网络就比LR/FFM强。这时公司推动的全面转向tensorflow现在后知后觉才意识到是大佬们已经发现了问题所在,深度学习才是未来。

回到认知的变化,

  • id类embedding特征不用太长,FFM会导致id类特征embedding有几千维,巨大的资源消耗,更好的模型结构足够的泛化能力
  • 更多fancy的模型结构引入都做出了收益,比如MMOE, knowledge transfer, sequence model, pair wise -> list wise
  • gpu 的资源收益,曾经的自研框架很难像tensorflow一样同时cpu,gpu实现
posted @ 2023-03-12 00:02  小小的港湾  阅读(24)  评论(0编辑  收藏  举报