一种基于共享数据的模型训练方法及装置
技术领域
本说明书的实施例涉及数据挖掘技术领域,尤其涉及一种基于共享数据的模型训练方法及装置。
背景技术
在大数据时代,通过对海量数据进行挖掘,可以获得各种形式的有用信息,因此数据的重要性不言而喻。不同的机构都拥有各自的数据,但是任何一家机构的数据挖掘效果,都会受限于其自身拥有的数据数量和种类。针对该问题,一种直接的解决思路是:多家机构相互合作,将数据进行共享,从而实现更好的数据挖掘效果,实现共赢。
然而对于数据拥有方而言,数据本身是一种具有很大价值的资产,而且出于保护隐私、防止泄露等需求,数据拥有方往往并不愿意直接把数据提供出来,这种状况导致“数据共享”在现实中很难实际运作。因此,如何在充分保证数据安全的前提下实现数据共享,已经成为行业内备受关注的问题。
发明内容
针对上述技术问题,本说明书的实施例提供一种基于共享数据的模型训练方法及装置,技术方案如下:
根据本说明书实施例的第1方面,提供一种基于共享数据的模型训练方法,该方法包括:
利用以下步骤进行迭代训练,直到满足模型训练要求:
分别获得至少1个数据提供方提供的密文数据;
将各数据提供方的密文数据分别对应输入数据提供方的可信执行环境;
获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
根据给定的训练目标模型,计算模型预测值与真实值的偏差值;所述模型预测值根据各可信执行环境的输出值确定,所述真实值为根据各数据提供方的数据所确定的全局标签值;
将所述偏差值分别返回至各可信执行环境,使得各可信执行环境分别更新局部模型参数;
其中,任意可信执行环境内部执行以下步骤:
对输入的密文数据进行解密,得到明文数据特征值;
根据当前的局部模型参数,计算明文数据特征值对应的输出值;
根据返回的偏差值,更新局部模型参数。
根据本说明书实施例的第2方面,提供一种基于共享数据的模型训练方法,该方法包括:
将至少1个数据提供方的密文数据分别对应输入数据提供方的可信执行环境;在各可信执行环境中,分别对输入的密文数据进行解密,得到各明文数据特征值;
利用以下步骤进行迭代训练,直到满足模型训练要求:
在各可信执行环境中,根据当前的局部模型参数,计算明文数据特征值对应的输出值;
根据给定的训练目标模型,计算模型预测值与真实值的偏差值;所述模型预测值根据各可信执行环境的输出值确定,所述真实值为根据各数据提供方的数据所确定的全局标签值;
将所述偏差值分别返回至各可信执行环境;
在各可信执行环境中,根据返回的偏差值更新局部模型参数。
根据本说明书实施例的第3方面,提供一种基于共享数据的模型训练方法,该方法包括:
利用以下步骤进行迭代训练,直到满足模型训练要求:
分别获得多个数据提供方提供的数据,其中,至少1个数据提供方提供的数据形式为密文数据,其他数据提供方提供的数据形式为明文数据;
若数据提供方提供的数据形式为密文数据,则将密文数据对应输入数据该提供方的可信执行环境;
获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
利用各可信执行环境的输出值、以及其他数据提供方提供的明文数据,计算模型预测值与真实值的偏差值;所述模型预测值根据各可信执行环境的输出值确定以及明文数据的特征值确定;所述真实值为根据各数据提供方的数据所确定的全局标签值;
将所述偏差值分别返回至各可信执行环境,使得各可信执行环境分别更新局部模型参数;
其中,任意可信执行环境内部执行以下步骤:
对输入的密文数据进行解密,得到明文数据特征值;
根据当前的局部模型参数,计算明文数据特征值对应的输出值;
根据返回的偏差值,更新局部模型参数。
根据本说明书实施例的第4方面,提供一种基于共享数据建模的数据预测方法,该方法包括:
分别获得至少1个数据提供方提供的密文数据;
将各数据提供方的密文数据分别对应输入数据提供方的可信执行环境;
获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
将各可信执行环境的输出值输入预先训练的预测模型,计算得到预测值;
其中,任意可信执行环境内部执行以下步骤:
对输入的密文数据进行解密,得到明文数据特征值;
根据当前的局部模型参数,计算明文数据特征值对应的输出值。
根据本说明书实施例的第5方面,提供一种基于共享数据的模型训练装置,该装置包括以下用于实现迭代训练的模块:
数据获得模块,用于分别获得至少1个数据提供方提供的密文数据;
数据输入模块,用于将各数据提供方的密文数据分别对应输入数据提供方的可信执行环境;
输出值获得模块,用于获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
偏差值计算模块,用于根据给定的训练目标模型,计算模型预测值与真实值的偏差值;所述模型预测值根据各可信执行环境的输出值确定,所述真实值为根据各数据提供方的数据所确定的全局标签值;
偏差值返回模块,用于将所述偏差值分别返回至各可信执行环境,使得各可信执行环境分别更新局部模型参数;
其中,任意可信执行环境内部包括:
解密子模块,用于对输入的密文数据进行解密,得到明文数据特征值;
输出值计算子模块,用于根据当前的局部模型参数,计算明文数据特征值对应的输出值;
参数更新子模块,用于根据返回的偏差值,更新局部模型参数。
根据本说明书实施例的第6方面,提供一种基于共享数据的模型训练装置,该装置包括以下用于实现迭代训练的模块:
数据获得模块,用于分别获得多个数据提供方提供的数据,其中,至少1个数据提供方提供的数据形式为密文数据,其他数据提供方提供的数据形式为明文数据;
数据输入模块,用于若数据提供方提供的数据形式为密文数据,则将密文数据对应输入数据该提供方的可信执行环境;
输出值获得模块,用于获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
偏差值计算模块,用于利用各可信执行环境的输出值、以及其他数据提供方提供的明文数据,计算模型预测值与真实值的偏差值;所述模型预测值根据各可信执行环境的输出值确定以及明文数据的特征值确定;所述真实值为根据各数据提供方的数据所确定的全局标签值;
偏差值返回模块,用于将所述偏差值分别返回至各可信执行环境,使得各可信执行环境分别更新局部模型参数;
其中,任意可信执行环境内部包括:
解密子模块,用于对输入的密文数据进行解密,得到明文数据特征值;
输出值计算子模块,用于根据当前的局部模型参数,计算明文数据特征值对应的输出值;
参数更新子模块,用于根据返回的偏差值,更新局部模型参数。
根据本说明书实施例的第7方面,提供一种基于共享数据建模的数据预测装置,该装置包括:
数据获得模块,用于分别获得至少1个数据提供方提供的密文数据;
数据输入模块,用于将各数据提供方的密文数据分别对应输入数据提供方的可信执行环境;
输出值获得模块,用于获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
预测值计算模块,用于将各可信执行环境的输出值输入预先训练的预测模型,计算得到预测值;
其中,任意可信执行环境Eu内部包括:
解密子模块,用于对输入的密文数据进行解密,得到明文数据特征值;
输出值计算子模块,用于根据当前的局部模型参数,计算明文数据特征值对应的输出值。
本说明书实施例所提供的技术方案:一方面,可以根据多个数据提供方提供的数据进行联合训练,从而得到更为准确全面的数据模型;另一方面,将模型训练过程中涉及隐私数据的操作(例如数据解密操作、局部模型参数更新操作等)都封装在数据提供方的可信执行环境中执行。也就是说:在可信执行环境之外无法获取数据明文,从而有效地保证了共享数据提供方的数据安全性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书的实施例。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是数据共享合作模式示意图;
图2是本说明书公开的模型训练系统的架构的示意图;
图3是本说明书公开的数据预测系统的架构的示意图;
图4a是本说明书一个实施例的模型训练系统的架构的示意图;
图4b是本说明书另一个实施例的模型训练系统的架构的示意图;
图5是本说明书公开的基于共享数据的模型训练装置的结构示意图;
图6是本说明书公开的基于共享数据建模的数据预测装置的结构示意图;
图7是本说明书公开的一种计算机设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解技术方案,下面将结合本说明书实施例中的附图,对本说明书的实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本说明书的实施例保护的范围。
如图1所示,在“数据共享”这一合作模式中,涉及到几个角色:数据提供方、数据挖掘方、数据攻击方。多个数据提供方共同将数据交给数据挖掘方进行数据共享挖掘,但是为了保护数据隐私,并不希望把数据原封不动地提供给数据挖掘方。另一方面,数据提供方还需要防止数据攻击方窃取数据。从广义上看,对于任意数据提供方而言,数据挖掘方和其他数据提供方实际上都构成潜在的攻击方。
因此,实现安全数据共享安全的一种基本需求是:数据提供方将数据经过某种加密处理之后提供给数据挖掘方。加密的数据仍然保留一定的信息量,使得数据挖掘方仍然可以利用加密的数据进行数据挖掘,但是却无法得到具体的数据内容。
针对上述需求,本说明书实施例提供一种基于可信执行环境的数据共享方案。该方案用于根据海量数据样本训练数据模型,其中数据样本来源于多个数据提供方,由于不同的数据提供方可以分别从不同的维度提供数据样本特征,因此将各个数据提供方的共享的数据整合后,可以形成特征维度更丰富的数据样本,从而训练出效果更佳的数据模型。
首先对可信执行环境(TEE,Trusted Execution Environment)相关技术进行介绍:可信执行环境是设备处理器上的一个安全区域,其可以保证加载到该环境内部的代码和数据的安全性、机密性以及完整性。可信执行环境提供一个隔离的执行环境,提供的安全特征包含:隔离执行、可信应用的完整性、可信数据的机密性、安全存储等。总体来说,可信执行环境可以提供比操作系统更高级别的安全性。可信执行环境最早是针对移动设备(例如智能手机、平板电脑、机顶盒、智能电视等)提出,目前的应用场景已经不仅限于移动领域。常见可信执行环境实现方案包括AMD的PSP(Platform Security Processor)、ARM的TrustZone、Intel的SGX(Software Guard Extensions)等等。
在数据共享的应用场景中,对于任意数据提供方而言,可以认为除了自己之外,其他任一方都是不可信任的,因此可以分别为各个数据提供方创建可信执行环境,将涉及数据安全隐患的操作都封装在各个可信执行环境内部执行,从而满足数据提供方对数据安全性的要求。
本说明书实施例提供的一种数据共享系统的架构参见图2所示。假设共有U个数据提供方:1、2…U,共同向数据挖掘方提供数据,以供数据挖掘方训练出一个全局模型。整体的数据共享工作原理如下:
各个数据提供方将加密过的数据提供给数据挖掘方;
数据挖掘方针对各个数据提供方,分别创建可信执行环境,然后将密文数据分别对应输入各个可信执行环境。
在可信执行环境内部,先对密文数据进行解密,然后利用可信执行环境内部保存的模型参数计算出一个输出值,可信执行环境的输出值可以用于数据挖掘方进行模型训练,但是数据挖掘方无法从可信执行环境的输出值中得到具体的数据内容。
数据挖掘方根据各个可信执行环境的输出值进行联合训练,从而得到一个全局的数据模型。
整个过程中,涉及数据明文的操作,都被封装在各个可信执行环境内部,由于可信执行环境对于数据提供方之外是完全隔离的,因此可以有效地保证数据提供方的数据安全性。
下面结合具体的步骤流程,对本说明书实施例提供的模型训练方法进行说明:
数据模型的训练,可以通过反复迭代寻找最佳模型参数值,每次迭代都会更新模型参数,直到更新的模型参数满足训练要求,则训练结束。参见图2所示,下面以一次完整的迭代过程对本说明书实施例方案进行说明:
S101,分别获得U个数据提供方提供的密文数据;
数据提供方提供用于模型训练的样本数据。不同的数据提供方所提供的数据可以分别具有完全不同的特征,也可以具有相同或部分相同的特征。实际应用中,任意数据提供方和数据挖掘方可以事先约定需要上传哪些特征用作模型训练,本说明书实施例对此不做限定。
假设共有U个数据提供方(其中U≥2),则各自提供的数据形式表示如下:
数据提供方1:(x1 1,x2 1,x3 1,…),记为(x1,x2,x3,…)1→X1
数据提供方2:(x1 2,x2 2,x3 2,…),记为(x1,x2,x3,…)2→X2
……
数据提供方U:(x1 U,x2 U,x3 U,…),记为(x1,x2,x3,…)U→XU
这里x1,x2,x3…分别代表一条数据的不同特征值,上标处的1,2,…U代表各个数据提供方的标识。为描述方便,可以统一将数据格式表示为整体上标的形式。可以理解的是,各个数据提供方所提供的可以是含义相同或不同的特征,而且各个数据提供方所上传的特征数量可以各不相同。但是,从多个数据提供方所获得的数据中,可以提取出多组用于描述同一对象的数据,以形成全局训练样本。
例如,存在3个数据提供方,分别提供具有不同特征的数据样本:
数据提供方1上传的特征包括:年龄、职业;
数据提供方2上传的特征包括:性别、身高、体重;
数据提供方3上传的特征包括:性别、血压、心率;
如果针对任意一个人i,都能够从3个数据提供方分别获得上述特征数据,则综合上述3个数据提供方所提供的数据,可以形成大量训练样本,从而联合训练出一个关于(年龄,职业,性别,身高,体重、血压、心率)共7项特征的模型。
为了保证数据的安全性,各个数据提供方均对数据进行加密,将数据以密文的形式提供给数据挖掘方。这里认为各个数据提供方使用的加密逻辑仅有自己知道,因此加密后数据可以安全地在不信任的环境中存储或传输。
具体实施时,数据挖掘方可以通过网络传输的方式从数据提供方请求数据,数据提供方对数据进行加密后,将密文数据通过网络发送给数据挖掘方;在另一种实施方式中,也可以将密文数据存储在数据挖掘方的存储设备中,以便数据挖掘方直接从本地读取。
S102,将各数据提供方的密文数据分别对应输入各个数据提供方的可信执行环境;
数据挖掘方针对各个数据提供方1,2,…U,分别创建可信执行环境E1、E2…EU,以保证对于任意的数据提供方u(u=1,2,…U)所提供的数据,涉及数据安全的操作只能在其对应的Eu中进行,在Eu之外既无法感知这些操作,也无法影响这些操作。
在不同的实现方案下,创建可信执行环境的具体方式不同,本说明书实施例不对创建可信执行环境的具体方式进行限定。此外,数据挖掘方创建可信执行环境的操作,既可以在首次获得数据提供方的密文数据后执行,也可以预先执行。
每个可信执行环境对外部提供输入接口及输出接口,其中一种输出接口的功能是:接收外部输入的密文数据。数据挖掘方获得数据提供方的密文数据后,确定与各个数据提供方u对应的Eu,然后将密文数据分别输入各Eu的密文数据输入接口。
S103,获得各个可信执行环境的输出值O1、O2…OU;
在各个Eu内部,会先对所输入的密文数据进行解密,得到明文数据Xu,然后根据预设的算法以及内部的局部模型参数Wu对明文数据Xu进行计算,得到对应的输出值Ou,并通过Eu的一个输出接口将Ou输出至Eu外部。也就是说,数据挖掘方可以分别获得多个可信执行环境的输出值O1、O2…OU。
为了完整介绍系统的实现方式,本实施例先从数据挖掘方的角度,对数据模型训练的整体处理流程进行介绍,由于Eu内部的操作对外是不可见的,因此在本实施例中可以将各个Eu看做黑盒。关于各个Eu内部的具体实现方式,将在后面的实施例中详细说明。
S104,根据给定的训练目标模型,计算偏差值Δ=Y-h[z(O1,O2,…OU)];
偏差值是模型训练迭代过程中需要计算的一个重要数值,假设对于一条数据样本i,其数据形式可以表示为(Xi,yi),其中:
Xi=(xi1,xi2,…),xi1,xi2,…分别为数据样本i的多个特征值;
yi为数据样本i的标签值;
假设训练目标模型的形式为y=h(X),则对于数据样本(Xi,yi),其预测偏差值等于标签值yi与模型预测值h(Xi)的差,即:
Δi=h(Xi)-yi或Δi=yi-h(Xi)
偏差值Δi在模型训练中主要有两方面作用:
一方面作用是用评价模型对训练样本集的拟合效果:对于任一条数据样本i,Δi值越小,说明模型的拟合效果越好;如果有n组数据样本,则n个Δi值在整体上越小,说明模型的拟合效果越好。实际应用中,一般通过计算ΣΔi的方式,来从整体上评价函数对训练样本集的拟合效果。
另一方面作用是参与模型参数迭代更新运算:假设有一组模型参数W=(w1,w2,…),则参数迭代更新的基本形式(实际应用中可能有各种形变)如下:
W←W-αΔX
整个模型训练的过程,是不断迭代更新模型参数,使得模型对训练样本集的拟合效果达到训练要求(例如偏差值足够小)。以下对参数更新公式进行简单说明,关于参数更新公式的具体推导过程,可参见现有技术的介绍。
上述更新公式中,箭头右侧的“W”表示每次更新前的参数值、箭头左侧的“W”表示每次更新后的参数值,可以看出,每次更新的变化量是α、Δ、X三者的乘积。
α表示学习率,也称为步长,该值决定了每次迭代是参数的更新幅度,如果学习率过小,可能导致达到训练要求这一过程的速度缓慢,如果学习率过大,则可能导致overshoot the minimum现象,即无法令模型随更新进程而趋近拟合。关于如何选取适当的学习率,可以参见现有技术的介绍,在本说明书中的实施例中,将α视为预设的数值。
X表示数据样本的特征值,根据所选用更新公式的不同,X也可能代表特征值的不同形式,在本说明书后面的实施例会做进一步的举例说明。
在本说明书实施例方案中,数据挖掘方可以分别获得多个可信执行环境的输出值O1、O2…OU,假设y=h(z)为全局训练目标模型函数,其中z是关于O1、O2…OU的函数,记为z(O1,O2,…OU),即针对U个数据提供方输出值的联合函数,而O1、O2…OU又分别是关于X1、X2…XU的函数,综上可知:y=h(z)也是关于X1、X2…XU的函数。
定义Δ=Y-h[z(O1,O2,…OU)],或Δ=h[z(O1,O2,…OU)]-Y;
其中h[z(O1,O2,…OU)]为z(O1,O2,…OU)的模型预测值;Y为z(O1,O2,…OU)对应的真实值,即根据各数据提供方的数据所确定的全局标签值;二者的差值Δ即为偏差值。
y=h(z)实际形式可以根据实际训练需求选择,例如线性回归模型(linearregression model)、逻辑斯谛回归模型(logistic regression model),等等。本说明书实施例并不需要进行限定。
另外,对于每组O1,O2,…OU,其对应的全局标签值Y可以根据多种方式确定,在后面的实施例中将详细说明。
S105,将Δ分别返回至E1、E2…EU,使得E1、E2…EU分别更新局部模型参数W1、W2…WU。更新后的参数将用于下一次迭代过程中计算输出值Ou。
以上是从数据挖掘方的角度,对数据模型训练的整体处理流程进行介绍,下面具体介绍可信执行环境内部的处理逻辑:
如图2所示,对于任意可信执行环境Eu,其内部实现3种基本功能:
1)数据解密:
对应数据提供方u使用的加密逻辑,在Eu中存储有相应的解密逻辑,例如解密算法信息、密钥信息等等。根据这些信息,在Eu内部可以对输入的密文数据进行解密,得到明文数据特征值Xu=(x1,x2,…)u。
数据解密操作在S102后执行。
2)输出值计算:
在Eu中存储有局部模型参数Wu=(w1,w2,…)u,在Eu内部,可以根据当前的局部模型参数Wu,计算Xu对应的输出值Ou;在整个训练过程中,Wu是不断迭代更新的,首次迭代计算时使用的是初始化的参数值。
Ou的具体计算方式,是根据全局模型y=h(z)=h[z(O1,O2,…OU)]的形式确定的,例如,对于线性回归模型和逻辑斯谛回归模型,其全局模型均可以表示为y=h(z)=h(w1x1+w2x2+…)的形式,则对应的Ou与联合函数z(O1,O2,…OU)可以分别是如下形式:
Ou=w1 ux1 u+w2 ux2 u+…,记为(w1x1+w2x2+…)u
实际应用中,上述Ou的表达式中,还可以包含一常数项参数bu,即:
Ou=bu+w1 ux1 u+w2 ux2 u+…
事实上,如果令bu=w0 u,并且将w0 u理解为特征x0 u对应的参数、且特征x0 u的特征值恒等于1,则Ou的表达式可以表示为:
Ou=w0 ux0 u+w1 ux1 u+w2 ux2 u+…
可见,无论是否存在常数项参数,其整体表达式的形式是统一的,因此Ou=w1 ux1 u+w2 ux2 u+…的表达式应理解为同时涵盖了“有常数项参数”和“无常数项参数”两种情况。实际应用中,对于任意的u而言,其模型参数中既可以包括常数项参数,也可以不包括常数项参数。
当然,上述Ou与联合函数z(O1,O2,…OU)的形式仅用于示意性说明,不应理解为对本说明书实施例方案的限定。
输出值计算操作在上述数据解密操作后执行,计算得到输出值后,继续执行S104。
3)参数更新:
在各个Eu内部,保存有当前的局部模型参数Wu,接收到Eu外部返回的偏差值Δ后,根据形如Wu←Wu-αΔXu的参数更新公式对Wu进行更新(首次更新之前使用初始化的参数值)。当然,实际使用的参数更新公式并不局限于以上形式。例如:
如果每次从数据源读取并向Eu中输入了1条数据i作为训练样本,则参数更新公式为:Wu←Wu-αΔiXi u;
如果每次从数据源读取并向Eu中输入了多条数据作为训练样本,且使用梯度下降法(gradient descent)进行参数更新,则参数更新公式为:即所有训练样本均参与更新运算;
如果每次从数据源读取并向Eu中输入了多条数据作为训练样本,且使用随机梯度下降法(stochastic gradient descent)进行参数更新,则参数更新公式为:Wu←Wu-αΔiXi u,其中i为任意值,即随机选取一条训练样本参与更新运算;
以上更新算法仅用于示意性说明,不应理解为对方案的限定。例如,为了减小过拟合现象,可以在更新公式中增加正则化修正项。此外还有其他可用的更新算法,本说明书不再逐一例举。
参数更新操作,在上述S105后执行,参数更新后,一次迭代更新完成,本次更新后得到的参数将用于下一次迭代过程中计算输出值Ou。
以上介绍了一次完整的迭代过程,通过上述步骤进行反复迭代,直到满足模型训练要求,这里的模型训练要求可以是例如:全局模型的偏差值Δ足够小、相邻两次迭代计算的Δ差值足够小、Eu内部的两次迭代计算的Ou差值足够小、或者达到预设的迭代次数等、当然也可以使用额外的验证集进行验证,本说明书对具体的模型训练要求并不需要进行限定。
可见,应用上述方案,将模型训练过程中涉及隐私数据的操作(例如数据解密操作、局部模型参数更新操作等)都封装在数据提供方的可信执行环境中执行。也就是说:在可信执行环境之外无法获取数据明文,在一些具体实施方式中,可信执行环境之外甚至无法获取到具体的局部模型参数,从而有效地保证了共享数据提供方的数据安全性。
以上从整体介绍了本说明书实施例提供的基于共享数据的模型训练方案,结合实际应用需求,在细节整体设计方面,还有一些可供选择的实施方式,举例如下:
在S101~S102,可以每次仅读取一条数据至可信执行环境,也可以一次性读取多条数据至可信执行环境。即每次迭代过程中,分别从各数据提供方获得N条密文数据,其中N可以是预设的不小于1的数值,通过每次获取内容不同数据,实现训练样本的替换。
另外可以理解的是,训练样本数据的获取,既可以随迭代进程逐次获取,也可以是一次性获取。例如,每次迭代所需的数据数量为N,则既可以是在每次迭代中获取N条数据、并且在可信执行环境对N条数据进行解密;也可以是一次性获取数量大于N的数据(例如全量数据,或者N的倍数等等)后输入可信执行环境、每次在可信执行环境按需对N条数据进行解密;还可以是一次性获取数量大于N的数据(例如全量数据,或者N的倍数等等)后输入可信执行环境、并且在可信执行环境对输入的数据进行一次性解密;等等。
可见,实际应用中每次迭代所必须执行的步骤包括S103-S105、以及可信执行环境内部的“输出值计算”、“参数更新”步骤,而步骤S101、S102、以及可信执行环境内部的“数据解密”步骤,均不必须在每次迭代中执行。总之,样本数据获取的方式可以根据实际情况灵活设置,这些并不影响整体方案的实现。
多个数据提供方之间数据的关联性,可以通过某种通用且具有标识作用的特征实现,例如通过身份证号码,可以保证从多个数据提供方所获得的数据是用于描述同一人的。该标识特征并不必须参与模型训练,而且也可以通过哈希等方式,提高该特征数据安全性。
各个Eu都是基于数据提供方自己提供的信息所创建,Eu在整体设计上应满足基本设计标准,但是在具体实现上并不要求完全一致。例如可以采用不同的数据解密算法、不同的参数更新算法等等。
对于每组O1,O2,…OU,其全局标签值Y可以根据多种方式确定,例如:
1)将某一个数据提供方u提供的标签值Yu确定为Y;
2)根据多个数据提供方u1、u2…提供的标签值Yu1、Yu2…共同确定Y,具体确定方式可以是例如计算加权平均值、“逻辑与”、“逻辑或”等等;
3)通过数据提供方之外的其他渠道确定Y;
举例说明,建立一个对某种疾病患病率的预测模型,已知该疾病与(年龄,职业,性别,身高,体重)5项特征相关,并且:
机构1可以提供特征数据:年龄、职业;
机构2可以提供特征数据:性别、身高、体重;
假设该预测模型为二分类模型,即模型输出值包括“患病”和“未患病”两种(对应的预测结果可以展现为“高风险”和“低风险”)。每个机构既可以在提供特征数据的基础上,进一步提供标签值,即“是否患病”的结果,也可以不提供标签值。而全局标签值的确定,也可以有多种策略,例如:
全局标签值以某一家机构提供的标签值为准,实际情况可能是这家机构更为权威,也可能是另一家机构无法提供标签值。
全局标签值根据两家机构提供的标签值共同确定,例如:如果至少一家机构提供的标签值是“患病”,则将全局标签值确定为“患病”。
另外,某些情况下,数据挖掘方也可能直接从其他渠道获知一批用户“是否患病”的结果,需求是进一步挖掘该结果与其他特征的关系,“其他特征”可以从数据提供方获取,而上述预先获知的结果可以直接作为全局标签值。
训练结束后,各Eu可以将最后一次更新得到的参数输出给数据挖掘方,以便数据挖掘方维护完整的数据模型。也可以将参数分布式保存在各个Eu内部,以进一步提升安全性。
如果采用将各Eu将参数仍然保存在Eu内部的方案,则在模型使用阶段,各个数据提供方各自上传密文数据至Eu中,由Eu对密文数据进行解密并计算输出值,最后由数据挖掘方根据各Eu的输出值,计算全局模型的输出结果。图3示处理了一种基于共享数据建模的数据预测方法,该方法可以包括以下步骤:
S201分别获得U个数据提供方提供的密文数据,U≥2;
S202将各数据提供方的密文数据分别对应输入数据提供方的可信执行环境E1、E2…EU;
S203获得可信执行环境的输出值O1、O2…OU;
S204根据预先训练的预测模型,计算得到预测值Y=h[z(O1,O2,…OU)];
对比图2和图3可以看出,在模型使用阶段,仍然采用类似模型训练阶段系统架构,区别之处在于不需要进行参数迭代更新,即根据输入的数据,一次性输出预测结果值y。
相应地,对于任意可信执行环境Eu,局部模型参数Wu已预先保存,在模型使用阶段,其内部实现2种基本功能:
1)对输入的密文数据进行解密,得到明文数据特征值Xu;
2)根据当前的局部模型参数Wu,计算Xu对应的输出值Ou;
模型使用阶段中,各个步骤的具体实现可参见模型训练阶段中的对应步骤,本实施例不再重复说明。
在上面的实施例中,介绍了2个以上数据提供方共同提供数据联合训练模型的实现方案,可以理解的是,在上述方案的基础上还可以做其他改进,以满足一些特定场景的应用需求,举例如下:
当仅有1个数据提供方向数据挖掘方提供数据、且对数据有保密需求时,可以利用以下方案实现模型训练:
数据挖掘方利用以下步骤进行迭代训练,直到满足模型训练要求:
S101’获得1个数据提供方提供的密文数据;
S102’将数据提供方的密文数据输入该数据提供方的可信执行环境E;
S103’获得可信执行环境E的输出值O;
S104’根据给定的训练目标模型,计算模型预测值与真实值的偏差值Δ;
S105’将偏差值Δ返回至可信执行环境E,使得所述可信执行环境更新模型参数;
本实施例可以适用于某个数据提供方委托数据挖掘方进行数据挖掘、并且不希望向数据挖掘方泄露数据细节的应用场景。
与S101~S105相比,上述S101’~S105’是将U个数据提供方简化为1个数据提供方的情形,其他的实现方式基本一致,本实施例中不再重复说明。其中,在可信执行环境E内部,仍然实现数据解密、输出值计算、参数更新三种功能。
当存在多个数据提供方向数据挖掘方提供数据、且其中有部分数据提供方对数据没有保密需求时,可以利用以下方案实现模型训练:
数据挖掘方利用以下步骤进行迭代训练,直到满足模型训练要求:
S101”分别获得U个数据提供方(其中U≥2)提供的数据,其中,至少1个数据提供方提供的数据形式为密文数据,其他数据提供方提供的数据形式为明文数据;
S102”若数据提供方u提供的数据形式为密文数据,则将密文数据对应输入数据该提供方的可信执行环境Eu,这里的u特指有数据保密需求的数据提供方。
S103”获得各可信执行环境的输出值Ou;
S104”利用各可信执行环境Eu的输出值Ou、以及其他数据提供方提供的明文数据,计算模型预测值与真实值的偏差值Δ;
本步骤与S104的区别在于:对于提供明文数据的提供方,数据挖掘方可以直接获取到对应的明文数据参与全局计算,不需要经过可信执行环境。
S105”将所述偏差值分别返回至各可信执行环境,使得各可信执行环境分别更新局部模型参数;
本步骤与S105的区别在于:对于提供明文数据的提供方,数据挖掘方可以直接负责维护并更新局部模型参数。
与S101~S105相比,上述S101”~S105”是将U个数据提供方分为两类:对于没有数据保密需求的数据提供方,数据挖掘方可以直接获取其提供的明文数据进行模型训练;而对于有数据保密需求的数据提供方,其提供的密文数据仍需经过可信执行环境进行处理。其中,在可信执行环境内部,仍然实现数据解密、输出值计算、参数更新三种功能。
本实施例的方案,适用于全局模型所需的某些数据特征没有保密需求的场景。当然,从数据隐私的角度来看,这里的“没有保密需求”一般并不是绝对意义上的,而是在数据挖掘方内部没有保密需求。例如某数据提供方与数据挖掘方具有深度合作关系、或者数据挖掘方自己也具有一部数据可以用来参与全局模型训练(可以认为数据挖掘方自己就是数据提供方之一),则对于数据挖掘方而言,这些没有保密需求的数据可以不经过可信执行环境而直接使用。
下面结合具体的实例,对本说明书实施例的方案进行说明;
假设整体训练需求是:根据两家银行机构提供的用户资产数据,建立一个“预测用户是否有能力按期偿还高额贷款”的模型。
银行1可以提供的数据特征为x1,x2,x3;
银行2可以提供的数据特征为x4,x5;
整体建模使用逻辑斯谛回归模型,函数形式为:
其中:
z=(w1x1+w2x2+w3x3+w4x4+w5x5) (2)
w1,w2,w3为银行1的局部参数,w4,w5,为银行2的局部参数。
定义:
sum1=w1x1+w2x2+w3x3 (3)
sum2=w4x4+w5x5 (4)
则根据式(1)~(4),可以得到全局模型的偏差值计算函数:
可信执行环境采用Intel的SGX技术实现,其创建的可信执行环境称为enclave,具体来说,这种方式是将合法软件的安全操作封装在一个enclave中,一旦软件和数据位于enclave中,即便操作系统或者和VMM(Hypervisor)也无法影响enclave里面的代码和数据。enclave的安全边界只包含CPU和它自身。
实现模型训练的系统整体架构如图4a所示,下面分别从数据提供方和数据挖掘方的角度,对系统的实现方式进行说明:
1)数据提供方:
每家银行分别对需要提供给数据挖掘方的数据进行加密,数据加密后可存储至数据提供方的硬盘。当然,根据实际应用需求,数据中的某些部分也可以以明文方式提供。
每家银行分别提供enclave定义文件(.edl)及其对应的动态链接库(.dll或者.so),产出的enclave包含如下功能或接口:
1.1)对enclave外部输入的银行预先加密的密文数据进行解密,获得明文数据。每次迭代输入N条密文数据,每条数据对应一名用户,对于任意用户i,银行1的明文数据为xi1,xi2,xi3,银行2的明文数据为xi4,xi5;
1.2)根据当前的局部参数值,分别计算各条数据的输出值并输出至enclave外部。对于任意用户i,银行1的输出值为sum1i,银行2的输出值为sum2i;
1.3)根据enclave外部返回的Δi值,更新局部参数,更新采用梯度下降法,每次迭代所有的N条数据均参与运算,更新公式如下:
W←W-α∑iΔiXi (6)
即:
w1←w1-α∑iΔixi1
w2←w2-α∑iΔixi2
w3←w3-α∑iΔixi3
w4←w4-α∑iΔixi4
w5←w5-α∑iΔixi5
其中
α为预设的学习率,银行1和银行2的采用α可以相同也可以不同。
2)数据挖掘方:
数据挖掘方首先统一全局标签值Y,Y值用于表示:已经有过高额贷款行为的用户,是否能够按期偿还贷款。该信息可以从两家银行获得,也可以从其他的贷款机构获得。
分别加载两家银行提供的enclave信息,创建enclave1和enclave2,基于enclave1和enclave2建立模型训练应用,该应用的运行机制如下:
2.1)每次迭代从硬盘中读取一批密文数据,假设每次读取数量为N。可通过身份证号码对两个银行数据进行关联读取。将银行1的密文数据输入enclave1、银行2的密文数据输入enclave2。
2.2)在enclave1和enclave2内部,分别对密文数据进行解密,根据当前的局部参数(首次迭代时使用初始参数值),利用式(3)和式(4)分别计算得到sum1i和sum2i并输出至外部。2.3)根据enclave1和enclave2输出的sum1i和sum2i,利用式(7)计算Δi,并将Δi分别返回给enclave1和enclave2;
2.4)在enclave1和enclave2内部,分别利用式(6)对参数进行更新。
重复以上迭代,直到满足模型训练条件,得到最终的参数值w1,w2,w3,w4,w5,将这些值代入式(1)和式(2),即得到需要训练的模型。
图4b示出了另一种实现模型训练的系统整体架构,其对应的整体训练需求是:数据挖掘方自己拥有一些用户资产数据、并且需要根据自己拥有的数据和银行1提供的资产数据,建立一个“预测用户是否有能力按期偿还高额贷款”的联合模型,其中:
银行1可以提供的数据特征为x1,x2,x3;对应的局部参数为w1,w2,w3;
数据提供方自己拥有的数据特征为x4,x5;对应的局部参数为w4,w5;
与上一实施例相比,整体的模型训练思路基本一致,区别指出仅在于:仅针对银行1创建enclave,对于特征x4,x5而言,数据提供方自己可以直接读取明文数据参与模型训练计算。
相应于上述方法实施例,本说明书实施例还提供一种基于共享数据的模型训练装置,参见图5所示,该装置可以包括以下用于实现迭代训练的模块:
数据获得模块110,用于分别获得至少1个数据提供方提供的密文数据;
数据输入模块120,用于将各数据提供方的密文数据分别对应输入数据提供方的可信执行环境;
输出值获得模块130,用于获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
偏差值计算模块140,用于根据给定的训练目标模型,计算模型预测值与真实值的偏差值;所述模型预测值根据各可信执行环境的输出值确定,所述真实值为根据各数据提供方的数据所确定的全局标签值;
偏差值返回模块150,用于将所述偏差值分别返回至各可信执行环境,使得各可信执行环境分别更新局部模型参数;
其中,任意可信执行环境内部包括:
解密子模块,用于对输入的密文数据进行解密,得到明文数据特征值;
输出值计算子模块,用于根据当前的局部模型参数,计算明文数据特征值对应的输出值;
参数更新子模块,用于根据返回的偏差值,更新局部模型参数。
在本说明书提供的一种具体实施方式中,当存在多个数据提供方向数据挖掘方提供数据、且其中有部分数据提供方对数据没有保密需求时,则上述装置的模块功能可以配置如下:
数据获得模块110,用于分别获得多个数据提供方提供的数据,其中,至少1个数据提供方提供的数据形式为密文数据,其他数据提供方提供的数据形式为明文数据;
数据输入模块120,用于在数据提供方提供的数据形式为密文数据的情况下,将密文数据对应输入数据该提供方的可信执行环境;
输出值获得模块130,用于获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
偏差值计算模块140,用于利用各可信执行环境的输出值、以及其他数据提供方提供的明文数据,计算模型预测值与真实值的偏差值;所述模型预测值根据各可信执行环境的输出值确定以及明文数据的特征值确定;所述真实值为根据各数据提供方的数据所确定的全局标签值;
偏差值返回模块150,用于将所述偏差值分别返回至各可信执行环境,使得各可信执行环境分别更新局部模型参数;
其中,任意可信执行环境内部包括:
解密子模块,用于对输入的密文数据进行解密,得到明文数据特征值;
输出值计算子模块,用于根据当前的局部模型参数,计算明文数据特征值对应的输出值;
参数更新子模块,用于根据返回的偏差值,更新局部模型参数。
参见图6所示,本说明书实施例还提供一种基于共享数据建模的数据预测装置,该装置可以包括:
数据获得模块210,用于分别获得至少1个数据提供方提供的密文数据;
数据输入模块220,用于将各数据提供方的密文数据分别对应输入数据提供方的可信执行环境;
输出值获得模块230,用于获得各可信执行环境的输出值,所述输出值是根据所述密文数据计算得到;
预测值计算模块240,用于将各可信执行环境的输出值输入预先训练的预测模型,计算得到预测值;
其中,任意可信执行环境Eu内部包括:
解密子模块,用于对输入的密文数据进行解密,得到明文数据特征值;
输出值计算子模块,用于根据当前的局部模型参数,计算明文数据特征值对应的输出值。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时可以实现前述的模型训练方法或数据预测方法。
图7示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书的实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述模型训练方法或数据预测方法:
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。