[译] 从 Instagram 故事流和信息流机器学习中吸收的教训

自从咱们在 2016 年宣布信息流排名以来,Instagram 机器学习有了显著的提升。咱们的推荐系统按期为超过 10 亿的用户提供服务。咱们如今不只仅在信息流和故事流排名上使用机器学习:咱们从你关注的标签中收集并推荐文章,将不一样类型的内容混合在一块儿,并为智能应用预抓取提供动力。前端

Instagram 使用机器学习方法的全部不一样方式都值得一贴,可是咱们想讨论一些在构建机器学习流水线时获得的一些教训。android

模型选择

咱们在这里对如何建模作一些决定,这些决定对咱们颇有帮助,要么能够提升模型的预测能力和提供顶线改进,要么能够在维持精度的状况降低低内存消耗。ios

首先咱们选择 caffe2 做为咱们的基础模型框架,这意味着咱们经过这个平台来编写和设计模型。相比于其它选项,Caffe2 对咱们的工做流提供了明显的优化,而且它在推理时为每一个 CPU 周期的模型权重提供了最大空间。“堆栈占用”在机器学习团队中是一个很重要的度量标准,由于咱们在网络中使用了多个 CPU 密集型统计技术(池,等)。git

咱们也使用带有排序损失的模型和 point-wise 模型(例如对数损失)。这让咱们在最终的价值函数中拥有更多的控制权,这样咱们就能够在关键的投入指标中进行微调。github

在核心机器学习中,经过考虑咱们模型中的位置误差,咱们能够获得一些很是好的准确性。咱们在最后的全链接层添加了一个稀疏位置特征,以此避免过多的影响模型。通常来讲,共同窗习稀疏嵌入是另一个有影响力的领域,它以多种方式来恰当地捕捉用户的兴趣。。后端

经过拟合高斯过程,咱们按期调整最终的价值函数,以了解经过一系列 A/B 测试测量的价值函数参数对顶线指标的影响。网络

图 1:一个咱们用来进行预测的经典模型结构的例子框架

数据新鲜度和趋势

用户习惯会随着时间而改变。一样,生态系统也会受到趋势效应的影响(好比在超级碗这种季节性事件中)。正由于如此,数据新鲜度是很重要的。陈旧的模型不能捕捉到用户行为的变化或者理解新的趋势效应。less

量化数据新鲜度的影响对咱们是有帮助的。咱们监测关键行为分布之间的 KL-散度偏移,来告知咱们的流水线的“不稳定性”。机器学习

保持咱们的模型新鲜的一个方法是有一个在线学习模型或者至少进行周期性的训练。在这种设定中,咱们面临的最大挑战之一是提出一个合理的自适应学习率策略,由于咱们但愿新的例子在梯度更新中仍然有用(即便对那些已经在数月的数据上进行了训练的模型)。

新颖效应

新颖效应是咱们面临的另一个难题。咱们常常进行 A/B 测试,在早期对照组表现出正向的做用,而且逐渐趋向于中性。

一方面,能够明确的是,一些细微的变化能够暂时提升参与程度。咱们相信这源于一个事实,即长期运行模型会倾向于“挖掘”的过多,而且这些测试会带来一些新的探索领域。

这些影响的时间尺度也颇有趣。咱们已经看到了一些变化,这些变化须要持续一个多月的时间后才能趋于平稳(参与度呈上升或降低趋势)。

另外一方面, 咱们艰难地认识到,新颖效应能够是很微妙的,因此在推出可能会产生影响的新体验时,应该当心控制。咱们最近进行了一次严重的过后分析,发现两个容易产生新颖效应的实验在启动后的几个小时内相互做用,变得很是糟糕。

虽然这并不完美,咱们如今有了一些模型能够预测容易新颖的实验的数量和长度。借此咱们能够经过减缓风险和提早终止测试来更快的进行迭代。

图 2:在咱们运行的 A/B 测试之一上观察新颖性

实验(A/B)小影响

大规模机器学习和 A/B 测试有许多不一样的复杂性。除了上述提到的新颖性以外,咱们也面临统计学上的问题。想象一下有 10 个排名工程师每人启动一个新的测试 everyday:颇有可能这其中的一些测试提升了参与度指标,这颇有统计意义。

最重要的是,这些实验中的一些可能只是为了一些特定目标的用户,所以这个测量结果不是对全部用户起到一样的重要性的。这就使得测试结果很难评估。

咱们当前的最佳实践是在工程师的迭代速度和咱们启动的变化置信区间之间作出权衡。在咱们批准进行 A/B 测试以前,这些最佳实践须要在大量用户中进行严格的复制。

学习做为影响和科学方法

