论文笔记——Model Sparsity Can Simplify Machine Unlearning

作者:Jinghan Jia, Jiancheng Liu, Parikshit Ram, Yuguang Yao, Gaowen Liu, Yang Liu, Pranay Sharma, Sijia Liu:

Model Sparsity Can Simplify Machine Unlearning. NeurIPS 2023

摘要:

        为了应对最近的数据监管要求,Machine Unlearning( MU )已经成为从给定模型中移除特定示例影响的关键过程。尽管可以通过使用剩余的数据集进行完整的模型再训练来实现精确的去学习,但相关的计算成本推动了高效的近似去学习技术的发展。我们的研究超越了以数据为中心的MU方法,引入了一种新的基于模型的视角:通过权重剪枝实现模型稀疏化,能够缩小精确Unlearning和近似Unlearning之间的差距。我们在理论和实践中都表明,模型稀疏性可以提高近似Unlearner 的多准则unlearning性能,缩小近似差距,同时保持高效性。这就产生了一种新的MU范式,称为先剪枝,再unlearning,它将稀疏模型先验注入到unlearning过程中。在此基础上,我们还提出了一种稀疏恢复Unlearning方法,该方法利用稀疏正则化来增强近似Unlearning的训练过程。大量的实验表明,我们的方案在各种unlearning的场景中都一致地使MU受益。一个值得注意的亮点是使用稀疏恢复unlearning时,微调(最简单的非学习方法之一)的unlearning效能增益为77 %。此外,我们展示了我们提出的MU方法在应对其他机器学习挑战方面的实际影响,例如防御后门攻击和增强迁移学习。

挑战:

(1)近似unlearning的性能在很大程度上依赖于算法参数的配置。例如,Fisher遗忘方法需要在每个数据模型设置中仔细调整Fisher信息正则化参数。

(2)在不同的unlearning评价标准下,近似方案的有效性可能会有很大的差异,并且它们之间的权衡关系并不清楚。例如,高"有效性"的(保护被清洗数据隐私的能力)既不意味着也不排除高"保真性"的(在剩余数据集上的准确率) 。 

提出问题:

是否存在一种具有理论基础和广泛适用性的方法来改进跨越不同unlearning准则的近似unlearning?

论文贡献:

(1)我们在整个训练/评估栈中提供了对MU的整体理解。

(2)我们在MU和模型剪枝之间建立了紧密的联系,并在理论和实践中表明模型稀疏性有助于弥合近似unlearning和精确unlearning之间的差距。

(3)我们开发了一种新的MU范式,称为"先剪枝,再unlearning",并研究了剪枝方法对unlearning性能的影响。此外,我们开发了一种新颖的"稀疏恢复unlearning "框架,该框架利用软稀疏正则化方案来增强近似unlearning过程。

(4)我们在不同的数据集、模型和unlearning场景中进行了广泛的实验。我们的研究结果一致强调了模型稀疏性在增强中的关键作用。

未来工作:

模型模块化特征的存在,如权重稀疏性,可以简化Machine unlearning的过程

基础知识:

1、权重剪枝是一种模型优化技术。在权重剪枝中,它在训练过程中逐渐将模型权重归零,以实现模型稀疏。具体内容参考以下链接: weight pruning(权重剪枝)--学习笔记-CSDN博客

2、单次幅度剪枝( OMP ) 是计算上最轻量的剪枝方法,它直接根据模型权重与目标稀疏度的比值大小进行剪枝

3、微调(Fine-tuning):微调是指在预训练模型的基础上,针对特定任务或数据领域,对部分或全部模型参数进行进一步的训练和调整。预训练模型通常是在大规模数据集上训练而得到的,它具有一定的通用性和泛化能力。微调的目标是在较小的目标数据集上,通过有限的训练数据,使模型更好地适应特定任务,从而提高模型在该任务上的性能。具体内容参考:什么是微调(fine-tune)?-CSDN博客

评估指标:

