这是一批关于“机器遗忘学习”的论文,是2023年8月15日发布在Arxiv上的论文,单位:剑桥大学
遗忘算法的两个性能:保持模型的完整性(性能保护),及时性和轻量级(学习效率)
及时性:关键约束条件,减少后面不必要的多余计算
轻量级:进行遗忘学习过程需要的准备工作,比如存储一些样本列表和中间信息
提出了广义信息和专有信息的区别(抽象和具象),遗忘的时候,要保护广义信息,而着重遗忘掉专有信息。广义信息是信息的一般化,不会侵犯到个人隐私
过度参数化的ML模型更容易记忆训练数据(过拟合的模型) → \to → 参数和记忆数据存在关系
论文的贡献:
1、提出新的不需要再训练的选择性遗忘方法
2、只需要修改少量的参数,以保持模型的一致性
3、计算FIM矩阵,且只需要访问一次训练数据即可计算FIM矩阵,之后可以丢弃,不需要额外存储
对于遗忘的概率定义:遗忘学习之后的模型输出分布与未使用该数据进行训练的模型的输出分布相似
Fisher信息矩阵(FIM)一直用来近似模型输出对其参数的扰动的敏感性,扰动来自损失的二阶导数。什么是Fisher信息矩阵可以看我这一篇博客
直觉:可能存在对遗忘集很重要,但是对保留集不重要的参数。
已有研究表明,深层神经网络会记忆特别的训练实例,并且后面的层中的参数高度专业化与特定的特征,这样的参数对于训练数据中的小样本集可能极为重要,但是对于广泛的训练集可能并不重要。
这里如果稍微通俗一点举个例子的话,可以尝试这么解释
区分图片是西瓜还是橘子
在模型抽象到最后几层,可能是如下特征
从图中可以观察到,靠后的层的特征对于判断图片的分类越是决定性的,也越抽象,也就是最后一个隐藏层的神经元的权重几乎决定了图片的分类。
而如果我们的分类任务变成了辨别是蔬菜还是水果,而我们想删除的小数据集是西瓜的,那么可以发现,有一些特征对于要删除的小数据集是很重要的,比如“绿色”“波浪条纹边界”“明确深浅边界”,但是对于广泛的训练集并不重要,比如其中的“波浪条纹边界”“明确深浅边界”
需要或者说可以忘掉哪一些参数是根据FIM进行选择的,选择哪些是重要的,哪些是不重要的
FIM的实际含义:对角线的值代表函数对某参数的敏感程度,值越大,表示函数对参数的敏感程度越高,数据可以给训练这个参数提供更多的信息,因此对该参数的估计更加精准
简单的参数剪枝方法:
θ
i
=
{
0
,
i
f
[
]
D
f
,
i
>
0
θ
i
,
i
f
[
]
D
f
,
i
=
0
∀
i
∈
[
0
,
∣
θ
∣
]
(1)
\theta_i = \left\{ \begin{aligned} %\nonumber &0, &if\ []_{D_{f,i}}>0\\ &\theta_i, &if\ []_{D_{f,i}}=0\\ \end{aligned} \right. \nonumber \ \ \ \ \forall i \in[0,|\theta|]\tag{1}
θi={0,θi,if []Df,i>0if []Df,i=0 ∀i∈[0,∣θ∣](1)
其中
[
]
D
[]_D
[]D代表数据集
D
D
D的Fisher信息矩阵
- 只要是需要被遗忘的数据 D f D_f Df的重要参数统统清零
- 弊端:剩余的数据 D r D_r Dr和需要被遗忘的数据 D f D_f Df的重要参数可能有很多的重合,全部贸然清零会非常影响模型的性能
修改后的参数剪枝方法:
θ
i
=
{
0
,
i
f
[
]
D
f
,
i
>
α
[
]
D
r
,
i
θ
i
,
i
f
[
]
D
f
,
i
≤
α
[
]
D
r
,
i
∀
i
∈
[
0
,
∣
θ
∣
]
(2)
\theta_i = \left\{ \begin{aligned} %\nonumber &0, &if\ []_{D_{f,i}}>\alpha[]_{D_{r,i}}\\ &\theta_i, &if\ []_{D_{f,i}}\leq\alpha[]_{D_{r,i}}\\ \end{aligned} \right. \nonumber \ \ \ \ \forall i \in[0,|\theta|]\tag{2}
θi={0,θi,if []Df,i>α[]Dr,iif []Df,i≤α[]Dr,i ∀i∈[0,∣θ∣](2)
- 只选择对 D f D_f Df来说更重要的参数进行清零,对 D r D_r Dr没有那么重要
- 弊端:这种要不清零,要不不清凉的非0即1的方式,会让稍微超过阈值的和超过非常多的被一视同仁。同时,超参数 α \alpha α的确定也是个问题,太小无法保持模型预测的准确性,太大又无法达到遗忘的目的
最终的剪枝方法:
β
=
m
i
n
(
λ
[
]
D
,
i
[
]
D
f
,
i
,
1
)
,
θ
i
=
{
β
θ
i
,
i
f
[
]
D
f
,
i
>
α
[
]
D
,
i
θ
i
,
i
f
[
]
D
f
,
i
≤
α
[
]
D
,
i
∀
i
∈
[
0
,
∣
θ
∣
]
(3)
\beta = min(\frac{\lambda[]_{D,i}}{[]_{D_{f,i}}},1), \ \ \ \ \ \ \theta_i = \left\{ \begin{aligned} %\nonumber &\beta \theta_i, &if\ []_{D_{f,i}}>\alpha[]_{\textcolor{firebrick}D,i}\\ &\theta_i, &if\ []_{D_{f,i}}\leq\alpha[]_{\textcolor{firebrick}D,i}\\ \end{aligned} \right. \nonumber \ \ \ \ \forall i \in[0,|\theta|]\tag{3}
β=min([]Df,iλ[]D,i,1), θi={βθi,θi,if []Df,i>α[]D,iif []Df,i≤α[]D,i ∀i∈[0,∣θ∣](3)
- 剪枝步骤由抑制步骤代替,对参数不是清零,而是减小
- 这里使用 D D D而不是 D r D_r Dr,是因为每进行一次遗忘就需要计算一次 D r D_r Dr,但是如果只是计算 D D D可以只计算一次,做到允许丢弃训练集(训练过程)[对应贡献3],同时一般 D f D_f Df远远小于 D D D,所以 [ ] D r []_{D_r} []Dr和 [ ] D []_D []D几乎相同
原论文中 β = m i n ( λ [ ] D , i [ ] D f , i θ i , 1 ) \beta = min(\frac{\lambda[]_{D,i}}{[]_{D_{f,i}}}\textcolor{firebrick}{\theta_i},1) β=min([]Df,iλ[]D,iθi,1),但是我觉得公式中对于 θ i \theta_i θi进行了重复的相乘,所以我这里写的是我的理解,当然如果这个多次的相乘有说法可以评论区告诉我一下,可能是我没理解到
伪代码如下: