【论文的思路】

NCF 框架如上:
1、输入层:首先将输入的user、item表示为二值化的稀疏向量(用one-hot encoding)
2、嵌入层(embedding):将稀疏表示映射为稠密向量(??如何映射)
所获得的用户(项目)的嵌入(就是一个稠密向量)可以被看作是在潜在因素模型的上下文中用于描述用户(项目)的潜在向量。
3、NCF 层:将用户嵌入和项目嵌入送入多层神经网络结构,我们把这个结构称为神经协作过滤层,它将潜在向量映射为预测分数。
4、输出层:预测分数
预测模型为:

其中,
函数 f 被定义为多层神经网络,可以被定义为:

其中,
【NCF的学习过程】
——运用均方误差(squared loss)进行回归:
其中:
y  表示交互矩阵 Y 中观察到的条目(如对电影有明确的评分,评级)
y− 表示消极实例(negative instances,可以将未观察的样本全体视为消极实例,或者采取抽样的方式标记为消极实例)
w_ui 是一个超参数,用来表示训练实例 (u,i) 的权重。
 
似然函数的定义:
对似然函数取负对数,我们得到(负对数可以用来表示Loss函数,而且还能消除小数乘法的下溢出问题):
(如何推的?——涉及到交叉熵损失函数: https://blog.csdn.net/red_stone1/article/details/80735068
 
——这是NCF方法需要去最小化的目标函数,并且可以通过使用随机梯度下降(SGD)来进行训练优化。

 【广义矩阵分解】

(证明MF是如何被解释为NCF框架的一个特例)
1、首先左侧的GMF层:
由于输入层是用户(项目)ID中的一个one-hot encoding编码,所获得的嵌入向量可以被看作是用户(项目)的潜在向量
用    表示用户的潜在向量   , 表示项目的潜在向量   
 
  • 定义第一层神经CF层的映射函数为:
  • 将向量映射到输出层:
 
其中,a_out和h分别表示输出层的激活函数和连接权:
激活函数为a_out :sigmoid函数 
权重h为 : 通过log loss(第3.1.1节)学习 h
(当a_out 是一个恒等函数,h权重全为1,即为MF模型)
2、右侧的MLP层:
由于NCF用两条路线来对用户和项目建模(图2中可以明显看出用户和项目两个输入),自然地,需要通过两个路线,把他们各自的特征连接结合起来。
 
NCF框架下的MLP模型定义为:
其中,W_x,b_x,a_x分别表示x层的感知机中的权重矩阵、偏置向量(神经网络的神经元阈值)和激活函数(选择的是ReLU)。
与GMF不同的有两个部分:
1)首先是user_latent和item_latent的merge的部分,不再采用内积的形式,而是contract拼接的方式;
2)再者就是for循环构建深层全连接神经网络,内部Layer的激活函数是relu,最后一层的激活函数仍然是sigmoid。
 
 
3、二者结合的NeuMF层:
        到目前为止,我们已经开发了NCF的两个实例:
  GMF,它应用了一个线性内核来模拟潜在的特征交互;
  MLP,使用非线性内核从数据中学习交互函数。
  接下来的问题是:我们如何能够在NCF框架下融合GMF和MLP,使他们能够相互强化,以更好地对复杂的用户-项目交互建模?
 
为了使得融合模型具有更大的灵活性,我们允许GMF和MLP学习独立的嵌入(embedding)[ instead of 让GMF和MLP共享相同的嵌入层(Embedding Layer)],并结合两种模型通过连接他们最后的隐层输出。
公式如下:

其中:
MLP层的激活函数是 ReLU,
 
该模型结合MF的线性度和DNNs的非线性度,用以建模用户-项目之间的潜在结构。我们将这一模式称为“NeuMF”,简称神经矩阵分解(Neural Matrix Factorization)。该模型的每个模型参数都能使用标准反向传播(back-propagation)计算。
 
【预训练过程】
由于 NeuMF 是 GMF 和 MLP 的组合,我们建议使用 GMF 和 MLP 的预训练模型来初始化NeuMF。
1、首先 训练随机初始化的 GMF 和 MLP 直到模型收敛。
( 采用自适应矩估计(Adam,Adaptive Moment Estimation), 通过对不频繁的参数进行频繁和更大幅度的更新来适应每个参数的学习速率。 Adam方法在两种模型上的收敛速度都比普通SGD快,并缓解了调整学习率的痛苦。)
2、然后 用它们的模型参数初始化 NeuMF 相应部分的参数。
( 在将预先训练的参数输入NeuMF之后,我们用普通SGD而不是Adam进行优化。
这是因为Adam需要保存更新参数的动量信息(momentum information)。因为我们用预先训练的模型参数初始化NeuMF,并且放弃保存动量信息,不适合用基于动量的方法进一步优化NeuMF。)
3、 唯一的调整是在输出层,在那里我们将两者用权重连接起来:
其中,
 
 
 
【4 实验】
围绕三个研究问题开展实验:
RQ1 我们提出的NCF方法是否胜过 state-of-the-art 的隐性协同过滤方法?
RQ2 我们提出的优化框架(消极样本抽样的log loss)怎样为推荐任务服务? 
RQ3 更深的隐藏单元是不是有助于对用户项目交互数据的学习?
 
【数据集】
1、MovieLens-1M :userid-itemid-rating-timestamp
这个电影评级数据集被广泛地用于评估协同过滤算法。我们使用的是包含一百万个评分的版本,每个用户至少有20个评分。 虽然这是显性反馈数据集,但我们有意选择它来挖掘(模型)从显式反馈中学习隐性信号[21]的表现。为此,我们将其转换为隐式数据,其中每个条目被标记为0或1表示用户是否已对该项进行评分。
2、Pinterest:
 

