天天看点

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

  今天很认真的看了一下来自Hanyang University的Dong-Kyu Chae发表在CIKM2018上的一篇论文《CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks》,这篇论文将GAN利用在推荐的领域上,说明了已有的IRGAN和GraghGAN在推荐上应用的缺点,提出了基于评分向量生成的推荐算法,下面我们一起来阅读这篇论文吧!

论文链接如下 http://delivery.acm.org/10.1145/3280000/3271743/p137-chae.pdf?ip=222.178.10.178&id=3271743&acc=ACTIVE%20SERVICE&key=BF85BBA5741FDC6E%2E4C4B77574FA1A7CF%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35&__acm__=1559923957_b44ba94b534ddf5d55ce80f9c0745c50

1 推荐系统准备知识

1.1 符号表示

  首先了解一点点推荐系统的基本知识和表示方法,如果有很好的推荐系统基础的人可以直接跳过这一段,表示和其他推荐相关论文的表示比较类似。我直接把原文中的CF-MODEL的准备知识截图过来,用红框依次表示的就是

U ->代表所有用户, u1 表示用户1,以此类推,um表示用户m

I ->代表所有项目, I1 表示项目1,以此类推,In表示项目n

Iu->项目的用户对他的评分向量

R->评分矩阵,其中rui 代表用户u对项目i的评分

rui(^)代表用户u对项目i的预测评分

Θ代表推荐模型的参数

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

1.2 评分的表示形式

一般来说,如果推荐系统的评分是五分制,那么评分一般为1,2,3,4,5

如果推荐系统的评分是看用户是否有过点击或者购买记录,那就是0和1。

本文是选择的0和1.

2 生成式对抗网络(GANs)

2.1 最原始的GANs

最原始的GANs如果大家不了解可以去看看别的博客好好了解一下,这对于理解这篇论文十分重要,本文只简单来说,GANs分为两部分,一个是生成模型,一个是判别模型,生成模型就是努力地生成与真实样本非常类似的样本去迷惑判别器,判别模型就是努力区分真实样本和虚假样本。整个目标函数列出来

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

2.2 GANs在推荐上的应用

在以往的时间里,GANs在推荐上的应用其实并不多,主要是IRGAN和GraghGAN,这两种方式比较雷同,接下来简单介绍一下IRGAN的思想:

在IRGAN中,生成器的目标就是生成一个与用户相关的推荐项目列表,而判别器去区分这些项目是真实的项目还是虚假的项目。下面给出公式计算表示:

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

S∅(u,i)是用户u买项目ik的概率,P整个式子就是用的一个softmax函数算出u买uk的条件概率分布,

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

Sθ(u,i)反映的是用户u和项目i的关联程度(说实话,具体怎么衡量的,我也不太清楚,如果知道的可以在评论中告诉我),D整个式子就是算项目i是用户真实购买的项目的概率。

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

d和g都是矩阵分解出来的低维向量表示,(这里如果不懂矩阵分解的同学0.0只有麻烦再去搜搜矩阵分解(matrix factorization)),db的偏置项。

最终的目标函数为:

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

因为生成器部分不能接受判别器部分的梯度,所以使用策略梯度下降的方式来解决这个问题。

3.3 IRGAN的缺点

介绍完IRGAN之后,来说说IRGAN的缺点,如图所示,因为IRGAN是致力于单个项目,IRGAN会生成一个项目序列,但是这个序列在C过程里时,生成器也会生成真实项目的序列,这会让判别器失去判别能力,比如i3也是真实的项目列表也是虚假的项目列表里,那对于判别器来说,他就没办法知道i3是来自于真实项目还是虚假项目,于是判别器就开始出错了。

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

在论文中,作者还做了相关的实验证明这个现象,如图所示,在前面确实性能上升了,因为生成的项目与真实项目重合度不高,但是随着epoch的上升,判别器性能开始大幅度下降,论文中还有其他的证明实验,这里我就不阐述了。

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

4 CFGAN的提出

4.1 CFGAN的框架

针对于3.3中的问题,作者用了一个很简单的方法来解决,那就是不针对于项目来生成,直接生成一个用户的评分向量Iu,对于项目来说确实很容易重合,但是对于一个评分向量来说,重合的概率就很小很小了,因为一个评分向量的维度很高。

所以对于CFGAN来说,他的生成器和判别器具体是要怎么做呢?

对于生成器来说,它要生成一个评分向量,这个评分向量要包含很多有值的评分

对于判别器的任务,相对于IRGAN来说就没变,只是从判断一个项目是否来自于真实或者生成转变为了判断一个评分向量。

为了更好地理解,下面直接放出图,首先我们要把用户特定条件向量C(看代码其实和Eu是一个意思,即用户的实际购买项目向量)和噪音向量Z放入生成器训练,目的是生成虚假的用户购买评分向量,请注意,输入判别器中的是ru(^)和eu的相乘,eu是用户真实有评分的向量,意思就是最后只考虑真实有评分的维度上的差异;另一方面,把真实的评分向量和C放进判别器。OK,让他跑吧,其他的和正常的GAN似乎没什么区别了。策略梯度需不需要讲呢?

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

4.2 CFGAN最大的挑战

如果要生成向量的话,在推荐系统上最难的问题就是数据太过稀疏,那对于生成器而言怎么做到模拟真实评分向量最好呢?注意,给判别器的时候是ru与eu的乘积,那么其实生成器生成全是1的向量,是最轻松的也能让判别器无法判别。这样有意义吗?no,没有。所以,CFGAN必须要解决这个问题。

所以,提出了一下三个步骤,

a.去随机采样用户评分向量中评分为0的项

b.假设这些评分为0的项是有值的(这个有点难理解,意思是之前是把这些0项当成是无意义的项,现在是把他们当成有意义的0项,就是说现在它这个项是评了分的,不过是0分)

c.让生成器尽可能地去使输出的向量,在采样的向量项上接近0,在真实的评分向量上接近1。

这样就把一些0值通过负采样的方式考虑进了训练过程中,好,下一节继续讲是怎么衡量这个考虑方式的。

4.3 三种将负样本考虑进训练的方法

CFGAN−ZR(zero regularization)

即添加了第二项,在G生成的过程中加入了考虑那些0值的采样样本的变化

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

CFGAN−PM

即在训练过程中,不仅考虑有评分的项,也考虑采样的无评分的项

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

CFGAN−ZP

这个就是结合ZR和PM的混合。

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

最后其实就是用CFGAN-ZP作为损失函数来计算的。

4.4 CFGAN的算法流程

我觉得前面讲得都很详细了,算法应该都懂。

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

5 实验结果

实验的话主要是在四个数据集做的,实验部分我不详细介绍了,只拿一个表来说明CFGAN的确是优于其他算法的。

CFGAN:A Generic Collaborative Filtering Framework based on Generative Adversarial Networks 详细理解备注

继续阅读