论文地址:https://arxiv.org/abs/2101.02644
1 导读
近年来,推荐系统的方法层出不穷,比如基于相邻的用户或item,基于矩阵分解或是基于深度学习。其中,基于深度学习的推荐系统的发展最引人注目。因而,作者针对于神经协同过滤框架(NCF)展开攻击。
在本篇论文中,作者阐释了何为投毒攻击:通过添加虚假用户,操纵推荐系统使目标攻击的商品被推荐给更多人。但如何生成攻击能力最强的虚假用户是一个非凸的优化问题,因而作者提出几个技巧来逼近最强攻击力的用户。
最后,作者在真实数据集中检验了攻击的效果,并且在添加鉴别器后仍能保持有效攻击。
2 背景和动机
2.1 神经协同过滤NCF
我们可以看到,图中NeuMF是NCF的应用之一,结合了MF和MLP(多层感知机)。具体步骤如下:(1)MF首先随机初始化一个user vector来表示一个用户,再随机初始化一个item vector来表示一个item,两个向量进行element-wise product(两个向量的分量对应分别相乘);(2)左边是一个多层感知机MLP,将MLP User Vector和MLP Item Vector作为MLP的输入,输出为一个向量;(3)将MF和MLP的输出拼接起来,作为NeuMF层的输入,最后输出为预测评分(4)用真实评分和预测评分作为监督信息来反馈调整MF和MLP。
2.2 两种投毒攻击
第一,数据投毒攻击。
这种攻击方式在训练集中添加虚假用户实现目的,可以细分为两种,黑盒攻击(攻击时模型未知,如随机攻击)和白盒攻击(攻击时模型已知)。本篇文章为两者搭建起联系。
第二,profile污染攻击。
这种攻击方式通过对真实用户的行为进行跨站点请求伪造(CSRF),也就是对真实用户的真实历史记录或者评分进行篡改。这种攻击难以大规模进行,同时由于无法改变item的profile,因此在item-to-item模型上效果不佳。
3 实现过程
3.1 模型介绍
- 攻击模型定义。此攻击模型目的是使目标item更多次出现在用户top-K榜单;已知user-item矩阵分布;只能添加最多m个虚假用户。
- 定义攻击为优化问题。这里作者将itemt的命中率定义为HRt,表示在其 top-K 推荐列表中会收到itemt的真实用户的比例。我们让 y(v)表示假用户v的评分向量,y(vi)表示假用户v给itemi的评分。第二行意思是评分向量的非零评分个数小于等于filler item和目标item数量和。
3.2实现过程概述
1)首先,我们使用损失函数来近似命中率,其中较小的损失大致对应于较高的命中率。在给定损失函数的情况下,我们将优化问题转化为易于处理的问题。
2)其次,基于我们设计的损失函数,我们构造了一个毒药模型来模拟一个基于深度学习的推荐系统。
3)我们首先使用验证数据集对毒药模型进行预训练,以确保其能够正确地预测用户的偏好,然后使用损失函数(是通过提取第一步得到的损失函数中与攻击相关的部分得到的)来更新毒药模型,以逼近受损目标推荐系统的预期状态。
4)根据毒药模型中预测的假用户的评分向量和一个选择概率向量,为假用户选择filler item。其中,item的选择概率向量会为了给下一个假用户选择filler item而周期性更新。
重复第二步和第三步直到m个假用户生成完毕。
3.3 命中率近似
我们对每个用户的命中率损失函数做如下近似,t代表目标item,y帽是预测评分(范围0到1,越大代表越容易被推荐),此处的k≥0,为了增强模型鲁棒性:
那么整体的损失函数可以这么表示,S代表真实用户的集合:
所以我们可以通过如下损失函数,找到一个最优的虚假用户v,使得攻击效果最佳。和(1)式相比,这里是用了L2范数,为了便于求导。(η>0)
由于基于深度学习推荐系统中的用户和item完全具有离散标签,当它们反向传播到输入层时梯度会消失。 因此,直接采用已经应用于攻击图像分类器的反向梯度优化方法是不可行的。 一个朴素的想法是将假用户v的评分向量 y(v)作为自变量,并制定如下中毒攻击:
W*:模型参数;
Loss:训练目标推荐系统的原始损失函数(交叉熵损失函数)。
但是,这是一个双层优化问题,当我们改变y(v)时,w*也会随之改变。如果我们计算y(v)的高阶梯度,这个过程会十分耗时,因为需要生成大量的假用户。特别的,我们需要大量的迭代,才能在随机初始化的评分向量上为每个假用户积累足够的变化,这对于现实世界中的大型推荐系统来说是不切实际的。此外,推荐系统使用的评分矩阵通常是稀疏的,在其上训练的神经网络可能会生成在一定范围内变化的预测评分,这将误导基于梯度的优化算法,因为它们的学习量很小,并且很容易干扰模型训练的随机性。
3.4 投毒模型的构建
作者在这里从一个新的角度理解推荐系统。深度学习本质上是减少预测评分和真实评分之间的熵,因而,如果预测评分是高评分,那么对应的真实评分更有可能是高评分。如果能够成功构建中毒模型来模拟中毒攻击成功后原始推荐系统的预期状态,就可以推断出训练数据集中什么样的假用户对当前推荐系统的贡献最大。作者使用中毒模型对假用户的偏好进行预测,并选择预测评分最高的item作为假用户的filler item。
具体损失函数如下:
Lambda代表了模型有效性和攻击目标的权衡参数。
投毒模型的训练分为了两个阶段:
预训练: 中毒模型将首先随机初始化,并在其训练数据集上使用与目标推荐系统相同的损失函数(即L)进行训练。 经过足够的迭代,中毒模型会和正常训练得到的推荐系统相似,保证了模型的有效性。 我们可以利用这个模型随后开始中毒训练。
中毒训练: 此阶段的中毒模型将使用本章提到的公式作为损失函数,并使用反向传播方法对其内部的所有模型参数进行重复训练。 我们选择初始λ,使得验证数据集上中毒模型的损失和对攻击有效性建模的损失大致处于同一数量级。 在训练过程中,中毒模型会越来越接近我们的攻击目标,最终成为目标推荐系统的理想状态。 然后我们可以使用中毒模型来帮助虚假用户的item选择过程。
3.5 选择filler item
因为推荐系统中使用的数据集通常很分散,通过数据训练出来的模型也会不稳定。所以从毒药模型得出的假用户的选择不一定是很好的。所以我们不能总是直接使用毒药模型预测出来的评分为假用户选择filler item。
作者提出一个新概念——选择概率:选择一个item作为filler item的概率。一个item被选为filler item的次数越多,这个item的选择概率就越小。
若该item被选择,则有:
δ在零到一之间,代表衰减系数,当所有的item的选择概率都小于1时,所有选择概率会被重新初始化。
通过该式选择评分最大的n个items(除了target item)作为filler items,并更新概率;
4 具体流程