隐私保护的分布式多方安全模型训练框架的制作方法

文档序号:20361494发布日期:2020-04-10 23:43阅读:315来源:国知局
隐私保护的分布式多方安全模型训练框架的制作方法



背景技术:

机器学习是数据科学的一个子集,它使用统计模型来获得洞察并进行预测。为了促进数据交换和合作,不同的参与方可以共同建立机器学习模型。传统的机器学习项目将从多方获得的训练数据聚集到一处。然后,在机器学习过程的训练阶段,使用基于聚集的数据的机器学习工具构建训练模型,从而可以统一地训练模型。训练数据可以由任何参与方聚集,或者在由所有参与方信任并选择的第三方处聚集。



技术实现要素:

本公开描述了用于隐私保护的分布式多方安全模型训练框架。

通常,本文中描述的主题的一个创新方面可以体现在包括如下动作的方法中:在多个安全计算节点(scn)处从随机数提供器接收多个随机数;在每个所述scn处,使用接收到的所述随机数对存储在所述scn中的数据进行加密处理;通过使用来自每个所述scn的该加密的数据对安全逻辑回归模型(slrm)迭代更新;以及在对该slrm迭代更新之后输出该slrm的结果,其中,该结果被配置为使能由每个所述scn执行的服务。该方面的其他实施例包括被配置成执行该方法的动作的对应的计算系统、装置和记录在一个或多个计算机存储设备上的计算机程序。

前述和其他实施例可以各自可选地单独或组合地包括一个或多个以下特征。特别地,一个实施例包括所有以下特征的组合。

本文还提供了耦接到一个或多个处理器并且其上存储有指令的一个或多个非暂态计算机可读存储介质,当所述指令由一个或多个处理器执行时,所述指令促使一个或多个处理器按照本文提供的方法的实施方式进行操作。

本文还提供了用于实现本文提供的方法的系统。该系统包括一个或多个处理器以及耦接到一个或多个处理器并且其上存储有指令的计算机可读存储介质,当该指令由一个或多个处理器执行时,该指令促使一个或多个处理器按照本文提供的方法的实施方式执行操作。

应当理解的是,根据本文的方法可包括本文描述的方面和特征的任何组合。也就是说,根据本文的方法不限于本文具体描述的方面和特征的组合,还包括所提供的方面和特征的任何组合。

以下在附图和描述中阐述了本文的一个或多个实施方式的细节。根据说明书、附图以及权利要求,本文的其他特征和优点将显而易见。

附图说明

图1描绘了根据本文实施方式的使用秘密共享来训练多方机器学习安全逻辑回归模型(slrm)的环境的示例。

图2a描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理的示例。

图2b描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理的示例。

图3描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理的示例。

图4a描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理的示例。

图4b描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理的示例。

图5描绘了根据本文实施方式的用于确定是否终止对slrm的参数进行迭代更新的处理的示例。

图6描绘了根据本文实施方式的使用事件驱动的交互式安全建模程序来训练多方slrm的处理的示例。

图7描绘了可以根据本文实施方式执行的处理的示例。

图8描绘了可以根据本文实施方式执行的处理的示例。

图9描绘了根据本文实施方式的示出装置的模块的示图的示例。

各附图中相同的附图标记和名称表示相同的元件。

具体实施方式

以下详细描述描述了用于隐私保护的分布式多方安全模型训练框架,并且其被呈现以使得本领域技术人员能够在一个或多个特定实施方式的背景下做出和使用所公开的主题。可以对所公开的实施方式进行对于本领域的普通技术人员来说显而易见的各种修改、更改和置换,并且在不脱离本公开的范围的情况下,所定义的一般原理可以应用于其他实施方式和应用。在一些情况下,对理解所描述的主题不必要的细节可被省略,以便一个或多个所描述的实施方式不被不必要的细节模糊,并且因为这些细节在本领域普通技术人员的技术范围内。本公开不旨在限于所描述或示出的实施方式,而是按照与所描述的原理和特征相一致的最宽范围。

关于消费者的大型信息集有时被称为“大数据”,其正被用于更好地了解消费者的习惯、选择营销活动的目标、提高运营效率、降低成本、降低风险以及其他益处。随着大数据生态系统的技术进步,不同组织之间的数据交换和合作变得更加频繁、精细化和复杂化。因此,一些组织已经建立了合作的数据实验室来构建安全的数据训练模型并促进组织之间的数据交换。在数据合作过程中,机器学习模型是基于从不同参与组织获得的数据来构建的。组织可以聚合他们的数据并将聚合的数据物理地放在一处,然后基于该聚合的数据使用成熟的机器学习工具来构建模型。聚合的数据可以存储在参与组织中,或存储在所有参与者都信任的第三方中。

可以实施基于同态加密或差别隐私的机器学习方案以训练这些模型,从而确保数据隐私保护。例如,基于同态或微形加密的机器学习方案允许来自双方的数据被完全同态地加密,然后将加密的数据聚合在一起以完成基于密文的模型训练。因为该加密是同态的,所以该模型训练将产生加密的结果,当该结果被解密时,将从训练中获得的训练结果将会与未加密的训练数据匹配。该模型训练的输出结果被返回给参与方,使得他们可以解密并获得最终结果。

当前的数据合作技术存在各种问题。首先,根据当前的方法,每一方都需要向其他方暴露自己的数据,从而产生数据隐私泄露的风险,尤其是对于高度敏感的数据。其次,尽管许多数据实验室已经实施了诸如云计算、多租户分离、数据脱敏、数据审计等技术以确保数据隐私,但在数据脱离他们的管辖之后,各方仍然无法保证获得安全保障。这样,由于各方之间缺乏信任,选择参与方或中立的第三方来聚合数据和处理聚合的数据可能是困难的。第三,即使双方互相信任并同意样本输出,由于行业缺乏数据合作的标准和指导规范,各方实施的技术的安全水平可能不同,从而导致针对样本数据加密、数据脱敏、数据冲突、安全许可等的大量时间和沟通成本。第四,基于同态加密或差别隐私的机器学习方案仍然是中心化建模解决方案,该中心化建模解决方案效率低并且在工程实施中产生不准确的输出。例如,基于同态加密的机器学习方案的计算速度很慢。目前的同态技术尚不成熟,并且仍然存在训练时间长、工作效率低、加密密钥管理复杂等问题。同样,虽然基于差别隐私的机器学习方案可以降低在数据合作过程中所用数据的隐私泄露的风险,然而由于数据的转换,所得到的模型会失去准确性和精确性。第五,传统的建模工具和处理虽然功能强大,但对建模人员提出了要求,并且需要大量的时间和精力来构建训练模型。

