论文笔记之Neural Collaborative Filtering

Neural Collaborative Filtering

文中指出虽然之前有一些工作使用deep learning来解决推荐问题,但这些工作基本上使用deep learning来对辅助信息建模,对于协同过滤的关键信息——user和item的交互信息,之前的工作仍然使用矩阵分解(MF),将users和items映射到一个共享的隐空间,然后对users和items的latent feature做内积。
用神经网络结构代替内积操作,可以从数据中学到任意函数,基于此本文提出了NCF模型(Neural network-based Collavorative Filtering)。本文专注于利用隐反馈信息(implicit feedback, 如浏览、点击等行为;explicit feedback指评分、评论等行为)。

Learning from Implicit Data

有M个users, N个items。user-item交互矩阵Y(M * N维,反应了用户的隐反馈信息)定义为,

yu,i = 1只能说明用户u和物品i有交互,并不能说明用户u喜欢物品i;同样的,yu,i = 0不能说明用户u不喜欢物品i。
在这种情况下,观察到的数据至少能从一定程度上反应用户的兴趣,而未观察到的数据只能视为missing data,这就导致了负反馈的缺乏。
隐反馈推荐问题就是要估计Y中未观测物品的score,然后以此来对物品排序。(再次强调,这种应用场景下,对于以点击或浏览的物品是不知道用户是否喜欢的)
问题可以描述为学习下式,

y^u,i为交互yu,i的预测score,Θ为模型参数,f为映射函数。
文中提到优化目标参数,一般有两种目标函数:pointwise loss和pairwise loss。pointwise loss通常用于回归框架,最小化y^u,i和yu,i的squared loss。对于缺乏negative data问题,将所有的未观测数据视为负反馈,或者从未观测数据中采样negative instances。
pairwise learning中,观测到的数据应该排在未观测数据的前面,因此最大化y^u,i和yu,i的边界。
NCF支持pointwise和pairwise learning两者。

Matrix Factorization

pu表示用户u的latent vector,qi表示物品i的latent vector,MF使用pu和qi的内积来估计y^u,

K表示latent space的维度。MF可以看作是latent factor的线性模型。

上图说明了MF的局限性。对于user-item矩阵(a),u4与u1最相似,接下来是u3,最后才是u2。而在latent space (b)中,使p4更靠近p1会使p4更靠近p2而不是p3,这会增大ranking loss。

可以增大K来解决这个问题,但会降低模型的泛化能力,可能导致过拟合。
本文使用深度神经网络来学习这种交互关系。

NEURAL COLLABORATIVE FILTERING

最底下的input layer包括两个特征向量,分别描述用户u和物品i,它们可以根据具体问题具体定制。在本文中,用户u和物品i的one-hot作为输入。
上面是embedding layer,采用全连接,将稀疏的input映射成稠密的embedding(user和item的embedding都是k维)。
user和item的embedding向上进入全连接的神经网络结构,称为neural collaborative filtering layers,将latent vector映射成预测的score。(对于不同的问题,这里的每一层layer也是可以定制的)
layer X的维度决定了模型的capability。
通过最小化y^u,i和yu,i的pointwise loss来训练模型。(文中提到另一种训练模型的方法,使用pairwise learning,比如使用Bayesian Personalized Ranking和margin-based loss,但文中后面部分使用的是pointwise loss)
整个预测模型可以表示为,

P(M * K维)和Q(N * K维)分别表示users和items的latent factor matrix,Θf为模型参数。
f被定义为一个多层神经网络,因此可以表示为,

φout表示输出层映射,φx表示第x层的映射,共X层。

Learning NCF

大多数的pointwise方法将损失函数定义为,

