推荐算法经典模型简单梳理

最近从cv坑里跳出来开始学习推荐算法了,初学推荐算法,有误还请指出。


推荐算法经典模型简单梳理

机器学习模型

CF 协同过滤

每个用户和物品分别匹配一个向量,用用户u和物品i的内积作为U对于i的评分重构评分函数,以此来构建用户和物品的特征。推荐时可以按照物品相似度进行推荐,根据用户已经评价过的正反馈物品,估计评分为
Ru,p=hHwphRuh R_{u,p} = \sum_{h\in H} w_{ph}\cdot R_{uh}
HH是用户u的正反馈物品集合,wphw_{ph}是物品p和物品h的相似度。

FM 因子分解

对于逻辑回归的交叉项权重,用隐向量的乘积wiTwj\mathbf{w}_{i}^T\cdot \mathbf{w}_j代替wijw_{ij},可以将参数量从n2n^2减到nknk

FFM:

在FM的基础上引入特征域的概念,相当于将稀疏特征进行分组,每个组又构成一个one-hot向量。
对于特征域为A,和不同特征域求内积的时候使用的隐向量是不同的,所以应该参数量是knf(注意还要和与自己同一个域的不同变量求内积);但是这个计算复杂度又是kn2kn^2,因为又是所有样本两两之间都计算一次。

GBDT+LR

对于GBDT的每一棵子树,对每个x,都会得到其属于某个叶子节点,将这个叶子节点置为1,其他叶子节点置为0,就得到了这棵树的特征向量;把所有子树的特征向量拼起来就得到了需要的高维稀疏向量,将它传给LR。
回归树的优点:
能够学到高阶交叉特征,这个阶数就等于子树的深度。
回归树的缺点:
丢失了大量的准确数值信息,容易产生过拟合。GBDT的训练时间太长。

LS-PLM

在LR的基础上加入聚类的思想。就是属于第i类的概率乘以在第i类产品中对应的CTR
f(x)=i=1mπi(x)ηi(x)=i=1meμixj=1meμjx11+ewix f(x) = \sum_{i=1}^{m} \pi_i(x) \eta_i(x) = \sum_{i=1}^m \frac{e^{\mu_ix}}{\sum_{j=1}^m e^{\mu_jx}}\cdot \frac{1}{1+e^{-w_ix}}
优点:非线性学习能力强,自适应能力强;用了L1和L21范数(分组L2范数)

深度学习模型

协同过滤方向

AutoRec

VV是评分矩阵,用自编码器的思想,使用重构损失训练:
mini=1nVih(Vi;θ)2+λ2(W2+V2) min \sum_{i=1}^n \Vert V_{i}-h(V_i;\theta) \Vert^2 + \frac{\lambda}{2}(\Vert W \Vert^2 + \Vert V\Vert^2)
其中WW是MLP的参数。

Neural CF

即将用户和物品的向量经过稠密化Embedding层之后,拼接在一起经过多层MLP得到CTR,即用MLP来代替”内积“这种操作
原始的矩阵分解模型使用内积来使用户和物品向量进行交互,这个模型还可以引入element-wise的交互方式,后面还有更多的交互。
引入element-wise之后的特征向量和经过MLP的特征向量拼在一起,交给输出层。叫做Neural CF混合模型。

因子分解方向

PNN

推荐算法经典模型简单梳理

第一层是Embedding层,将稀疏的类别型特征转换成稠密的Embedding向量。
之后将各个特征域的特征进行交互操作,有两种交互操作,一种就是经典的内积,一种是外积,即fifjTf_if_j^T
原文提出了一种外积操作的降维方法,相当于加上平均池化:
p=i=1Mj=1MfifjT=fΣfΣT,   fΣ=fi p = \sum_{i=1}^{M}\sum_{j=1}^{M}f_if_j^T = f_{\Sigma} f_\Sigma^T, \ \ \ f_\Sigma = \sum f_i
这之后再用局部全连接层将内积部分和外积部分分别映射成D1D_1维输入向量再拼接输给上面的全连接层。

注意:在实际应用的时候,平均池化应该只能在同一特征域里使用,因为不同特征域的Embedding向量不在一个向量空间中,平均起来没有意义。

Wide & Deep

推荐算法经典模型简单梳理

W&D可以整合各种不同类的数据,对于本身就是Dense的数值型特征,可以直接输入给连接层,而类别型特征都要经过Embedding,把Embedding和数值型特征拼接输入给右边的多隐层全连接网络。而Wide部分的交叉可以表示为
ϕk(x)=i=1dxicik, cik=1, 0 \phi_k(x) = \prod_{i=1}^d x_i^{c_{ik}},\ c_{ik}=1,\ 0
然后给输出层的就是把所有交叉项拼在一起再进行线性变换的结果。
P(Y=1x)=σ(wwideT[x,ϕ(x)]+wdeepTa(lf)+b) P(Y=1 | \mathbf{x})=\sigma\left(\mathbf{w}_{\text {wide}}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{\text {deep}}^{T} a^{\left(l_{f}\right)}+b\right)

Wide&Deep的关键:简单模型的强“记忆能力”与复杂模型的“泛化能力”的结合。“记忆能力”是指模型由于过于简单但在预测时更容易被出现过的历史数据直接影响。虽然作者说的很有道理,但是感觉用这两个词不是很恰当,因为现在的研究大致已经表明了,过参数化的神经网络有很强的“记住数据”的能力,而复杂的神经网络往往需要剪枝来提高泛化能力。

DeepFM

由于Wide部分的交叉项还要人工设计,所以提出用FM代替Wide部分,就成了DeepFM。
推荐算法经典模型简单梳理
在FM部分,有将系数特征进行相加的操作(其实就是为了一次项的和)
yFM=w,x+i=1nj=i+1nVi,Vjxixj y_{FM} = \langle w, x \rangle + \sum_{i=1}^n\sum_{j=i+1}^n \langle V_i, V_j \rangle x_i x_j

注意力机制

DIN

不同的特征对于点击率的重要程度是不同的,比如买过“鼠标”的用户更可能点击“键盘”的广告中。使用“注意力机制”来进行加权,用于Embedding层。由阿里提出。
Vu=i=1Ng(Vi,Va)Vi V_u = \sum_{i=1}^N g(V_i, V_a) V_i
其中VuV_u是用户u的Embedding,VaV_a是广告a的Embedding,ViV_i用户u的第i次行为的Embedding。注意力打分函数是将[Vi,ViVa,Va][V_i, V_i - V_a, V_a]拼起来后经过MLP得到的。