1. Fish攻击的数学基础与攻击原理
Fish攻击是一种针对机器学习模型的隐私窃取技术,其核心在于通过精心设计的梯度操纵,从模型训练过程中窃取原始输入数据。要深入理解这种攻击方式,我们需要从模型结构和梯度计算的基础知识讲起。
1.1 模型最后一层的数学表示
在典型的分类神经网络中,最后一层通常是线性变换层(也称为logits层),其数学表达式为:
output = W·x + b
其中:
- W是权重矩阵,维度为[C,D],C代表类别数量,D是输入特征维度
- x是输入特征向量,维度为[D,1]
- b是偏置向量,维度为[C,1]
- output是输出logits,维度为[C,1]
这个线性层的输出会传递给softmax函数,转换为各类别的概率分布。值得注意的是,这个线性层本身不包含任何非线性激活函数,这使得后续的梯度计算保持了良好的线性性质。
1.2 交叉熵损失函数的梯度特性
分类任务最常用的损失函数是交叉熵损失,它对模型输出的梯度具有特定的数学性质。假设真实标签对应类别c,那么交叉熵损失对类别i的输出output[i]的梯度为:
∂L/∂output[i] = {
1 - p[i] 如果i = c(真实类别)
-p[i] 如果i ≠ c(其他类别)
}
其中p[i] = e^output[i] / (∑_k e^output[k])是softmax输出的概率。这个梯度公式是理解Fish攻击的关键,因为攻击者正是通过操纵这些梯度值来实现数据窃取。
提示:在实际应用中,梯度计算是通过自动微分(autograd)完成的,但理解其数学形式对于分析攻击原理至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Fish攻击的具体实施步骤
2.1 偏置项的恶意篡改
攻击者(恶意服务器)会实施以下操作:
- 将目标类别c的偏置b[c]保持原值(通常较小,在0-10范围内)
- 将所有其他类别i≠c的偏置b[i]设为极大值(如1000)
这种设置会导致模型输出的logits值出现极端分化:
- 对于目标类别c:output[c] = W[c]·x + b[c] ≈ W[c]·x(因为b[c]很小)
- 对于其他类别i≠c:output[i] = W[i]·x + 1000 ≈ 1000(因为1000远大于W[i]·
