知行编程网知行编程网  2022-06-04 13:00 知行编程网 隐藏边栏 |   抢沙发  86 
文章评分 0 次,平均分 0.0

 本文介绍了一种生成对抗网络在推荐领域的应用CFGAN的原理以及潜在问题和解决方案,并给出了代码实现和在公开数据集的运行样例。

作者介绍:张旭鑫,华中科技大学硕士在读,主要研究数据攻防与推荐系统,ARASC社区成员。联系邮箱:xuxinz@hust.edu.cn。

前言

使用生成对抗网络来做推荐最近几年愈演愈烈,上个月的一篇综述
《Adversarial Machine Learning in Recommender Systems: State of the art and Challenges》详细概括了推荐系统领域中的对抗性机器学习,值得一读!附上论文链接:https://arxiv.org/pdf/2005.10322.pdf

CFGAN是发表在CIKM2018上的一篇文章,题目为《CFGAN: A Generic Collaborative Filtering Framework based on Generative Adversarial Networks》(https://dl.acm.org/doi/pdf/10.1145/3269206.3271743)

在它之前GAN在推荐上的应用主要有IRGAN和GraghGAN,下面简单介绍一下IRGAN的主要思想。

IRGAN主要思想

考虑我们有一些序列query(IRGAN应用在推荐系统中的时候query是代表user profiles),document是一些和query相关的文档(在推荐系统中document是information items)。query和document之间的相关性用r来表示。我们用条件概率分布来表示真实的序列和文档之间的潜在概率分布,给定从训练数据中观察得到的条件概率分布,从而设计出IRGAN包含的两个模型:

  • 生成式检索模型:该模型的目标是学习,想要从给定的序列q来生成或者选择相关的d,使其分布接近于
  • 判别式检索模型:该模型的目标是学习fΦ(q,d),试图从不匹配的query-document对(q,d)中识别良好匹配的(q,d)。

接着参考GAN的思想,将上述两种模型结合起来做一个最大最小化的博弈,生成器试图生成和真实分布类似的,和序列高度相关的文档,从而“骗过”判别器;而判别器的任务则是尽可能准确地分辨真实的文档以及生成器生成的文档,在不断的博弈中迭代模型,最后达到训练的目的。
CFGAN:基于生成对抗网络的协同过滤框架IRGAN具体的训练过程参见原论文。

Discrete item index generation存在的问题

IRGAN的问题在于训练过程中,生成器会慢慢学到真实的概率分布(下图 a-b的过程),从而生成和真实情况相同的项目ID,但是这会让判别器“感到困惑”,比如下图中的i3,既出现在“real”中,被标记为真实数据,又出现在“fake”中,被标记为生成的数据。CFGAN:基于生成对抗网络的协同过滤框架这种相互冲突的判别会使得判别器的迭代出现问题 ,从而导致判别器的性能下降。CFGAN一文中用实验展示了该问题:CFGAN:基于生成对抗网络的协同过滤框架从实验结果可以看出,判别器的性能在经过初期的上升后就会持续下降到一个很差的结果上,判别器的性能太差会导致生成器缺少“督促”,因此生成器的性能也得不到提升。

CFGAN:基于生成对抗网络的协同过滤框架

本质上来说,IRGAN存在的问题是其生成的是离散的项目,CFGAN考虑到这一问题后,调整G网络的生成为用户的评分向量,取值范围为0~1,对于离散的项目来说容易出现重合的情况,但是对于连续的评分向量而言,重合的概率就可以忽略不计了(评分向量维度较高时)。

CFGAN

我们来看看CFGAN的结构:CFGAN:基于生成对抗网络的协同过滤框架

生成器G网络结构

首先我们关注生成器网络的设计:原文中提到,生成器G的输入中,c是描述用户的信息,诸如年龄等,但是原文中是使用一个用户的购买向量作为该用户的描述信息c:_In our methods, we use auser’s (or, an item’s) purchase vector to specify a user (or, an item).[1]_z在传统的GAN网络中应该是代表噪声,但是原文提到他参考了IRGAN和GraphGAN的做法,用用户的购买向量作为z了。_In addition, as in the other GAN-based CFs , we do not usethe random noise variable z since our goal is to generate a single,most plausible recommendation result to a target user rather thanmultiple outcomes.[1]_c和z经过生成器网络后,输出生成的用户购买向量,向量中的值代表的是该用户购买物品的概率。值得一提的是,生成的购买向量在放入生成器网络前,经过了masking的操作,原文的说明是为了让生成的向量和真实向量一样具有稀疏性,通过这样的操作,也就使得网络在训练的过程中 ,只会考虑在真实的购买项目上的生成的值。

判别器的目标函数和CFGAN_PM方案中的一致。
超参数和原文保持一致,训练次数为1000,训练数据集为Movielens 100K,最后结果P@5 最大为0.49。运行截图:

CFGAN:基于生成对抗网络的协同过滤框架

结果显示:

CFGAN:基于生成对抗网络的协同过滤框架
完整代码已收录至ARASC社区,https://github.com/ARASC/CFGAN

<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong>完<strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong></span></strong></span></strong></p><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section><p style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">中国大学10强!校友会2020世界一流大学排名发布</p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">GitHub重大更新:在线开发上线,是时候卸载IDE了</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;max-width: 100%;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">史上最烂的项目:苦撑12年,600多万行代码...</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">数据分析入门常用的23个牛逼Pandas代码</p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">知乎高赞:985计算机视觉毕业后找不到工作怎么办?<br  /></p></section></section></section></section></section></section></section></section>
CFGAN:基于生成对抗网络的协同过滤框架

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享