忘却学习精度( UA ):对近似unlearning方法更有利的UA应该会减少其与gold-standard retrained model(Retrain)的性能差距;一个较高的值并不一定是更好的。这一原则也扩展到了其他的评价指标。

成员推理攻击( MIA )对Df的影响( MIA-Efficacy ):这是评估未学习有效性的另一个指标。它是通过将基于置信度的MIA预测器应用于遗忘数据集( Df )上的未学习模型( θu )来实现的。然后,MIA成功率可以表明Df中的多少个样本可以被正确地预测为遗忘了θ u的(也就是说,不训练)样本。MIA - Efficiency越高,意味着θ u中关于Df的信息越少。

剩余精度( Remaining accuracy,RA ):这是指θ u在Dr上的精度,它反映了MU的保真度,即训练数据信息应该从θ o保存到θ u。

测试精度( TA ):衡量的是θu在一个测试数据集上的泛化能力,而不是Df和Dr 。TA在整个测试数据集上的评价,除了类内遗忘,属于遗忘类的测试数据点不在测试范围内。

运行时效率( Run-time efficiency,RTE ):衡量MU方法的计算效率。例如,如果以Retrain的运行时间开销为基准,表1总结了不同近似去学习方法获得的计算加速。

先剪枝,再Unlearning

1、优先选择满足以下条件的剪枝方法:

❶对遗忘数据集的依赖程度( Df )最小,

❷在剪枝时无损泛化,

❸剪枝效率最高。

2、提出使用两种剪枝方法:

(1)SynFlow (突触流量修剪) :SynFlow在初始化时提供了(免训练)剪枝方法,即使不访问数据集。因此,它是唯一适合MU满足❶标准的。SynFlow易于计算,并且比许多其他的初始化剪枝方法具有更好的泛化能力;

(2)OMP (单次幅度修剪) : 它可能依赖于遗忘数据集( Df ),但与基于IMP的方法相比,具有更弱的依赖性。此外,OMP是计算上最轻的(即对❸最佳),并且可以产生比SynFlow 更好的泛化性。

(3)尽管IMP (迭代量级修剪)被广泛用于寻找最精确的稀疏模型(也就是说,对于❷标准最好),但它并不适用于MU。与已提出的剪枝方法相比,IMP的计算开销最大,与训练数据集(包括Df )的相关性最强,从而偏离❶和❸。

OMP是我们默认使用的剪枝方法。

稀疏恢复Unlearnig

1、问题研究:研究是否可以同时进行剪枝和Unlearning,而不需要模型稀疏性的先验知识。

 2、令Lu( θ ; θo , Dr)表示模型参数θ的unlearning目标函数,给定预训练状态θo,其余训练数据集Dr受稀疏诱导优化的启发,我们将基于l1范数的稀疏惩罚集成到Lu中。这就产生了" l1 -稀疏MU "问题:

其中,我们通过微调目标来指定Lu,而γ > 0是一个正则化参数,它控制了l1范数的惩罚水平,从而减少了"不重要"权重的大小。

3、unlearning性能可能对稀疏正则化参数γ的选择比较敏感。为了解决这个限制,我们提出了一个稀疏正则化调度器的设计。具体来说,我们探索了三种方案:( 1 )常数γ,( 2 )线性增长γ和( 3 )线性衰减γ

实验设置

 1、我们的实验将使用ResNet - 18 [ 44 ]在CIFAR - 10 [ 43 ]下进行图像分类。

2、unlearning和剪枝设置:选择OMP作为默认的剪枝方法

3、评价指标:

(1)UA和MIA - Effis刻画了MU的功效,

(2)RA反映了MU的保真度,

(3)TA和RTE表征了未学习方法的泛化能力和计算效率。

(4)我们使用基于预测置信度的攻击方法实现了MIA (成员推理攻击),

(5)引入了一个名为"Disparity Average(差异平均)"的度量。该指标量化了每个未学习方法与Retrain在所有考虑的指标之间的平均性能差距。较低的值表明更接近Retrain的性能。

实验结果

1、模型稀疏性提高了近似unlearning性。

