微信扫码
与创始人交个朋友
我要投稿
PII(个人身份信息)清除是针对个人身份信息泄露的一种数据治理方法,用于从文本中删除个人身份信息,可能包括姓名、地址、电话号码、身份证号码等可用于识别特定个人的敏感数据。
关于删除某些信息的权衡。例如,研究显示对于训练于进行过PII清除的临床记录上的 BERT 模型,基于患者姓名的训练数据提取攻击生成的句子有超过 4% 包含其真实的医疗状况。此外,数据去重也可以缓解对训练数据的记忆,从而有效减少隐私数据泄露。
核心思想是通过向数据添加噪声或扰动来模糊数据,以使攻击者推断敏感信息变得困难,从而在提供数据的同时保护隐私。典型的差分隐私算法包括 DP-SGD 和 DP-FedAvg 等。
关于 DP-SGD,即差分隐私的随机梯度下降算法
基于差分隐私随机梯度下降法(DP-SGD,即 Differential Privacy - Stochastic Gradient Descent)是深度学习中最流行的 DP 训练方法,即差分隐私的模型方法。
与传统的随机梯度下降算法(SGD)的主要不同点是:DP-SGD算法在每一轮迭代过程中都会进行梯度裁剪和添加高斯噪声。
关于 SGD
1.随机选择一个训练样本;
2.计算该样本的梯度;
3.使用梯度值和学习率来更新参数;
4.重复以上步骤,直至达到收敛条件或达到指定迭代次数。
SGD在深度学习中广泛应用于模型的训练过程,特别是在大规模数据集和复杂模型的情况下。由于SGD的简单性和高效性,它成为了优化算法领域的基准方法。
优点:
第一,计算成本低。SGD 每次仅使用一个样本或一批样本进行模型参数更新,相比于使用全部样本的批量梯度下降(BGD),计算成本更低。
第二,避免局部极小值。SGD通过随机选择样本来计算梯度,这使得它具有一定的随机性,有助于避免陷入局部极小值。这里,我们略微记住,确定的步长,会陷入 local。
缺点:
第一,不稳定。SGD每次更新只使用一个样本或一批样本,更新方向可能受噪声的干扰而波动较大。
第二,学习率的确定非常重要。对于SGD,合适的学习率的选择至关重要。学习率过大可能导致振荡,学习率过小则收敛速度缓慢。
第三,也有可能陷入局部最小。由于SGD的随机特性,可能导致在训练过程中陷入局部极小值,并无法跳出。
改进方法:
1. 动量法(Momentum):引入一个动量项,使更新方向在梯度变化较大的维度上具有一定的惯性,从而加速收敛并减少震荡。
2. 学习率衰减(Learning Rate Decay):随着训练的进行,逐渐减小学习率,有助于在接近损失函数最小值时平稳收敛。
3.Adagrad:自适应学习率的方法,根据参数在每次迭代中的梯度大小自适应地调整学习率。
4.RMSprop:对Adagrad进行改进,通过平均梯度的平方来调整学习率,从而缓解训练过程中的震荡。
5. Adam:结合了Momentum和Adagrad的优点,并进行了一定的改进和修正,是目前最流行和常用的优化算法之一。
主要是在学习率,以及梯度的权重上做文章。
关于 差分隐私(Differential Privacy)
这里主要学习深度学习的应用,关于差分隐私的应用。这些算法我还没仔细看过。
关于 差分隐私
根据第三方的可信程度,分成“中心化差分隐私”,“本地差分隐私”。前者的算法跑在第三方机构,后者的算法跑在本地机器。
差分隐私模型效果判断:
首先,我们不想比较两个模型的权重,而是要考虑观察这些权重的概率。
其次,与其坚持什么都不会改变,不如让我们承诺,虽然某些事情会发生变化,但我们保证它的变化永远不会超过特定和预定义的数量。换言之,事先规定好模型推断的上下限。
差分隐私定义(比较官方):您有两个数据集 D 和 D',它们仅在单个记录(例如,我的数据)上有所不同,并且您通过称为 M 的过程或机制与数据交互(这可以是任何内容,稍后会详细介绍)。 我们可以说 M 是 ε-差异私有的,如果对于每个可能的输出 x,观察到这个输出的概率在两种场景(有和没有我的数据)之间的差异永远不会超过 exp(ε)。
注意,上述 epsilon 越高,用户信息越不私密。因此,这个 epsilon 可能产生隐私损失预算。
然而,如何在大模型场景下应用差分隐私技术依然存在挑战。
一方面差分隐私算法是在两个相似的语言环境中计算距离,我们可以理解为,同样的对话要复制一份。因此,差分隐私算法会给大规模语言模型带来性能下降、计算和存储开销增加等问题,这些问题随着语言模型规模的增加进一步加剧。另一方面,文本数据上隐私粒度(单个标记、单词, 句子、文档,甚至整个用户数据集)的鉴定也有待研究。目前在语言模型领域,常用的差分隐私训练框架包含两个步骤。
步骤一,在非隐私数据上按照普通的训练方法进行训练,该步骤旨在让预训练模型学会通用特征;步骤二,在隐私数据上利用差分隐私算法进行训练。该框架在保护隐私的同时可以在一定程度上缓解训练开销的增加。评注:这里所谓的省开销,可能是因为隐私数据,毕竟只是全部数据的一小部分。
模型后处理指在给定训练好的模型后,如何提升其隐私防御能力。一方面可以对大模型进行定期审计,在每次审计中检测模型生成内容是否触犯用户隐私,对其违反隐私原则的部分进行替换或过滤。
例如,可以构建分类器或者利用大模型通过提示的方式,判断当前回复中是否包含 PII,除非 PII 是公开的要求大模型添加引用,否则进行替换或重新生成,应该避免将这类信息提供给用户。评注:换言之,除非是要求的,不然都没有必要显示别人的隐私。
另一方面,在给定需要保护的隐私资料的情况下,可以用模型遗忘技术。例如,EUL6。通过在隐私数据上的遗忘学习,在不影响模型性能的前提下,实现隐私防御。
关于“遗忘”模型。
这里我先说了点自己的理解,因此录音献上。
一种基于模型参数的封闭式更新来实现数据遗忘的方法,这一工作来自2023年Network and Distributed System Security (NDSS) Symposium的一篇论文,无论模型的损失函数是否为凸函数,这一方法均可以实现显著的特征和标签数据遗忘的效果。常用的机器学习数据“遗忘”方法有好几种,我们今天学习基于特征的“遗忘”方法。
研究人员也提出了分片法,通过将数据分割成独立的分区,基于每个分区训练子模型并聚合成最终模型。在分片法中,可以通过仅重新训练受影响的子模型来实现数据点的遗忘,同时其余子模型保持不变。这一方法的缺点在于,当需要改变多个数据点时,重新训练的效率会迅速下降,随着需要删除的数据点数量增加,所有子模型需要被重新训练的概率也显著提高。
例如,当分片数量为20时,移除150个数据点就需要对所有分片进行更新,即随着受影响数据点的数据增加,分片法相对于再训练的运行效率优势逐渐消失。其次,相对于移除受影响的特征和标签而言,移除整个数据点会降低再训练模型的性能。评注:受影响样本数量多,分片将不再合适。这时候,移除整个片区数据,又会影响性能。
当隐私问题涉及多个数据点,但仅限于特定的特征和标签时,使用这一方法比删除数据点更加有效。常用的方法包括,数据点的修改、特征的修改、特征的删除。评注:这里不是遗忘样本,是遗忘某些变量的某些维度。
“遗忘”算法,如何起作用
目的就是减少隐私泄露概率,几种遗忘方式:
1.所有事物一视同仁的按相同的规律进行遗忘;
2.偶尔或随机出现的事物因此会随时间而逐渐淡忘;
3.而具有相对稳定周期重复再现的事物,虽然也按同样的规律遗忘,但由于周期性的得到补充,从而可以动态的保留在记忆中。
那么,我们用什么来模拟遗忘呢?
在解释文章之前,我先构思了一个算法,这个算法的主题是“如何衡量一个样本的重要性”。这个问题是有解决方法的,解决方法就是,针对线性模型来讲,线性系统能解释的 error 和系统无法解释的随机误差 random error 是可以区分出来的。线性模型,就是考察系统能解释的 error 的比例。因此,样本重要性也简单,就是样本 X(i) 放入或者不放入模型,产生俩模型,model_1 和 model_2,产生两组系统误差 S 和随机误差 E,这俩误差之和称为 T。这个时候,我们考察 S1/T1,以及 S2/T2 就能考察样本重要性了。这是第一种方法。
还有什么方法?
model_1 在集合上预测,产生一个预测误差 pred_error_1,model_2 在同样集合上预测,产生预测误差 pred_model_2。这两个误差的差异,也可以作为这个样本重要性的度量。
至此,我们已经自己建造了两种度量样本重要性的方法。现在,我们把度量抽象一下,统称为“度量”,也别管这个度量怎么算,也就是下文的 Δ。
具体这么计算。
首先,我们认为我们要估计的模型参数,称为 theta,遗忘之后的参数集合,称为 theta_。这个时候 Z 为原始数据,Z_ 为期望数据点(可以认为是遗忘之后的数据点)。那么,原有可估计出的 theta 和 遗忘之后的 theta_ 其等式关系。
(1)
其中,Δ 意味着距离,或者称为“度量”。既然是遗忘算法,我们之后还会获知一种,“遗忘之后的度量”。以下等式(2)和等式(3)分别表示,一阶线性变换的距离,以及二阶变换的距离,其中一阶变换使用的是“遗忘率”。
这里的一阶和二阶都是针对 Loss Function 的求导,不同情况下同一个点,即 realistic Z,以及 ideal Z_。代入求得梯度,各个维度相加,得到两个数值,然后其差和“遗忘率”相乘。
二阶情况,涉及 Hessian 矩阵的计算和存储。
(2)
(3)
这里有两张图,先别管两张图的差异。Approx v.s. Real 意味着观察你的实验涉及的估计值和真实值能否收敛。很显然,二阶估计值的效果是最好的。一阶估计值效果尚可,正向误差,最关键问题在于,原始数据集也是正向误差。
这就是这张图的结论。
神经网络传递过程中,有些信息并非建模者想要神经元去传播的,但是神经元在传播的过程中,就是会带入用户的信息,有些甚至是隐私信息。这时候,我们称为这种现象为“无意识记忆”。
这些信息怎么遗忘呢?
有些文献称,语言模型目前使用非凸损失函数(但事实上 loss function 自己可以选),换言之,通常使用的并非是性质很好的凸函数,此时,无法从理论上验证数据遗忘效果。
(4)
这个公式用来模拟“敏感信息容易被抓取程度”的,如果该公式的值为 0,说明信息无法被提取出来。其中,|Q| 值得是固定长度单词的种类数量,例如,5 个字母单词,那么 |Q|=5P26。后者是,目标序列在 Q 当中的排序。说实话,第二个参数没太理解,但是,如果这个排序很靠后的话,说明信息很难以被提取。那么,这个 rank 用什么来衡量的?很可能是,变换后的值,距离原数据的距离,或者变形的度量。
这也是我们现场学习的,如果有任何疑问的地方,可以给我们提出来。
总的来说,这“遗忘”算法,不算特别懂。总结来说,就是样本点、不同特征的一些维度设置为 0 就好。我自己在实践过程中,最大的感触是,如果你不做一遍大神的工作,自己的解决方式极其简单而无效。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-04-30
2024-07-04
2024-07-18
2024-07-10
2024-06-11
2024-03-29
2024-06-20
2024-07-04
2024-06-29
2024-07-10