导语:特征对于机器学习很重要,整个模型发展的主旋律之一就是对有效特征及其组合的发现和使用。实际场景中影响结果的特征有很多,随着发展业务对预估的精度要求不断提高,模型结构也越来越复杂。召回与排序涉及的模型如过江之鲫,不胜枚举,本文试图通过梳理发展历程找出其中的演化痕迹,欢迎大家探讨学习。
一、通过梳理可以发现有几条主线
- 特征的范围:从只使用动态交互信息的协同过滤,到引入用户/广告自身静态信息(sideinfo),再到火热的知识图谱图神经网络,特征涵盖的范围不断扩展。动态交互类特征相比其他特征更为重要,模型在起始阶段聚焦于主要因素,后续随着业务发展向周边延伸使整体覆盖的信息更加全面,这是一种正常的演化思路。
- 特征的使用:对特征的使用在不断创新,从线性到非线性、从低阶特征到高阶,借助模型结构不断发现新的组合方式, 这是另一个主方向。
- 现有结构的深层次刻画:将一个点扩展成一个复杂系统,利用内部结构拟合真相,比如embeding把一个概念扩展成多维向量,再从静态表示到结合上下文获得动态向量,比如attention思想将简单的一视同仁发展到根据实际情况区别对待。
在展开之前先简要介绍下协同过滤,作为传统手艺它启发了FM、NN后续发展,有重要的历史地位。协同过滤主要的场景用数据形式表达:用户对物品有个打分矩阵,其中部分值已经填充代表用户和物品有过交互,还有部分空缺的值代表未交互,最终任务是把这些空缺填上。
针对上面的场景协同过滤提出一种假设:用户对物品的分数是用户隐向量和物品隐向量求点击积获得的,这个假设很强大:把求未知分数转化为求二者的隐向量,学习过程比较常规利用矩阵中已有的值来训练向量,当预估值足够接近真实标记时获得隐向量,然后通过点积将空缺填满。
协同过滤通过转换建立起已知和未知的纽带,利用已知预测去未知从逻辑上变成可能,操作虽然简单但里面包含的思想很了不起。
下面主要从特征组合这条线梳理模型脉络,实际场景的特征数量很多,做笛卡尔积太简单粗暴,不仅运算量大特征有效性也无法保障,所以LR以后包括FM 、树、图、神经网络在内都是借助自身结构来获得有效特征。
二、特征组合
1. LR
主要学习特征与标记的线性关系是机器学习的起点。简单直白,各特征的影响清清楚楚,欠缺之处在于表达能力有限,不足以表征数据内在的复杂规律和分布,容易欠拟合,如果有很强的专家知识提炼出高信息量的特征,面对各种后浪依然可以一战。
2. MLR
分而治之思想很好的体现。通过两阶段分类器进行非线性拟合,先对样本聚类分组,然后在组内利用线性模型预测,最后加权求和,其中第一步聚类是软分类,算出样本对不同类别隶属度作为后面求和时的权重。整个过程也可以看做综合不同专家意见最后确定结论。
3. DT
从根到叶子节点的路径可以看做带有继承关系的层级结构,最终的落脚点在叶子节点上。
- 应用场景1:特征组合。Facebook利用GBDT来进行特征组合,在NN兴起之前是特征组合界最靓的仔。
- 应用场景2:高效检索。阿里在TMD论文中提出利用树的分层结构检索全量候选,大幅减少计算量从而提升检索效率,召回环节运用复杂模型的性能问题得到解决,功在千秋。
4. FM
二阶特征组合自动化。针对二级组合的参数提出了假设:通过两个特征隐向量的点积获得参数(思路看起来是不是有点眼熟),解决了样本数据稀疏时的训练问题,提升了模型的泛化能力,其中隐向量就是NN中embedding后的向量表示,相比协同过滤中隐向量包含的信息,FM可以加入各种边信息含义更丰富。
5. FFM
在FM的基础上引入领域的概念,与不同领域的特征做组合时用不同的向量表达(f个领域则每个特征有f-1个向量表示),对真相刻画的更细致,缺点在于参数太多(f*n*k),在高性能要求下大规模上场发挥的空间有限。
6. NN
通过MLP和激活函数隐式提取高阶特征组合,从此机器学习迈入深度纪元。
神经网络历史上一度被遗弃到现在如火如荼,其中很关键的一个转折是反向传播的提出:运用链式法则求导来迭代参数,在数据和算力的推动下NN重返舞台,针对NN稍微展开聊几个有意思的点。
1)双塔结构
用户塔使用用户侧特征经过多次组合获得向量表示,广告塔获得广告表示,二者在学习过程中不交互,确定表示后通过点积/余弦相似度计算相关度,双塔的重点在于学习向量表示是召回阶段的主力模型。
2)Embedding
广告召回排序涉及很多类别特征,针对离散化数据一般使用独热编码,考虑到训练成本和过拟合风险进入网络前会映射为低维稠密向量,就是embedding,这里它的主要作用是降维,其优秀之处在于获得的向量不仅维数减少而且保留了深层语义信息,可以进行表征、比较和运算。
3)Attention
不一视同仁根据实际情况区分主次,从而进行更细致的刻画。
attention的关键点在于如何确定重要度,谷歌在论文中提到Query、Key和Value,计算Query和Key的相关度作为作为权重,权重表示信息的重要程度,Value对应信息,权重越大对应Value给与更高的重视。
attention思想自提出以来得到广泛认同和使用,尤其在处理用户历史行为方面,机器学习的主要目标之一就是对数据进行辨识区分,attention很好的体现了这一点。
4)Pooling
pooling体现的是提取和压缩,CNN中通过pooling将多个向量压缩成一个向量,在处理历史行为序列时不同用户长度不同,一般也会做压缩提炼为确定的长度,pooling的方法有很多如max/sum/average等,当然还有上面提到的attention。
延伸一下pooling背后也包含了降维/聚类思想,如果因素太多维数太高不利于分析,需要进一步精简,化多为少需要智慧,关键在于简化过程中如何保持/凸显核心信息。降维思想在很多方面都有体现:PCA、聚类、分桶、散列函数、embedding等,虽然使用场景不同但主旨思想是相通的。
监督学习利用有标记数据训练模型,训练数据终究有限,部分特征与标记的关系在数据中已经体现出来,还有部分特征的关系没有很好体现。
前面介绍的模型在处理特征组合时各有侧重,要么低阶要么高阶,要么显式要么隐式,谷歌在论文中指出低阶和高阶特征都很重要不能偏执一方,提出混合模型用擅长记忆的模型去提取已经体现的,用擅长扩展泛化的模型去学习还未体现的,双剑合璧威力大增。
混合模型提供了一个很好的的思路,把模型看做组件,以混合搭配的方式结合起来创造出需要的结构类似乐高积木,其中比较关键的点是对模型的选择,每个模型有自己的属性,组件的选取要与实际场景的诉求所匹配:模型擅长的恰恰是场景所看中和需要的。
例如CNN擅长在移动窗口内捕捉结构信息并通过不断加深卷积来提升抽象层级,这与图像周边像素聚集并不断拉长距离来感知整体不谋而合。下面简单梳理下由谷歌引发的混合模型潮流。
7. wide&deep
整体模型分为两部分,Wide部分是LR,负责显式提取低阶特征,强调记忆,特征组合需要人工构建,Deep部分一般使用前馈神经网络,负责隐式提取高阶特征,强调泛化,两个部分通过并行方式组合,低高阶特征共同作用于输出。
8. deepFM
模型整体结构与W&D一致,区别在于Wide部分由LR替换为FM,相比LR它能自动提取二阶特征组合,规避了依赖人工的弊端,且两部分共用embedding提升了效率,模型能抗能打是居家旅行必备之选。
9. DCN
与deepFM一样也是在Wide部分动手脚,用Cross Network显式提取特征,每层都对特征交叉组合,随着层数增加组合的阶数也持续增加,网络最后一层涵盖了从一阶到N+1阶的特征,根据实际情况来确定层数,不过既然有专门负责提取高阶的DNN美玉在前,层数不宜太高。
10. PNN
PNN指出神经网络以或的形式进行特征组合捕捉信息能力太差,不如以且的方式更有辨识度,所以两个组件模型以串行组合,在特征接入神经网络前加了一层product layer处理,该层分为两个部分:
一部分是常规特征embedding后拼接,另一部分是进行product后获得交叉向量,两部分拼接后一起送入神经网络,PNN为混合模型提供了另一个组合思路,但在预测中低阶特征没有直接发挥作用,可谓有得有失。
上面的栗子可以看出演化的基本趋势是结构越来越复杂,复杂度增加意味着运算时间也会随之上扬,可实际广告场景中必须在规定时间内返回广告,从召回到排序基本控制在几十毫秒内:
一方面是性能的硬性限制,一方面又要提升效果,真是臣妾做不到啊,不,老板说你能做的到,于是就做到了,是真的,勤劳勇敢的程序员们发明了知识蒸馏。
知识蒸馏的本质是把复杂模型学到的知识迁移给简单模型,一般采用teacher-student模式,线下两个模型联合训练,正式上线时只用简单的student模型,复杂的teacher充当导师的角色。
在训练时,teacher的损失函数是常规交叉熵,student的损失函数由两部分组成:
一部分是常规的交叉熵损失,用来学习真实标记与预估值的差距,一部分是蒸馏损失,用来学习和teacher之间的差距,损失达到最小时teacher把自身学到的知识迁移给student完成蒸馏,既可以保证效果又能满足性能限制是蒸馏的典型应用。
另一个场景是阿里提到关于特征的蒸馏,论文指出在预估CVR时,用户点击进入页面的停留时长、查看评论、与商家沟通等都是影响CVR的强特征,可线上排序时物品还未推出去上述特征数据无法提前获得。
但是训练时使用历史数据这些特征可以拿到,所以在训练时也是两个模型联合训练,主要差别在于输入特征,teacher在student特征基础上增加了上述的Privileged Features,让模型学习这些特征对结果的影响然后将其获得的知识迁移给student,不得不感叹思路清奇。
上面简要梳理了模型的发展,由简单到复杂体现了对真相刻画的不懈追求,其中不乏智慧闪现,精彩纷呈,模型结构是直观呈现,其背后的假设蕴含了对世界的认知,它把已知和未知统一起来,从此世界不再是不可知的神秘,而是可以被发现和认识的运转规律,这是一种伟大的思想。
本文由 @知乎-莫菲克 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议