论文笔记之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需要动量信息,而做完预训练后只保留了参数,没有保留动量相关信息)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351