y表示Y中观测到的交互关系集合,y-表示负样本集合(可以是所有的未观测交互,也可以是从中采样的一部分)。wui是一个超参数,表示实例(u,i)的权重。使用squared loss可以解释为假设观测数据由一个高斯分布产生。
本文指出,对于implicit data,这种方式并不是特别合适。因为在implicit data中,目标值yu,i是binary的,表示用户u是否和物品i产生过交互。
本文提出了一种针对于implicit data的binary性质的损失函数。
用yu,i表示物品i与用户u相关,0表示不相关,预测score y ^ u,i表示物品i和用户u相关的程度。y ^ u,i的值在[0,1]之间,因此在output layer可以用sigmoid。
于是,定义likelihood为

损失函数为

(其实就是交叉熵)
用SGD进行优化。
对于负样本y-,在SGD的每次迭代中从未观测的数据中均匀采样,采样的数量与观测数据的数量相关。(文中提到一些非均匀采样策略可能会有更好的表现)

Generalized Matrix Factorization (GMF)

从NCF的角度来解释MF。pu表示用户u的embedding,qi表示物品i的embedding。将NCF的第一层定义为哈达玛积

然后将得到的向量映射到输出层

aout表示激活函数,h表示权重向量。如果令aout为identity function(即y=x),令h为全1的向量,那么就得到了MF模型(相当于对pu和qi求内积)。
在NCF的框架下,MF可以被泛化和拓展。比如令h由数据学到,或者令aout为非线性函数。
文中,作者提出了GMF(Generalized Matrix Factorization)模型,令aout为sigmoid函数,令h从数据中学到,并使用log loss。

Multi-Layer Perceptron (MLP)

文中指出整合user和item的latent feature,如果仅仅是简单的concatenate(向量stacking),或者像GMF中那样,使用固定的element-wise product(哈达玛积),不能充分反映两者的交互关系。因此,文中提出在concatenate后,用MLP来学习它们的交互关系。

可以看到,第一层简单的把两者stacking起来,之后由MLP来进行特征整合,最后将整合得到的向量和每一维的权重向量h(由模型学习得到)相乘,再做sigmoid得到输出。
文中提出tower pattern的效果比较好,即下面的hidden层单元多,上面的hidden层单元少。文中使用的是,每上去一层,减半hidden层中的单元数。

Fusion of GMF and MLP

考虑将GMF和MLP结合起来,更好的对复杂的user-item关系建模。
最简单最直接的方式就是让GMF和MLP共享同一个embedding layer,然后将两者的output结合起来。举个例子,结合GMF和一层MLP的模型如下

然而,让GMF和MLP共享embedding可能会限制融合模型的表现。比如说,这隐含了GMF和MLP必须有相同size的embedding。对于一些数据集,可能两者选择各自合适的embedding size会更好,这时候这种组合方式就不能够获得特别好的表现了。
为了能够更加灵活的结合两个模型,我们让GMF和MLP学习各自的embedding,结合两个模型通过整合各自最后的hidden layer。

pGu表示GMF部分的user embedding,pMu表示MLP部分的user embedding。
qGi表示GMF部分的item embedding,qMi表示MLP部分的item embedding。
在MLP部分,使用relu作为激活函数。
该模型结合了MF的线性和DNN的非线性,作者给其起名为NeuMF(Neural Matrix Factorization)。
模型参数的学习可以用标准的back-pop。

Pre-training

NeuNF的目标函数是非凸的,因此基于梯度的优化方法只能找到局部最优解。文中提出通过预训练GMF和MLP来初始化NeuMF。
首先随机初始化GMF和MLP来训练,直到收敛,然后用这些模型参数来初始化NeuMF中的相关部分。在output layer,整合两个模型的权重为

hGMF和hMLP分别表示预训练的GMF和MLP模型中的h。α是一个超参数。
具体的,预训练GMF和MLP时,使用了Adam,将模型参数输入到NeuMF做fine-tuning时,用SGD(因为Adam需要动量信息,而做完预训练后只保留了参数,没有保留动量相关信息)。

你可能感兴趣的:(论文笔记之Neural Collaborative Filtering)