一:前言
笔者最近在总结推荐系统主流模型,从十多年前的经典的协同过滤算法开始,一直到现有的各大企业所用的推荐模型,笔者一直在思考一个问题,那就是神经网络在计算机领域内的大热,是如何承上启下,承接传统MF,CF算法,又是如何连接到最新的各种模型,创造散发出各大模型的呢。原则上讲,很多读者跟笔者一样,肯定很早就研究过AutoRec,但我们应该考虑的是,在澳大利亚国立大学提出著名的《AutoRec: Autoencoders Meet Collaborative Filtering》之前,我们应该如何思考解决这个承上启下的问题,笔者认为这才是读者同鄙人应该思考的问题。知识的创新需要诸君共同努力,共勉之。
二:AutoRec简介
AutoRec是一个标准的自编码器,他跟Mlp类似,是一个标准的3层神经网络(单隐层神经网络),只不过他结合了自编码器和协同过滤的思想,确切的说,AutoRec就是一个标准的自编码器结构,其基本原理,就是利用协同过滤中的共现矩阵,来完成物品向量和用户向量的自编码,再利用编码结果来得到用户对物品的评分,然后进行推荐。
这里介绍一下自编码器:
顾名思义,自编码器是能一种能够完成数据自编码的模型,无论是图像,音频,还是数据,都能通过自编码器转化成向量的表达形式。自编码器是一个无监督的数据维度压缩和数据特征表达方法,他是神经网络的一种,模型训练完成后他会尝试将输入直接复制到输出。由于经过自编码器的泛化过程,故输出向量和输入向量不完全相等,即某些缺失值会被自动补上,故自编码器有一定的缺失维度预测能力,如果我们得到了全部的缺失值,就得到了所有用户对物品i的评分,就可以进行推荐了,其模型如下所示:
其中输入为x,输出为r,S代表所有的输入数据向量,h=f(x)表示编码器,r=g(h)=g(f(x))表示解码器,自编码器的目标便是优化损失函数:
也就是令图中的红色部分的Error的值最小,即输入与输出的误差最小。
下面是AutoRec的整体模型框图:
可以看到整个模型只有3层,蓝色的圆点代表的是隐层神经元,红色方框代表的是模型的输入r^{(i)},经过权重矩阵V到达隐藏层,再经过权重矩阵W到达输出层,我们的目的是通过训练模型,找到合适的权重矩阵V和W,以及偏置u和b,使得输入值和输出值的误差最小。令模型的重建函数为h(r; θ),其定义如下:
其中f(.)代表的是输出层的神经元的激活函数,g(.)代表的是隐层神经元的激活函数。这里的参数 θ = { W, V, u, b},V和W分别是隐层和输出层的权重矩阵,u和b分别是隐层和输出层的偏置,故在基于物品的AutoRec模型中,参数总量为2mk + m+ k个。
损失函数
自编码器的损失函数
其中S是d维向量的集合。
AutoRec模型的损失函数中考虑到了对参数的限制,因此加入了L2正则来防止过拟合,损失函数变化为:
其中||.|| F为Frobenius范数。
定义好损失函数之后,就可以使用反向传播和梯度下降等方法来进行模型训练了。基于物品的AutoRec模型的训练过程如下:
1,输入物品i的评分向量r^{(i)},即所有用户对物品i的评分向量。
2,得到模型的评分预测输出向量h(r^{(i)}; θ)。
3,根据评分预测向量和真实评分向量的误差进行训练,最小化损失函数,得到最终的模型参数θ。
三:基于AutoRec的推荐过程
假如我们现在已经训练好了模型,那基于物品的AutoRec模型的推荐过程是怎样的呢?其实非常简单,只需要2步:
1,依次输入物品i的评分向量r{(i)},得到模型输出的预测评分向量h(r{(i)}; θ)。
2,遍历所有物品预测评分向量的第u维,得到用户u对所有物品的评分,进行排序之后得到用户u的推荐列表。
上述流程是针对基于物品的AutoRec模型,也就是Item-AutoRec,其实只要把AutoRec模型的输入变成用户向量,那么模型其实就变成了基于用户的AutoRec模型,即User-AutoRec。
四:AutoRec模型的优缺点
AutoRec模型从神经网络的角度出发,使用一个单隐层的AutoEncoder泛化用户或物品评分,使模型具有一定的泛化和表达能力。同时由于模型结构比较简单,使其存在一定的表达能力不足的问题。