本公开的实施方式介绍了一种通过使用秘密共享(secretshare,ss)和事件驱动的交互式安全建模程序来训练安全逻辑回归模型(slrm)的新方法。所描述的实施方式应用了基于逻辑回归并且可以通过反馈从双方接收到的训练数据来迭代更新的slrm模型。逻辑回归是一种广义线性回归,也是一种分类和预测算法。逻辑回归算法从一系列已知因变量中估计离散值,并通过将数据拟合到逻辑函数中来估计事件发生的概率。逻辑回归主要用于分类,如垃圾邮件分类、信用风险预测分类等。

样本训练数据的源是独立的安全计算节点(scn),并且每个scn使用秘密共享(ss)方案使其训练数据对其他节点保密。如前所述,由于训练数据由不同的scn提供,因此保证在scn之间共享的训练数据的安全变得非常重要。具体地,为了巩固这种合作,所描述的技术引入随机数以使每个scn能够相对其他scn保护其私人训练数据。所描述的技术可以解决诸如数据合作处理中各方之间缺乏相互信任、防止从双方接收的训练数据泄漏以及有效促进各方之间在构建机器学习模型中的合作之类的问题。

另外,可以通过事件驱动的集成安全建模程序来控制scn之间的训练数据共享。在一些实施方式中,事件驱动的交互式安全建模程序是基于事件驱动模型的(或所谓的“发布-订阅”模型)。该模型可以将彼此依赖的各方分开来完成其自己的任务。通过使用该模型,双方可以专注于自己的服务处理。一方(“发布者”)在其服务处理完成时发送通知。另一方(“订阅者”)监视通知,并且一旦接收到通知,就可以相应地触发其服务处理。在训练过程期间,每个scn维护一个消息队列以接收来自另一方的数据,并作为响应,触发相应的建模步骤以执行slrm。

所描述的技术可具有各种应用。例如,该技术可以应用于金融机构之间、金融机构与政府实体之间或其他组织之间的数据合作。

在一些实施方式中,所公开的框架使用slrm和秘密共享(ss)方案。ss方案是一种在涉及多方合作的场景中使用的加密法。在ss方案中,秘密(例如,密钥或数据集)以预定方式被划分为若干不同份,并且每一份被提供给不同的参与方。单个参与方无法恢复或重建(restore)秘密,这样就保证了秘密的保密性和安全性。出于本公开的目的,用于保护由slrm所使用的训练的算法不限于ss。与同态加密相比,通过使用秘密共享整体计算效率被大大提高了。此外,因为原始训练数据未被变换,训练过程是基于原始训练数据的精确计算,所以训练的输出模型结果是基于原始训练数据的精确训练模型。

在一些实施方式中,实施分布式模型训练框架,并且该框架引入独立的第三方随机数服务。在这些实施方式中,在将任何原始数据输入到训练模型之前,它结合由第三方随机数服务生成和分发的随机数进行计算处理。在这样的实施方式中,进一步采用事件驱动的交互式安全建模程序来提高分布式模型的效率。这样,可以防止原始数据的信息泄露,并且可以确保建模结果的完整性和模型的精度。

图1描绘了根据本文实施方式的用于使用秘密共享来训练多方机器学习安全逻辑回归模型(slrm)的环境100的示例。数据合作服务可以由一个或多个服务器执行,这些服务器为组织提供了用于数据合作的平台/环境。示例性环境100包括用户102、安全管理代理104、节点管理代理106、随机数提供器108、网络110、以及至少两个安全计算节点(scn)scna112和scnb114。示例性环境100可以包括附加的用户、安全计算节点计算机、网络、系统或其他组件。在一些实施方式中,环境100可以以另一种方式配置。

在一些实施方式中,网络110包括局域网(lan)、广域网(wan)、因特网或者这些或其他网络的组合。网络110可以包括无线网络和/或有线网络。网络110连接计算设备(例如,服务器104-108)和安全计算节点(例如,scn112、scn114)。在一些实施方式中,可以通过有线和/或无线通信链路访问网络110。

在一些情况下,在训练过程开始之前,用户102可以预先确定与slrm相关联的各种参数和设置。这些参数可以包括,例如,训练数据的大小、训练数据的特征和相应的数据处理设置、或者模型的超参数(即,先验分布的参数)。在对模型设置进行初始化之后,与模型相关联的信息被发送到安全管理代理104,该安全管理代理104随后可以与scn协作以完成特定的建模逻辑。

在一些实施方式中,安全管理代理104和节点管理代理106可以被集成为单个组件以管理和控制建模处理、以及参与该处理的scn(例如,112、114)。安全管理代理104和节点管理代理106也可以是单独的组件,如图1所示。

在一些实施方式中,安全管理代理104可以被配置为管理slrm的训练,包括训练模型的配置、建模、迭代计算和处理管理。具体地,安全管理代理104可以促进由scn112、scn114联合执行的建模处理,包括,例如对每个迭代循环进行初始化以及确定在多个迭代循环之后训练模型是否收敛。另外,安全管理代理104还可以从每个scn获得与训练数据相关联的特定数据结构和其他信息。例如,获得诸如训练数据的源、训练数据的特征(例如,每个训练数据集的行数和列数)之类的信息。

在一些实施方式中,节点管理代理106可以被配置为执行节点选择、节点管理、项目数据管理等。例如,一旦安全管理代理104从scna112和scnb114接收到建模请求,并且收集了scna和scnb的相应数据信息,节点管理代理106就可以通过该安全管理代理104向每个scn通知需要与之共事的其他scn的身份、获取附加训练数据的位置,并将相应的参数分配给每个参与训练过程的scn。另外,节点管理代理106还向scna和scnb通知随机数提供器108的位置。

