前言

这一篇文章我们来谈一下2017年新加坡国立大学提出的基于深度学习的系统过滤模型NeuralCF。我们在之前讲过矩阵分解技术,将协同过滤中的共现矩阵分解成用户向量矩阵以及物品向量矩阵。那么Embedding的思路也是一样的,只不过不是通过矩阵分解的形式,而是通过多层神经网络使用Embedding构造用户隐向量以及物品隐向量。用户隐向量与物品隐向量的內积,就是用户对物品的评分。这个內积的操作,同样可以使用神经网络层来实现,也就是前一篇文章所用的Scoring层,得到所谓的“相似度”,也就得到了评分。在实际使用中,我们往往会发现矩阵分解的模型会得到欠拟合的结果,所以深度学习可以弥补矩阵分解的结构简单,拟合不充分的弊端。论文原文以及我找到的一篇全文翻译的博文我贴在参考里面了,有兴趣的读者可以阅读一下。

网络结构

NeuralCF的网络结构如下图所示:

这里使用一个用户和一个物品作为输入特征,它使用one-hot编码将它们转化为二值化稀疏向量。注意到,对输入使用这样的通用特征表示,可以很容易地使用的内容特征来表示用户和物品,以调整解决冷启动问题。文章使用了多层感知机(Layer1-X)来代替了之前的内机操作,最终得到了评分。这样做的原因:

  1. 可以使得用户向量和物品向量充分交叉,得到更多有价值的特征组合
  2. 可以引入更多的非线性特征让模型的表达能力更强

输入层上面是嵌入层(Embedding Layer);它是一个全连接层,用来将输入层的稀疏表示映射为一个稠密向量(dense vector)。所获得的用户(物品)的Embedding(就是一个稠密向量)可以被看作是在潜在因素模型的上下文中用于描述用户(项目)的潜在向量。然后我们将用户Embedding和物品Embedding送入多层神经网络结构,我们把这个结构称为神经协作过滤层,它将潜在向量映射为预测分数。NCF层的每一层可以被定制,用以发现用户-物品交互的某些潜在结构。最后一个隐含层Layer X的维度大小决定了模型的能力。

实际上,用户和商品的互操作可以使用任意的互操作形式,这也就是广义矩阵分解(GMF)。那么,这篇文章使用了元素积,也就是逐元素点乘(element-wise product)的形式,将用户向量和物品向量映射到同等维度大小的空间当中,然后对应维度相乘,这样就实现了互操作,最后再送入逻辑回归层等输出层,拟合最终的预测目标。GMF,它应用了一个线性内核来模拟潜在的特征交互;MLP,使用非线性内核从数据中学习交互函数。接下来的问题是:我们如何能够在NCF框架下融合GMF和MLP,使他们能够相互强化,以更好地对复杂的用户-物品交互建模?为了解决这个问题,这篇文章将多种互操作结合起来,如传统矩阵分解,多层感知机映射这两种形式进行,然后也是用了两种互操作,逐元素点乘以及多层感知机,如下图所示。

对于结合GMF和单层MLP的模型形成数学公式的话如下所示:

\[\widehat{y}_{ui}=\sigma({\bf h}^{T}a({\bf p}_u\odot{\bf q}_i)+{\bf W}\begin{bmatrix}{{\bf p}_u}\\{{\bf q}_i}\end{bmatrix}+{\bf b})
\]

整体的框架中的公式可以如下:

\[\phi^{GMF}={\bf p}_u^G\odot{\bf q}_i^G,\\\phi^{MLP}=a_{L}(W_L^T(a_{L-1}(...a_{2}(W_2^T\begin{bmatrix}{{\bf p}_u^M}\\{{\bf q}_i^M}\end{bmatrix}+{\bf b}_2)...))+{\bf b}_L),\\\widehat{y}_{ui}=\sigma({\bf h}^T\begin{bmatrix}{\phi^{GMF}}\\{\phi^{MLP}}\end{bmatrix})
\]

这里的\(p^G_u\)和\(p^M_u\)分别表示GMF部分和MLP部分的用户嵌入(user embedding);同样的,\(q^G_i\)和\(q^M_i\)分别表示项目的Embedding。

小结

多种用户向量、物品向量的Embedding,以及多种互操作形式进行特征的交叉组合,可以灵活的进行拼接,同时也利用了神经网络对任意函数的拟合能力,按需增加复杂度或者减小复杂度。但是NeuralCF并没有引入其他类型的特征,使得很多有价值的信息浪费。同时,互操作的选取也没有给出更多说明,只有在实践中进行探讨了。

参考

Neural Collaborative Filtering

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

最新文章

  1. hbase 权威指南笔记(二)
  2. Atitit 颜色平均值cloor grb hsv模式的区别对比
  3. Css Ajax Entlib aspnetpager
  4. 用JS描述的数据结构及算法表示——栈和队列(基础版)
  5. [转] git fetch与pull
  6. MySql查询数据库的大小
  7. 浅谈压缩感知(二十七):压缩感知重构算法之稀疏度自适应匹配追踪(SAMP)
  8. 常用工具和API的网站收集
  9. 在XP系统下搭建maven环境出的问题 Unable to locate the Javac Compiler in: C:\Program Files\Java\jre6\..\lib\tools.jar
  10. FreeBSD安装桌面环境
  11. Android网络开发之Volley--Volley基本用法StringRequest(一)
  12. ASP.NET MVC 开发微信支付H5(外置浏览器支付)
  13. Centos 7.4 下初探Zabbix安装
  14. 前端综合学习笔记---异步、ES6/7、Module、Promise同步 vs 异步
  15. shiro权限框架(五)
  16. Android简易实战教程--第三十七话《NotifiCation》
  17. Python_跟随目标主机IP变换
  18. 微信公众号_订阅号_微信JS-SDK网页开发
  19. 开发更健壮python程序的一些工具
  20. JavaScript 上下文环境和作用域,以及 call、apply 和 bind【转载+翻译+整理】

热门文章

  1. 企业级工作流解决方案(十五)--集成Abp和ng-alain--Abp其他改造
  2. Guitar Pro 7 中文界面的介绍
  3. 01-01.单一职责原则(Single Responsibility)
  4. 【模版 Luogu P3808/P3796/P5357】AC自动机(简论)
  5. serialVersionUID作用是什么以及如何生成的?
  6. Pyetst的四种setup和testdown
  7. 走进flex布局
  8. Splay树求第k大模板
  9. 老猿Python博客文章目录索引
  10. 第15.28节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTableWidget详解