【论文的思路】

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. C# vb .NET读取识别条形码线性条码UPC-E

    UPC-E是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的 ...

  2. C# winform窗体简单保存界面控件参数到xml

    引用网上的 XMLHelper 地址 :https://www.cnblogs.com/chnboy/archive/2009/04/02/1427652.html 稍做修改 using System ...

  3. 架构师小跟班:推荐46个非常经典的Linux面试题

    大家都知道,做后端开发,做着做着就变成全栈了.一般服务器维护应该是运维的事情,但很多很多公司都是后端工程师在做.所以,基本的Linux系统维护也是后端工程师的必修课.问题一: 绝对路径用什么符号表示? ...

  4. Width Height -- (1)

    Width和Height应该是我们学习CSS时,最先接触到的属性了,一宽一高. 我们知道页面当中的标签分为块级元素和行内元素,它们最大的区别就在于,块级元素可以设置宽高,行内元素不能设置宽高. 举例说 ...

  5. QT场景视图父子关系图元打印研究

    在之前的一篇文章中,实现了QT场景视图的打印功能,主要通过render函数来实现,非常简单和方便. 在实际的项目需求中,除了打印整个场景外,还需要对单个图形进行打印操作,基于item的图形可以在pai ...

  6. 2 Linux磁盘管理

    Linux磁盘管理:磁盘管理好坏直接关系到整个系统的性能问题常用三个命令:df.du.fdiskdf:列出文件系统的整体磁盘使用量 df 参数 目录或文件名 -a:理出所有文件系统,包括系统特有的 / ...

  7. 安装gcc-c++报错解决办法

    问题 每次安装依赖包gcc-c++的时候,经常会遇到包如下错误   Error: Package: libstdc++-devel--.el7_4..x86_64 (ultra-centos-7.4- ...

  8. elasticsearch安装中文分词器插件smartcn

    原文:http://blog.java1234.com/blog/articles/373.html elasticsearch安装中文分词器插件smartcn elasticsearch默认分词器比 ...

  9. 03、磁盘管理+swap分区创建+磁盘配额+自动挂载

    磁盘管理 分区标识 一般用4位标识,前两位,磁盘类型,第3位,磁盘编号,第4位,分区编号 如: /dev/sda1     sd  磁盘类型    a  磁盘编号   1  分区编号 [root@s1 ...

  10. asp.net Server.Transfer

    页面跳转传参. 如果不是通用的跳转可以通过,在原始页面定义对象保存数据 跳转的目标页面可以: SourcePage page=(SourcePage)Context.Handler; //获取源页面的 ...