在所描绘的示例中,scna112和scnb114可以由拥有关于他们各自的用户的数据集的相应组织操作,以寻求促进彼此数据交换或数据合作。例如,操作scna112和scnb114的组织可以分别拥有训练数据集p0和p1,其中p0和p1为机器学习模型的输入。训练模型的输出结果可以是例如可以由scna112和scnb114两者使用以执行某种服务的预测结果,诸如向scna112或scnb114的客户发放贷款的风险预测。在scna112和scnb114从安全管理代理104接收到模型参数和设置之后,他们需要通过与彼此网络通信来完成建模任务。出于安全目的,特别是在每个scn拥有的训练数据是高度敏感的隐私数据的情况下,scna112和scnb114可以相互隐藏或模糊部分训练数据。为了模糊训练数据,scna112和scnb114可以向随机数提供器108请求随机数,并使用自己的训练数据和所接收的随机数来执行计算(例如,随机数和部分数据相加或相乘)。随机数可用于对训练数据进行数据模糊或加密。在一些情况下,训练数据中只有包含高度敏感隐私数据(例如,用户的个人信息)的部分可以被模糊或加密,从而允许另一方使用数据中非敏感的部分进行训练,同时不允许其他方访问高度敏感的隐私数据。可以使用任何合适的加密方案,例如rsa、des/tripledes和其他众所周知的加密方案。在一些实施方式中,随机数可以是数字、向量或矩阵等。在一些实施方式中,随机数可以由scn112、scn114任一生成。在一些实施方式中,随机数可以由独立的第三方提供,以确保隐私数据不会在共享和训练期间被其他scn泄露。在一些实施方式中,与随机数提供器108、安全管理代理104和节点管理代理106相关的服务可以由共同选择且信任的第三方代理提供和执行。

对于每个scn,在使用随机数加密数据之后,该加密的数据可以被发送给另一个scn。因为在scn112和scn114之间传输的数据是加密的,所以数据的敏感信息不被暴露。在一些实施方式中,来自scna112和scnb114的计算结果被用于机器学习模型训练。具体地,每个scn使用所接收的加密数据作为slrm的输入,以对slrm所基于的逻辑回归函数的参数进行迭代更新。在多次迭代之后,可以基于预定条件终止训练。在一些实施方式中,本地数据管理由scn112、scn114各自执行,并且可以包括在数据库、对象存储设备、内存数据存储设备(例如,redis)或其他类型的存储设备中存储数据。

图2a描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理200a的示例。

在所描绘的示例中,为了优化slrm的目标函数,使用小批量随机梯度下降(stochasticgardientdescent,sgd)方法。sgd是基于梯度下降优化的随机逼近来优化可微分的目标函数的迭代方法。在本公开中,为了优化目标函数,sgd方法将执行以下迭代:

其中,m表示小批量sgd的样本大小。在该示例中,x是m*k样本矩阵。矩阵x的每一行表示一个样本,以及xi表示矩阵x的第i行,[j]表示向量xi的第j元素。θ表示参数列向量。yi表示小批量样本的第i样本的标签,其中yi可以是0或1。α和λ是超参数,用于确定机器学习网络结构以及如何训练网络。它们可以在训练之前由用户设置。

在该描绘的示例中,通过使用ss,等式(1)中所使用的所有样本训练数据集被分成两份。也就是说,slrm的样本训练数据来自于两个源,scnp0和scnp1。具体地,样本数据矩阵x被划分为xl和xr,从而样本数据xl属于scnp0,而xr属于scnp1。假设scnp0和scnp1中的样本数据分别具有特征k0和k1,并且k=k0+k1。对于样本数据集xi,scnp0包含的元素xi表示为xi,[1],xi,[2],…xi,[k0],而scnp1包含的元素xi表示为xi,[k0+1],xi,[k0+2],…xi,[k]。同样地,参数列向量θ也可以分为θl和θr。因此,使用这些重新定义的参数,在垂直数据划分下,等式(1)可表示为:

其中,x和y是要保护的输入数据。x表示特征数据,y表示基于特征数据做出的预测。例如,在贷款借款场景中,x可以是收入、学历、信用记录等。根据所述信息,银行可以做出预测y,即贷款借款人的风险是否足够低以发放贷款。θ是需要保护的中间结果,在训练过程终止后,θ也是训练结果的最终输出。等式(2)中列出的其他参数是常规使用的众所周知的参数。

在slrm中使用的安全逻辑回归训练算法基于具有二阶正则化的小批量sgd,并应用了双方aby安全计算框架的数学电路(mathematiccircuit(a))和加密电路(garbledcircuit(yao))。数学电路(a)基于乘法三元组(multiplicationtriple)和ss,并且可以用于计算加法、减法和乘法,从而可以计算算法中使用的多项式、点积和矩阵乘法。同时,加密电路(yao)可用于执行其他类型的计算。在该计算框架中,每个scn使用ss进行安全计算。在每个计算步骤之后,生成中间计算结果并将其分成多份(份额可以是相等或不等的),而每个scn获得一份中间计算结果。在每个步骤之后,两个scn使用所获得的份额进入下一步骤,并且最终在迭代终止时,把最后生成的份额组合。

在迭代循环开始之前,首先对用于更新模型的所有参数进行初始化。在初始化处理中,两个scn都生成随机列向量作为一份初始化的参数列向量θ,其中dim(θ)=(k0+k1+1,1),dim(θl)=(k0+1,1),dim(θr)=(k1,1)。初始化的参数列向量θ可以按份额表示为:

θl=<θl>0+<θl>1等式(3)

θr=<θr>0+<θr>1等式(4)

其中,<>表示份额,[i]表示向量的第i元素(即,θ[i]=<θ[i]>0+<θ[i]>1)。因此,在scnp0处所生成的随机列向量可以用下式表示:

<θ>0=(<θ[1]>0,<θ[2]>0,<θ[3]>0,…<θ[k]>0)等式(5)

由于每个样本数据集被垂直划分,因此<θ>0可以通过以下两个列向量进一步划分:

l>0=(<θl[1]>0,<θl[2]>0,<θl[3]>0,…<θl[k0]>0)等式(6)

r>0=(<θr[1]>0,<θr[2]>0,<θr[3]>0,…<θr[k1]>0)等式(7)

其中,<θ>0=<θl>0||<θr>0,||表示连接关系。

类似地,在scnp1处生成的随机列向量可以被表示为下式:

=(<θ[1]>1,<θ[2]>1,<θ[3]>1,…<θ[k]>1)等式(8)

由于每个样本数据集被垂直划分,因此<θ>1可以通过以下两个列向量进一步划分:

l>1=(<θl[1]>1,<θl[2]>1,<θl[3]>1,…<θl[k0]>1)等式(9)

r>1=(<θr[1]>1,<θr[2]>1,<θr[3]>1,…<θr[k1]>1)等式(10)

其中,<θ>1=<θl>1||<θr>1,||表示连接关系。

通过图2a-6说明迭代处理。如前所述,迭代的目的是更新等式(2)中所示的参数θ。

图2a示出了在一次迭代期间迭代循环的第一步骤(这里称为“步骤1”)的第一子步骤(这里称为“步骤1.1”)。在步骤1中,每个scn首先基于等式计算一份a:

a=xθ=xlθl+xrθr等式11

其中,通过使用小批量样本向量x乘以参数θ的列向量来计算a。

在一些实施方式中,xl和xr还将用于在迭代循环的步骤3中更新参数。在一些实施方式中,相同的小批量样本数据可在后续的迭代中被用于计算。

图2a(步骤1.1)示出了使用乘法三元组和秘密共享计算xlθl的值。如图2a中所示,scnp0是提供原始数据的一方。为了隐藏该原始数据,scnp0和scnp1首先获得随机数。在一些实施方式中,随机数可以是数字、向量或矩阵。在一些实施方式中,随机数可以由scn生成。在一些实施方式中,可以向例如图1中所示的随机数提供器108的第三方机构请求随机数并从该第三方机构接收随机数。

如图2a所示,获得的随机数包括随机矩阵u、随机向量v和随机数z。所获得的随机数分布在scnp0和scnp1之间。在一些实施方式中,scnp0获得随机矩阵u、v的表示为ν0的份额、z的表示为z0的份额。scnp1获得v的表示为ν1的份额、以及z的表示为z1的份额。在一些实施方式中,z的份额可以通过同态计算生成。在一些实施方式中,随机向量u由scnp0生成,而随机向量v的份额ν0和ν1分别由scnp0和scnp1生成。在一些实施方式中,u、v和z及其对应的份额全部由可信的第三方商用服务器生成。每个随机数和相应随机数的份额是相互关联的,并且它们之间的关系可表示为:

z0+z1=u*v=u*(ν0+ν1)等式(12)

假设a=xl,并且b0=<θl>0。为了隐藏scnp0的数据,使用u加密a,例如,通过将a和u相加、相减或相乘。在一些实施方式中,当在后续的迭代中隐藏相同的xl时,随机矩阵u可以相同。同样,通过使用随机向量ν0来加密<θl>0。如图2a所示,scnp0向scnp1发送加密的xl(其被表示为e=a-u)和加密的<θl>0(其被表示为(b0–ν0))。在一些实施方式中,如果在后续的迭代中使用相同的随机矩阵u来隐藏相同的xl,则不需要重新发送加密的xl(e=a-u)。在scnp1侧,假设b1=<θl>1。在这种情况下,随机向量份额ν1被用于隐藏<θl>1的值,并且将(b1–ν1)从scnp1发送至scnp0。

在scnp0和scnp1之间进行数据交换之后,scnp0处的步骤1.1的数据队列被更新为:

c0=u*f+e*b0+z0等式(13)

其中,f=b-v。

以及scnp1处的步骤1.1的数据队列被更新为:

c1=e*b1+z1等式(14)

其中,c0和c1均是xlθl的份额。

基于以上等式,xlθl可以被计算为:

xlθl=c0+c1等式(15)

c0+c1=u*f+e*b+u*v等式(16)

c0+c1=u*b-u*v+a*b-u*b+u*v等式(17)

图2b描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理200b的示例。

具体地,图2b示出了迭代循环的步骤1的第二子步骤(这里为步骤1.2)。在步骤1.2,使用乘法三元组和秘密共享计算xrθr的值。如图2b所示,scnp1是提供原始数据的一方。为了隐藏该原始数据,scnp1和scnp0首先获得随机数。

如图2b所示,所获得的随机数包括随机矩阵u、随机向量v和随机数z。所获得的随机数分布在scnp1和scnp0之间。scnp1获得随机矩阵u、v的表示为v0的份额、z的表示为z0的份额。scnp0获得v的表示为v1的份额、以及z的表示为z1的份额。在一些实施方式中,z的份额可以通过同态计算生成。在一些实施方式中,随机向量u由scnp1生成,而随机向量v的份额v0和v1分别由scnp1和scnp0生成。在一些实施方式中,u、v和z及其份额全部由可信的第三方商业服务器生成。每个随机数和相应随机数的份额是相互关联的,并且满足如等式(12)所示的关系。

假设a=xr,并且b0=<θr>0,为隐藏a的数据信息,scnp1首先使用u加密a,例如,在a和u之间执行加法、减法或乘法。在一些实施方式中,当在后续的迭代中隐藏相同的xr时,随机矩阵u可以是相同的。同样,首先使用随机向量ν0加密<θr>0。如图2b所示,scnp1向scnp0发送加密的xr(表示为e=a-u)和加密的<θr>0(表示为(b0–ν0))。在一些实施方式中,如果在后续的迭代中使用相同的随机矩阵u来隐藏相同的xl,则加密的xl(e=a-u)不需要被重新发送。在scnp0侧,假设b1=<θr>1。在这种情况下,随机向量份额ν1被用于隐藏<θr>1的值,并且(b1–ν1)被从scnp0发送到scnp1。

