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

本文转发自 推荐系统再思考:从机器学习到深度学习,作者 lessmore,时间:2023-03-12

再次回到推荐系统方向的工作, 相比几年前 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 实现