蚂蚁集团「共享智能技术」战略全布局丨万字长文

隐私性跟可用性难以兼顾,让人工智能落入了鱼与熊掌不可兼得的尴尬境地。

当前,业界解决隐私泄露和数据滥用的数据共享技术路线主要有两条:一条是基于硬件可信执行环境(TEE:Trusted Execution Environment)技术的可信计算,另一条是基于密码学的多方安全计算(MPC:Multi-party Computation)。

同时,我们也发现用它也能很好提升模型的撸棒性, SGLD和变种,比前面单独的不加噪版本在Test上面的Metric会更好一些。

此处有几步核心操作:

针对数据共享场景,包括联邦学习、隐私保护机器学习(PPML)在内的多个技术解决方案纷纷出炉。蚂蚁金服提出了共享智能(又称:共享机器学习),结合TEE与MPC两条路线,同时结合蚂蚁自身业务场景特性,聚焦于金融行业的应用。

在支持这个CPUID指令的处理器上,同一物理页的加密/未加密映射之间的一致性是有保证的。因此,有了这种AMD硬件强化的缓存一致性,在改变页面的C位值之前,不需要从系统中的所有CPU缓存中刷新页面,这样一来,避免不必要的缓存刷新这一新特性应该对提升性能有所帮助。

中间是完全基于MPC的方法,有很多非线性运算,可以做到可证安全,但速度会慢几个数量级,效率本身也不高。

阿里巴巴在去年也做过一个更加贴合实际情况的例子:假定双方有两个数据拥有者,它们的特征空间一样,样本空间不一样,我们称之为水平切分。

我们希望能够提出一种方式,尽可能在效率、精度、安全性方面能达到比较好的折中,保护服务器和用户的隐私。

我们跟业界的几个方法也对比过,比如2017年 MIT的 SplitNN和现在最好的SecureML。

以下为周俊公开课全文,AI金融评论做了不改变原意的编辑:

通过训练过程中引入的SGLD,也就是加噪的SGD,再加上Adversary loss,使得哪怕是服务器试图做恶,也无法由此推断出更多相应信息,安全等级进一步提升。

这样的方式,既保护了服务器上的模型,也保护了客户端上面输入数据的效果,起到了比较好的trade-off。

为此,雷锋网《AI金融评论》邀请到了蚂蚁集团共享智能部总经理周俊做客线上讲堂,详解蚂蚁金服共享智能的技术进展和落地实践。

工作里面证明了,如果有恶意者在模型训练过程中拿到真正的梯度之后,就可以反推出数据中的特征(x)和标签(y)。

通过这样的方式产生动态的POI,再通过去中心化的梯度下降方法学习能保护隐私的FM模型。

按照联邦学习的协作方式,计算本地的梯度,发到服务器,平均之后更新本地的模型,看起来比较安全——实际上,由于A和B精确知道每一轮梯度,它其实可以反馈出很多相关信息。

我们这个方法跟原来不一样,之前可能有很多工作局限于支持一部分的激活函数。比如有时都无法支持sigmoid或max pooling,有的干脆只保护客户端的Input data,但不保护服务器上的模型。 

Semi-honest 服务器会拿到中间的隐层结果,我们可以通过一些对抗学习方式去防止服务器获取中间信息。这一方法尽可能做到隐私、准确率、效率三者之间的平衡。此外,我们还可以使用贝叶斯学习的方法(SGLD)去替换传统的SGD(随机梯度下降),从而更好保护训练过程中的隐私。

以前很多方法都在探讨它的泛化能力,在这里我们发现了它另外的好处:因为训练过程中添加了噪声,所以可以更好的保护隐私,尤其是在对成员攻击(Membership attack)的情况。比如有时医疗领域想知道自己的数据有没有被这个模型所用。

发现这些问题之后,我们提出了一个创新的体系。

我们在评估Membership攻击效果时,定了一个成员隐私的loss,这个loss就是为了看SGLD到底能不能保护成员隐私,我们通过大量的实验发现SGLD是能较好阻止Membership attack。