在scnp1和scnp0之间进行数据交换之后,scnp1处的步骤1.2的数据队列通过等式(13)更新,a和scnp0处的步骤1.2的数据队列通过等式(14)更新。基于上面的等式,xlθl可以通过等式(16)和(17)计算,以及:

xrθr=c0+c1等式(18)

这样,完成一个迭代循环的步骤1,并且可以通过组合等式(15)和(18)的结果来计算等式(11)。

图3描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理300的示例。具体而言,图3示出了迭代循环中的第二步骤(这里称为“步骤2”)。

在步骤2,使用以下等式计算预测误差的列向量:

e=g(a)–yi等式(19)

其中,a是与步骤1中描述的等式(11)中的相同的值。g是s形函数(sigmoidfunction)的拟合函数,其可以是多项式函数拟合。也就是说,g()可以是多项式函数,并且其最高阶是d。在本公开中描述的示例中,设置d=7,并且g(x)可以由以下等式表示:

g(x)=0.5+1.73496*(x/8)-4.19407*+(x/8)35.43402*(x/8)5-2.50739*(x/8)7等式(20)

其中,g(a)表示由g(a[1]),g(a[2]),...g(a[m])组成的列向量。

使用乘法三元组和ss,scnp0和scnp1均需要计算g(<a[i]0>+<a[i]1>)。假设p=<a[i]0>,并且q=<a[i]1>。多项式函数g(p+q)可以扩展为函数:

g(p+q)=h0(q)+h1(q)p+h2(q)p2+…+hd(q)pd等式(21)

其中,h0,h1,…hd均是q的多项式函数,并且可以由scnp1计算,而p,p2,p3…pd可以由scnp0计算。

假设向量a=(p,p2,p3……pd),向量b=(h1(q),h2(q),…hd(q)),所以g(p+q)=a·b+h0(q),其中点积(a·b)可以通过图3中所示的处理计算,其包括优化的乘法三元组和ss。可以通过基于ss执行加法来计算e的最终结果。

如图3所示,所获得的随机数包括随机矩阵u、随机向量v和随机数z。所获得的随机数分布在scnp0和scnp1之间。scnp0获得随机矩阵u、z的表示为z0的份额。scnp1获得随机向量v以及z的表示为z1的份额。每个随机数和相应随机数的份额是相互关联的,它们之间的关系可表示为:

z0+z1=u*v等式(22)

然后,如图3所示,scnp0首先向scnp1发送加密的数据e=a-u,并且scnp1向scnp0发送加密的数据f=b-v。步骤和计算与步骤1中的步骤和计算类似,详情请参考前面对图2a和图2b的描述。

在scnp0和scnp1之间进行数据交换之后,scnp0处的步骤2的数据队列更新为:

c0=u*f+z0等式(23)

并且scnp1处的步骤2的数据队列更新为:

c1=e*b+z1等式(24)

基于上面的等式,(a·b)可以计算为:

(a·b)=c0+c1等式(25)

c0+c1=u*f+e*b+u*v等式(26)

c0+c1=u*b-u*v+a*b-u*b+u*v等式(27)

图4a描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理400a的示例。图4b描绘了根据本文实施方式的用于对slrm的参数进行迭代更新的子处理400b的示例。具体地,图4a和4b示出了用于执行一个迭代循环的第三步骤的处理(这里称为“步骤3”)。

在步骤3,列向量θ、以及scnp0和scnp1均可以获得更新后的θ的份额。在此步骤中,更新后的θ可表示为:

其中,e与步骤2的等式(19)中的e相同,并且

xte=(xl)te||(xr)te等式(29)

计算(xl)te的方法与计算xlθl的方法相同,而计算(xr)te的方法与计算xrθr的方法相同,此处将不再赘述。在等式(29)中,x表示包含多个样本的特征数据的矩阵,并且e表示误差向量。

在步骤3之后,完成一个迭代循环,并且训练过程进入下一个迭代循环并重复步骤1-3,或者如果条件满足则终止训练过程,如下面更详细描述的。

图5描绘了根据本文实施方式的用于确定是否终止更新slrm的参数的迭代的处理500的示例。

在一些实施方式中,当完成的迭代循环的数量已达到预定数量时,迭代可被终止。在一些实施方式中,阈值是预定的,并且当两个连续的迭代结果之间的差小于该阈值时,迭代被终止。

具体地,例如,假设在一个迭代循环之前和之后的参数是θ和θ',使用ss计算差d=(θ'–θ)。假设,a0=<dt>0,a1=<dt>1,b0=<d>0,以及b1=<d>1。scnp0和scnp1均使用乘法三元组和ss计算一份dtd,并且将每个结果组合以获得d。

如图5所示。在一些实施方式中,scnp0生成随机矩阵u0和v0,并且scnp0生成随机矩阵u1和v1。后续计算的方法类似于先前在图2和图4中描述的方法,并且这里将不再重复。在scnp0和scnp1之间交换数据之后,scnp0处的计算结果为:

c0=–e*f+a0*f+eb0+z0等式(30)

其中,f=b-v。

scnp1处的计算结果为:

c1=a1*f+eb1+z1等式(31)

其中,c0和c1均是dtd的份额。

基于上面的等式,dtd可以计算为:

dtd=c0+c1等式(32)

c0+c1=e*f+a*f+e*b+u*v等式(33)

c0+c1=u*f+a*b–u*b+u*v等式(34)

c0+c1=u*b–u*v+a*b-u*b+u*v等式(35)

图6描绘了根据本文实施方式的使用事件驱动的交互式安全建模程序来训练多方slrm的处理600的示例。

在一些实施方式中,方法600的各个步骤可以并行、组合、循环或以任何顺序运行。为了清楚地呈现,以下描述在本说明书中的其他附图的背景下一般地描述了方法600。然而,应当理解,方法600可以例如通过任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,方法600可以由一个或多个数据处理装置执行,该数据处理装置被配置为使用ss执行机器学习算法。所述数据处理装置可以包括例如通用cpu和/或诸如gpu、fpga、甚至定制asic处理器的硬件加速器,或者由其实现。

