当前位置: 首页 > 科技观察

Rosetta如何连接隐私计算和AI?

时间:2023-03-14 10:35:32 科技观察

本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。今天很高兴与大家分享矩阵元最近的一些研究成果。主要方向是隐私计算,基于密码学的隐私开源框架——Rosetta。私有计算时代要来了吗?数据目前面临一些挑战。随着数字化的发展,数据量呈指数级增长,一些核心和关键数据的保护远远不够。目前,随着数据生产的分解,国内外都越来越重视整个数据相关的方向,当然挑战也越来越多。在众多挑战中,我们认为最关键的挑战是数据隐私。从AI的角度来看,AI需要“喂”数据。只有足够的数据或多样化的数据才能训练出相对较好的模型。因此,随着数据量的增加、数据多样性的增加,以及对数据隐私的日益重视,AI面临着一个所谓的“两难”——从AI的角度来看,数据的多样性程度越高是,越有利于整个模型的训练,模型准确率也会相应提高。所以这给人工智能带来了一大堆问题。如何在保护数据隐私的前提下,整合使用不同来源、不同公司之间的数据?目前传统的技术手段很难解决这个问题,因此成为AI可能面临的一大痛点。因此,也引入了“私有计算”的概念。关于隐私计算,简单来说,它是在数据使用和融合过程中保证隐私保护的综合技术,而不是简单的技术。隐私计算大致可以分为三类:第一类是密码学,第二类是联邦学习,是一种偏机器学习的技术;三是可信执行环境(TEE),这是一种硬件安全技术。当然,好技术和坏技术之间没有绝对的区别。每种技术都有其优点和缺点。因此,在很多综合解决方案中,融合了很多技术,一起使用。密码学只是一门研究如何在各种情况下保护数据隐私的学科。最重要的特点是,在所有密码学方向,涉及到算法和方案时,首先要定义一个安全模型,定义什么是安全的。之后,在这个定义下,会用一些数学方法和技术来证明这个方案满足安全定义,所以它有一个比较完备的基于数学理论的密码学理论。当然,它的优势在于密码学考虑的场景非常广泛。因此它可以更好地适应或适应不同的场景。在某些情况下,它可以更有效。当然,密码学也有瓶颈。在某些场景下,在性能、计算时间、通信复杂度等方面存在一定的瓶颈。当然,更大的瓶颈是密码学的原理很难向没有密码学背景的人解释清楚。因此,在本次分享中,我会更倾向于介绍密码学,包括密码学的历史和主要技术,然后对安全多方计算的基本原理做一些简单的介绍。密码学是如何实现隐私保护的?密码学中的隐私计算技术大致可以分为三类。它们是:安全多方计算、同态加密和零知识证明。安全多方计算(简称MPC)是由姚芝芝先生于1982年提出的,起源于“百万富翁问题”。这个问题讲的是两个既有钱又想比谁都富有的百万富翁,但是他们不想告诉对方自己的资产,也不想找第三方帮他们比较。那么他们如何在不泄露财富的情况下知道谁更富有呢?这开辟了安全多方计算领域。抽象地讲,可以理解为有多个本地参与者,每个参与者都有自己的私人收入,但是他们想计算一个共同的函数或者共同的模型,称为f。这个f会和每一个输入相关联,然后每一个都会得到一个结果。所以我们抽象出来,如果f是一个比较函数,模型中只有两个人,就形成了一个经典的百万富翁问题。它与我们今天谈论的内容有什么关系?如果这个f是一个模型或者机器学习模型,比如logistic回归或者CNN,那就意味着三方各有一些数据,想要联合训练这个模型。这就对应了今天的话题:隐私AI建模怎么做?也就是说,安全多方计算其实是一个很宽泛的概念。从密码学的角度来看,MPC用于机器学习和AI是一个非常具体的应用。那么应用程序具体使用什么方法呢?这就是Rosetta旨在解决的问题。Rosetta如何连接隐私计算和AI?到现在,相信大家都会遇到一个很大的问题,就是我们很想用密码学来解决问题,但是如果没有很高的数学基础或者没有学过密码学,相关算法的门槛真的是太高。然而,人工智能领域的一些专家学者已经非常熟悉人工智能的应用、深度学习和机器学习的框架。所以这两种专业技能不同的人之间存在很深的差距。在现实生活中,迫切需要将这两种技术进行融合,但是密码学相对的技术门槛太高,会影响到整个行业的发展,也会影响整套的隐私计算或者隐私AI计算技术问题和理论进展。所以我们希望熟悉机器学习但不熟悉密码学的用户能够使用隐私计算技术。另外,对于一些熟悉AI,或者TensorFlow、Pytorch等机器学习框架的开发者,可以在不改变开发习惯的情况下使用隐私AI技术。我们需要建立这样一个平台,或者说开源框架,让不熟悉密码学或者根本不懂密码学的开发者或者AI层面的专家,能够使用隐私计算技术。这是我们设计Rosetta的初衷,或者说Rosetta设计背后的一个基本原则。因此,Rosetta具有以下特点:易用性、高效性和可扩展性。易于使用,目前TensorFlow接口被完全重用。明文和密文写模型的时候,TensorFlow的接口是一样的,没有变化。大大降低了AI工程师使用隐私计算技术的成本。高效,完全兼容原生TensorFlow自动对数据流图进行的各种运行时优化。我们使用C++来实现算法,可以保持底层算法的效率。同时,我们正在与业界的密码学家合作,设计高效、前沿的MPC技术,以适应机器学习或深度学习的一些模型。可扩展性,因为MPC领域的算法和协议很多,涉及的场景不同,不同的算法可能会有更好的效果。如果有新的算法来,Rosetta可以很快融入到整个框架中。下面我们举例说明:这里有三个参与者,A、B、C,他们每个人都有一个矩阵Ma、Mb、Mc,然后他们计算Ma乘以Mb乘以Mc,他们三个只能知道结果。不知道中间的过程。这样的场景,如何使用Rosetta来实现呢?与TensorFlow纯文本有两个区别,一个是导入包和选择算法,另一个是简单处理隐私输入,即需要导入Rosetta包,选择算法,然后定义隐私输入。Rosetta的架构如下:总体来说,Rosetta的框架如上图所示,其中包含了Python的前端APl,方便用户使用并且是Rosetta的特色,然后适配TensorFlow的前端和后端。同时,我们开发了统一的密码协议管理层,以适应不同的密码协议。我们的目标不仅是让懂密码学的开发者能够复用整个框架中现有的东西,更重要的是让不懂密码学的AI开发者能够零门槛或者门槛非常低的使用隐私计算技术,相当于有机结合密码学和机器学习。这就是罗塞塔的目标。下面说说Rosetta的架构。首先,我们将讨论TensorFlow架构。TensorFlow架构简单来说就是图转换和图执行。我们充分利用TensorFlow架构进行加密适配。当TensorFlow把图变成下图左边的标准传统图的时候,我们做了一个staticpass,把每一个操作都变成了SecureOp,后面统称为支持密码算法。那么第二步就是图执行。我们使用动态传递来执行图形。左边的图就是刚才变换后的图。然后在生成数据的时候,根据每一个这样的图,动态pass可以动态适配使用某种类型。用于实现此图的加密协议。我们可以充分利用TensorFlow框架,因为我们可以使用整个底层的密码算法,所以动态传递也可以充分利用TensorFlow等优化器之间的并行性,可以让它运行得更快。下面说说Rosetta在实际场景中的一个应用案例:在金融场景的应用。银行A和B各有自己的数据,互联网公司C也有数据。大家都希望通过Rosetta来建立模型。比如,在训练逻辑回归之后,他们可以训练风控模型,训练出更高效的模型。.同时保证abc中各方的数据不会被对方获取。这种场景下,使用Rosetta解决问题就非常简单了。如上图,将Rosetta导入进去,然后选择一个协议,然后选择对应的输入。后者是标准的regressionwithTensorFlow,所以完全不需要任何密码学背景,完全可以写出来。在多数据融合的训练场景下,只需要Rosetta一个包,然后对数据进行处理。后面整个逻辑回归的代码写法和原来的一模一样,甚至可以直接copy代码。这里有一个问题。我们使用MPC的方式就是密文的方式。它的准确性和明文方式有什么区别?如上图,我们做了对比,可以看到几乎没有区别,基本等价,所以在设计足够的参数和足够的精度后,可以保证整个模型的精度。当然还有一个场景就是所谓的模型预测服务。最后,Rosetta刚刚起步,0.2.1版本已经开源。这是GitHub链接:https://github.com/LatticeX-Foundation/Rosetta