机器遗忘(Machine Unlearning)要解决的问题很具体:模型已经用某批数据训练好了,现在要求它像从没见过这批数据一样工作。删掉原始数据文件不等于做到这一点,因为数据的影响已经留在了模型参数里,模型仍可能复述或利用它。
目前分两条路。精确遗忘的做法是把要忘的数据从训练集里拿掉,从头重新训练,得到的结果在定义上最干净,代价是算力开销常常难以承受。近似遗忘的做法是直接改现有模型的参数,让它的行为尽量接近重新训练后的模型,省算力,但“接近”到什么程度需要拿重新训练的模型当参照来检验。
它和灾难性遗忘不是一回事
灾难性遗忘是模型学新任务时把旧本事丢了,是训练过程中的副作用,没人指定要忘哪批数据。机器遗忘是接到明确删除要求后,针对一批具体数据去消除影响,目标和检验标准都写在删除要求里。两者都和“忘记”有关,方向完全不同。
为什么“忘了”很难验
只看输出答不出来还不够:模型可能只是被压住不说,换种问法又说出来。研究里常用的办法是把遗忘后的模型和重新训练的参照模型对比,看它在被忘数据和保留数据上的表现是否足够接近。还有一类省算力的办法是把数据分片训练(SISA),只重训受影响的那一片。审计时真正能查的,往往是执行了哪种算法、流程是否可复核,而不是一句“已经忘了”的保证。
所以听到“模型已经遗忘某段数据”时,先问三句:忘的是哪一批具体数据?用的是精确重训还是近似办法?拿什么参照验过?答不上来,就只能当成“不再主动输出”,而不是“已经从模型里清除”。对普通用户来说,这也意味着:聊天记录里删掉一句话、对话窗口里清掉一段内容,和让模型遗忘训练数据是两件不同的事,前者管的是你眼前的记录,后者管的是模型内部的影响。