在一些实施方式中,如图6所示,处理600a(包括步骤602a-622a)由节点a结合数据库执行,而处理600b(包括步骤602b-624b)由节点b结合数据库执行。数据库可以是远程字典服务器(remotedictionaryserver,redis)并且支持节点a和节点b的数据的传输和临时存储。在一些实施方式中,数据可以在scna112和scnb114之间传输而无需通过数据库,并且可以在节点a和节点b处各自本地存储和更新订阅者队列。在迭代处理开始之前,节点a和节点b各自进入独立的建模处理并启动一批次迭代。节点a和节点b各自可以发布和订阅数据,因此节点a和节点b各自既是发布者(或“生产者”)也是订阅者(或“消费者”)。在该示例中的事件驱动模型下,即使节点a和节点b相互回复,它们的建模处理600a和600b也是独立的并且是分开进行的。

在602a和602b,节点a和节点b各自进入一独立的批次迭代。602a和602b可以同时或连续地发生。在602a之后,处理600a进行到604a。在602b之后,处理600b进行到604b。

在604a,节点a向节点b发布步骤1的数据。在一些实施方式中,通过向数据库发送加密的样本数据来发布步骤1的数据,因此该数据库可以存储和更新订阅者队列。一旦节点a完成该步骤,就可以向节点b发送通知以通知节点b:来自节点a的步骤1的数据已完成发布。在604a之后,处理600a进行到606a。

在606a,节点a从节点b订阅步骤1的数据。在一些情况下,因为slrm是基于ss训练的,所以节点a不能自己完成训练,并且来自节点a和节点b的数据都被用作模型的输入。在一些实施方式中,节点a通过向节点b请求来自节点b的步骤1的数据来进行这种订阅。如果数据库中的数据队列由来自节点b的步骤1的数据更新,则节点a将接收通知。因为此时节点a尚未接收到来自节点b的通知,所以不能触发600a的下一步骤并且暂时中止处理600a。

同时,在604b,节点b向节点a发布步骤1的数据。在一些实施方式中,通过向数据库发送加密的样本数据来发布步骤1的数据,因此该数据库可以存储和更新订阅者队列。一旦节点b完成该步骤,就可以向节点a发送通知以通知节点a:来自节点b的步骤1的数据已经完成发布。在604b之后,处理600b进行到606b。

在606b,节点b从节点b订阅步骤1的数据。因为此时节点a已经发布了步骤1的数据并且节点b已经接收到来自节点a的通知,所以触发下一步骤并且在606b之后,处理600b进行到608b。

在608b,节点b通过使用其自己的数据和从节点a接收的步骤1的数据来本地计算步骤1的结果。该步骤的等式和详细步骤可以参考先前描述的图2b。在608b之后,处理600b进行到610b。

因为步骤610b和612b都可以由节点b独立地执行,所以节点b可以一起或连续地执行这两个步骤而不依赖于节点a的动作。在步骤610b和612b之后,通过使用由节点b发布的步骤2的数据来更新数据库中的订阅者队列,并且向节点a发送发布通知。在步骤612b之后,因为节点b尚未接收到来自节点a的通知,所以下一步骤不能被触发并且处理600b暂时中止。

返回到处理600a的步骤606a。如果此时节点b已经执行步骤604b并且节点a已经接收到来自节点b的通知,则触发处理600a的下一步骤,并且在606a之后,处理600a进行到608a。

因为步骤608a-612a可以由节点a独立地执行而无需来自节点b的数据,所以节点a可以连续地执行这些步骤。在步骤610a之后,通过使用由节点a发布的步骤2的数据来更新数据库中的订阅者队列,并且向节点b发送发布通知。在步骤612a之后,如果节点b已经执行了步骤610b并且节点a接收到相应的通知,则触发600a的下一步骤,并且处理600a进行到614a。否则,暂时中止处理600a,直到步骤610b被执行。

因为步骤614a-618a可以由节点a独立地执行,所以节点a可以连续地执行这些步骤。在步骤614a和616a之后,通过使用由节点a发布的步骤3的数据来更新数据库中的订阅者队列,并且向节点b发送发布通知。在步骤618a之后,因为节点a尚未接收到来自节点b的通知,因此可以暂时中止处理600a,直到接收到来自节点b的通知。

返回到处理600b。在节点a发布其步骤2的数据、并发送相应通知的步骤610a之后,处理600b的下一步骤被触发,并且处理600b可以进行到614b。在614b,节点b通过使用其自己的数据和从节点a接收的步骤2的数据来本地计算步骤2的结果。计算步骤的等式和详细步骤可以参考先前描述的图3。在614b之后,处理600b进行到616b。

因为616b-620b中的每个步骤可以由节点b独立地执行,所以节点b可以连续地执行这三个步骤。在616b,通过使用等式(20)来计算sigmoid(wx)-y的值。在步骤618b和620b之后,通过使用由节点b发布的步骤3的数据来更新数据库中的订阅者队列,并且向节点a发送发布通知。在步骤620b之后,如果此时节点a已经执行了616a并且节点b已经接收到来自节点a的通知,则600b的下一步骤被触发,并且处理600b进行到622b。

在622b,节点b使用其自己的数据和从节点a接收的步骤3的数据来本地计算步骤3的结果。在先前描述的图4b中详述了计算的等式和详细步骤。在622b之后,因为由节点a和节点b共同确定是否进入下一次迭代,在622b之后,并且因为节点b尚未接收到来自节点b的通知,所以处理600b暂时中止。

返回到处理600a,在步骤618b之后,即节点b已发布其步骤3的数据、并已发送相应通知,处理600a的下一步骤被触发,并且处理600a可进行到620a。在620a,节点a通过使用其自己的数据和从节点a接收的步骤3的数据来本地计算步骤3的结果。计算步骤的等式和详细步骤可以参考先前描述的图3。在620a之后,节点a和节点b都完成了迭代循环。

如先前在图4中所述,是否终止迭代循环取决于是否满足预定条件。如果满足,则处理600a和600b都进入622a和624a,并再次重复602a-620a和602b-622b的步骤。如果不满足,则终止迭代,并且处理600a和600b分别在618a和622b处停止。

