前段时间面试了许多应界生同学,惊讶地发现很多同学只做深度学习,对于LR/GBDT这样的传统机器学习算法,既不掌握理论,也从未实践过。于是就想写一篇文章,梳理一下推荐算法由传统机器学习,发展到深度学习,再到未来的强化学习、图神经网络的技术发展脉络,因为「只有了解过去,才能更好地把握当下与未来」。
无奈这个题目太大,再加上近来分身乏术,实在无暇宏篇大论。于是今日小撰一文,聚焦于深度学习的核心思想Embedding(「Embedding is all you need」????),管中窥豹,梳理一下推荐算法的前世(前深度学习时代)、今生(当下的深度学习时代)和将来(图神经网络处于燎原的前夕)。本文只讨论算法思想,即“道”的部分,至于如何实现具体算法,属于“技”的部分,请移步本人专栏里面的其他文章。
任何一门技术,要想获得互联网打工人的青睐,都必须能够实实在在解决我们面临的问题。那推荐算法面临的经典问题,无非两个,“「记忆」”与“「扩展」”。
我们希望推荐系统记住什么?能够记住的肯定是那些「常见、高频」的模式。举个简单的例子:
到了春节,来了中国人,电商网站给他推饺子,大概率能够购买
到了感恩节,来了美国人,电商网站给他推火鸡,大概率也能购买
为什么?因为<春节,中国人,饺子>的模式、<感恩节、美国人、火鸡>的模式「在训练样本中出现得太多太多了,推荐系统只需要记得住」,下次遇到同样的场景,“照方扒抓药”,就能“药到病除”。
Logistic Regression就是一个非常擅于记忆的模型。说是模型,其实就是一个超大规模的“评分卡”。
上图的评份卡,是金融风控领域用来评估申请人的信用分。推荐算法的LR,如果形象地画出来,与上面的评分卡类似,只不过卡里面的条目要多得多得多。
一个特征(中国、美国),或特征组合(<春节、中国人、饺子>)占据“推荐评分卡”中的一项。可想而知,一个工业级的推荐LR的评分卡里面,条目会有上亿项。
每项(i.e., 特征或特征组合)都对应一个分数
这个分数是由LR学习出来的,有正有负,代表对最终目标(比如成交,即label=1)的贡献。比如SCORE(<春节,中国人,饺子>)=5
,代表这种组合非常容易成交;反之SCORE(<中国人、鲱鱼罐头>)=-100
,代表这个组合极不容易成交
简单理解,可以认为在正样本中出现越多的特征(组合)得分越高,反之在负样本中出现越多的特征(组合)得分越低
最终给一个<user, context, item>的打分是其命中的评分卡中所有条目的得分总和。比如当一个中国客户来了,预测他对一款“榴莲馅水饺”的购买欲望=SCORE(<春节、中国人、饺子>)+SCORE(<中国人,榴莲>)=5-3.5=1.5
,即推荐系统猜他还是有可能会购买,但是欲望并不那么强烈。
LR的特点就是强于记忆,只要评分卡足够大(比如几千亿项),它能够记住历史上的发生过的所有模式(i.e., 特征及其组合)。
所有的模式,都依赖人工输入。
LR本身并不能够发掘出新模式,它只负责评估各模式的重要性。(通过Cross Entropy Loss + SGD学习得到)
LR不发掘新模式,反之它能够通过regularization,能够剔除一些罕见模式(比如<中国人,于谦在非洲吃的同款恩希玛>),即避免过拟合,又减少评分卡的规模
LR强于记忆,弱于扩展。还举刚才的例子
中国人来了推饺子,美国人来了推火鸡,都效果不错,毕竟LR记性好。
但是,当一个中国人来了,你的推荐系统会给他推荐一只火鸡吗?
假设是几前年,当时中国人对洋节接受度不高。如果你的推荐系统只有LR,只有记忆功能,答案是:「不会」。因为<中国人,火鸡>属于小众模式,在历史样本罕有出现,LR的L1正则直接将<中国人火鸡>打分置0,从而被从评分卡中剔除。