根据定义,机器学习是一种随机过程。当咱们进行性能评估时,咱们的工程师和科研人员根据在稳定项目上的传统软件工程师来进行校准。作全部正确的事情都是有可能的,可是在底线方法方面会让人失望。

在 Instagram 上,咱们热衷于坚持科学的实验方法。即便 A/B 测试不会直接致使产品发布,咱们也能够常常利用它在将来提供有趣的产品洞察力。

这也防止了在训练流水线中进行超参数随机遍历以寻找局部最优解的糟糕的科学模式。咱们如今称这种模式为“人类梯度降低”。有了这一点,咱们须要在启动测试以前验证原则假设。

做为一个机器学习工程师,咱们并不是仅仅盯着特征看,咱们还想要学习。每一个实验都有其特定的输出,咱们并非随机游走。

正则化

混合不一样类型的内容是咱们面临的另一个挑战。例如,一个视频和一张照片有不一样可能操做的分布。例如你能够想象“喜欢”一张照片和“评论”一张照片或者“完成”一部视频是三种不一样的行为,而且有着不一样的分布(如喜欢比评论更常见,等)。

简单来讲,它就像是对照片用 P[喜欢](一个观众喜欢这个照片的几率)和对视频 P[完成](一个观众观看一部视频超过其 X% 长度的几率)来进行排序同样。当咱们想要合并这个列表来完成对观众的最终排序时,机器学习工程师就处在一个很为难的位置。

咱们经过拟合一个映射来解决这个问题,即从一个价值函数分布(如 P[喜欢])映射到一个合理的分布如高斯分布。在那样的输出空间中,列表如今是可比较的,而且咱们能够清楚的说出一部份内容优于另一部分。

图 3:咱们的价值模型在归一化前的对数分数,分布很不均匀

迭代速度 - 离线分析

咱们添加适当的后验框架已经太晚了。对很是大规模且有影响的机器学习系统来讲,工程师和科研人员真的须要去打开模型而且仔细的理解他们实验产生的效果。在没有可靠的工具下这是很难作到的。咱们开发了一个重播工具来接收你想要测试的新模型/排名配置,而且输出一组有用的测量结果来帮助理解你的改变对整个生态系统的影响。

咱们的目标是尽可能减小在线实验,尽量减小给用户暴露糟糕的实验结果的风险而且加速咱们的迭代速度。

图 4:咱们的离线分析工具在模型指标上的表现(每一个点表示了一个不一样的训练模型)

工具和基础设施

全部大规模系统都须要严格的基础设施,幸运的是,在 Instagram 中咱们有一个稳定的机器学习基础设施团队(他们最初创建了反馈排名并从其分离出来)。全部模型推理、特征提取、训练数据生成和监控都由其基础设施负责。

没必要去担忧规模问题,全神贯注于统计模型对咱们工程师而言是最有效的提升之一。最重要的是,机器学习基础团队建立了工具让咱们更加深刻的理解咱们的模型,从而帮助咱们提升用户体验。

个性化

另一个有利的特征是精调咱们的最终价值函数的能力。将咱们的模型做为输入,添加咱们的业务逻辑,而后返回每一个媒体的最终得分。个性化价值函数兼具了有效性和复杂性。咱们选择对那些从咱们的推荐系统中获益较少的用户群体进行高层次的启发式分析,并专门为他们调整价值函数。

另外一个显示早期结果的个性化策略是在一些用户亲和力模型中进行因子分解。试图量化一个用户与其余用户/内容类型之间的亲和力有多大,这有助于咱们专门为观众定制和适应咱们的功能。

价值模型

最后,咱们有了咱们的价值模型:公式化描述,它将不一样的信号组合成一个分数,而且合并咱们的业务逻辑。这是一个复杂的代码,产品启发法知足统计预测。

过去这些年经过调整这个价值模型,咱们看到了显著的增加。咱们常用高斯处理和贝叶斯优化来跨越模型的超参数空间,而且找到一个适合咱们的区域。有一篇在这里详细的描述了这个过程。

图 5:咱们怎样调节不一样的归一化价值模型而且测量不一样的影响程度

后记

咱们但愿对咱们的机器学习管道和咱们面临的问题的总结是有帮助的。在将来的文章中,咱们将更深刻的讨论上述的一些问题。

不管咱们是在预测用户行为,构建内容理解卷积神经网络,仍是建立潜在的用户模式,这些课程都有助于咱们减小错误并更快地迭代,这样咱们就能够不断地为 Instagram 上的每一个人改进机器学习!

若是你很高兴应用机器学习技术为咱们的全球化社区提供价值,咱们一直在寻找更多优秀的人才来加入咱们

若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索