论文总结《Adversarial Personalized Ranking for Recommendation(APR)》

原文链接

APR

本篇论文是对抗训练在RS领域的先锋作,在这篇文章前对抗训练应用在图像领域,以提高模型鲁棒性。本篇论文填补了对抗训练在RS领域的空缺,首次基于BPR进行对抗训练,以提高RS排序模型的鲁棒性。

Motivation

文章在Session 2部分对MF的隐空间的扰动是否会造成推荐性能的下降,分析了BPR-MF是脆弱的。

首先在BPR-MF隐空间(不在输入进行扰动是因为,userID/itemID是离散的,扰动会变更其语义),即参数空间添加如下的扰动:
在这里插入图片描述
因为BPR的目标函数的非线性性质,求解最大值很棘手,于是文章借用FGSM的思想,近似目标函数为线性函数,近似扰动的最大值为:
在这里插入图片描述
这里 Γ / ∣ ∣ Γ ∣ ∣ \Gamma/||\Gamma|| Γ/∣∣Γ∣∣表示的扰动的方向,而 ϵ \epsilon ϵ则控制扰动的大小,指的是直接沿着梯度的方向更新(在线性假设下)。

在这里插入图片描述

上图实验表明有针对设计的扰动确实比随机扰动会使得性能下降,说明了BPR-MF对训练数据过拟合,不具有鲁棒性。为了解决这个问题,作者提出了APR,即Adversarial Personalized Ranking模型。

Contributions

  1. 分析了BPR模型对扰动敏感,不具有鲁棒性,训练较好的BPR模型过拟合
  2. 提出了APR框架,即在RS领域的对抗训练

APR

APR的目标函数如下:在这里插入图片描述

为了训练鲁棒的排序模型,目标函数首先最大化扰动,使得扰动对模型的破坏最大,然后在普通的BPR loss上加上对样本进行扰动过后的BPR loss,其中 λ \lambda λ 超参数衡量两部分的比例。从而最小化该目标函数使得在具有一般样本及扰动样本的情况下训练模型,其中扰动项可以视为一种正则化项,防止模型的过拟合。这本质上是一种minimax game:
在这里插入图片描述

下面逐项分析

Δ \Delta Δ 最大值

BPR带上扰动的损失函数为:
在这里插入图片描述因为许多模型,例如bilinear MF以及MLP都是非线性的,因此直接求出 Δ \Delta Δ最大值较为棘手,因此根据Motivation部分的分析, Δ \Delta Δ最大值近似为:

在这里插入图片描述

其中:
在这里插入图片描述

模型参数 Θ \Theta Θ最小

因此,APR(基于BPR)的目标函数为:

在这里插入图片描述
利用SGD进行更新即为:

在这里插入图片描述

其中:
在这里插入图片描述
注意,在训练过程中BPR的初始化因为训练好的BPR,因为只有在BPR过拟合的情况下,添加扰动才是合理的,因此参数 Θ \Theta Θ可以从预训练模型中取得。

APR实例,基于MF的APR(AMF)

即在MF模型上使用APR框架,模型结构如下所示:

在这里插入图片描述

其中目标函数以及梯度可以按照APR框架得到,这里省略,有兴趣可以参考原文。

EXPERIMENTS

数据集

在这里插入图片描述
实验部分文章主要介绍了

  1. HR,NDCG随着epoch增加变化的表现
  2. 不同embedding size对应的指标大小
  3. 与baseline的对比实验
  4. 以及扰动参数 ϵ \epsilon ϵ和扰动项权重 λ \lambda λ不同大小的实验

详细可以参考原文

总结与思考

这篇文章提出了一个在RS领域应用对抗训练提高模型的鲁棒性。

在阅读文章过程中我有几点问题/想法

  1. 目标函数是minmax game,那么是否可以用GAN的方法来同时更新扰动 Δ \Delta Δ以及 Θ \Theta Θ,即训练 Δ \Delta Δ使得模型尽可能差,同时训练 Θ \Theta Θ使得模型尽可能抵抗这种扰动
  2. 这篇文章的扰动仅仅是在浅层,是否可以对更加深层次扰动,效果会不会更好?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值