这几周我们进入专栏里一个比较大的模块,那就是推荐系统。
上周,我们谈了现代推荐系统的架构体系,帮助你在宏观上对推荐系统的构建有一个更加完整的认识。这周,我们主要来看在推荐系统研究领域里一个比较前沿的话题,那就是如何利用深度学习来提升推荐系统的精度。
受限波兹曼机(RBM)
从严格意义上讲,RBM 自身并不是深度模型,在早期对于 RBM 的使用上,也并没有将其“累加”到很多层从而形成“深度 RBM”(Deep RBM)。但是从建模思路上来说,由一层 RBM 到多层 RBM 的扩展其实是非常直接的,因此了解 RBM 的基本思路,对后面理解推荐系统中如何利用深度学习模型进行建模是很有帮助的。
今天我们要介绍的文章发表于 2007 年的 ICML(International Conference on Machine Learning,国际机器学习大会)上。作者群是鲁斯兰·萨拉胡特蒂诺夫(Ruslan Salakhutdinov)、安德烈·尼哈( Andriy Mnih)以及杰弗里·辛顿(Geoffrey Hinton)。
辛顿在近日常常被称作深度学习之父。他不仅算是波兹曼机(Boltzmann Machines)的重要发明人和推动者之一,也和其学生一起把 RBM 应用到各类数据上,比如 RBM 在推荐领域的尝试。
2007 年的时候,Netflix 大赛如火如荼,很多学者都希望把各种模型和思路应用到这个比赛中。而在这个大赛中,有三个重要的思想脱颖而出,影响了后来推荐系统的研究发展。这三个思想分别是:
利用集成学习(Ensemble Learning)把大量不同的模型整合起来。
由此可见,RBM 对于推荐系统的尝试在当时是非常有新意的。
第一作者鲁斯兰当时在多伦多大学攻读计算机博士,跟随辛顿研究深度学习模型。另外一篇他当时做的工作,是把贝叶斯矩阵分解利用到 Netflix 大赛中,和我们今天讨论的这篇论文一起,都是他在博士阶段对于推荐系统这个领域所做的重要贡献。目前鲁斯兰在卡内基梅隆大学任教,并兼任苹果公司的人工智能总监一职。
那什么是 RBM 呢?简单说来,RBM 就是由一层隐单元(Hidden Unit)和一层显单元(Visible Unit)组成的神经网络结构。通常情况下,显单元和隐单元这两层之间是完全连通的。也就是说,对于每一个显单元来说,它都和所有的隐单元联系到一起。
每个隐单元和显单元自身都有一个权重(Weight),并且在每对隐单元和显单元之间的连接上还有一个权重。所有这些权重都是需要通过训练学习的未知参数。举例来说,如果我们有 3 个显单元(用于描述 3 个数据点),5 个隐单元。那么我们就有 3 个权重对应 3 个显单元,有 5 个权重对应 5 个隐单元,然后有 15(3*5)个连接权重,这样算下来一共是 23 个权重。RBM 可以针对高斯信号,也就是实数信息,以及伯努利或者二项分布(Binomial Distribution)信号,也就是离散信息,进行建模。
受限波兹曼机在推荐上的应用
当我们对 RBM 有了一个基本的了解之后,我们来看 RBM 是怎么应用到推荐系统上的。为了讲解方便,我们这里使用 Netflix 的例子,也就是对“用户为电影打分”进行建模。