数据孤岛分为物理性和逻辑性两种。
联邦:使拥有碎片化小数据集的各方 联合 构建一个机器学习模型(因为这些碎片化小数据集不方便一下子聚合到一起处理。)⚠️⚠️⚠️一开始各方都有各自的学习模型,根据自己的数据训练,然后各方的模型 聚合 (通过各方交换模型信息(B2B)、或将模型信息上传聚合服务器,服务器统一聚合(B2C))成一个全局模型,然后各方再训练全局模型。不断循环 此过程直到全局模型收敛。这个收敛的全局模型就是训练得到的最终机器学习模型。各方都共享这个收敛的最终全局模型。⚠️:各自的模型和聚合模型的结构是一模一样的,只是参数不同而已。
联邦学习算法设计中,一个重要的变化就是,在各站点间(各方),以安全方式传输 模型信息,而不是数据本身。
但是虽共享一个模型,各方 侧重点不同,即各方拥有数据不同,训练时完善的具体细节不同,可能在全局模型中,各方所负责的功能模块不同。
即 把羊带到各个草场去吃草,这样既保证草(数据)不出本地,又实现了模型用所有数据进行训练。 这样,联邦学习既完成了构建一个学习模型,处理数据的目的,又实现了数据安全和隐私保护。
**(B2B:类似于不需要协调方架构,各参与方就是各企业,直接交换模型信息)**企业与企业之间。人工智能安全问题备受关注。联邦学习是主要研究AI安全中的隐私保护和数据安全问题。
**(B2C:类似于需要协调方架构。消费者相当于各参与者,企业相当于第三方,即聚合服务器)**企业与消费者之间。另外,联邦学习也为了最大化利用云系统下终端设备的计算能力。 在各设备和服务器之间传送的是中间计算结果,而不是原始数据。即终端设备本身可以处理许多计算任务。
模型训练阶段(训练模型),各方只能交换模型相关信息(例如参数),但不能交换数据。
模型推理阶段(测试模型),模型应用于新的数据实例。
一个矩阵代表一个参与方所拥有的数据。每一行代表一个数据样本,每一列代表数据特征或标签。因此,类似于一个坐标轴, 纵向是数据样本为单位,横向是数据特征或标签。 ⚠️⚠️⚠️
根据不同参与方之间,数据的数据特征空间和样本ID空间分布情况划分。
提升树系统架构 SecureBoost :提升 纵向联邦学习 的安全性。其针对于分布式数据集与集中训练的梯度提升树有相同准确度。
梯度提升树:一种迭代的决策树算法,每次迭代都会使损失函数尽量小。
联邦学习已被应用于医学图像分析、自然语言处理、推荐系统领域。
PyTorch 使用PySyft 实现联邦学习系统。
增加隐私保护技术的机器学习系统。 防止敏感信息泄漏(保证机密性)。
重构攻击(模型训练阶段):模型训练阶段,(集中式训练)会把各方原始数据收集起来,大型企业可能会把这些原始数据未经允许给其他人;(分布式)各方会把自己模型权重和梯度互相交换,但明文梯度可能被利用导致泄露某方的训练数据信息(根据梯度反推 原始数据信息)。
解决:安全多方计算MPC和同态加密HE可通过保护计算 中间结果,抵御重构攻击。
模型反演攻击(模型推理阶段):模型推理阶段(应用于新数据),攻击方通过白盒或黑盒访问,实施方程求解攻击(“查询-回应“方法),获取训练模型的额外明文信息,可反演出相似的模型。
解决:限制设置对模型访问仅为黑盒访问,模型输出也同样受限,尽可能少暴露模型信息。
同态加密的贝叶斯网络。
成员推理攻击(模型推理阶段):模型推理阶段(应用于新数据),攻击方至少有黑盒访问权限,且有一个样本。攻击方将样本喂入模型,得到输出后,根据输出推理该样本是否属于模型的 训练集。
特征推理攻击(数据发布阶段):数据发布阶段,一般为保护用户隐私会把用户匿名化,攻击方则根据其他资料(其他资料可能带有显性用户资料),由其他资料推出用户特征,并由此特征与匿名用户比对,实现 去匿名化,重新识别出用户。
将一个私有数值 x 分给各共享方,各方只能获取自己xi的内容, 协同计算出 各自的yi(即y1,···,yn),不知道其他各方xi、yi。
n 取1的不经意传输:A方有一个输入表(x1,···,xn)作为输入,B方有 i 属于1,···,n作为输入。B选择一个i,学习到xi。但也只能学习到xi。而A方也不了解B选择了哪个i,不知道B学习了哪个xi。
⚠️**原理:A不知道其他方到底学习了哪个Xi(所以说是不经意传输**);B只能学到Xi,而不知道其他X的内容。因此,他们只能用自己的xi来获知yi,协同计算,不知道其他信息。
问题:::A一开始有所有的输入Xi,他计算哪个Xi?他不是就知道其他方有哪些Xi了么(只是不知道具体哪方有着哪个xi而已)
不经意传输定义如上,那么如何构造?
⚠️一种构造方法:Bellare-Micali 构造实现不经意传输:接收方B给A发送n个公钥(每个公钥对应加密一个Xi,发送方A用公钥分别对每个Xi加密),但B只有对应其中一个的私钥。**发送方A不知道B具体是有哪一个私钥。**A用所有公钥分别对X1,···Xn加密,把n个密文都发给B,B使用唯一私钥解密得到Xi,因此B也只能学习到Xi,不知道其他加密的Xn。
不经意传输实现了秘密拆分,秘密计算可使用 姚氏混淆电路、同态加密等。
分为秘密拆分、秘密恢复。
将秘密值分割成随机多份,分发给 n方来隐藏秘密值(各方拥有的只是 秘密值一部分),如果有需要则将这些分割内容 重新构造 成原始的秘密值。
⚠️在秘密拆分时,将秘密值分发给n个参与方。而在恢复秘密时,多于特定t个参与者合作才可以重新构造计算出或是恢复原秘密,而少于t个参与者则不可以重新得到有关秘密。 (t<=n)!!!
这样的好处:1、安全性:攻击者必须同时获得一定数量的秘密碎片才能获取原秘密值。
2、可靠性:当少量秘密碎片丢失或损毁时,利用剩余的秘密碎片仍可得到原秘密值。
秘密拆分时,怎么确保各参与方只知道自己的内容,而不知道其他内容呢?在算数秘密共享中,将一个秘密值分割时,随机采样n-1个值,然后用S分别对n-1个值处理,分别得出Sn。既然是随机采样,那么各方只能知道自己内容,无法推导计算出其他参与方的sn的值。
秘密共享体系还具有同态的特性。如下图所示:有特征A和B,他们的值被随机分成碎片(X1,···,Xn)和(Y1,···,Yn),并分给n个参与方。**每个节点(参与方)运算结果的加和(乘和,是和!!),等同于原始A与B的加和(乘积)。**同样通过增加其他计算机制,也能满足 乘积 的效果,这就是秘密共享具备的“同态性”,各参与者可以在 不交换任何数据(只需算好各自部分,然后节点数据合起来即可) 的情况下直接对密码数据求和、乘积。
⚠️:欲实现 线性 安全乘法的同态,可使用乘法三元组。
秘密共享包括算数秘密共享、Shamir秘密共享、二进制秘密共享。(不同方法,其针对的数据类型不同、秘密拆分和恢复方法不同)
算数秘密共享:将一个数字按照一些数学代数运算进行分解、共享(个人理解)。
一般同态加密(非对称),一个公钥一个私钥,一般同态密钥在隐私保护场景下的应用受到限制,且安全风险较大,扛攻击性低(多参与方使用一套公私钥时,只要有一方被攻击成功,私钥就会泄漏)。而阈值同态加密算法,支持多个私钥,多个公钥。
一般同态加密和阈值同态加密都是多参与方。只不过前者各方拥有同一套公私钥,后者各方各自生成公私钥各自保存,且可通过计算密钥 ek 相互转换。
不同公钥加密的密文,可通过计算密钥ek相互转换,以方便进行同态计算。
❗️❗️❗️阈值则代表:当对密文结果进行解密时,只有当参与解密的 私钥数量 达到一个阈值时,才可以解密成功,否则无法得到正确明文。
安全多方计算主要分为离线阶段和在线阶段。离线阶段,可信第三方产生乘法三元组(提高计算效率),之后在线阶段使用已产生好的乘法三元组对机器学习模型进行训练。若离线阶段没有可信第三方产生乘法三元组,则可使用SPDZ、MASCOT等协议。
对相关密文操作(不需获知解密密钥),即可以 直接在密文上 进行特定代数运算的 加密方法。
一种不需要访问数据本身就可以加工数据的方法,因此实现隐私数据的保护。
这里可理解为,可直接对密文处理,等于先对明文处理再加密。即同态加密这种加密方法 满足运算的同态性。
四元组(KeyGen,Enc,Dec,Eval)
是指满足 密文同态运算性质 的加密算法,即数据经过同态加密之后,对密文进行特定的计算(先加密后对密文进行处理),得到的密文计算结果 等同于对明文数据直接进行相同的计算后再同态加密(先对明文处理,再加密),实现数据的“可算不可见”。
部分同态加密(PHE):该加密方法只能做无限次同态加法(additive-only)或者只能做无限次同态乘法(multiplicative-only)操作。因此只能对密文(也即是对明文做无限次加、或无限次乘运算,只能是其中一种运算)。
些许同态加密(SHE):该加密方法可以对密文做有限次同态加法 和 同态乘法(加、乘法都可以)。但是只能有限次,因此不能同态计算任意函数(即由于同态加法和同态乘法运算次数有限,对密文处理函数 **f 函数**不可能任意,因此些许同态加密方法只能对数据进行部分函数形式处理。)
因为SHE使用了噪声数据。每次对密文做运算操作,都会增加密文噪声量,当噪声量超过上限值后,解密密文得不到正确结果(失去同态性),因此只能有限次运算。
全同态加密(FHE):该加密方法可以对密文做无限次同态操作(同态加法和同态乘法运算)。因此可以同态计算任意函数(因为任意函数都可以由无限次加法、乘法实现)
FHE可以实现任意函数功能。即全同态加密方法,可以对数据进行任何函数形式的处理。
FHE使用了自助法 Bootstrap 对密文重加密,以减少密文后续计算中的噪声量,才能实现 无限次操作。但Bootstrap计算开销很大,FHE速度十分缓慢。
用来防范 个体级别 差分攻击。
例如:100人有10个人生病,攻击者想了解第100个人的健康状况。攻击者会先查询前99个人生病个数,再查询100个人生病个数,对比即可知道第100个人的情况。
在查询结果中加入 满足某种分布噪声,使查询结果加入随机性,使 数据模糊。
即对于只有一个记录不同(即欲攻击的那个个体的数据不同)的两个数据集D和D‘,攻击者在这两个数据集 (以隐私预算∈约束下) 查询结果相同的 概率很接近(即第100人生病和健康的两个数据集中,攻击者在这两个数据集查询第100人状况概率很接近),这样攻击者无法判断真实结果,造成混淆。
攻击者两个数据集查询结果相同的概率只能非常接近,不能一样。一样就代表完全随机化,完全随机意味着无法验证真实结果,隐私保护没意义,数据不可用了。因此,要权衡实用性和隐私性。
隐私预算∈,代表对查询者的 信任程度,可以近似理解为 所允许的查询次数。每次查询,查询者都有可能根据概率反推出数据, 因此每次查询后,都会扣除一些预算。当信任程度为0,不能在查询,否则很大概率就会反推暴露出数据。 ⚠️⚠️⚠️隐私预算越小越好,越小,隐私保护越好。
加入噪声后,两个数据集的概率分布。
噪声加入越多,即随机性增加,可用性下降,函数图像趋于扁平,隐私预算减小。
如何在随机性和可用性权衡情况下减小隐私预算呢?
加入松弛项。即允许有较小的差距。
加入松弛项,不引入更多噪声情况下,减小隐私预算。
根据函数敏感性增加噪声。针对 数值型 数据,一般采用拉普拉斯或高斯、二项式分布的噪声。查询结果往往是 一个确定的数值结果。 **直接在数值结果中加入噪声实现差分隐私。**采用拉普拉斯,得到严格的(∈-0)差分隐私;采用高斯或二项式,得到松弛的(∈-松弛项)差分隐私。
根据离散值的指数分布选择噪声。针对 非数值型 数据,采用质量函数q进行打分。指数机制整体的思想就是,当接收到一个查询之后,不是确定性的输出一个结果,而是以**一定的概率值返回结果,从而实现差分隐私。例如:对应输出概率为
{ 红 色 : 3 e − 7 , 绿 色 : 4 e − 5 , 紫 色 : 0.999 } \{红色:3e-7,绿色:4e-5,紫色:0.999\} {红色:3e−7,绿色:4e−5,紫色:0.999}
而这个概率值则是由打分函数确定,得分高的输出概率高,得分低的输出概率低。**
LDP:本地差分隐私。 中心思想:随机回应(RR)
一般在联邦学习中使用本地化差分隐私。
传统的差分隐私是将原始数据集中到一个数据中心,然后在此对数据施加差分隐私算法,并对外发布,称之为中心化差分隐私(Centralized Differential Privacy)。因此,中心化差分隐私有一个前提:可信的第三方数据收集者。
本地化差分隐私:只有不可信的第三方收集者。其将数据隐私化的工作转移到每个用户,用户自己对自己的数据施加差分隐私算法,再将差分隐私后的 扰动数据 发送给不可信第三方。极大地降低了隐私泄露的可能性。
中心化和本地化最大的区别是 在哪个地方扰动。本地化是用户的数据在自己的本地化扰动后,将 扰动的值 发送给 聚合器,聚合器收集大量的数据后再反推频数或者均值。而在中心化时,我们是信任聚合器的,因为我们将自己**真实的数据** 直接发送给聚合器,聚合器收集大量的数据再扰动,再返回频数/均值等。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FHe9str8-1646467645454)(D:\Typora\笔记配图\v2-08ba5f31513ab6acfddd6f955226a186_r.jpg)]
也称为分布式学习。是指利用多个计算节点(也称为工作者 Worker)进行机器学习或深度学习的 算法和系统,旨在提高性能、保护隐私,并可扩展至更大规模的训练数据和更大的模型。
面向扩展性的DML:用来解决不断增长的扩展性(内存容量)和计算需求(训练处理时间)问题的ML系统。目前一段时间,ML和DL的规模以指数级增长,训练该模型已超出单一计算单元(计算节点)的传统ML能力范围。
当内存限制和算法复杂度是主要障碍时,面向扩展性的DML可通过引入多个计算单元(计算节点),把大量训练数据分散存储在不同计算单元实体中,克服内存问题。多计算节点 并行处理 可以克服计算速度问题。且DML还可提供弹性化、廉价化的计算资源。例如计算单元、CPU、GPU、TPU(Tensor Processing Unit,张量处理单元)。
面向隐私保护的DML:保护用户隐私和数据安全。
面向扩展性的DML多应用于横向划分数据集(类似于横向联邦学习)场景中,即各参与方持有不同的样本数据(把大量数据划分开,分给不同参与方协同训练),但是有相同的数据特征。
面向隐私保护的DML多应用于纵向划分数据集(类似于纵向联邦学习)场景中,即各参与方持有相同的样本ID数据,但是各参与方数据的数据特征不同。
内存短缺
传统ML只在 一块独立内存 中对数据样本进行训练。当数据样本规模超过单块内存容量可能导致训练失败。
不合理的训练时间
模型训练中,ML模型 超参数调校 需大量时间。但当处理大规模数据样本时,计算复杂度高,训练处理过程耗费时间过长( 因此要想着优化提速 ),留给调参的时间不多,导致试验超参数时间过少,难以获得高性能模型。
数据并行、模型并行、图并行、任务并行、混合并行和交叉并行
数据并行:不同计算节点(计算设备)输入不同数据,运行 相同的完整的模型。
将总的训练数据划分为多个分片,分别置于多个计算设备中,每个设备使用统一模型的多个副本(即每个设备训练的模型都是完整且相同的),并行 训练,定期交换各自训练模型的参数,以聚合成全局模型参数。
由于模型的一个副本必须完整位于单一设备上,因此数据并行不能处理具有 高内存占用特性 的 DNN模型。
基于数据并行的两种分布式训练方法:同步训练和异步训练。
同步:ps 会同时充当 reducer 的角色,等待所有 worker (计算节点)都发来梯度和参数更新请求后,ps 会对梯度取平均(reduce mean),并用平均过后的梯度更新一次参数(聚合得到新的全局模型参数)。各个 worker 在从 ps 读取最新参数的过程中,以及等待 ps 更新参数的过程中,都是处于 空闲状态。
异步:与同步更新不同,异步更新中 ps 在收到一个worker 的梯度以及更新请求的时候,会立即对参数发起更新,而不等待其他 worker。在完成梯度的计算后,worker 会立刻从 ps 上读取参数,进行下一步的迭代。
可以理解为,只需要收到一个节点的更新梯度,就开始聚合。。这时候就会有问题,如果在聚合更新某一个节点参数时,又收到另一个节点更新梯度,可能更新一半就没了。
模型并行:不同计算节点输入 相同数据 ,运行模型的不同部分。
如数据并行中,DNN具有高内存占用特性。当一个模型过大,不能加载到单一节点内存中时,需要分割模型。
将一个模型分割成若干部分,分别置于不同计算节点中(例如DNN模型,一些层放在一个部分,其他层放在其他部分)。
模型并行主要目的是解决内存容量限制问题,即 一个模型不能放入单一设备,并不是为了加速训练,只能加速一点点。
并不能大幅提速是因为,虽然是并行,但是是模型并行。例如DNN模型,每个层在不同计算设备中,那在前向传播时,各计算设备一定是串行(以符合前向传播/后向传播),因此实际上并不能大幅提速。
以图为中心的DML。
计算机程序在同一台或多台机器上的 多个处理器 上执行。对于一个程序来说,并行执行程序中的 不同操作 以最大化利用处理器或内存等计算资源。
DML常将任务并行和数据并行结合起来。
混合并行:结合不同类型的并行方法,形成混合并行。
例如:数据并行和任务并行;数据并行和模型并行。
交叉并行:比混合并行覆盖范围更广,更细。例如可能是 按层混合,即不同层选择不同并行方法进行混合。对一些层采用数据并行,对另一些层采用模型并行。
分类树(决策树)是一种十分常用的 分类 方法。它是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对 新出现的对象 给出正确的分类。 即:先学习样本内容,构造出一个决策树,再根据决策树对新的数据进行分类。
决策树中,每个结点表示样本的 一种属性,每个结点根据不同属性值扩展出多个子结点(边代表属性值),每个叶结点代表 一个类别。决策树实现分类就是从根结点开始 向下遍历,到叶结点的一个路径代表一个实例。
为了能对未知新数据进行分类,构造出的决策树在正确的前提上应 尽可能小 ,每次为结点选取代表的 属性 时都要保证这个属性赋予给这个结点是最优的。
基于数据划分类型,决策树分为:基于横向划分数据集的隐私保护分布式决策树;基于纵向划分数据集的隐私保护分布式决策树。
❓❓❓**question:那么隐私保护用到决策树,实现隐私保护的决策树,有什么用呢???对什么分类呢????**
模糊处理
随机化、添加噪声或修改数据,对数据进行模糊处理,使系统拥有某一级别的隐私。例如第二章学过的差分隐私方法,实现个体级别的隐私。
密码学方法
分布式各方只了解自己的输入值,或输入值不以明文方式传输,使分布式计算过程 安全化。例如第二章学过的安全多方计算,同态加密。
基于模糊的面向隐私保护的DML:计算效率高,实现简单。但是由于加入随机扰动,影响了数据精度和模型性能,要在隐私保护和性能之间做取舍(也就是差分隐私中学到的,加入噪声越大,隐私预算越小,隐私保护越好,但是数据可用性减小,随机性增大) 例如差分隐私。
基于密码学的面向隐私保护的DML:需要很多额外计算,实现复杂,计算复杂度高 。但是隐私保护更好,安全性更好。 例如安全多方计算、同态加密
面向隐私保护的梯度下降能够提升隐私保护强度。
即是一般联邦学习中的梯度下降方法,涉及隐私保护。
前提是联邦学习系统中的 协调方(参数服务器)是诚实的,与其他各参与方没有勾结。
水平划分数据集:联邦平均方法。每一方给一个协调方独立地上传 明文形式 的梯度,最后协调方将 明文形式 的聚合后的更新模型发送给每一方。
纵向划分数据集:目标函数分解。在梯度下降中,目标函数分解为一个可微函数和一个线性可分函数。纵向划分数据集时,模型分配给各方,各方根据局部模型,将训练的中间结果发给协调方。协调方评估可微函数以计算损失和梯度。协调方将更新好的模型再拆分成局部模型发给各方。
旨在利用传输数据的代数特性保护原始训练数据。
例如上述说的,纵向划分数据集的目标函数分解;还有基于安全多方计算(算术秘密共享)的梯度下降。
通过只更新梯度的子集来更新模型,实现隐私保护。但是此方法用精度换效率,且梯度是明文方式传输,隐私保护程度较低。
通过随机化、泛化、压缩使得数据模糊。改善了隐私性。用精度换隐私保护和效率。
利用同态加密和安全多方计算,在梯度下降过程中,保护每一方梯度信息隐私。
密码学方法用效率换高的隐私保护性。目前也使用非线性函数的近似方法,用精度换效率,防止计算过于低效。
安全多方计算、同态加密、差分隐私是面向隐私保护的DML系统里常用隐私保护技术。目前,面向隐私保护的梯度下降方法也广泛用于DML系统中(梯度下降也大多都是基于安全多方、同态、差分这几种基础技术思想)。
联邦学习是DML一种 特殊类型,可进一步解决传统DML系统问题,例如数据孤岛问题。