3.1 简单“复读机”——逻辑回归模型

推荐的本质是“复读机”。

精排之锋,粗排之柔,召回之厚。

在推荐部分谈过拟合很容易造成心理上的松懈,从而忽略环境、氛围等多种因素的作用。可以说如果发生一万遍过拟合,但是不采取行动,那么没有任何作用。

在推荐算法领域的三个主要模型中,首先要介绍的就是精排模型。精排模型既是发展最快的模型,也是最复杂的模型。在多种多样的模型里,最简单的是逻辑回归模型。在其他领域里,逻辑回归模型可能是一个大家课上都学,但是没怎么用过的模型。但是在推荐算法领域里,它作为主流模型的时间比很多人想象的还要长很多。从这一节中我们可以看出,逻辑回归模型虽然简单,但是它能贴合推荐这件事情的本质。

为了拟合某个目标,我们所能想到最简单的、最常见的模型是线性模型,即y=wTx+b。在很多问题中直接使y接近真值ˆy就可以完成一个最简单的拟合。不过,这里的拟合没有限定值域范围,是无界的。推荐模型预估的问题常常是CTR,即每次展示是否发生点击。点击与否是二值的,要么是1(点击),要么是0(不点击)。这就要求我们模型的输出应该也是0/1的,或者至少是在[0,1]的(即点击的概率)。因此在外面会加上一个激活函数Sigmoid(这个函数的输出是限定在0~1的),最终得到

这就是逻辑回归模型的最终形式。上面说激活函数使用了Sigmoid,是因为它的值域在0~1。但是仔细思考一下:是不是只要输出在0~1,什么激活函数都可以呢?比如可不可以先用tanh函数把输出范围约束在[-1,1],再线性变换到[0,1]呢?为什么没有人这样做呢?其实是有别的原因的。

这个问题有一个较好的解释:y=wTx+b本身是无界的,但想要拟合的对象,即CTR p是一个[0,1]之间的数字。现在不修改线性回归本身,而是将CTR复合一下来解决问题。构造一个辅助函数,它的范围在[0,+∞]。接下来再取对数,范围就在[-∞,+∞]了,即

log(p)-log(1-p)=wTx+b

上面等式求解后就可以得到逻辑回归模型的形式。

逻辑回归模型在推荐上的应用较为特殊,特殊的点在特征上。在此要注意一个时代背景,在早期的推荐系统中,特征的处理比较原始。推荐算法领域的特征不像其他领域,如CV、NLP的特征是一段连续的浮点数向量/张量,而是无数的独热码(One-Hot Code),怎么理解呢?比如有10000个物料,编号从1~10000,那么它的物料ID的特征就是一个维度为10000的向量,只有自己ID对应位置的取值为1,其他位置的取值都为0。当我们计算y=wTx+b时,x是二值的,而w是浮点数。计算y就等价于把用户所有不为0的特征对应的权重加起来。逻辑回归模型工业实践的示意图如图3-1所示。

在这个例子中,有3种特征:性别、年龄和用户ID。注意到,这里权重w的表格需要存储所有可能的特征取值。对于当前的用户,要分析他的性别、年龄、ID分别是什么。由于特征是0/1的,直接取出对应的权重和偏置项b相加即可。这里只画了用户侧的部分,物料侧也是同样的道理。

按照上面的例子,我们设想一个极限情形:如果只有用户ID和物料ID两种特征,会出现什么情况呢?

在开始训练之前,所有的权重都是随机初始化的(简单起见,假设初始化为0),现在用户1和物料1的组合发生了点击,那么回传梯度时,这两个特征对应的w会以相同的幅度变大一些。接下来,用户2面对物料1和物料2,由于物料1的权重是有值的,y=wTx+b输出的排序分就比物料2要大,即使该用户之前可能完全没见过这二者。所以这样的结果不合理:模型对用户2完全没有认识,为什么输出一个更倾向于物料1的结果呢?原因是用户1给了物料1一个正反馈。模型只能从前面的结果里面去学习,没有自己的“主见”,“人云亦云”。推到更极限的情况呢?如果只有物料ID这一种特征,模型就完全变成了简单的计数统计,谁被点击的次数多,谁的排序就靠前,这里没有任何个性化可言。所以说,特征越少,模型的效果就越偏向统计,特征种类变多,类似现象会缓解。但究其本质,推荐模型无法避免从过去的结果中学习,这也是本书的一个基本观点:推荐的本质是“复读机”

图3-1 逻辑回归模型工业实践的示意图

