跳转到内容

人工智能/搜索/推荐系统/玻尔兹曼机

来自维基教科书,开放的书籍,开放的世界

本文介绍了使用 玻尔兹曼机 用于 推荐系统.

什么是推荐系统?

[编辑 | 编辑源代码]

有一群用户可能订购(阅读,观看,购买)大量商品。用户给商品评分(或评价)。我们的任务是,根据用户和他人的先前评分,尽可能精确地预测用户对新商品的评分,以便推荐用户可能喜欢的商品。

大多数推荐系统具有以下特征

  • 用户数量远远超过商品数量
  • 所有或几乎所有用户只对一小部分商品进行了评分
  • 评分的可能性很小(通常为1,2,3,4,5)。
  • 已评分商品数量差异很大。

正如 Netflix 奖比赛所显示的,没有哪种方法优于其他方法。为了获得最佳结果,应将几种方法结合在一起。其中之一,限制玻尔兹曼机(RBM),将在本文中介绍。

  • U - 用户集
  • I - 商品集
  • G - 评分集
  • - 评分了商品 的用户集。
  • - 用户 评价过的商品集。
  • - 用户 对商品 的评分。
  • - 用户 对商品 的评分预测。
  • T - 训练集。T 的每个成员都是一个三元组 .

奇异值分解

[编辑 | 编辑源代码]

在描述 RBM 模型之前,我们简要介绍一下 SVD 模型(奇异值分解),它可能是最好的单一方法。

在奇异值分解 (SVD) 下,每个用户 由一个特征向量 表示,其中 N 是模型的维度。类似地,每个项目 由一个特征向量 表示。

预测评分是两个向量的乘积

这里的 xy 是模型需要学习的参数,以便拟合训练集。

该模型直观易懂,因为特征代表了项目的各种属性。例如,在推荐电影时,某些特征可能对爱情片非常积极,对没有爱情元素的电影则为零或负面,而对讽刺爱情片的电影则非常负面。用户特征向量中对应的特征对讨厌爱情片的用户将是负面的,而对于相反情况则为正面的。

学习模型最简单的方法是将总误差 降至最小。我们可以通过梯度下降来实现,循环地从训练集中提取数据,对于每个 ,将参数沿着与 E 的梯度相反的方向改变。

这里的 L 是一个学习参数,它设定了梯度下降的整体速度。

但是,对于数据量少的用户和电影,这种方法往往会构建巨大的特征向量,因为这样可以更好地拟合数据。为了禁止这种情况,并利用大特征值不太可能出现的知识,应该添加正则化项

有关 SVD 的更详细解释,请参阅 Simon Funk 的“Netflix 更新:在家尝试” [1]。但是,他的算法一次添加一个特征,后来发现不如同时学习所有特征好。

现在我们来谈谈玻尔兹曼机模型。

第一步,假设我们不是预测分数,而是预测特定分数的 *概率*

的概率。

我们可以使用与上一节中描述的类似方法。

(为什么不 ? 因为通常用户比物品多得多,所以 会包含大量的参数。)

但是我们可以做得更好。首先,我们可以利用所有分数的总概率为 1 的事实

其次,由于概率始终介于 0 到 1 之间,因此最好用它本身的逻辑函数而不是向量积来描述

逻辑函数

其中 *逻辑函数* f 定义为

重新定义为权重 W,并将 重新定义为隐层单元,并要求所有 x 都为 0 或 1,则可以得到

这就是玻尔兹曼机模型。

华夏公益教科书