前言
论文链接:https://dl.acm.org/doi/10.1145/2740908.2742726
github:https://github.com/ImKeTT/AutoRec-Pytorch
这篇文章提出了一种基于AutoEncoder的协同过滤方法来解决评分预测问题。
将协同过滤和 Autoencoder 结合,在协同过滤算法中,假设有m个用户和n个物品,以及用户对物品的评分矩阵R,任务是尽可能准确地推测出用户对未评分物品的评分值。实验证明在RMSE指标数上优于CF和RBM等模型。
这篇论文的目的就在于设计一个基于物品(用户)的自编码器,能够将输入的 映射到一个低维空间,并且在输出中重新构建 来预测缺失的评分进而进行推荐。换句话说通过AutoEncoder模型来预测用户-物品矩阵(评分矩阵M x N)中缺失的评分值。
1. Autorec模型
首先确定使用到的变量名称,假设有 个用户, 件物品,部分已知的用户物品评分矩阵 。
每一个用户 可以被向量 ,此处可以理解为每一位用户的特征向量。而用户特征向量由该用户对每个物品的评分组成
每一个物品 可以被向量 ,此处可以理解为每一个物品的特征向量。而物品特征向量由每一位用户对该物品的评分组成
对于自编码器部分:
此处给出的图示是基于Item-based的模型架构,其中
,
是关于该自动编码器解码和编码部分的权重矩阵。基于此图物品特征向量的重构可以表示为
,具体公式如下图所示
其中
和
分别代表解码器和编码器部分的激活函数,
和
分别代表编码器和解码器的偏置矩阵。因此所有的参数集合表示为
。对于每个参数的维度,
,
,
,
。此时我们得到了Item-based的物品特征向量的重构表示,为了训练自动编码器的,可以提出损失函数的形式为
选用平方误差作为 loss function,本质上AE是学习到了一个原始输入的一个向量表达。
在完成自编码器的训练后,就相当于在重新函数
中存储了所有数据向量的“精华”。自编码器相当于完成了数据压缩和降维的工作。
参数
通过反向传播来进行学习。
为防止重构函数的过拟合,在加入L2正则化项后,AutoRec目标函数的具体形式如下
AutoRec 在传统 AutoEncoder的基础上做了如下的变化:
- 损失函数只和观察到的元素有关( 表示只考虑初始给出来的用户对于物品的评分)
- 加上正则化项
当输入物品i的评分向量为 时,模型的输出向量 就是对所有用户对物品i的评分预测。那么,其中的第 维就是用户 对物品 的预测 ,即:
相比之下,矩阵分解学习的是线性的潜在表示,而自动编码器可以通过激活函数g(.)学习到非线性的潜在表示。以上介绍的AutoRec输入向量是物品的评分向量,因此可称为I-AutoRec(Item based AutoRec).
2.实验
对比实验,baseline:RBM-CF
AutoRec和RBM-CF的区别:
- RBM是生成模型,AutoRec是判别模型
- RBM通过极大化对数似然来估计参数,AutoRec直接用极小化RMSE
- 训练中,RBM需要用对比散度,AutoRec直接用梯度下降
- RBM只能预测离散分数
- 参数量:RBM-CF:nkr(or mkr)AutoRec:nk(or mk)
实验结果:
通过对比各个模型的实验结果:
- (1)item-based AutoRec胜出user-based AutoRec,比传统的FM类方法都要更好。(这可能是由于每个项目评分的平均数量是高于每个用户的输入评分数;用户评分数量的高方差导致基于用户的方法的预测不可靠)。
- (2)sigmoid好于RELU。
- (3)随着hidden 层节点数增加,RMSE越来越小。
3.AutoRec模型的特点和局限性
AutoRec模型使用一个单隐层的AutoEncoder泛化用户或物品评分,使模型具有一定的泛化和表达能力。由于AutoRec模型的结构比较简单,使其存在一定的表达能力不足的问题。
从深度学习的角度来说,AutoRec模型的提出,拉开了使用深度学习的思想解决推荐问题的序幕,为复杂深度学习网络的构建提供了思路。