美文网首页
【AE based RS】AutoRec: Autoencode

【AE based RS】AutoRec: Autoencode

作者: 小透明苞谷 | 来源:发表于2018-09-02 22:52 被阅读0次

论文地址:http://users.cecs.anu.edu.au/%7Eu5098633/papers/www15.pdf
WWW 2015
被引用次数:123
Australian National University

简介:
这篇文章提出了一种基于AutoEncoder的协同过滤方法来解决评分预测问题。将协同过滤和Autoencoder结合,在协同过滤算法中,假设有m个用户和n个物品,以及用户对物品的评分矩阵R,任务是尽可能准确地推测出用户对未评分物品的评分值。实验证明在RMSE指标数上优于CF和RBM等模型。

实验数据集:Movielens 1M, 10M and Netflix。

模型

模型分为user-based AutoRec和item-based AutoRec两种。

item-based AutoRec

输入

n:物品数 i=1...n
m:用户数


input

AE模型

output

AutoRec在传统AE的基础上做了如下变化

  • 损失函数只和观察到的元素有关
  • 加上正则化项

目标函数

预测

基线:RBM-CF

AutoRec和RBM-CF的区别:

  • RBM是生成模型,AutoRec是判别模型
  • RBM通过极大化对数似然来估计参数,AR直接用极小化RMSE
  • 训练中,RBM需要用对比散度,AR直接用梯度下降
  • RBM只能预测离散分数
  • 参数量:RBM-CF:nkr(or mkr)AutoRec:nk(or mk)

实验

  • item-based AutoRec胜出user-based AutoRec。这可能是由于每个项目评分的平均数量是高于每个用户的输入评分数;用户评分数量的高方差导致基于用户的方法的预测不可靠。


  • 隐藏层神经元数量会影响实验效果
  • AE深度增加,效果会提升

复现

关键代码

        self.r = tf.placeholder(dtype=tf.float32, shape=[None, num_movies], name='r')
        self.input_mask = tf.placeholder(dtype=tf.float32, shape=[None, num_movies], name='input_mask')
        self.output_mask = tf.placeholder(dtype=tf.float32, shape=[None, num_movies], name='output_mask')

        l_in = tl.layers.InputLayer(self.r * self.input_mask, name='input')
        l_in = tl.layers.DropoutLayer(l_in, keep=keep, name='dropout')
        l_encoder = tl.layers.DenseLayer(l_in,
                                         n_units=hidden_size,
                                         name='encoder',
                                         act=tf.nn.sigmoid,
                                         W_init=tf.truncated_normal_initializer(mean=0, stddev=0.05)
                                        )
        l_decoder = tl.layers.DenseLayer(l_encoder,
                                         n_units=num_movies,
                                         name='decoder',
                                         act=tf.nn.sigmoid,
                                         W_init=tf.truncated_normal_initializer(mean=0, stddev=0.05)
                                        )
        self.network = l_decoder
        self.r_pred = l_decoder.outputs
        W_encoder = tl.layers.get_variables_with_name('encoder/W:0')[0]
        W_decoder = tl.layers.get_variables_with_name('decoder/W:0')[0]
        
        cost_reconstruction = tf.reduce_sum(tf.multiply((self.r - self.r_pred), self.output_mask) ** 2)
        cost_penalty = tf.reduce_sum(W_encoder ** 2) + tf.reduce_sum(W_decoder ** 2)
        
        self.cost = cost_reconstruction + penalty * 0.5 * cost_penalty
        optimizer = tf.train.(lr, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False)
        self.train_op = optimizer.minimize(self.cost, var_list=self.network.all_params)

不足

  • 抗噪性能弱 ==》用DAE可以提升鲁棒性
  • 容易受到稀疏性和冷启动的影响

改进:Collaborative Filtering Neural network(CFN)

相关文章

网友评论

      本文标题:【AE based RS】AutoRec: Autoencode

      本文链接:https://www.haomeiwen.com/subject/ipnmwftx.html