作者:杨镒铭
来源:知乎专栏
本文介绍了作者在其所在大厂的一条核心业务中从事算法工作的经历。该业务主要分为召回和排序两个方向,作者从2016年9月加入团队后,一直致力于模型的优化和迭代。到2018年底,团队已经经历了四个大版本的模型升级,从线性模型到基于统计特征的树模型,再到基于大规模稀疏特征的FM模型,最后到深度学习模型。每个阶段的模型优化都遇到了瓶颈期,但作者通过不断探索和改进,找到了一些有效的方法来突破这些瓶颈。
团队的模型研究始终遵循着稳健的原则,每个大版本的优化结束后,都会从多个角度审视现有模型的结构和潜在问题。这些问题是区分初级和高级研究人员的重要标志。例如,在基于树模型的研究过程中,团队发现宏观层面的统计特征已经被充分利用,但微观层面的细粒度信息由于模型的限制难以处理,因此转向了支持海量特征的FM模型。
这里所说的文献包括论文、技术博客、微信公众号等各类资源。论文主要来源于经典论文和工业界发布的论文。不同于图像等领域,推荐系统业务由于实际业务需求强烈和海量数据资源,工业界的研究往往优于学术界。新论文层出不穷,但真正能在工业界广泛应用的却很少。
对于如何将论文中的模型应用于实际场景,作者倾向于借鉴论文中的有用部分,而不是直接照搬整个模型。因为不同的业务场景和数据特点会导致直接应用的效果不佳。即使是高阶研究人员也容易犯这样的错误。
许多算法岗位的同事倾向于追求复杂的模型,而忽视案例分析。这是一种常见的误区。实际工作中不仅要仰望星空,更要脚踏实地。提高业务效果才是关键,而不拘泥于任何特定的解决方案。
针对如何利用案例分析,具体做法是将模型预测错误的案例提取出来,仔细分析错误的原因,并分类整理。然后针对每类问题分析解决方法,是增加特征还是修改模型结构?这种方法对效果提升有明确的预期,例如一类预测错误的案例占比0.1%,那么修复后准确率提升的上限就是0.1%。
很多同事喜欢尝试各种模型或网络结构,效果不佳就换另一种方法,反复试验,最终难以获得显著的业务收益。建议每次尝试结束后都要多思考。
对于有效的尝试,要评估是否已经发挥了最大效果。无效的尝试也有意义,至少可以排除一种潜在方案。对于无效的尝试,要思考失败的原因,这有助于后续模型迭代。勤于思考可以更好地理解业务特点,激发更多想法,从而提高效果。
迭代速度是模型优化的关键因素之一。充足的计算资源和高效的应用可以大大加快模型优化的速度。这一点的重要性不亚于其他所有措施。在固定时间内,单次实验成本越低,可以进行的实验越多。作者所在公司提供了丰富的GPU资源,最初尝试了单机多卡训练,但由于收敛效果不理想,最终放弃了。
通过这些方法,作者所在的团队不断突破瓶颈,取得了显著的业务成果。