在业界做隐私保护技术研发之前,是通过协同学习方法来实现多方信息融合,联邦学习就是其中一种。近年来,学术圈相应的证明发现此类方法的一些安全性问题,尤其是直接共享梯度,本质上存在一些安全性问题。

在模型训练上,涉及到前向、反向的计算,非常耗资源,它跟现有的一些隐私计算技术结合之后,对效率本身还是有比较大的影响。所以有很多工作都在考虑怎么做模型推理。在模型预测时,既要保护云上的模型,也要保护客户手里的数据。

如何“精修”机器学习处理方法各环节

我们的方法,因为大量的复杂运算很多是返回到客户端上面,在非密态的情况下进行计算,所以Latency比较低。它还能支持任意的激活函数,可以比较好地扩展到RNN和CNN。

究竟共享智能与我们熟知的联邦学习有何不同?在共享智能落地金融等多个重要领域的过程中,蚂蚁金服又遇到过哪些挑战,留下了怎样的宝贵经验?

刚才讲到,在服务器里,可以很好利用现有的TensorFlow或Pytorch,从右边这个代码可以看出来,该方法是非常用户友好的。

在这之后,DLG方法有了改进。这个方法首先通过推导可以精确拿到Label本身,有了Label再去反推X就更简单了。从公式可以看到,它能更容易反推出原始数据的X。

具体是把DNN的计算拆分成两级,一是首先通过采样的方法拿到W,有了W之后,客户端传过来的加密Input,通过线下的运算出Z,这也是密态的。密态下的Z在返回到客户端解密后,在客户端上就能拿到最后的a。

第二,我们还是会收集用户和POI的交互数据,通过本地化差分隐私的方式注入噪音,这样传上去的是一个带噪音且能够保护隐私的版本。

这种方法在前几年一直都比较火,无论是联邦学习还是其他的协同学习方式。

我们自己所做的机器学习处理方法,从数据预处理到模型训练再到模型推断,都是遵循这样切实保护用户隐私的思路,将MPC、TEE或其他技术,跟现在技术相应结合,确保中间每一步的隐私都能得到更好地保护。

典型应用案例:POI上的推荐

方法采用了两点,一是前面介绍的贝叶斯神经网络,因为它里面可以引入权重的不确定性,这能让服务器上的精确模型不被拿到。 

右边的例子,是在NIPS网站上抠的一些文字,刚开始是随机生成的,迭代到第30轮的时候,可以看到从梯度里恢复出来的一个样本,跟原始样本是非常接近的,只有个别词有一定差异。

通过迭代式的同态加密计算,既保护了用户隐私,也保护了密态下的服务器隐私。

第二,无论是在数据保护还是在客户端上,用同态加密的机制去保护。

还有极端情况是完全用MPC做计算,单次模型预测用时会非常长。

以数据预处理中的降维为例,假定数据在水平切分的情况下,大家样本空间不一样,两方希望能够把数据能降低一个维度,降维之后的结果能够送到后面的机器学习模型进行相应训练,这种方法能较好提升效率。

我们的思路是:首先,比较敏感的用户隐私数据和模型,能够在用户本地,而不能上传到服务器的推荐系统这里。

这个补丁没有详细说明任何具体的优势,我们也没能找到任何公开的文档来说明这个特定的SME功能。目前能够了解到的是它增加了 “SME_COHERENT”功能的位,而这个后续补丁则确保在有硬件强化的跨加密域缓存一致性的情况下不刷新缓存。这两个补丁都是作为 “x86/cpu”变化的一部分,在10月Linux 5.10合并窗口开启前排队准备发布。

同时,模型的泛化能力会有进一步提升,结合MPC里同态加密和秘密分享的技术,加固PCA(Principal Components Analysis,主成分分析),使得它能真正保护数据安全性。

除了降维以外,还有很多类似的工作可做,比如共线性检测,隐私求交(PSI)等。

当然,安全的方法计算时间会更长一些,因为天下没有免费的午餐,要保护隐私,肯定有相应的计算和通信成本在里面。

右边是MIT提出来的方法,比较快,但它的Label也放在服务器里计算,安全性有一定问题;而且它没有考虑特征之间的相关性,精度上有一定损失。

