深度推荐模型


深度学习CTR模型演化图谱

目前的主流思路:
(1)加层数,加结构复杂度:AutoRec->Deep Crossing
(2)改变特征交叉方式:NeruralCF(神经网络协同过滤),PNN(基于积操作的神经网络)
(3)组合模型:Wide&Deep及其变种DeepFM等,两种不同且优势互补的深度学习网络的组合。
(4)FM深度升级版
(5)注意力机制
(6)序列模型
(7)强化学习结合


AutoRec(自编码器):类PCA,输入≈输出

自编码器能够存储所有数据向量的编码信息,使得,但是因为重建函数的参数比输入向量的维度(参数个数)远远地少,所以间接实现了数据压缩和降维的工作。输出向量并不完全等于输入向量,某种程度上实现了泛化,甚至可以填补一定的缺失维度值。

物品评分向量r做输入,f 和 g 是输出和隐藏层的激活函数

,前面是残差平方和,后面是正则

ri的第u维就是用户u对物品i的评价

优势:一次性输入就可以,劣势:向量稀疏可能影响效果。

  • 为什么可以预测缺失维度?

在Rating Matrix中,没有打分的部分不参与计算,encode decode的过程中只让模型去拟合已有的打分部分,让这一部分充分拟合好,然后对于没有数据的部分,训练好的权重会给出一个非零值,这就是模型预测的结果。最终,原来Rating Matrix中为零的部分在模型训练完后也变也有了数值,可以根据此来做推荐。(对于缺失值,用默认值或者平均值代替可以重建恢复(基于平方残差和最小))

可以认为是借鉴了其他用户对该商品的打分(该商品的各隐特征权重),以及该用户对其他商品的打分(对各个隐特征的权重)

  • 为什么可以压缩/降维?

假如我们通过一组数据训练出了我们的自编码器,然后我们拆掉自编码器的解码器(decoder),就可以用剩下的编码器(encoder)来表征我们的数据了。隐藏层的神经元数目远低于输入层[0,1,0,1],那么就相当于我们用更少的特征(神经元)[0,1,0]去表征我们的输入数据,从而达到降维压缩的功能。

  • 为什么可以去噪?

上图第一行就是加噪后的手写体数据集,第二行则是原本的手写体数据集。我们把加噪后的数据集当成输入,原本的数据集当做输出,训练一个自编码器,让它在训练过程中学习数据的规律,从而把噪声去掉

  • 加入L1稀疏,可以得到少且有用的特征项。

Deep Crossing模型(残差,embedding)

离散特征:搜索词,广告关键词,落地页(具体页面)
连续特征:点击率

(1)onehot离散特征编码过于稀疏,使用embedding技术(word2vec)来解决稠密化+降维的问题。
(2)如何解决特征交叉自动化的问题,Stacking层负责拼接数值型特征和离散型特征组成新的特征向量,Multiple Residual Units(使用残差网络Resnet)对这些新的特征向量进行交叉组合,使得模型能抓取到更多非线性特征和组合特征的信息。

image.png

NeuralCF(深度学习+协同过滤CF矩阵分解)

image.png

传统矩阵分解只是利用了内积,而NeualCF的GMF层使用了元素积(对应维度相乘得到另一个向量)进行特征互操作。右侧的MLP层则跟上面的Deep Crossing基本上一样。


PNN

将Deep Crossing的stacking层的拼接改成Product操作进行两两交互。Product层分为两个部分,一个是线性操作层(加权融合),一个是乘积操作层(内积、外积)

外积会有平均池化的操作,这可能会模糊很多信息,建议慎用。

相比简单的交给全连接层,内积和外积操作更有针对性。


Wide&Deep(LR + DNN)

更好综合原始特征和新的交叉特征,Wide部分负责"记忆能力"(对于相似的历史行为能够快速反应),Deep部分负责"泛化能力"(对于历史上没有相似的行为能够推测出来结果,发掘稀有特征能力)

缺点:Wide部分还是需要人工特征工程。

举个例子,逻辑回归LR对于强特征反应很快,直接调大参数权重。神经网络层数多,特征相互交叉最后反而记忆消退。

反向传播是LR和DNN都有的,两个模块是一起训练的

FNN(用FM的隐向量完成Embedding层初始化)

对于Embedding层初始化的问题,原先采用随机初始化,现在采用FM预训练的方法。

image.png
FM

DeepFM(Deep取代Wide抽取低阶特征)

FM替代Wide提取低阶组合特征,Deep提取高阶组合特征,共享相同的embedding层

image.png

AFM(注意力机制)

注意力机制应用在FM的交叉特征上

image.png

DIEN(引入基于注意力机制的GRU时间序列模型)

GRU解决了LSTM梯度消失的问题,参数又更少。工程上看串行效率比较低,延迟会很严重,需要很多优化。

image.png
image.png

你可能感兴趣的:(深度推荐模型)