在可信执行环境中训练GBDT模型的方法、装置及设备
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种在可信执行环境中训练GBDT模型的方法、装置及设备。
背景技术
在互联网技术快速发展的背景下,对互联网中的数据挖掘工作变得越来越重要。通常,在数据挖掘中,通过机器学习基于标定数据进行建模,从而可使用训练好的模型处理待预测的数据。在多种机器学习算法中,GBDT(Gradient boosting decision tree,梯度提升决策树)算法由于其优异的学习性能,得到越来越广泛的应用。GBDT算法是一种用于回归、分类、排序等任务的机器学习技术,其通过结合多个弱学习器(通常为决策树)而获得强预测模型,也称GBDT模型。
然而在训练GBDT模型的过程中,会存在数据泄露的风险。因此,如何保证GBDT模型训练过程中数据的安全性就成为要解决的问题。
发明内容
本说明书一个或多个实施例描述了一种在可信执行环境中训练GBDT模型的方法、装置及设备,可以在保证模型训练过程中数据安全的情况下,大大提升模型训练的效率。
第一方面,提供了一种在可信执行环境中训练GBDT模型的方法,包括:
将所述D维特征中的每项特征依次作为当前特征,基于当前特征对当前决策树中当前层级中的各个节点进行节点分割判断,所述节点分割判断包括:
将当前特征对应的N个加密数组从所述非可信内存区域加载到所述可信内存区域中,在所述可信内存区域中对其进行解密,得到N个原始数组;
将所述N个原始数组中的各个数组依次作为当前数组,将该当前数组中的当前样本序号依次与所述当前层级的各个节点对应的样本集中的样本序号进行比对,以确定对应样本集包含所述当前样本序号的第一节点;
基于所述当前数组中的当前特征值,对所述第一节点对应的样本集进行假定分割,并基于假定分割结果,确定所述第一节点的当前最佳分裂特征和当前最佳特征阈值;
在基于所述D维特征中每项特征进行所述节点分割判断之后,将所述当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值,对所述各个节点各自对应的样本集进行分割,生成下一层级节点,直至到达叶子节点。
第二方面,提供了一种在可信执行环境中训练GBDT模型的装置,包括:
判断单元,用于将所述D维特征中的每项特征依次作为当前特征,基于当前特征对当前决策树中当前层级中的各个节点进行节点分割判断;
所述判断单元具体包括:
解密子单元,用于将当前特征对应的N个加密数组从所述非可信内存区域加载到所述可信内存区域中,在所述可信内存区域中对其进行解密,得到N个原始数组;
比对子单元,用于将所述解密子单元解密得到的所述N个原始数组中的各个数组依次作为当前数组,将该当前数组中的当前样本序号依次与所述当前层级的各个节点对应的样本集中的样本序号进行比对,以确定对应样本集包含所述当前样本序号的第一节点;
确定子单元,用于基于所述当前数组中的当前特征值,对所述第一节点对应的样本集进行假定分割,并基于假定分割结果,确定所述第一节点的当前最佳分裂特征和当前最佳特征阈值;
分割单元,用于在基于所述D维特征中每项特征进行所述判断单元执行的所述节点分割判断之后,将所述当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值,对所述各个节点各自对应的样本集进行分割,生成下一层级节点,直至到达叶子节点。
第三方面,提供了一种训练GBDT模型的设备,包括:
存储器,其中包括可信内存区域和非可信内存区域,所述非可信内存区域中存储有针对N个具有D维特征的样本,按照特征维度整理的D*N个加密数组;其中,D维特征中每项特征对应N个加密数组,每个加密数组包括经过加密的一个样本的样本序号以及该样本对应于该项特征的特征值;
一个或多个处理器;以及
一个或多个程序,其中所述一个或多个程序存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序被所述处理器执行时实现以下步骤:
将所述D维特征中的每项特征依次作为当前特征,基于当前特征对当前决策树中当前层级中的各个节点进行节点分割判断,所述节点分割判断包括:
将当前特征对应的N个加密数组从所述非可信内存区域加载到所述可信内存区域中,在所述可信内存区域中对其进行解密,得到N个原始数组;
将所述N个原始数组中的各个数组依次作为当前数组,将该当前数组中的当前样本序号依次与所述当前层级的各个节点对应的样本集中的样本序号进行比对,以确定对应样本集包含所述当前样本序号的第一节点;
基于所述当前数组中的当前特征值,对所述第一节点对应的样本集进行假定分割,并基于假定分割结果,确定所述第一节点的当前最佳分裂特征和当前最佳特征阈值;
在基于所述D维特征中每项特征进行所述节点分割判断之后,将所述当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值,对所述各个节点各自对应的样本集进行分割,生成下一层级节点,直至到达叶子节点。
本说明书一个或多个实施例提供的在可信执行环境中训练GBDT模型的方法、装置及设备,首先,在可信执行环境中,依次对GBDT模型中的多棵决策树进行训练,这可以保证模型训练过程中数据的安全性。此外,在针对每棵决策树进行训练时,对于该决策树中一层的节点,只从非可信内存区域读取一次D维特征中每项特征对应N个加密数组,并对其进行遍历,就可以确定出该层中各个节点对应的分裂特征和特征阈值,这可以大大减小访问内存的次数,进而可以提升模型训练的效率。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1a为本说明书提供的在可信执行环境中训练GBDT模型的方法实施场景示意图之一;
图1b为本说明书提供的在可信执行环境中训练GBDT模型的方法实施场景示意图之二;
图2为本说明书提供的数据准备阶段的处理过程示意图;
图3为本说明书一个实施例提供的在可信执行环境中训练GBDT模型的方法流程图;
图4为本说明书提供的在可信执行环境中训练GBDT模型的过程示意图;
图5为本说明书一个实施例提供的在可信执行环境中训练GBDT模型的装置示意图;
图6为本说明书一个实施例提供的训练GBDT模型的设备示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
在描述本说明书提供的方案之前,先对本方案的发明构思作以下说明。
为保证模型训练过程中数据的安全性,本申请的申请人将在可信执行环境(Trusted Execution Environment,TEE)中执行GBDT模型的训练过程。TEE是进行安全计算的有力工具,可在一个安全域内进行外包计算或多方安全计算。TEE最主要的两个特性是隔离性和验证:隔离性保证安全域外无法访问安全域内的数据,验证用于用户确认安全域的安全性、完整性而后与安全域协商秘密。
目前比较常用的TEE技术是Intel SGX,Intel SGX是由Intel推出的程序安全执行框架,其具有机密性和完整性。Intel SGX可以被看作是一种服务器,其至少可以包括CPU和内存。SGX提供了围圈(Enclave),即SGX的内存中一个加密的可信执行区域,该区域也可以称为SGX EPC(英文全称:Enclave Page Cache)内存,简称为EPC内存。EPC内存是一段受保护的内存,通过CPU内的内存加密引擎(Memory Encryption Engine,MEE)对其中的数据进行加密。EPC内存中的加密数据只有进入CPU或者Cache后才被会解密成明文。Enclave的代码运行在EPC内存中受保护,不会被篡改,运行中数据在EPC内存中不会被敌手窃取。
在目前Intel SGX中,EPC内存最大设置为128MB,由于MEE要保证EPC内存的机密性和完整性,可用于存储数据和代码的EPC内存最大只有96MB。也就是说最大可用内存只有96MB。
在训练GBDT模型的过程中,针对每棵决策树,会通过对当前节点对应的样本集进行分割,来生成下一层级的节点。然而在对样本集进行分割时,需要遍历每个样本中包含的对应于D维特征中每项特征的特征值。然而,用于训练GBDT模型的样本数量通常在百万级别,且每个样本可能具有几千维特征,从而最终建模数据的大小可达20GB。这个数据量远超最大可用的EPC内存96MB。
若无视最大可用内存大小,直接在SGX内存中申请大内存,由SGX的机制自动换入换出大内存数据,透明地对换出大内存的数据加密,换入大内存的数据解密,则在针对每个节点分割样本集的过程中,由于建模数据的大量换入换出,SGX自动会进行大量加密和解密计算,使模型训练的效率大幅下降。
为了提升模型训练的效率,本申请中,可以通过如下两个阶段来完成GBDT模型的训练:第一阶段,数据准备阶段。在该阶段针对N个具有D维特征的样本,按照特征维度整理为D*N个加密数组。其中,D维特征中每项特征对应N个加密数组,每个加密数组包括经过加密的一个样本的样本序号以及该样本对应于该项特征的特征值,其具体整理过程后续说明。第二阶段,GBDT模型训练阶段。在该阶段,针对每棵决策树,以层为单位,确定每层中各个节点的分裂特征和特征阈值,并基于各个节点的分裂特征和特征阈值,对对应的样本集进行分割,以生成下一层级节点,直至到达叶子节点。
也就是说,在本说明书中,是基于按层生长的策略,对决策树进行训练的。这里的按层生长可以是指在预定的最大层数内对一层的所有结点进行样本集分割,直到不可分割。这里不可分割例如可以为不满足正则系数(如,最少分割样本数,最少分割后样本数等)。
以上就是本说明书提供的发明构思,基于该发明构思就可以得到本方案,以下对本方案进行详细阐述。
图1a和图1b为本说明书提供的在可信执行环境中训练GBDT模型的方法的实施场景示意图。图1a中,客户端可以请求服务器SGX进行隐私保护计算。具体地,客户端可以与服务器SGX的一个Enclave预先协商密钥。之后,客户端可以在可信域内对敏感数据加密,并将加密数据发送至服务器SGX。服务器SGX在Enclave中用与客户端协商的密钥对客户端的加密数据解密,进行计算。这里的计算可以包括但不限于GBDT模型的训练。
图1b中,服务器SGX可实现多方隐私保护计算。具体地,多个客户端可以分别与服务器SGX的一个Enclave预先协商密钥。之后,各客户端可以在各自的可信域内对各自的敏感数据加密,并将加密数据发送至服务器SGX。服务器SGX在Enclave中用与各方协商的密钥对各方加密数据解密,进行计算。这里的计算可以包括但不限于GBDT模型的训练。
以上述各客户端中某一方的计算为GBDT模型的训练为例来说,该客户端的敏感数据可以是指用于训练GBDT模型的N个具有D维特征的样本。在本说明书中,样本的加密可以理解为是对其包含的对应于D维特征的D个特征值进行加密。因此,在对上述样本加密后,每个样本可以包含D个加密特征值。服务器SGX在接收到上述各样本的D个加密特征值之后,可以将其存放在内存中一块连续的地址空间中,这里的地址空间可以称为非可信内存区域。可以理解的是,基于上述地址空间的起始地址以及每个样本的维度(每个维度占用的内存空间大小确定),可以确定出每个样本的位置。在确定出每个样本的位置之后,再结合样本中各特征的排列顺序,可以针对某个特征,从上述地址空间中确定出各样本对应于该特征的加密特征值。
可以理解的是,在完成上述样本的存储之后,就可以执行发明构思中提到的两个阶段的处理,进而完成GBDT模型的训练。
以下对发明构思中的第一阶段的处理进行详细说明。
图2示出了GBDT模型的第一阶段处理过程示意图。图2中,在服务器SGX的非可信内存区域中以数组形式存储了N个具有D维特征的样本,且该N个样本是按序排列的。N个样本中的每个样本包含对应于D维特征的D个加密特征值。之后,将D维特征中的每项特征依次作为当前特征,在非可信内存区域中确定出N个样本各自对应于当前特征的N个加密特征值,并将N个加密特征值从非可信内存区域加载到可信内存区域(如,EPC内存)中。上述N和D均为正整数。
在一个示例中,上述确定的过程具体可以为:确定当前特征对应的特征序号。基于特征序号,在非可信内存区域中确定出N个样本各自对应于当前特征的N个加密特征值。需要说明的是,这里的各样本可以是基于各样本的位置来区分。
在将当前特征的N个加密特征值加载到可信内存区域之后,可以对其进行解密,以得到N个原始特征值。将N个原始特征值中的各个特征值依次作为当前特征值,基于当前特征值以及包含该当前特征值对应的加密特征值的样本的样本序号形成第一数组。可以理解的是,N个原始特征值可以各自形成N个数组。在形成该N个数组之后,可以基于各数组中的原始特征值的大小,对N个数组进行排序。如,可以按照N个原始特征值从小到大的顺序,对各自形成的N个数组进行排序。之后对排序后的N个数组各自进行加密,得到当前特征对应的N个加密数组。之后,可以将当前特征对应的N个加密数组从可信内存区域移出,并保存至非可信内存区域中。
可以理解的是,在针对将D维特征中的每项特征,执行上述的加密特征值加载、加密特征值解密、形成N个数组、N个数组排序以及N个数组各自加密并移出等操作之后,非可信内存区域中可以存储有D维特征中每项特征对应的N个加密数组。
对于上述第一阶段的处理,需要说明的是,其解密和加密所适用的密钥为服务器SGX与请求模型训练的客户端预先协商好的。此外,上述密钥的个数可以为1个或多个,且该1个或多个密钥会同时保存在可信执行环境中的可信内存区域以及客户端的可信域中。
另外,在上述一阶段处理的过程中,若上述特征值(包括加密特征值和原始特征值)的数据类型为float型(对应4个字节,简写为4B),且样本序号的数据类型为int型(对应4B)。那么基于每个原始特征值形成的加密数组会占用可信内存区域8B大小的内存空间。因为每项特征对应N个加密数组,所以针对当前特征形成加密数组的过程中总占用空间:N*8B。
另外,需要说明的是,在针对每项特征形成N个加密数组的过程中,不断重复使用可信内存区域的临时空间(NUM*8B),即只需占用与样本数相关的内存空间,与特征数无关,在非可信内存区域中存储的排序后的加密数组与样本数和特征数相关。
在执行完成上述第一阶段的处理之后,就可以对GBDT模型进行训练了。以下对GBDT模型的训练过程进行说明。
图3为本说明书一个实施例提供的在可信执行环境中训练GBDT模型的方法流程图。所述方法的执行主体可以为具有处理能力的设备:服务器或者系统或者装置,如,可以为图1a或者图1b中的服务器SGX。如图3所示,所述方法具体可以包括:
步骤302,将D维特征中的每项特征依次作为当前特征,基于当前特征对当前决策树中当前层级中的各个节点进行节点分割判断。
上述当前决策树可以为GBDT模型中的多棵决策树中任一决策树。此外,当前层级可以为当前决策树的任一层级。
上述步骤302中的节点分割判断具体可以包括:
步骤3022,将当前特征对应的N个加密数组从非可信内存区域加载到可信内存区域中,在可信内存区域中对其进行解密,得到N个原始数组。
这里对每个加密数组进行解密时所使用的密钥可以为上述提到的、预先保存在可信内存区域中的一个或多个密钥。
可以理解的是,上述N个原始数组中的每个原始数组可以包括解密后的一个特征值(即上述原始特征值)和一个样本序号。
步骤3024,将N个原始数组中的各个数组依次作为当前数组,将该当前数组中的当前样本序号依次与当前层级的各个节点对应的样本集中的样本序号进行比对,以确定对应样本集包含当前样本序号的第一节点。
本说明书所述的样本集可以由若干样本序号组成。
需要说明的是,若将当前特征的每个特征值看作一个候选划分点的话,本说明书中针对每个特征,考察包含n-1个元素的候选划分点集合Ta,其具体可表示如下:
Ta={ai|1≤i≤n-1}
其中,Ta为当前特征,ai为Ta的第i个特征值,也可以称为第i个候选划分点,n为样本个数。
注意,这里可能会存在当前层级的各个节点对应的样本集均不包含当前样本序号的情况。若出现该情况,则略过当前数组。这里不作特殊处理的原因在于:如果当前层级的各个节点对应的样本集均不包含当前样本序号,则说明当前样本序号已经被包含在之前层级的某个叶子节点对应的样本集中,也即当前样本序号已分割完成。
步骤3026,基于当前数组中的当前特征值,对第一节点对应的样本集进行假定分割,并基于假定分割结果,确定第一节点的当前最佳分裂特征和当前最佳特征阈值。
本说明书中,针对当前数组,在判断该当前数组中的当前样本序号属于某个节点对应的样本集时,才基于该当前数组中的当前特征值对该节点对应的样本集进行假定分割。由此,可以避免大量无效的分割操作。因为在当前数组中的样本序号不属于某个节点对应的样本集时,通常该节点对应的样本的特征值均比当前数组中的当前特征值大或小,所以无法实现样本集分割。也就是说,通过执行上述样本序号比对的操作,可以大大提升模型训练的效率。
回到步骤3026中,上述假定分割结果可以包括两个子样本集。步骤3026具体可以包括:基于第一节点对应的样本集以及两个子样本集,计算方差减少值。若计算得到的方差减少值大于第一节点的当前方差减少值,则将当前方差减少值更新为计算得到的方差减少值,以及将当前特征作为第一节点的当前最佳分裂特征,将当前数组中的当前特征值作为第一节点的当前最佳特征阈值。
在一个示例中,上述基于第一节点对应的样本集以及两个子样本集,计算方差减少值,包括:基于第一节点对应的样本集中的样本序号对应的样本的残差,计算第一方差。分别基于两个子样本集中的样本序号对应的样本的残差,计算与两个子样本集各自对应的两个第二方差。对两个第二方差求和,以得到方差和。将第一方差与方差和之间的差值作为方差减少值。
上述就算公式可具体表示为如下公式:
Dre=D-(DL+DR) (公式1)
其中,Dre为方差减少值,D为第一方差,DL为一个第二方差,DR为另一个第二方差。这里的第一方差或者第二方差的计算公式可以如下:
其中,NUM为总样本数(如,图2中的N),Y为样本集或者子样本集中某样本的残差,
为样本集或者子样本集中各样本的残差的均值。这里样本的残差的计算方法后续说明。
需要说明的是,在上述例子中,Dre也可以称为不纯度减少值(其通常也可以看作是样本集基于当前特征及其某个候选划分点ai二分后的信息增益),D可以称为第一节点的不纯度,DL可以称为左子节点的不纯度,DR可以称为右子节点的不纯度。
另外,上述步骤3026也可以看作是寻找信息增益最大的特征及其划分点的过程。这里,寻找到的划分点也可以称为最优划分点。
步骤304,在基于D维特征中每项特征进行节点分割判断之后,将当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值,对各个节点各自对应的样本集进行分割,生成下一层级节点,直至到达叶子节点。
需要说明的是,在执行上述节点分割判断的过程中,上述当前特征以及当前数组是不断更新的。随着当前特征以及当前数组的更新,当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值也是不断更新的,直至在基于D维特征中每项特征进行节点分割判断之后,当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值才更新结束。因此,可以在基于D维特征中每项特征进行节点分割判断之后,将当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值。
可以理解的是,在确定出当前层级的各个节点对应的分裂特征和特征阈值之后,就可以对各个节点各自对应的样本集进行分割。其具体分割过程可以如下:
将当前层级的各个节点依次作为当前节点,将当前节点对应的分裂特征作为当前选中特征。将当前选中特征对应的N个加密数组从非可信内存区域加载到可信内存区域中,在可信内存区域中对其进行解密,得到N个原始数组。对于当前节点对应的样本集中的每个样本序号,从N个原始数组中查找包含该样本序号的目标数组,并通过将目标数组中的特征值与当前节点对应的特征阈值比较,而将该样本序号分割到当前节点相应的子节点中。
在对当前层级的各个节点各自对应的样本集进行分割之后,就可以生成下一层节点。之后,可以将下一层节点作为当前层级节点执行上述步骤302-步骤304的处理;直至到达叶子节点,至此就完成了GBDT模型中一棵决策树的训练。在本说明书中,可以将一棵决策树的训练称为GBDT模型的训练。
在到达叶子节点之后,对于当前决策树的每个叶子节点,可以基于该叶子节点对应的样本集中的各样本序号对应的样本的标签值以及残差,确定该叶子节点的目标值。
这里的样本的标签值以及残差是预先存储在可信内存区域中的。以下对该两者的获取过程进行说明。
需要说明的是,在本说明书中,非可信内存区域中还存储有N个样本各自的加密标签值。在对当前决策树进行训练之前,也即在执行上述步骤302之前,可以将N个样本各自的加密标签值加载到可信内存区域中。在可信内存区域中,对N个加密标签值进行解密,得到解密后的N个标签值。将该N个标签值保存在可信内存区域中。这里,以标签值的数据类型为float类型为例来说,该N个标签值共占用可信内存区域(如,EPC内存)N*4B大小的内存空间。
在得到上述解密后的N个标签值之后,可以基于如下公式计算N个样本各自的残差。
其中,
为样本i的残差,y
i为样本i的标签值,F(x
i)为样本i在已完成训练的各棵决策树中被分割到的叶子节点的目标值的累加和。
需要说明的是,对于N个样本各自的残差也可以保存在可信内存区域中。这里,以残差的数据类型为float类型为例来说,该N个残差共占用可信内存区域(如,EPC内存)N*4B大小的内存空间。
在可信内存区域中存储N个样本各自的标签值以及残差之后,针对当前决策树的每个叶子节点,可以基于如下公式计算该叶子节点的目标值。
其中,γ
jm为决策树m中叶子节点j的目标值,
为样本i的残差,y
i为样本i的标签值。
以下对GBDT模型训练过程中,可信内存区域的占用情况进行分析。首先,需要说明的是,各棵决策树在训练过程中重复使用相同的可信内存空间。其中,在训练一棵决策树的过程中,N个样本各自的标签值和残差,共占用N*8B大小的内存空间。此外,在进行节点分割判断的过程中,会将当前特征的N个加密数组加载到可信内存区域中,因此还会占用N*8B大小的内存空间。注意,这里的N*8B大小的内存空间是重复使用的。
综上,在GBDT模型训练过程中,会占用N*(8+8)B=N*16B大小的内存空间。也就是说,无论是上述一阶段的处理,还是GBDT模型训练,所占用的可信内存区域只与样本数相关,与样本的特征维度无关。即便样本的数量为百万级,N*16B的大小也不会超过96MB,从而本说明书提供的方案可在可信环境中有效执行。
需要说明的是,虽然在样本集分割的过程中,也会加载当前特征的N个加密数组(对应N*8B大小的内存空间),但是由于此时节点分割判断已经结束,样本集分割的过程中可以重复使用节点分割判断的过程中所占用的内存空间。
总之,本方案中,在阶段一数据准备和阶段二模型训练中各特征都循环占用可信内存区域的内存空间,总占用空间只与样本数相关,与特征数无关。对频繁使用的各样本的标签值和残差,始终保持在可信内存区域中。
本说明书实施例提供的GBDT模型的训练方法,首先可以在可信执行环境中有效执行。此外,在该方法中,针对当前数组,在判断该当前数组中的当前样本序号属于某个节点对应的样本集时,才基于该当前数组中的当前特征值对该节点对应的样本集进行假定分割。由此,可以避免大量无效的分割操作。最后,该方法只对D维特征中每项特征对应N个加密数组解密一遍且遍历一遍,即可确定当前层级的各个节点的分裂特征和特征阈值,由此,大幅减少了内存访问次数,进而可以大大提升模型训练的效率。
综合以上,本说明书提供的方案可以大幅减少解密计算量,对于一个层级的节点,从指数级解密降为固定常数次。如:在对第5层节点进行节点分割的判断时,从对所有特征排序后的加密数组解密2^4遍下降为1遍,层数越深,解密计算量减少越多。本发明对一层点的划分只需要明文遍历一遍所有特征排序后的数组,大幅减少了内存访问次数。
图4为本说明书提供的在可信执行环境中训练GBDT模型的过程示意图。图4中,首先,可以将N个样本各自的加密标签值加载到可信内存区域中。在可信内存区域中,对N个加密标签值进行解密,得到解密后的N个标签值Y。将该N个标签值Y保存在可信内存区域中。这里,以标签值Y的数据类型为float类型为例来说,该N个标签值Y共占用可信内存区域(如,EPC内存)N*4B大小的内存空间。
在得到上述解密后的N个标签值Y之后,可以基于公式3计算N个样本各自的残差
并保存。这里,以残差的数据类型为float类型为例来说,该N个残差
共占用可信内存区域(如,EPC内存)N*4B大小的内存空间。
之后,将D维特征中的每项特征依次作为当前特征,基于当前特征对当前决策树中当前层级中的各个节点进行节点分割判断。具体地的节点分割判断过程参见步骤3022-步骤3026,在此不复赘述。在基于D维特征中每项特征进行节点分割判断之后,将当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值,对各个节点各自对应的样本集进行分割,生成下一层级节点,直至到达叶子节点。
与上述在可信执行环境中训练GBDT模型的方法对应地,本说明书一个实施例还提供的一种在可信执行环境中训练GBDT模型的装置。该装置设置于服务器中,这里的可信执行环境中包括可信内存区域,上述服务器还包括非可信内存区域。非可信内存区域中存储有针对N个具有D维特征的样本,按照特征维度整理的D*N个加密数组。其中,D维特征中每项特征对应N个加密数组,每个加密数组包括经过加密的一个样本的样本序号以及该样本对应于该项特征的特征值。如图5所示,该装置可以包括:
判断单元502,用于将D维特征中的每项特征依次作为当前特征,基于当前特征对当前决策树中当前层级中的各个节点进行节点分割判断。
判断单元502具体可以包括:
解密子单元5022,用于将当前特征对应的N个加密数组从非可信内存区域加载到可信内存区域中,在可信内存区域中对其进行解密,得到N个原始数组。
比对子单元5024,用于将解密子单元5022解密得到的N个原始数组中的各个数组依次作为当前数组,将该当前数组中的当前样本序号依次与当前层级的各个节点对应的样本集中的样本序号进行比对,以确定对应样本集包含当前样本序号的第一节点。
确定子单元5026,用于基于当前数组中的当前特征值,对第一节点对应的样本集进行假定分割,并基于假定分割结果,确定第一节点的当前最佳分裂特征和当前最佳特征阈值。
分割单元504,用于在基于D维特征中每项特征进行判断单元502执行的节点分割判断之后,将当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值,对各个节点各自对应的样本集进行分割,生成下一层级节点,直至到达叶子节点。
可选地,该装置还可以包括:形成单元(图中未示出)、加密单元(图中未示出)以及移出单元(图中未示出)。
解密子单元5022,还用于将D维特征中的每项特征依次作为当前特征,将N个样本各自对应于当前特征的N个加密特征值从非可信内存区域加载到可信内存区域中,在可信内存区域中对其进行解密,以得到N个原始特征值。
形成单元,用于将解密子单元5022解密得到的N个原始特征值中的各个特征值依次作为当前特征值,基于当前特征值以及包含该当前特征值对应的加密特征值的样本的样本序号形成第一数组。
加密单元,用于对形成单元针对N个原始特征值各自形成的N个数组各自进行加密,得到当前特征对应的N个加密数组。
移出单元,用于将当前特征对应的N个加密数组从可信内存区域移出,并保存至非可信内存区域中。
可选地,该装置还可以包括:
排序单元(图中未示出),用于按照N个原始特征值从小到大的顺序,对各自形成的N个数组进行排序。
加密单元具体可以用于:对排序后的N个数组进行加密。
可选地,上述D维特征按序排列。
解密子单元5022具体可以用于:
确定当前特征对应的特征序号。
基于特征序号,将N个样本各自对应于当前特征的N个加密特征值从非可信内存区域加载到可信内存区域中。
可选地,假定分割结果包括两个子样本集。确定子单元5026具体可以用于:
基于第一节点对应的样本集以及两个子样本集,计算方差减少值。
若方差减少值大于第一节点的当前方差减少值,则将当前方差减少值更新为计算得到的方差减少值,以及将当前特征作为第一节点的当前最佳分裂特征,将当前数组中的当前特征值作为第一节点的当前最佳特征阈值。
确定子单元5026还具体可以用于:
基于第一节点对应的样本集中的样本序号对应的样本的残差,计算第一方差。
分别基于两个子样本集中的样本序号对应的样本的残差,计算与两个子样本集各自对应的两个第二方差。
对两个第二方差求和,以得到方差和。
将第一方差与所述方差和之间的差值作为方差减少值。
本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
本说明书一个实施例提供的在可信执行环境中训练GBDT模型的装置,可以大大减小访问内存的次数,进而可以提升模型训练的效率。
本说明书一个实施例提供的在可信执行环境中训练GBDT模型的装置可以为图1a或者图1b中服务器SGX中的一个模块或者单元。
与上述在可信执行环境中训练GBDT模型的方法对应地,本说明书实施例还提供了一种训练GBDT模型的设备,如图6所示,该设备可以包括:存储器602、一个或多个处理器604以及一个或多个程序。其中,存储器602包括可信内存区域和非可信内存区域,非可信内存区域中存储有针对N个具有D维特征的样本,按照特征维度整理的D*N个加密数组。其中,D维特征中每项特征对应N个加密数组,每个加密数组包括经过加密的一个样本的样本序号以及该样本对应于该项特征的特征值。上述一个或多个程序存储在存储器602中,并且被配置成由一个或多个处理器604执行,该程序被处理器604执行时实现以下步骤:
将D维特征中的每项特征依次作为当前特征,基于当前特征对当前决策树中当前层级中的各个节点进行节点分割判断,这里的节点分割判断包括:
将当前特征对应的N个加密数组从非可信内存区域加载到可信内存区域中,在可信内存区域中对其进行解密,得到N个原始数组。
将N个原始数组中的各个数组依次作为当前数组,将该当前数组中的当前样本序号依次与所述当前层级的各个节点对应的样本集中的样本序号进行比对,以确定对应样本集包含当前样本序号的第一节点。
基于当前数组中的当前特征值,对第一节点对应的样本集进行假定分割,并基于假定分割结果,确定第一节点的当前最佳分裂特征和当前最佳特征阈值。
在基于D维特征中每项特征进行节点分割判断之后,将当前层级的各个节点对应的当前最佳分裂特征和当前最佳特征阈值作为其分裂特征和特征阈值,对各个节点各自对应的样本集进行分割,生成下一层级节点,直至到达叶子节点。
本说明书一个实施例提供的训练GBDT模型的设备,可以大大减小访问内存的次数,进而可以提升模型训练的效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
结合本说明书公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于服务器中。当然,处理器和存储介质也可以作为分立组件存在于服务器中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。