【论文的思路】

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. vs2017 项目生成时不产生xml文件的方法

    在项目.csproj文件 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' & ...

  2. EF自动创建数据库步骤之一(实体类写法)

    文章演示使用EF自动创建数据库第一个步骤创建实体类. 一.创建表映射实体类 using System; using System.Collections.Generic; using System.C ...

  3. 人大金仓KCI

    #include "bin/libkci.h" static void exit_nicely(KCIConnection *conn) { KCIConnectionDestor ...

  4. Java中 / 和 %

    Java中 / 和 % 每天积累一些 Java 的知识点,补充自己的不足. 今天在刷面试题的碰到 % ,一下子还真想不起来这个运算符的作用,赶紧重温一下,这里我写了个小代码来体现 / 和 % 的区别. ...

  5. Golang循环中调用go func参数异常分析

    项目中,需要循环调用API服务器列表,在循环中使用go func创建协程时遇到了参数失灵的现象. 具体代码如下所示: for _, apiServerAddr := range apiServerAd ...

  6. Spring Cloud 微服务实战笔记

    Spring Cloud 微服务实战笔记 微服务知识 传统开发所有业务逻辑都在一个应用中, 开发,测试,部署随着需求增加会不断为单个项目增加不同业务模块:前端展现也不局限于html视图模板的形式,后端 ...

  7. SQLServer2017自动备份数据库

    本文截图来源: 地址一:https://blog.csdn.net/u010944388/article/details/86674078 地址二:https://www.cnblogs.com/ja ...

  8. MySQL Execution Plan--合理利用隐式的业务逻辑

    问题描述 优化过程中遇到一个SQL: SELECT SUM(user_value) FROM user_log ; 其执行计划为: . row *************************** ...

  9. 第11节-BLE协议HCI层的硬件接口

    本篇博客由韦东山视频整理所得 如何控制链路层让其发出广播包.数据包?通过HCI层向它发出命令,也可以通过ATT层.L2CAP层向LL层发出数据. 学习资料: 蓝牙协议core_v5.0.pdf < ...

  10. 使用WIFI网卡 dhcp动态获取IP

    前面几篇博客中,wifi网卡的ip都是手工设置的,本篇博客将来移植dhcp,使得wifi网卡可以动态的获取ip.路由等信息. 那我们去哪里下载dhcp源码呢?在pc机上执行dh +tab键,看一下有哪 ...