GAN学习笔记(9)(CFGAN)

在这里插入图片描述

 CFGAN: A Generic Collaborative Filtering Framework based on Generative Adversarial Networks

背景

使用GAN来进行推荐,之前已经有过IRGAN和GraphGAN的方法。见笔记(10和8)。
GraphGAN,论文本身针对于链接预测问题,可以扩展到推荐系统中,其最主要的贡献在于将图表示成宽度优先的树,并提出了graph softmax的方法
但是这两种方法都存在discrete item index generation的问题。

discrete item index generation

对于IRGAN和GraphGAN来说,生成器G是基于概率,生成一个单独的项目ID或者ID列表,并通过强化学习中策略梯度的方式进行训练。在判别器的“指导”下,随着训练的进行,生成器G将生成与真实情况完全相同的项目ID。但是,这对判别器来说并不友好,同一个物品,它有可能既被标记为真实数据(real),又被标记为生成数据(fake),如下图的 i 3 i_3 i3:
在这里插入图片描述
这样如果将其送进判别器进行判别,判别器将会产生confusion,使得判别器性能下降,之后在策略梯度迭代的过程中,判别器将向生成器提供错误的信号,自己的性能也开始降低。如:
在这里插入图片描述
在初始的几次迭代过程中,判别器与生成器的性能都逐渐提升,但随着实验的进行,判别器的性能突然降低,产生这样的原因便是同一物品被标记为不同类别的情况。在这种情况下,G和D之间的竞争过程也失去了原本的意义,推荐效果也存在局限。

GAN-based CF(IRGAN)

IRGAN中,G试图生成(或抽样)与给定用户相关的项的索引,D试图将用户的基本真实项与G综合生成的项区分开来。更具体地说,G被实现为一个softmax函数,表示为:
在这里插入图片描述
在这里插入图片描述

式中,P ψ _ψ ψ i k i_k ik | u u u)是G在给定 u u u的索引 k k k处对项目进行抽样的条件概率分布,g u _u u和g i _i i 是属于G的潜在因素(用户与Item的嵌入向量),b是偏置,并且S ψ _ψ ψ(u, i k i_k ik)是反映u购买 i k i_k ik的机会的评分函数。另一方面,D通过使用评分函数的sigmoid函数来估计每个项目 i i i属于给定用户 u u u的基本真相的概率 s θ s_θ sθ(u,i):
在这里插入图片描述
在这里插入图片描述
d u _u u和d i _i i是属于D的潜在因素,那么IRGAN的目标函数很明显了:
在这里插入图片描述

CFGAN

针对上面的问题,作者从原始的GAN出发。提出了一种vector-wise的训练方式。

最开始的GAN是用于图像生成的,G生成的是图像的向量,D直接判断这些向量是否是真实的图片。当G生成的是向量时,该向量可能非常与真实向量所接近,但与真实向量一模一样的概率却非常小,因此D被迷惑的概率也是非常小的。

在CFGAN中,G生成的是向量称其为购买向量purchase vector。假设我们有基于隐式反馈得到的用户-物品购买矩阵,那么从用户角度来说,购买向量便是矩阵中的一行,若用户与物品有过购买(其实不一定是购买,也可以认为是有过交互,不过本文统一认为为1的地方是用户对物品有过购买行为),该位置为1,如果没有购买,该位置是空(不是0),从物品角度来说,购买向量便是矩阵中的一列,若物品被用户购买过,该位置为1,如果没有购买过,该位置是空(不是0)。

首先从用户角度出发的CFGAN模型的设计,然后可以迁移到从物品角度出发的CFGAN框架。

整体框架

在这里插入图片描述
D和G的目标函数:
在这里插入图片描述

用户条件向量c u _u u,噪音向量 z z z , r u r_u ru ∗ ^* 为G生成的向量。

  eu指定u是购买了每一项i(eui=1)或没有(eui=0),⊙代表元素乘法。通过这样做,只有G在购买物品上的输出才有助于G和D的学习,换句话说,我们“丢弃”了与非购买物品相对应的G的输出节点
生成器设定

生成器的输入(用户向量 c c c,噪声向量 z z z)。经过生成器的多层神经网络(大于2)后,输出用户购买向量。向量中每一个值代表用户与物品交互的概率。

       注: c和z是串联输入
判别器D的设计

也是一个大于2层的神经网络,输入为在这里插入图片描述
或者是Truth value r u r_u ru c c c的串联,并输出一个单一的标量值来表示它的输入来自地面真实的概率。

使用随机梯度下降与小批量和反向传播来训练我们的G和D。我们交替地更新它们各自的参数ψ和θ,在另一个更新时保持一个不变

对抗训练完成后,用z和c输入G,生成一个稠密向量ˆru,其中包含数据集中所有项目的预测偏好得分。我们使用ˆru中的j-th元素作为用户u对每个项目j的预测偏好得分,最后,选出预测得分最高的前N项,进行推荐。

新的CF

想想看,如果生成器想要骗过判别器,非常简单就可以做到。因为没有交互过的物品经过mask之后会变成0,那么生成器只要生成全1的向量就可以了。所以说,只用用户购买过的物品,是不够的,还得通过负采样的技术
在每一次训练迭代(say t)中,随机选择每个用户的非购买项的一部分,并假设为负项,说明他们对应的反馈不是缺失而是零。然后,训练G生成一个用户的购买向量,使其负项的值接近于零。通过这样做,我们期望G不仅将重点放在生成接近于1的采购商品的价值上以欺骗D,而且还考虑在负项目上产生低价值。

  1. CFGAN−ZR.
    ZR的方式,就是通过负采样得到一定比例的负样本,对于这些负样本,我们希望预测的分数越接近于0越好。此时G的优化目标变为:
    在这里插入图片描述
    在这里插入图片描述
    属于负采样
  2. CFGAN−PM.
    PM的方式,就是对mask进行修改,放开一些用户没有购买过的物品,这样,D在计算损失的时候会把这部分为交互过的部分加入,同时可以反向传播回G中,因此G不仅学习到在用户在购买过的物品上要得到接近1的输出,还会学习到在没有购买过的部分物品上要得到接近0的输出。此时G和D的损失函数变为:
    在这里插入图片描述
  3. CFGAN−ZP
    将上两种方法混合
    在这里插入图片描述

迁移到物品角度

迁移到物品角度,非常简单,G的生成目标变为生成物品的购买向量,D的目标变为判别物品的真实购买向量和G生成的物品购买向量。结合负采样的话,同样分为ZR、PM和ZP三种方法。

实验

解决三个问题:

  1. FGAN模型应用于推荐任务,效果如何?
  2. CFGAN模型使用时,最佳的参数设置为多少?
  3. 与目前state-of-the-art方法比较,CFGAN能够带来多大的提升?
数据集

在这里插入图片描述

结果

(1)性能没有出现突然下降,梯度消失和爆炸现象
在这里插入图片描述

(2)
在这里插入图片描述
在这里插入图片描述
(3)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值