图7描绘了可以根据本文实施方式执行的处理700的示例。在一些实施方式中,方法700的各个步骤可以并行、组合、循环或以任何顺序运行。为了清楚地呈现,以下描述在本说明书中的其他附图的背景下一般地描述了方法700。然而,应当理解,方法700可以例如通过任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,方法700可以由一个或多个数据处理装置执行,该数据处理装置被配置为使用ss执行机器学习算法。该数据处理装置可以包括例如通用cpu和/或诸如gpu、fpga、甚至定制asic处理器的硬件加速器,或者由其实现。

在702,使用秘密共享将slrm的样本训练数据划分为两份,并且将每份分配给scn。在一些实施方式中,样本数据矩阵x被划分为xl和xr,并且样本数据矩阵xl属于scn1,样本数据矩阵xr属于scn2。在702之后,处理700进行到704。

在704,使用每份样本训练数据对slrm的参数进行迭代更新。在一些实施方式中,通过使用小批量随机梯度下降(sgd)方法来优化slrm的目标函数。

在一些实施方式中,slrm基于可被表示为下式的逻辑回归函数:

其中,m表示小批量sgd的样本大小。x表示m*k样本矩阵。矩阵x的每一行表示一个样本,xi表示矩阵x的第i行,[j]表示向量xi的第j元素。样本数据矩阵x被划分为xl和xr,并且样本数据xl属于scnp0,而xr属于scnp1。θ表示参数列向量,该列向量θ可以被垂直划分为θl和θr

在一些实施方式中,训练slrm包括使用事件驱动模型。在704之后,处理700进行到706。

在706,对于每个scn,基于以下等式计算一份a:

a=xθ=xlθl+xrθr

在一些实施方式中,计算xlθl和xrθr包括:通过使用随机数隐藏由每个scn提供的原始数据,以及在scn之间交换隐藏的数据。在一些实施方式中,在隐藏原始数据之前,随机数被每个scn获得。在一些实施方式中,随机数可以是数字、向量或矩阵。在一些实施方式中,随机数可以由scn生成。在一些实施方式中,可以向第三方机构请求随机数并从其接收随机数。在706之后,处理700进行到708。

在708,基于以下等式计算预测误差的列向量:

e=g(a)-yi

其中,g是s形函数(sigmoidfunction)的拟合函数,它可以是多项式函数拟合。在一些实施方式中,如果阶数或g(x)是7,则g(x)可以由以下等式表示:

g(x)=0.5+1.73496*(x/8)-4.19407*+(x/8)35.43402*(x/8)5-2.50739*(x/8)7

其中,g(a)表示由g(a[1]),g(a[2]),g(a[m])组成的列向量。在708之后,处理700进行到710。

在710,更新后的列向量θ可以表示为:

其中,xte=(xl)te||(xr)te。

在710之后,处理700进行到712。

在712,如果满足预定条件则终止迭代。在一些实施方式中,当完成的迭代循环的数量已达到预定数量时,可以终止迭代。

在一些实施方式中,阈值是预定的,并且当两个连续迭代结果之间的差小于该阈值时,终止迭代。在712之后,处理700可以停止。

图8描绘了可以根据本文实施方式执行的处理800的示例。在一些实施方式中,方法700的各个步骤可以并行、组合、循环或以任何顺序运行。为了清楚地呈现,以下描述在本说明书中的其他附图的背景下一般地描述了方法800。然而,应当理解,方法800可以例如通过任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,方法800可以由一个或多个数据处理装置执行,该数据处理装置被配置为使用ss执行机器学习算法。数据处理装置可以包括例如通用cpu和/或诸如gpu、fpga、甚至定制asic处理器的硬件加速器,或者由其实现。

在802,用户通过确定与slrm相关联的多个参数来对slrm进行初始化。在一些实施方式中,参数可以包括训练数据的大小、与训练数据相关联的特征、相应的slrm的设置、slrm的超参数。

在一些实施方式中,在用户对slrm进行初始化之后,将与slrm相关联的信息发送到安全管理代理。在一些实施方式中,安全管理代理处理slrm和馈送到模型的训练数据。在一些实施方式中,节点管理代理被配置为选择和管理参与训练的scn。在一些实施方式中,安全管理代理和节点管理代理都可以被配置为第三方代理。在802之后,处理800进行到804。

在804,至少两个scn向随机数提供器请求随机数,并且所请求的随机数被用于加密存储在每个scn中的数据。在一些实施方式中,随机数可以是数字、向量或矩阵等。在一些实施方式中,随机数可以由至少一个scn生成。在一些实施方式中,随机数可以由独立的第三方提供。

在一些实施方式中,加密数据包括使用数据和所接收的随机数执行计算。在一些实施方式中,所执行的计算是加法、减法和乘法中的至少一个。在802之后,处理800进行到804。

在806,将加密的数据用作输入以基于ss对slrm的参数进行迭代更新。该步骤的细节将在图7中进一步描述。在806之后,处理800进行到808。

在808,经训练的slrm的输出用于执行每个scn的服务。在一些实施方式中,该服务可以是预测服务或分类服务。在808之后,处理800停止。

图9描绘了根据本文实施方式的示出了装置的模块的示图900的示例。装置900可以是训练多方安全逻辑回归模型的装置的示例性实施方式。装置900可以对应于上述实施方式,并且装置900包括以下:接收器或接收单元902,用于在多个安全计算节点(scn)处从随机数提供器接收多个随机数;加密器或加密单元904,用于在每个scn处使用所接收到的随机数对存储在scn中的数据进行加密处理;更新器或更新单元906,用于通过使用来自每个scn的加密数据对安全逻辑回归模型(slrm)迭代更新;输出器或输出单元908,用于在对slrm迭代更新之后输出slrm的结果,其中,该结果被配置为能够由每个scn执行的服务。

在可选实施方式中,每个随机数是数字、向量或矩阵中的至少一个。

在可选实施方式中,所述随机数中的至少一个由第三方代理生成。

在可选实施方式中,更新器或更新单元906用于基于秘密共享(ss)方案对slrm迭代更新。

在可选实施方式中,更新器或更新单元906用于基于事件驱动模型对slrm迭代更新。