通过各式各样的安全聚合方式使隐私得到保护,这种方法我们称为PriRec。

从学术上能够看到,在这种协同学习中,以前大家认为安全的共享梯度方式,本身并不是很安全,我们给它取了一个标题叫做非可证安全。

从右下角的结果中,能够看到我们攻击出来的结果,跟原始特征非常接近。这说明,不论是从学术圈里面假定的setting,还是真实情况中,目前这种共享梯度的协作方式,也包括联邦学习,本身都有比较大的安全隐患。

从结果可以看出,相比于各方单独算一个PCA再拼凑结果,我们的方法精度提升比较大。同时,它跟原始PCA方法相比,在后面都接相同的机器学习模型的情况下,几乎没有精度损失的情况。

其次是计算协方差矩阵,最后再算出相应的特征值、特征向量,就得到了降维后的X′。同态加密和秘密分享的技术,跟PCA做相应结合,就能比较好的拿到相应结果。

这服务器里可以利用现有的各种计算资源,比如TF、PyTorch,甚至可以利用一些比较灵活的处理框架。

做保护隐私的机器学习方法,本身还是需要结合其他方法去弥补它的不足,才有可能让方法本身更安全,真正保护用户隐私。

首先是计算均值。如果是在同态加密的情况下,需要密态空间要进行计算;如果是秘密分享的方法,则需要将原始数据拆成多个秘密分片,再配合起来算出均值。

因此,我们在训练时也把传统的SGD换成了SGLD,能进一步提升安全等级,在兼顾三方面要求后,具有比较高的安全性和高效性。

DNN模型是现在大家用的比较多的。这里分别列出来业界三种典型做法。

具体来讲,我们在两个数据上面做了相应的测试,无论是在Table1还是在Table2里,尤其是在Attack Metric上,SGLD跟普通的方法相比,能够大大降低成员攻击的准确率。

SGLD是在贝叶斯神经网络中应用较广泛的方法,可以看作是加噪版本的SGD。

首先,为了考虑特征之间的相关性,我们在底层利用MPC技术去做跟隐私数据相关的一部分模型计算。计算完之后,再把跟隐层相关的复杂计算,放到一个Semi-honest 服务器(半诚实服务器)去完成其他运算。 

性能上,(我们的方法)比这俩更好一些。从这两个数据集来看,训练时间上,由于我们使用了中间服务器,训练时间相对于纯MPC的方法(SecureML)大大降低,但相比SplitNN训练时间还是要长,因为我们安全等级要高。

满足一定条件的情况下,尤其是逻辑回归,可以构造出这样的一组方程组,当方程组的个数大于这个数据的特征维度,方程组是可以解出来的。因此也可以反推出原始的数据。

其次,在服务器里面,对于网络结构这部分,设计可以非常灵活,也可以设置任意的网络结构,充分发挥中心服务器的计算力。

Label的部分还是放到数据持有者本身,全程能确保没有哪一部分隐私会被泄露。

总体而言,我们的方法能较好地实现效率、安全性和准确率的折中。

从它的三个数据集可以看到,改进版DLG相对于原始的DLG在攻击的准确率提升非常大。

另外,现在MPC尚不能完全精确计算一些比较复杂的函数,只能做一些展开或近似计算,精度上也有所损失。

左边是传统的基于明文的神经网络训练方法。

我们先来看一下去年在一个学术顶会上比较火的Paper引发的讨论。Paper里面的方法也比较好理解,实际上就是近几年大家保护隐私的方法之一:就是不传原始的数据,只传共享的梯度,把梯度汇聚到一起,然后再汇集到模型。

原来的做法,不论是非常详细的profile数据,还是一些用户跟POI的交互数据,用户的所有相关数据都要被推荐系统所收集。一些隐私模型,比如用户偏好也都是被推荐系统所保留。所以推荐系统有很大的机会窥探到用户相关隐私。

这里举了两个例子,能够看到,尤其是在图像领域,通过梯度本身是可以反推出原始输入的这张图像和原始的Y。