2、稀疏恢复Unlearning的有效性。 

3、 应用:MU为木马模型清理。

(1)我们提出了一种MU的应用,通过注入后门触发器(例如,一个小的图像块)并将数据标签修改为目标错误标签来消除学习模型中有毒后门数据的影响,其中敌手通过注入后门触发器(例如,一个小的图像块)操纵一小部分训练数据( a.k.a.中毒比)。训练好的模型称为特洛伊木马模型,如果测试时存在触发器,则会产生后门指定的错误预测。否则,它表现正常。

(2)我们将MU视为一种防御方法,以清除模型预测中中毒训练数据的有害影响

4、应用:MU来改进迁移学习。

(1)我们利用l1 - sparse MU方法来减轻ImageNet的有害数据类对迁移学习的影响。移除特定的受负面影响的ImageNet类并重新训练一个源模型,经过微调后可以增强其在下游数据集上的迁移学习精度。然而,重新训练源模型会引入额外的计算开销。MU很自然地解决了这一局限,提供了一种解决方案。

(2)所采用的微调方法是线性探测,它在保持源模型特征提取网络不变的情况下,在目标数据集上对源模型的分类头进行微调。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个带有sparsity参数的稀疏Transformer的完整代码: ```python import torch import torch.nn as nn import torch.nn.functional as F from torch.autograd import Variable class SparseSelfAttention(nn.Module): def __init__(self, d_model, num_heads, sparsity, dropout=0.1): super(SparseSelfAttention, self).__init__() self.d_model = d_model self.num_heads = num_heads self.sparsity = sparsity self.dropout = nn.Dropout(dropout) assert d_model % num_heads == 0 self.depth = d_model // num_heads self.qkv = nn.Linear(d_model, 3 * d_model) self.proj = nn.Linear(d_model, d_model) self.softmax = nn.Softmax(dim=-1) def forward(self, x, mask=None): batch_size, seq_len, d_model = x.size() qkv = self.qkv(x).view(batch_size, seq_len, 3, self.num_heads, self.depth) qkv = qkv.permute(2, 0, 3, 1, 4) q, k, v = qkv[0], qkv[1], qkv[2] scores = torch.matmul(q, k.transpose(-2, -1)) scores = scores / (self.depth ** 0.5) if mask is not None: scores = scores.masked_fill(mask == 0, -1e9) if self.sparsity > 0: # Calculate sparsity pattern num_sparse_tokens = int(seq_len * self.sparsity) sparse_indices = torch.topk(scores.view(batch_size, self.num_heads, -1), num_sparse_tokens, dim=-1, largest=False)[1] # Create sparse mask mask = torch.ones_like(scores) mask.scatter_(-1, sparse_indices, 0) # Set sparse scores to -inf to exclude them from softmax scores = scores.masked_fill(mask == 0, -1e9) attn = self.softmax(scores) attn = self.dropout(attn) context = torch.matmul(attn, v) context = context.permute(1, 2, 0, 3).contiguous().view(batch_size, seq_len, -1) output = self.proj(context) return output class SparseTransformer(nn.Module): def __init__(self, d_model, num_heads, num_layers, sparsity, dropout=0.1): super(SparseTransformer, self).__init__() self.d_model = d_model self.num_heads = num_heads self.num_layers = num_layers self.sparsity = sparsity self.dropout = nn.Dropout(dropout) self.layers = nn.ModuleList([SparseSelfAttention(d_model, num_heads, sparsity, dropout) for _ in range(num_layers)]) def forward(self, x, mask=None): for layer in self.layers: x = x + layer(x, mask=mask) x = self.dropout(x) return x ``` 上述代码中,在SparseSelfAttention类的初始化函数中增加了一个sparsity参数,用于控制稀疏程度。在forward函数中,当sparsity大于0时,会根据scores计算出一个稀疏模式,然后创建一个稀疏掩码,并将稀疏位置的scores设置为负无穷以排除它们的影响。通过这种方式,可以实现带有稀疏控制的Transformer模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值