本文调研了推荐系统里的经典推荐算法,结合论文及应用进行分析、归纳并总结成文,既是自己的思考过程,也可当做以后的翻阅手册。
连续特征。如商品价格/销量时长
类别特征。如性别/天猫会员等级
逻辑回归LR(Logistic Regression)模型作为经典的机器学习分类模型,以其可解释性强、实现简单、线上高效等优点在线上应用中被大量使用。逻辑回归模型主要有两部分构成:
线性回归
逻辑函数
在机器学习中,线性回归模型可记为:
而逻辑函数使用的为sigmoid函数:
由(1)和(2)可推出LR模型的数学表达式为
在线性回归模型(1)中,是具体的某一个特征值,是该特征值的权重,是模型的输出。该公式可以直白的解释为模型的输出结果是由输入进行线性加权求和得到的。而逻辑函数(2)的作用是将线性回归模型的输出映射到[0,1],输出一个概率值。商品推荐的场景中如用户对某个item进行点击记为1,未点击记为0。
LR是一个基本的回归模型,可以对输入进行一些线性运算得到一个预测的输出值。预测值可以是用户点击某个商品的概率,也可以是用户下单的概率,其含义具体业务具体分析。
FM通过引入二阶特征实现了模型学习能力及表达能力的提升,并且利用正定矩阵和稀疏矩阵的性质将二阶特征的计算降低至线性复杂度,也因此成为工业界常用的特征工程算法。
FFM(Field-aware Factorization Machine)。从名字上看,相较于FM, FFM多了一个F,在实现上也是如此。
FFM的数学表达式如下:
从式(8)可以看出FFM相比于FM的不同点在于二阶特征组合的系数上,FFM的权重矩阵比FM多了一维。其算法思想是这样的:以前言中的商品推荐的训练数据举例,在进行one-hot编码时,我们将不同的字段的特征进行编码然后拉平送进模型进行训来,比如字段天猫会员等级T1和天猫会员等级T3这俩字段被独立为两个独立的特征。然而实际情况却是这俩字段其实是对同一个字段天猫会员等级的不同描述。因此在FFM中引入了field的概念:每一维的特征都有对应的field,在进行二阶特征组合时某一维特征对于不同field的特征其所对应的隐向量是不同的。假设所有特征共包含f个filed,则FFM权重矩阵,相比于FM的权重矩阵,多出的维便对应着FFM中引入的field的数目。
需要说明的是,FM可以看做是FFM的特例:所有特征属于同一个field。
WDL(Wide & Deep Learning)。其核心思想是结合线性模型(如上文的LR)的记忆能力和DNN模型的泛化能力来提升模型的整体能力。
其网络结构图如下:
其中包括
wide部分:wide部分是普通的线性模型,其表达式可参见式(1)
deep部分:deep部分由一个3层的神经网络组成。其输入是对原始的稀疏特征(如ID类特征)进行一次embedding后的结果。每一层的公式如下:
输出:输出部分将线性模型(Wide)和DNN(Deep)模型的输出结果进行加和作为整个模型的loss进行反向传播来完成联合训练。
结合了线性模型对一阶特征和和深度模型对高阶特征的学习能力来整体提高模型的表达能力。
引入FM结构代替LR。完成对一阶二阶特征的学习 避免了WDL中人工特征工程过程。见式(4)。
FM和DNN共享Embedding层。减少了额外的计算开销。
在减去人工特征工程的前提下,通过Wide部分和Deep部分共享Embedding,可以提高模型的训练速度和模型的特征学习能力。
DCN(Deep & Cross Network)如其名字中cross所示,其主要完成了完全去手工特征交叉的工作。
其中代替DeepFM中FM模块的核心Cross Network网络结构如下:
其中:
进而可推出
可以看出Cross Network中每一层的输出都是由与某一标量进行相乘的结果。因此:
每层的输出和同维
由于标量和是相关的,因此第k层的输出包含了的1到k+1阶特征。
完全舍弃了人工特征工程过程,并且可以显示指定特征交叉阶数。
xDeepFM(eXtreme Deep Factorization Machine)。从名字上可以看出,xDeepFM是是对于DeepFM的改进,但是实际上xDeepFM是对DCN的改进。DCN 的Cross层在Embedding层后,可以自动构造任意阶高阶特征,但是它是bit-wise的,与bit-wise对应的是vector-wise。现举例分析如下:例如,性别对应嵌入向量<a1,a2,a3>,天猫会员等级对应嵌入向量<b1,b2,b3>,在DCN的Cross网络中,向量<a1,a2,a3>,<b1,b2,b3>会拼接为<a1,a2,a3,b1,b2,b3>作为输入,在进行cross的时候a1可能事实上属于同一个field的a2进行cross。因此称DCN以嵌入向量中的单个bit为最细粒度,即bit-wise。而在FM中,特征的交叉是以该维特征对应的向量为最细粒度进行交叉来学习相关性的,即vector-wise。而xDeepFM的动机,正是将FM的vector-wise的思想引入Cross部分。这一点其实特别像one-hot编码的情况下FM到FFM的演进。
xDeepFM中,进行vector-wise特征交叉的结构如下:
对于每一层的输出
其中
代表了第层的输出
代表了第k层输出的vector个数
表示两向量对应元素两两相乘,如
表示第层第个向量的向量的权重矩阵
至此,xDeepFM便实现了vector-wise的特征交叉过程。相比于DCN,其第的输出仅包含了k+1阶特征。因此,其需要将每层的输出进行sum-pooling后DNN的输出加和到一起作为loss进行反向传播来完成联合训练。
▐ 解决的问题
提出了一种vector-wise的高阶特征交叉方式。
本文以解决问题的思路介绍了推荐系统里的经典算法演进过程,可以看到每种算法的出现都是为了解决某种特定的问题。学术上评价一个算法的好坏大都在于其精度,而在工业界中,更看重的是一个算法精度与性能的trade-off。比如2013年微软在NLP领域提出的双塔模型,被应用到推荐系统后经久不衰,到现在仍然在各大公司推荐系统里发光光热,究其原因:双塔模型上线有多方便/跑的有多快,谁用谁知道...
个性化推荐系统算法的演进相比于CV(计算机视觉)和NLP(自然语言处理)来说并没那么快,这一点从顶会论文数目上可窥一斑。究其原因我个人认为是其所应用的场景所限,个性化推荐本质上是一个人与物的匹配过程,所以使用这套系统的前提是应用场景下要有大量的人和大量的物,场景强绑定的特性提高了其研究门槛。而CV和NLP更像是一个个的基础组件,几十人甚至几人的团队就可在CV或者NLP的某个子任务上做出开创性工作然后将其推广至各个不同的应用场景下。比如CV里鼎鼎大名的YOLO系列,其作者凭一人之力一次次帮助各相关厂商主动升级各家的应用SDK...