可用性攻击就像旨在降低模型整体性能的粗糙工具,而定向数据投毒则是一种精准工具。其目的不仅仅是干扰模型,而是根据攻击者的计划,使其能够可靠地错误分类特定、预设的输入,或者具有某些共同特征的输入。这允许进行更不显眼且可能损害更大的操作,模型在大部分时间看起来运行正常,但在攻击者选定的目标上会可预测地失败。
实现这一点,需要精心制作恶意数据点(毒药),这些数据点在加入训练集后,会不显眼地扭曲学习到的决策边界,正是攻击者需要其失败的位置。通常,这必须使用相对于干净训练数据量而言少量的毒药样本来完成,以保持不显眼并避免通过数据清理方法轻易被发现。
基于优化的投毒
许多高级定向投毒技术将毒药数据的创建视为一个优化问题。主要思想是生成毒药样本 (xpoison,ypoison),当这些样本加入到干净训练集 Dclean 后,训练出的模型 fheta∗ 会在特定目标输入 xtarget 上展现出期望的恶意行为。例如,攻击者可能希望将 xtarget(其真实标签为 ytrue)错误分类为 ypoison。
攻击者通过最小化一个编码其目标的客观函数,来寻找最优的毒药数据 xpoison。这通常转化为一个复杂的双层优化问题:
- 内部优化(模型训练): 这一层模拟使用组合数据集 Dclean∪{(xpoison,ypoison)} 的标准模型训练过程。结果是投毒模型的参数 (parameter)集 θ∗。
θ∗=argθmin(x,y)∈Dclean∪{(xpoison,ypoison)}∑L(fθ(x),y)
- 外部优化(毒药制作): 这一层调整毒药数据 xpoison(有时也调整其标签 ypoison),以使用从内层循环获得的参数 θ∗ 来最大化攻击者的目标。一个常见的目标是最大化目标样本 xtarget 相对于期望的恶意标签 ypoison 的损失,同时可能限制毒药点看起来有些自然,或确保模型在干净数据上的准确率不会下降太多(为了隐蔽性)。
xpoisonmaxL(fθ∗(xtarget),ypoison)受限于 xpoisonext的约束
直接解决这种双层优化通常是不可行的。实际方法通常采用近似处理。一种常见方法是在毒药数据上使用梯度上升。攻击者计算与目标样本错误分类相关的损失梯度,相对于毒药数据的参数 (xpoison),并迭代更新毒药数据以接近恶意目标。这需要估算 xpoison 的变化如何影响最终训练的参数 θ∗,通常涉及近似训练动态或通过优化步骤(例如SGD更新)进行微分等技术。
特征碰撞攻击
一种更直观的定向投毒机制涉及制造“特征碰撞”。在这种情况下,攻击者不一定解决复杂的优化问题,而是侧重于操纵模型的内部特征表示。
该策略是制作一个毒药样本 xpoison(分配恶意标签 ypoison),使其在模型的一个或多个中间层中的表示被设计得与目标样本 xtarget 的特征表示非常接近。
在毒药数据集上训练期间,模型学习将特征空间中包含 xtarget 和 xpoison 表示的区域与毒药标签 ypoison 关联起来。因此,当在推理 (inference)时将干净的 xtarget 提供给训练好的模型时,其特征会激活特征空间中的“投毒”区域,导致模型输出攻击者期望的标签 ypoison。
特征碰撞的示例。左侧:在原始模型的特征空间中,目标属于A类。右侧:一个被标记 (token)为B类的毒药点(菱形)被精心制作,使其特征接近目标。模型学习到一个新的边界(红色虚线),将该区域与B类关联,导致目标被错误分类。
简单方法与挑战
存在一些不那么复杂的方法,例如简单的标签翻转。这包括找到与目标 xtarget 相似的现有训练样本,并简单地将它们的标签更改为期望的 ypoison。尽管简单,但与基于优化的方法相比,标签翻转通常需要改变更多的样本才能达到可靠的定向效果。这种增加的修改量会使攻击更不隐蔽,并且更容易受到数据过滤或异常值去除防御的影响。
制作有效的定向毒药会带来一些重要的障碍:
- 隐蔽性: 毒药样本理想情况下应类似于良性数据点,以逃避检测。基于优化的方法有时可以在客观函数中包含项,以强制与干净数据分布的相似性。
- 有效性: 少量的毒药点理想情况下应能可靠地引发期望的错误分类。所需的投毒比例(毒药数据的百分比)是一个重要因素。
- 训练动态: 毒药数据的精确影响可能对训练过程的具体细节很敏感,包括所使用的优化器(例如Adam、SGD)、学习率调度、批量大小以及随机梯度下降 (gradient descent)固有的随机性。为一种设置优化的攻击可能在另一种设置中失败。
这些定向投毒技术主要旨在通过操纵训练数据分布,破坏模型在特定、通常是干净输入上的行为。这种侧重使它们与后门攻击有所区别,我们接下来会分析后门攻击。后门攻击也实现定向错误分类,但通常依赖于嵌入 (embedding)一个独特的人工触发模式,以激活隐藏的恶意功能。