[SIGIR2020] Sequential Recommendation with Self-Attentive Multi-Adversarial Network
这篇论文主要提出了一个网络,成为Multi-Factor Generative Adversarial Network,直接翻译过来的话就是多因子生成对抗网络。主要是期望能够探究影响推荐的其他因子(因素)到底起到了多大的作用。这里的因子指的是上下文的信息。说明:后文中判别器和鉴别器是相同的。
里面的核心有两个部分:
- 基于Transformer的生成器,将用户行为序列作为输入,推荐可能的下一个项目,并采用多个特定因素的判别器,从不同因素的角度评估生成的子序列。
- 使用多因子的判别器,利用判别器的奖励信号来指导生成器的学习,也就是说使用了强化学习的方式进行训练。这些奖励信号来源于上下文的因子,使用的是多鉴别器的结构。
以前的论文主要还是基于Markov假设,并且使用了循环神经网络或者Transformer等网络结构来处理用户和物品的交互,这些方法利用了上下文的信息,能够很有效的表示了用户的行为。
序列的推荐器通常会使用极大似然估计进行优化,然而,很多论文发现基于MLE的训练很容易受到数据稀疏性或暴露偏差等问题的影响。
这篇论文的一个创新之处在于,利用生成对抗网络,希望能够从序列预测当中将因子利用部分解耦。对抗学习与推荐系统结构的方法,在这篇论文当中也有表述:在本文的框架中,生成器仅依靠用户与物品的交互数据预测未来的推荐物品,而判别器则根据现有的各种因素信息判断生成的推荐序列的合理性。这种方法可以更灵活地利用外部上下文形成顺序推荐,能够提高推荐的可解释性。
问题的假设为,有一组用户,每个用户都会对应一组物品,物品是具有时间顺序的。因子在这里也给出了例子,比如在音乐推荐中,因子(上下文)就表示如艺术家、专辑、人气等等。那么,最终要解决的问题就是,给出用户的一段交互历史,希望能预测该用户最可能的下一个交互的物品。
生成器就是比较常规的生成器,输入交互的物品序列,生成用户下一个交互物品的预测。而判别器有点不一样,判别器有多个,其数目取决于有多少因子(上下文),利用多角度的信息判断生成序列的合理性。每个判别器都会将物品序列作为输入,判别器的参数根据生成的交互物品序列以及真实的交互物品序列进行更新的。
【我不禁想到了如果因子很多很多,那岂不是要爆炸……所以感觉有点像是是面向数据集设计模型方法了。】
论文的结构图如下:
MFGAN论文结构图
搞个这样的模型有三点原因:
- 使用最大似然损失的直接优化来训练一个基于生成的顺序推荐器是比较困难的。
- 将各种因子纳入到判别器进行处理,使模型更加灵活的处理多因子以及噪声。
- 使用多鉴别器将因子从原有的框架中解耦,提高可解释性,避免多因子蹂躏在一起相互影响。
生成器的主要组成模块:
- 编码层,将one-hot的表示编码成d维的稠密表示,然后形成一个物品的编码矩阵以及位置位置编码矩阵。将这两个矩阵进行加和就成了生成器的输入表示。
- 自注意力层。里面用的是多头的注意力模块,包括两个子层:多头注意力子层以及前向传播层。为了有效地提取不同表征子空间的信息,采用了多头注意力机制,而不是用单一的关注函数来关注用户序列的信息。值得一提的是,在顺序推荐中,只能利用当前时间步长之前的信息,对多头自注意力函数的输出进行掩码操作。
- 预测层(预测下一个交互的物品),使用的是softmax操作进行预测。
对于鉴别器来说:
- 由于这篇论文的鉴别器是针对因子所设计的多个鉴别器的组合,每个鉴别器对产生的序列进行了二分类的操作,分辨是真实的序列还是预测的序列。对不同的鉴别器使用不同的参数,并且他们之间互相独立。
- 编码层。同样的,也是使用了一个编码矩阵以及位置矩阵进行加和。首先将一个因子的可能值分解成若干个bin,然后为每个bin设置一个唯一的编码向量,最后通过对输入序列中bin ID的编码进行连接,利用查找操作得出最后的编码矩阵。
- 自注意力层。跟生成器结构类似,也是使用了注意力机制以及前向传播层。这里每个鉴别器都只用了一个注意力模块,防止太强而不能对生成器进行合适的优化。主要结构是双向结构并且没有mask进行掩码操作。用这种方式能够对序列当中的任意两个位置的交互进行建模。
- 合理性预测层。使用了多层感知机的结构,用来对合理性进行预测。多个鉴别器产生的合理性分数能够指导生成器的学习(强化学习)。
由于物品集的采样是一个离散的过程,所以对于我们的推荐任务,不能直接应用梯度下降法来解决原来的GAN公式。所以需要强化学习进行指导。接下来说强化学习如何接管。按照强化学习的设定:
- 状态s是前面的子序列
- 动作a是所选择的下一个物品
- 选择策略π是生成器网络,整个网络可以看做是策略
- 奖励信号r就是不同鉴别器给出的合理性分数,Q-value函数使用的是不同鉴别器合理性分数的加权组合,权重是各个鉴别器合理性分数的\(\lambda\)参数化的softmax结果。
整体算法流程
[SIGIR2020] Sequential Recommendation with Self-Attentive Multi-Adversarial Network的更多相关文章
- Speech Super Resolution Generative Adversarial Network
博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/10874993.html 论文作者:Sefik Emre Eskimez , Kazuhito K ...
- 论文阅读之:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network 2016.10.23 摘要: ...
- Macro-Micro Adversarial Network for Human Parsing
Macro-Micro Adversarial Network for Human Parsing ECCV-2018 2018-10-27 15:15:07 Paper: https://arxiv ...
- Face Aging with Conditional Generative Adversarial Network 论文笔记
Face Aging with Conditional Generative Adversarial Network 论文笔记 2017.02.28 Motivation: 本文是要根据最新的条件产 ...
- 《Macro-Micro Adversarial Network for Human Parsing》论文阅读笔记
<Macro-Micro Adversarial Network for Human Parsing> 摘要:在人体语义分割中,像素级别的分类损失在其低级局部不一致性和高级语义不一致性方面 ...
- 生成对抗网络(Generative Adversarial Network)阅读笔记
笔记持续更新中,请大家耐心等待 首先需要大概了解什么是生成对抗网络,参考维基百科给出的定义(https://zh.wikipedia.org/wiki/生成对抗网络): 生成对抗网络(英语:Gener ...
- GAN Generative Adversarial Network 生成式对抗网络-相关内容
参考: https://baijiahao.baidu.com/s?id=1568663805038898&wfr=spider&for=pc Generative Adversari ...
- ASRWGAN: Wasserstein Generative Adversarial Network for Audio Super Resolution
ASEGAN:WGAN音频超分辨率 这篇文章并不具有权威性,因为没有发表,说不定是外国的某个大学的毕业设计,或者课程结束后的作业.或者实验报告. CS230: Deep Learning, Sprin ...
- 论文阅读:Single Image Dehazing via Conditional Generative Adversarial Network
Single Image Dehazing via Conditional Generative Adversarial Network Runde Li∗ Jinshan Pan∗ Zechao L ...
随机推荐
- components & slot
components & slot vue https://github.com/vuejs/rfcs/blob/master/active-rfcs/0001-new-slot-syntax ...
- Markdown & Static Site Generator
Markdown & Static Site Generator https://www.gitbook.com/ https://vuepress.vuejs.org/ https://ww ...
- Flutter Navigator2.0
Example 1 import 'package:dart_printf/dart_printf.dart'; import 'package:flutter/material.dart'; cla ...
- c++ DWORD和uintptr_t
x86模式 DWORD 是4字节 x86模式 uintptr_t 是4字节 x64模式 DWORD 是4字节 x64模式 uintptr_t 是8字节 std::cout << sizeo ...
- Dart: List排序
var list = <Item>[ Item(title: "item 1", isTopping: true), Item(title: "item 2& ...
- BGV上线17小时最高888.88美金,投资最高回报率近+1778倍, 带动NGK内存暴涨
至12月3日BGV币上线A网交易所DeFi板块以来,BGV价值飙升长.,据非小号的数据显示,BGV币价是718美元(东八区时间2020年12月4日早上九点四十),相较昨日涨幅达70.14%,以718美 ...
- idea配置阿里maven镜像
首先打开IDEA安装路径下的:"\plugins\maven\lib\maven3\conf\settings.xml" 找到里面的mirror配置,进行修改如下: <mir ...
- 如何把数据放到C#的心里之 DB2实例
平时偶尔因为工作需要得自己写一些小工具去操作数据库,因为只是需要实现一些小的功能,也不涉及多类型的数据库,也许就是一次性的使用.所以此时那些大而全的数据库操作框架,也就不再那么适合我了.而本篇博文主要 ...
- vue-axios插件、django-cors插件、及vue如何使用第三方前端样式库:element/jQuery/bootstrap
目录 一.vue的ajax插件:axios 1.安装axios 2.axios参数 二.CORS跨域问题(同源策略) 1.Django解决CORS跨域问题方法 三.前端请求携带参数及Django后台如 ...
- Docker SDK for Python
一.概述 Docker引擎API的Python库.它允许您执行docker命令所做的任何操作,但可以在Python应用程序中运行容器.管理容器.管理群集等. 官方文档: https://docker- ...