在可选实施方式中,更新器或更新单元906用于通过基于等式(19)确定预测误差的列向量来对slrm迭代更新。

在可选实施方式中,装置900还包括初始化器或初始化单元,用于在接收来自随机数提供器的多个随机数之前,初始化与slrm相关联的参数。

在可选实施方式中,继续对slrm迭代更新,直到两个连续的迭代结果之间的差小于预定阈值

前面实施方式中示出的系统、装置、模块或单元可以通过使用计算机芯片或实体来实现,或者可以通过使用具有特定功能的产品来实现。典型的实现设备是计算机,计算机可以是个人计算机、膝上型计算机、蜂窝电话、照相手机、智能手机、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板电脑、可穿戴设备或这些设备的任意组合。

对于装置中每个单元的功能和角色的实现过程,可以参考前一方法中相应步骤的实现过程。为简单起见,这里省略了细节。

由于装置实现基本上对应于方法实现,对于相关部分,可以参考方法实现中的相关描述。先前描述的装置实现仅是示例。被描述为单独部分的单元可以是或不是物理上分离的,并且显示为单元的部分可以是或不是物理单元,可以位于一个位置,或者可以分布在多个网络单元上。可以基于实际需求来选择一些或所有模块,以实现本文解决方案的目标。本领域普通技术人员无需付出创造性的劳动就能理解和实现本文的实施方式。

再次参见图9,它可以被解释为示出内部功能的模块和使用针对隐私保护的分布式多方安全模型训练框架来处理数据的装置的结构。执行装置可以是被配置为能够进行数据处理的装置的示例。

本文中描述的主题、动作和操作的实施方式可以在数字电子电路、在有形体现的计算机软件或固件、计算机硬件中实现,包括在本文中公开的结构及其结构等同物的,或者它们中的一个或多个的组合。本文中描述的主题的实施方式可以实现为一个或多个计算机程序,例如,编码在计算机程序载体上的一个或多个计算机程序指令模块,用于由数据处理装置执行或控制数据处理装置的操作。载体可以是有形的非暂态的计算机存储介质。可选地或附加地,载体可以是人工生成的传播信号,例如,机器生成的电信号、光信号或电磁信号,其被生成以编码信息用于传输到合适的接收器装置以供数据处理装置执行。计算机存储介质可以是或部分是机器可读存储设备、机器可读存储基板、随机或串行访问存储器设备或它们中的一个或多个的组合。计算机存储介质不是传播信号。

术语“数据处理装置”包括用于处理数据的所有类型的装置、设备和机器,包括例如可编程处理器、计算机或多个处理器或计算机。数据处理装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)、asic(专用集成电路)或gpu(图形处理单元)。除了硬件,该装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统,或者它们的一个或多个的组合的代码。

计算机程序也可以被称为或描述为程序、软件、软件应用程序、应用程序(app)、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译语言或演绎性语言,说明或程序性语言;它可以配置为任何形式,包括作为独立程序,或作为模块、组件、引擎、子程序或适合在计算环境中执行的其他单元,该环境可包括通过数据通信网络互连的在一个或多个位置的一台或多台计算机。

计算机程序可以但非必须对应于文件系统中的文件。计算机程序可以存储在:保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本中;专用于所讨论的程序的单个文件中;或者多个协调文件中,例如,存储一个或多个模块、子程序或代码部分的文件。

本文中描述的处理和逻辑流程可以由一台或多台计算机执行一个或多个计算机程序进行,以进行通过对输入数据进行运算并生成输出的操作。处理和逻辑流程也可以由例如fpga、asic或gpu等的专用逻辑电路或专用逻辑电路与一个或多个编程计算机的组合来执行。

适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可包括用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以补充有专用逻辑电路或集成在专用逻辑电路中。

通常,计算机还将包括或可操作地耦接至一个或多个大容量存储设备,以从一个或多个大容量存储设备接收数据或将数据传输到一个或多个大容量存储设备。大容量存储设备可以是例如,磁盘、磁光盘或光盘或固态驱动器。但是,计算机不必需这样的设备。此外,计算机可以嵌入在另一个设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器或例如通用串行总线(usb)闪存驱动器的便携式存储设备,仅举几例。

为了提供与用户的交互,本文中描述的主题的实施方式可以在计算机上实施或被配置为与该计算机通信,该计算机具有:用于向用户显示信息的显示设备(例如,lcd(液晶显示器)监视器)、以及用户可以通过输入设备向计算机提供输入的输入设备,例如键盘和例如鼠标、轨迹球或触摸板的指针设备。其他类型的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户的任何形式的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过向用户设备上的web浏览器发送请求以响应从web浏览器接收到的请求,或者通过与例如智能电话或电子平板电脑等的在用户设备上运行的应用程序(app)进行交互。此外,计算机可以通过向个人设备(例如,运行消息应用程序的智能电话)发送文本消息或其他形式的消息,并且反之从用户接收响应消息来与用户交互。

虽然本文包含许多具体实施细节,但是这些不应被解释为由权利要求本身限定的对要求保护的范围的限制,而是作为对特定实施方式的具体特征的描述。在本文多个单独实施方式的上下文中描述的多个特定特征也可以在单个实施方式中组合实现。相反,在单个实施方式的上下文中描述的各种特征也可以在多个实施方式中单独地或以任何合适的子组合来实现。此外,尽管上面的特征可以描述为以某些组合起作用并且甚至最初如此要求保护,但是在一些情况下,可以从组合中删除来自要求保护的组合的一个或多个特征,并且权利要求可以针对子组合或子组和的变体。

类似地,虽然在附图中描绘了操作并且以特定顺序在权利要求中叙述,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或依次执行这些操作,或者要求执行所有示出的操作。在一些情况下,多任务和并行处理可能是有利的。此外,上述实施方式中的各种系统模块和组件的划分不应被理解为在所有实施方式中都需要这种划分,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品或者打包成多个软件产品。

已经描述了主题的特定实施方式。其他实施方式在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的处理无需要求所示的特定顺序或次序来实现期望的结果。在一些情况下,多任务和并行处理可能是有利的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1