这样的结论看起来有点令人意外,第一个马上就能想到的问题是,为什么推荐的本质是“复读机”,而CV、NLP就不是吗?对,因为推荐存在不确定性,必须要试错才能知道真值,而且很难归因。CV、NLP中的真值(或者也可以说标注)是固定且显然的。以图像识别任务为例,一幅图像里面的主体是猫就是猫,是狗就是狗,很清晰,不存在偶然性;而在推荐中,对于某用户和某物料的组合,人工判断是否点击是很难的,只有试试才知道。这样必须试错的机制不但造就了推荐“复读机”的本质,还造就了它探索与利用及冷启动的问题。当点击发生时,归因也很难,观测到了一个点击,是因为用户的点击倾向高,还是因为物料的质量好,还是因为某种巧合呢?模型也无法归因,在上面的例子中用户1对物料1也许只是随手一点,而模型也只能增大物料1的权重(认为它更好)。

那接着往下想,推荐模型可以做到像CV那样,给出一个确定性的判断吗?笔者的结论是,现阶段不可行,未来说不定可以。在推荐中,很多信息拿不到,如用户看视频是在公交车上还是在教室里?用户这次拿起手机之前是和同学聊完天,还是刚刚睡了一觉醒来?用户是一个怎样的人?给他推送动物视频会不会让他害怕?这些都是变量,都会影响对当前物料的判断,然而这些特征都是获取不到的。著名的《影响力》一书里就提到一个例子:当商家在网站上卖沙发时,如果背景是云朵,顾客就会更关注舒适度;如果背景是硬币,顾客就会更关注性价比。假如有一天,用户与物料的一切信息都能获取,推荐模型是有可能摆脱“复读机”定位的。

从这个意义上来看,在推荐中频繁提过拟合是不合适的。也许过拟合是存在的,但如果把注意力都放在这里,会很容易忽视其他值得关注的细节。而且上面提到的很多信息都没有,笔者认为,我们的模型还处于远远欠拟合的状态。

第二个问题是,真实情况真的这么糟吗?其实也没有。在逻辑回归模型里面,增加泛化的一个要点是增加一些能泛化的特征。还是像图3-1中的例子那样,当有年龄、性别这样的输入之后,一部分点击可以归因到年龄、性别上,下次新的用户来了,就可以根据他的年龄、性别给出一些先验判断。这本身也是一种复读,但是更科学了。以此类推,在实践中会加很多能描述用户或物料泛化属性的特征来缓解复读问题。

推荐的本质是“复读机”不一定完全正确,之所以这么说,是希望读者能以更加自如的姿态来看待这个领域。有时敬畏之心过度,会不知道从何下手。不如换一个角度,首先要相信,现代科学的发展虽然突飞猛进,但还远没有到高不可攀的程度,很多改动都是增量式的。先从简单的视角来看待,再慢慢深入也许上手更快。

逻辑回归模型比较简单,也比较透明,解释性非常强。还是举图3-1中的例子,假设有4种特征,用户ID、物料ID、年龄、性别。在分布均匀的负样本中,只有3个正样本,分别是(用户ID=1,物料ID=10,年龄=少年,性别=男性),(用户ID=2,物料ID=10,年龄=老年,性别=女性),(用户ID=5,物料ID=10,年龄=中年,性别=男性)。学习这些样本后,模型会有怎样的倾向,能得出怎样的结论呢?通过对模型的分析,可以判断,物料ID=10的样本会让该特征对应的w收到三次正向的梯度,性别=男性两次,其他都是一次。那从模型的角度来看,物料ID=10就是更重要的因素,也就是说,模型认为10号物料就是好的。从人的角度来看,也会觉得在整个样本中出现次数多的特征应该占据更大的权重,模型给出的判断符合人的认知。在实践中分析问题时,完全可以拿出一个逻辑回归模型,看看里面的权重分布是怎样的,然后得出权重幅度明显大的特征比权重小的特征更重要的结论。事实上,逻辑回归模型也可以作为特征重要性分析的一种工具。

这一节中讲的逻辑回归模型特征的种类和取值都很少,但在实际应用中是非常多的。在有上亿用户的平台里,单单用户ID这一个特征就有上亿的取值。由于特征的每一种取值都要独占一个权重,做完一次预估需要穷举所有非0的权重求和。这是不经济的,尤其是训练结束后很多权重的取值是诸如0.0001、0.000001这样的,如果不要,结果就不准;可是全都算进来,计算负担太大。怎样既能做到结果是准确的(精度尽量不减小,同时训练、部署的结果一致),又能很省力地完成呢?这就是逻辑回归模型主要面临的问题——稀疏性。如果我们能把这些长尾特征权重里的大部分删掉,同时让性能尽可能地维持不变,那么逻辑回归模型在训练和部署中就能轻装上阵。