【评估方案】
为了评价项目推荐的性能,采用了 leave-one-out 方法评估,该方法已被广泛地应用于文献[1,14,27]
即:对于每个用户,我们将其最近的一次交互作为测试集(数据集一般都有时间戳),并利用余下的培训作为训练集
 
由于在评估过程中为每个用户排列所有项目花费的时间太多,所以遵循一般的策略[6,21],随机抽取100个不与用户进行交互的项目,将测试项目排列在这100个项目中。
排名列表的性能由命中率(HR)归一化折扣累积增益(NDCG)[11]来衡量。
 
没有特别说明的话,我们将这两个指标的排名列表截断为10(TopK=10)。
如此一来,
HR直观地衡量测试项目是否存在于前10名列表中,
NDCG通过将较高分数指定为顶级排名来计算命中的位置。我们计算了每个测试用户的这两个指标,并求取了平均分。
  
 
 
 
 
 
【Reference】
1、(全文翻译)【翻译】Neural Collaborative Filtering--神经协同过滤:https://www.cnblogs.com/HolyShine/p/6728999.html
2、(源码解析)【推荐系统】neural_collaborative_filtering(源码解析):https://www.cnblogs.com/wzyj/p/8974782.html
3、(一个小demo的实践)Basic-NCF-Demo:https://www.jianshu.com/p/6173dbde4f53

【RS】:论文《Neural Collaborative Filtering》的思路及模型框架的更多相关文章

  1. 论文笔记 : NCF( Neural Collaborative Filtering)

    ABSTRACT 主要点为用MLP来替换传统CF算法中的内积操作来表示用户和物品之间的交互关系. INTRODUCTION NeuCF设计了一个基于神经网络结构的CF模型.文章使用的数据为隐式数据,想 ...

  2. 【翻译】Neural Collaborative Filtering--神经协同过滤

    [说明] 本文翻译自新加坡国立大学何向南博士 et al.发布在<World Wide Web>(2017)上的一篇论文<Neural Collaborative Filtering ...

  3. 协同滤波 Collaborative filtering 《推荐系统实践》 第二章

    利用用户行为数据 简介: 用户在网站上最简单存在形式就是日志. 原始日志(raw log)------>会话日志(session log)-->展示日志或点击日志 用户行一般分为两种: 1 ...

  4. 【RS】Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering - 基于拉普拉斯分布的稀疏概率矩阵分解协同过滤

    [论文标题]Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering  ...

  5. 【RS】Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model - 当因式分解遇上邻域:多层面协同过滤模型

    [论文标题]Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model   (35th-ICM ...

  6. 【RS】List-wise learning to rank with matrix factorization for collaborative filtering - 结合列表启发排序和矩阵分解的协同过滤

    [论文标题]List-wise learning to rank with matrix factorization for collaborative filtering   (RecSys '10 ...

  7. 【RS】Amazon.com recommendations: item-to-item collaborative filtering - 亚马逊推荐:基于物品的协同过滤

    [论文标题]Amazon.com recommendations: item-to-item collaborative filtering (2003,Published by the IEEE C ...

  8. 【RS】AutoRec: Autoencoders Meet Collaborative Filtering - AutoRec:当自编码器遇上协同过滤

    [论文标题]AutoRec: Autoencoders Meet Collaborative Filtering (WWW'15) [论文作者]Suvash Sedhain †∗ , Aditya K ...

  9. mahout算法源码分析之Collaborative Filtering with ALS-WR 并行思路

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. mahout算法源码分析之Collaborative Filtering with ALS-WR 这个算 ...

随机推荐

  1. Console程序下监控EFCore生成的SQL语句!

    最近这两天在使用控制台程序学习EFCore,突然想看看生成的SQL语句,所以在网上找到一位大神的分享的方法! 准备工作: 1). MySqlEFCore NuGet:   Pomelo.EntityF ...

  2. flink Iterate迭代基本概念

    基本概念:在流中创建“反馈(feedback)”循环,通过将一个算子的输出重定向到某个先前的算子.这对于定义不断更新模型的算法特别有用. 迭代的数据流向:DataStream → IterativeS ...

  3. mysql单个表拆分成多个表

    一.横向拆分 create table 新表的名称 select * from 被拆分的表 order by id limit int1,int2 int1为其实位置,int2为几条 注意:这样拆分后 ...

  4. 160--Intersection Of Two Linked List

    public class IntersectionOfTwoLinkedList { /* 解法一:暴力遍历求交点. 时间复杂度:O(m*n) 空间复杂度:O(1) */ public ListNod ...

  5. rsync免密码远程复制文件

    目标: 从云服务器(112.77.69.212)把mongodb中的文件同步到本地. 步骤一:在云服务器上创建用户 $ adduser monbak $ passwd monbak 步骤二:设置免密登 ...

  6. Leetcode——2. 两数相加

    难度: 中等 题目 You are given two non-empty linked lists representing two non-negative integers. The digit ...

  7. 201871010102-常龙龙《面向对象程序设计(java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  8. home_url()用法小结|wordpress函数

    home_url()检索可访问当前站点的URL(推荐将<?php bloginfo('url'); ?>用<?php home_url(); ?>来替代),使用适当的协议返回' ...

  9. 进程及Python实现

    进程杂谈 #进程就是正在执行的一个过程,是对正在运行程序的一个抽象 #进程由程序.数据集和进程控制块(最重要的,进程切换 状态如何保存,恢复和记录)组成 """ 进程调度 ...

  10. robot framework Selenium2library wait小问题

    最近在使用selenium2Library时,用到其中的 Wait Until Page函数,因我们的网页相对比较敏感,经常获取不到,不明觉历 看看源码吧,如下: def wait_until_pag ...