【论文的思路】

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. 单词大学CET六四级英语

    2012年大学英语六级词汇 baseball n.棒球:棒球运动 basement n.地下室:地窖:底层 basin n.内海:盆地,流域 battery n.炮兵连:兵器群 battle vi.战 ...

  2. 使用linq对ado.net查询出来dataset集合转换成对象(查询出来的数据结构为一对多)

    public async Task<IEnumerable<QuestionAllInfo>> GetAllQuestionByTypeIdAsync(int id) { st ...

  3. 深入解析 Go 中 Slice 底层实现

    原文: https://halfrost.com/go_slice/   切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合.切片的设计想法是由动态数组概念而来,为了开发者可以更加 ...

  4. 【Visio】亲测Visio2013激活,破解工具下载

    破解方法地址: https://blog.csdn.net/qq_38276669/article/details/85046615

  5. 7.vertical-align属性

    本节学习目标: 图片.表单和旁边的文字对齐 解决图片底部默认空白缝隙问题 1.图片.表单和旁边的文字对齐 默认的图片.表单等行内元素或行内快元素是和文字的基线对齐的,但在实际情况下,我们想让他们中间对 ...

  6. vue-cli随机生成port源码

    const portfinder = require('portfinder'): const port = await portfinder.getPortPromise(): 两行代码 端口搜索范 ...

  7. QML官方文档:Qt Quick Controls 1和2对比

    Qt Quick Controls有1和2两个版本,在程序中会看到好多1和2版本混合使用的情况. 原文:https://doc.qt.io/qt-5/qtquickcontrols2-differen ...

  8. 浅谈华为验厂对MES系统的要求

    众所周知,华为对供应商在管理.防错.品控.追溯等方面的要求都非常严格.在华为验厂时,对供应商的信息系统,尤其是MES系统的评估也是有非常具体的要求.那么我们今天就来谈谈华为验厂时,对MES系统有哪些具 ...

  9. 电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程)

    电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程) 电信NBIOT 2 - 数据上行(中间件获取电信消息通知) 电信NBIOT 3 - 数据下行 电信NBIOT 4 - NB73模块上行测 ...

  10. JVM Code Cache空间不足,导致服务性能变慢

    本文阅读时间大约5分钟. 有业务反馈,线上一个应用运行了一段时间之后,在高峰期之后,突然发现处理能力下降,接口的响应时间变长,但是看Cat上的GC数据,一切都很正常. 通过跳板机上机器查看日志,发现一 ...