AutoRec
要点:
- 输出层的节点数与输入层相等,训练这个网络以期望得到近似恒等函数,网络结构类似于word2vec
评价:这个模型2015年由澳大利亚国立大学提出, 是个单隐层的神经网络推荐模型,网络结构简单,非常适合深度学习推荐系统的入门模型,但由于比较简单, 表达能力不足,并且往往共现矩阵非常的稀疏, 更加加大了模型的预测难度, 并没有真正的被应用。这个东西是将深度学习思想应用于推荐系统的初步尝试, 拉开了使用深度学习思想解决推荐问题的序幕。
DeepCrossing
要点:
- 类别型特征经过embedding处理,数值型特征直接进入stacking层,进行连接,这部分为经典深度学习架构
-
Multiple Residual Units为多层残差网络
image.png
class Residual_block(nn.Module):
def __init__(self, hidden_unit, dim_stack):
super(Residual_block, self).__init__()
# 两个线性层 注意维度, 输出的时候和输入的那个维度一致, 这样才能保证后面的相加
self.linear1 = nn.Linear(dim_stack, hidden_unit)
self.linear2 = nn.Linear(hidden_unit, dim_stack)
self.relu = nn.ReLU()
def forward(self, x):
orig_x = x.clone()
x = self.relu(self.linear1(x))
x = self.linear2(x)
outputs = self.relu(x + orig_x) # 残差链接
return outputs
评价:微软于2016年在KDD上提出的模型,它算是第一个企业以正式论文的形式分享深度学习推荐系统的技术细节的模型。由于手工设计特征(特征工程)花费巨大精力,因此文章利用全连接隐层进行特征交叉(但针对性不强)。以现在的角度看待这个模型是非常简单的,也就是Embedding+MLP的结构,但对当时影响是非常巨大。
NeuralCF
要点:
- GMF为元素积,MF和MLP的embedding向量是单独学习的, 并不是共享的, 作者在论文里面也给出了原因, 就是这样会更加的灵活,可以根据模型的复杂程度确定不同的隐向量的维度
评价:新加坡国立大学2017年提出,动机就是看着MF的内积操作比较简单, 表达能力不强, 作者就用一个“多层的神经网络+输出层”替换了矩阵分解里面的内积操作, 这样做一是让用户向量和物品向量做更充分的交叉, 得到更多有价值的特征组合信息。 二是引入更多的非线性特征, 让模型的表达能力更强。局限是只使用了用户和物品的ID特征,没有加入更多其他特征。
PNN
要点:
-
z部分为向量拼接,W权重矩阵为N×M,N为Feature长度,M为embedding长度,W[i,j]与相应的z[i,j]对应相乘并加和,有D1个W即可重复D1次,形成D1个输出,即L1层节点数(实际上就是z → D1的全连接嘛)
111.png
111.png -
p部分分为内积(IPNN)和外积模式(OPNN),与z部分类似,所不同的是W权重矩阵为N×N,z[i,j]改为p[i,j],内积模式为N个embedding两两内积(N×N个数),外积模式为N个embedding两两外积(N个N×N矩阵)再叠加到一起(N×N个数,等价于所有embedding求和后,与自身进行外积,图111.jpg)
image.png
image.png
111.jpg - 数值型特征不经过Product Layer,而是直接进入L1层的全连接
评价:PNN在2016年由上海交大提出,模型在输入、Embedding层, 多层神经网络及最后的输出层与DeepCrossing没有区别, 唯一的就是Stacking层换成了Product层。 DeepCrossing把所有特征进行了交叉, 没有针对性, 所以PNN这里就弄了个Product层, 专门进行特征之间的交叉的, 并且还提出了两种特征交叉的方式。
Wide & Deep
要点:
-
deep部分数值型特征直接进入隐层,类别类特征要先进行embedding
image.png - wide部分使用User Installed App和Impression App(曝光的App)的交叉,实际等价于两类特征元素两两相乘(外积)。公式
即所谓的“交叉积变换”,当第i个特征属于第k个组合特征时,
的值为1,否则为0。假如特征组合这个特征域长度为n,当长度为r和长度为s的特征域两两交叉时,n=r×s;当长度为r、长度为s、长度为t的特征域三三交叉时,n=r×s×t,以此类推。现假设该特征组合域第m维的特征组合为i_j_k,若
均为1,则,
也为1,
(其他
均为0,
,不论
取0或1,均不影响
),但若
其中之一为0,则由于
为1,则必有一个值为0,进而
。
image.png
image.png - 带L1正则化项的FTRL作为wide部分的优化方法(产生稀疏性),而使用AdaGrad作为deep部分的优化方法
评价:谷歌于2016年提出,Wide部分的主要作用是让模型具有较强的记忆能力,Deep部分的主要作用是让模型具有泛化能力,开创了组合模型的构造方法,对深度学习推荐模型的后续发展产生重大影响。
DCN(Deep & Cross)
要点:
- 类似wide & deep,但wide部分使用多层交叉层(Cross layer)对输入向量进行特征交叉,每个交叉层均保留了输入向量和初始化值
,因此输出输入之间的变化不会特别明显。
111.png
111.png
评价:2017年由斯坦福大学和谷歌的研究人员提出,由多层交叉层组成的Cross网络在Wide&Deep模型中Wide的基础上进行特征的自动化交叉,避免了更多基于业务理解的人工特征组合。
FNN
要点:
- 基本等同于DeepCrossing,但embedding部分用事先训练好的FM模型进行初始化,加快收敛速度
- l1和l2层使用tanh激活函数,输出层使用sigmoid激活函数
评价:2016年由伦敦大学学院提出,引入DNN对特征进行更高阶组合,减少特征工程,能在一定程度上增强FM的学习能力,这种尝试为后续深度推荐模型的发展提供了新的思路。缺点是,两阶段训练模式,在应用过程中不方便,且模型能力受限于FM表征能力的上限。和DeepCrossing一样,没有专门的特征交叉,针对性不强。
DeepFM
要点:
- Wide部分与Deep部分共享了输入特征,参数并未增加
- 数值型特征无需进行embedding
评价:2017年由哈工大和华为诺亚提出,用FM替换了原来的Wide部分,加强了浅层网络部分特征组合的能力(弥补了DeepCrossing和FNN的不足),动机类似于DCN
NFM
要点:
-
Bi-Interaction Pooling(特征交叉池化层),在该层将embedding的数据进行交叉(两两元素积,再求和,这一步可以参考FM的方法化简;该层不涉及任何学习参数,只是线性的对特征进行交叉),然后送入DNN进一步学习。
111.jpg
111.jpg - 与PNN模型的结构非常相似;与deepFM的区别是,deepFM的FM部分直接送到输入层,没有进一步学习
评价:2017年新加坡国立大学提出,将FM和DNN结合起来,FM最多只能学习二阶,NFM的思想是在FM学习的二阶特征的基础上加入DNN使其学习更高阶的特征,一方面FM学好二阶特征之后DNN学习更高阶特征会更加容易更好学,另一方面FM学习了低阶特征然后DNN继续学习高阶特征,又是一次低阶特征和高阶特征组合的模型。
AFM
要点:
- 这个模型之中并没有DNN模块,但是保存了NFM的二阶交叉特征池化层
-
需要注意的是Attention的加入,并不是单单给某一个二维交叉特征一个权重,这样子的话对于未在训练数据中出现的交叉特征就无法进行权重赋予。所以在上图中也可以看到Attention是一个Net的形式给出。也就是用了一个MLP将注意力分数进行参数化,该注意力网络的结构是一个简单的单全连接层加softmax输出层的结构
image.png - 防止过拟合常用的方法是Dropout或者L2 L1正则化。AFM的做法是:在Pair-wise Interaction Layer的输出使用Dropout;在Attention Network中使用L2正则化
评价:2017年由浙江大学和新加坡国立大学研究员提出的一个模型(和NFM是同一个作者),AFM模型其实就是从前面讲解过的NFM模型的进化升级版, 该模型和NFM模型结构上非常相似, 算是NFM模型的一个延伸,在NFM中, 不同特征域的特征embedding向量经过特征交叉池化层的交叉,将各个交叉特征向量进行“加和”, 然后后面跟了一个DNN网络,但是NFM中的加和池化,它相当于“一视同仁”地对待所有交叉特征, 没有考虑不同特征对结果的影响程度,作者认为这可能会影响最后的预测效果, 因为不是所有的交互特征都能够对最后的预测起作用。 没有用的交互特征可能会产生噪声。或者说加大对预测结果重要的特征,抑制噪声特征。
DIN
要点:
- 与Base相比,加入了attention机制,attention机制在数学形式上只是将过去的平均操作或加和操作换成了加权和或加权平均操作
- 商铺id只跟用户历史行为中的商铺id序列发生作用,商品id亦然
评价:DIN模型是阿里妈妈团队2018年提出的CTR预估模型,虽然是几年前提出的,但是现在应用仍比较广泛
DIEN
要点:
- 与DIN相比,使用GRU引入了历史行为序列信息,GRU解决了RNN梯度消失问题,与LSTM相比参数更少收敛更快
- 行为序列层作用为embedding;兴趣抽取层作用为模拟用户迁移;兴趣进化层在抽取层的基础上加入attention,模拟与广告相关的兴趣进化,后两者是关键
评价:2019年阿里妈妈提出的DIN演化版本