乱序处理方法、模型训练方法、装置和计算设备与流程

文档序号:25858917发布日期:2021-07-13 16:13阅读:113来源:国知局
乱序处理方法、模型训练方法、装置和计算设备与流程

本说明书实施例涉及计算机技术领域,特别涉及一种乱序处理方法、模型训练方法、装置和计算设备。



背景技术:

为了防止模型学习到训练数据的顺序等影响泛化能力的特征,可以先对训练数据进行乱序处理,再利用乱序后的训练数据训练模型。例如,在联合建模的场景中,训练数据通常分散存在于不同的数据方。各个数据方可以先对自身持有的数据进行乱序处理;再根据多方安全计算技术,利用乱序后的数据对机器学习模型进行联合训练,从而实现隐私保护。

在一些情况下,训练数据的规模是非常大的,例如训练数据的数量可以为100万个。然而计算设备的资源(例如内存)是有限的,如何在资源有限的情况下,对大规模的训练数据进行乱序,是亟需解决的技术问题。



技术实现要素:

本说明书实施例提供一种乱序处理方法、模型训练方法、装置和计算设备,可以在资源有限的情况下,使用对大规模的训练数据进行乱序。

本说明书实施例的第一方面,提供了一种乱序处理方法,包括:

将数据集拆分为多个第一子数据集;

对第一子数据集中的记录进行乱序处理;

将乱序后的第一子数据集中的记录分配到多个第二子数据集中,每个第二子数据集包括乱序后的各第一子数据集中记录;

对第二子数据集中的记录进行乱序处理;

将乱序后的第二子数据集合成为乱序后的数据集。

本说明书实施例的第二方面,提供了一种模型训练方法,包括:

将乱序后的数据集拆分为多个子数据集,所述乱序后的数据集根据第一方面所述方法获得,所述多个子数据集被存储在外存储器中;

在需要训练模型时,从所述外存储器中读取子数据集,根据读取的子数据集训练模型。

本说明书实施例的第三方面,提供了一种乱序处理装置,包括:

拆分单元,用于将数据集拆分为多个第一子数据集;

第一乱序单元,用于对第一子数据集中的记录进行乱序处理;

分配单元,用于将乱序后的第一子数据集中的记录分配到多个第二子数据集中,每个第二子数据集包括乱序后的各第一子数据集中记录;

第二乱序单元,用于对第二子数据集中的记录进行乱序处理;

合成单元,用于将乱序后的第二子数据集合成为乱序后的数据集。

本说明书实施例的第四方面,提供了一种模型训练装置,包括:

拆分单元,用于将乱序后的数据集拆分为多个子数据集,所述乱序后的数据集根据第一方面所述方法获得,所述多个子数据集被存储在外存储器中;

训练单元,用于在需要训练模型时,从所述外存储器中读取子数据集,根据读取的子数据集训练模型。

本说明书实施例的第四方面,提供了一种计算设备,包括:

至少一个处理器;

存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行第一方面或者第二方面所述方法的指令。

本说明书实施例提供的技术方案,可以在资源有限的情况下,对大规模的数据集进行乱序处理。另外还可以在资源有限的情况下,使用乱序后的大规模的数据集训练模型。

附图说明

为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本说明书实施例中模型训练过程的示意图;

图2为本说明书实施例中乱序处理方法的流程示意图;

图3为本说明书实施例中乱序处理过程的示意图;

图4为本说明书实施例中模型训练方法的流程示意图;

图5为本说明书实施例中一个场景示例的示意图;

图6为本说明书实施例中另一个场景示例的示意图;

图7为本说明书实施例中乱序处理装置的结构示意图;

图8为本说明书实施例中模型训练装置的结构示意图;

图9为本说明书实施例中计算设备的结构示意图。

具体实施方式

下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。

以下介绍本说明书实施例涉及的几个技术术语。

多方安全计算(securemuti-partycomputation,mpc)是一种保护数据隐私安全的算法。多方安全计算能让多个数据方在不泄漏自身数据的前提下进行协作计算。

秘密分享(secretsharing,ss)是一种保护数据隐私安全的算法。多个数据方可以在不泄漏自身数据的前提下,使用秘密分享算法进行协作计算,共享秘密信息。各个数据方可以分别获得秘密信息的一个分片。例如,数据方p1持有业务数据x1,数据方p2持有业务数据x2。采用秘密分享算法,数据方p1和数据方p2可以进行协作计算,共享秘密信息y。数据方p1可以获得秘密信息y的分片y1,数据方p2可以获得秘密信息y的分片y2。其中,y=y1+y2=x1x2。

激励函数(activationfunction),又称为激活函数,可以用于构建数学模型。激励函数定义了在给定输入下的输出。激励函数为非线性函数。通过激励函数可以在数学模型中加入非线性因素,提高数学模型的表达能力。所述激励函数可以包括sigmoid函数、tanh函数和relu函数等。损失函数(lossfunction)可以用于衡量数学模型的预测值与真实值之间不一致的程度。损失函数的值越小,表示数学模型的鲁棒性越好。所述损失函数包括但不限于对数损失函数(logarithmiclossfunction)、平方损失函数(squareloss)等。其中,所述数学模型可以包括逻辑回归模型和神经网络模型等。

海森矩阵(hessianmatrix),又称为黑塞矩阵、海瑟矩阵或海塞矩阵等,是损失函数的二阶偏导数构成的方阵,用于表示损失函数的局部曲率。

模型参数优化方法可以包括梯度下降法(gradientdescent)和牛顿法(newtonmethod)。所述梯度下降法可以包括原始梯度下降法以及基于原始梯度下降法的各种变形方法(诸如批量梯度下降法、正则化梯度下降法等等)。所述牛顿法可以包括原始牛顿法以及基于原始牛顿法的各种变形方法(诸如阻尼牛顿法、正则化牛顿法等等)。

请参阅图1,为了防止模型学习到训练数据的顺序等影响泛化能力的特征,可以先对训练数据进行乱序处理,再利用乱序后的训练数据训练模型。所述乱序可以是指对训练数据进行重新排列,重新排列后的顺序与原先的顺序不相关。

计算设备的资源可以包括cpu资源、内存资源、网络带宽等。计算设备的资源通常是有限的。在相关技术中,训练数据的规模较小,因而可以基于有限的资源,一次性地对训练数据进行乱序处理,再利用乱序后的训练数据训练模型。例如,可以将训练数据一次性地读入到内存中进行乱序处理,再利用乱序后的训练数据训练模型。然而在一些情况下,需要使用大规模的训练数据训练模型,例如需要使用100万个训练数据训练模型。这样便无法一次性地对训练数据进行乱序处理,再利用乱序后的训练数据训练模型。为此,本说明书实施例提供了乱序处理方法和模型训练方法,利用所述乱序处理方法可以对大规模的训练数据进行乱序处理,利用所述模型训练方法可以使用乱序后的大规模的训练数据训练模型。

本说明书实施例涉及的应用场景可以包括多方联合建模的场景和单方建模的场景。

以下介绍多方联合建模的场景。

在多方联合建模的场景中,大规模的训练数据分散位于联合建模的多方。所述多方之间出于隐私保护的考虑,并不是完全的互相信任。具体地,在两方联合建模的场景中,大规模的训练数据可以分散位于联合建模的第一方和第二方。所述第一方和所述第二方可以为单个服务器、由多个服务器构成的服务器集群、或者部署在云端的服务器。所述第一方可以持有标签集,所述标签集可以包括多条记录,每条记录可以包括训练数据的标签和训练数据的标识。所述第二方可以持有特征集,所述特征集可以包括多条记录,每条记录可以包括训练数据的特征和训练数据的标识。其中,训练数据的标签和训练数据的特征共同构成了训练数据,训练数据的标识用于标识训练数据。例如,所述第一方可以为征信机构,所述征信机构可以持有标签集。在所述标签集中,训练数据的标签可以为“信用良好”、“信用一般”、或者“信用差”等,训练数据的标识可以为手机号、或者身份证号等。所述第二方可以为大数据公司,所述大数据公司可以持有特征集。在所述特征集中,训练数据的特征可以包括借贷金额、缴纳社保的基数、是否已婚等,训练数据的标识可以为手机号、或者身份证号等。

所述标签集和所述特征集可以是数据对齐的。使得在标签集和特征集中,相同位置处的记录包含相同的训练数据标识。所述第一方可以利用本说明书实施例的乱序处理方法,对标签集中的记录进行乱序处理。所述第二方也可以利用本说明书实施例的乱序处理方法,对特征集中的记录进行乱序处理。由于所述第一方和所述第二方均使用本说明书实施例的乱序处理方法进行乱序处理,因而乱序后的标签集和乱序后的特征集也是数据对齐的。使得在乱序后的标签集和乱序后的特征集中,相同位置处的记录包含了相同的训练数据标识。

所述第一方可以根据乱序后的标签集,所述第二方可以根据乱序后的特征集,基于多方安全计算联合训练模型,例如可以采用梯度下降法或者牛顿法联合训练模型。

以下介绍单方建模的场景。

在单方建模的场景中,大规模的训练数据位于建模方。所述建模方可以为单个服务器、由多个服务器构成的服务器集群、或者部署在云端的服务器。所述建模方可以持有训练集。所述训练集可以包括多条记录,每条记录可以包括训练数据的标签、以及训练数据的特征等。利用本说明书实施例的乱序处理方法,所述建模方可以对所述训练集中的记录进行乱序处理;可以根据乱序后的训练集训练模型,例如可以采用梯度下降法或者牛顿法训练模型。

本说明书实施例提供一种乱序处理方法。所述乱序处理方法可以应用于服务器,所述服务器可以为单个服务器、由多个服务器构成的服务器集群、或者部署在云端的服务器。所述乱序处理方法可以应用于多方联合建模的场景或者单方建模的场景。在多方联合建模的场景中,所述乱序处理方法可以应用于第一方或者第二方。在单方建模的场景中,所述乱序处理方法可以应用于建模方。请参阅图2和图3,所述乱序处理方法可以包括以下步骤。

步骤s11:将数据集拆分为多个第一子数据集。

在一些实施例中,所述数据集可以被存储在外存储器中。所述外存储器可以指除计算机内存及cpu缓存以外的储存器,例如硬盘、软盘、光盘、或者u盘等。例如,所述数据集可以以文件的形式存储在外存储器中,所述文件可以为表格文件、文本文件、二进制文件等。

所述数据集中可以包括多条记录。在实际中,所述数据集可以为大规模的数据集,所述数据集中记录的数量是非常多的。例如,所述数据集可以包括100万条记录。每条记录可以为所述数据集中的一行数据。具体地,每条记录可以包括一个字段的数据。例如,每条记录可以包括一个数字或者一个字符串。当然,每条记录也可以包括多个字段的数据。

在一些场景(例如单方建模的场景)中,所述数据集可以为训练集。在另一些场景(例如多方联合建模的场景)中,所述数据集可以为标签集或者特征集。关于所述训练集、所述标签集、以及所述特征集可以参见前面的描述,这里不再详述。

所述第一子数据集可以为较小规模的数据集。在实际中,第一子数据集容纳的记录数与服务器的资源相匹配,以使所述服务器的资源能够满足对第一子数据集中的记录进行乱序处理的需求。其中,所述记录数可以理解为记录的数量。例如,数据集的记录数可以理解为数据集中的记录的数量,第一子数据集的记录数可以理解为第一子数据集中的记录的数量。

在一些实施例中,所述服务器可以确定第一子数据集能够容纳的记录数;可以根据第一子数据集能够容纳的记录数,将所述数据集拆分为多个第一子数据集。拆分得到的各第一子数据集可以被存储在外存储器中。例如,各第一子数据集可以以文件的形式存储在外存储器中,所述文件可以为表格文件、文本文件、或者二进制文件等。各第一子数据集的记录数之和可以等于数据集的记录数。各第一子数据集的记录数可以相同或不同。

第一子数据集能够容纳的记录数可以为经验值。具体地,在服务器的资源充足时,第一子数据集能够容纳的记录数可以设置的大一些。在服务器的资源不充足时,第一子数据集能够容纳的记录数可以设置的小一些。例如,在服务器的内存容量大时,第一子数据集能够容纳的记录数可以设置的大一些;在服务器的内存容量小时,第一子数据集能够容纳的记录数可以设置的小一些;以使得第一子数据集能够被一次性地被读入内存中。

或者,所述服务器可以根据自身的资源,确定第一子数据集能够容纳的记录数。例如,所述服务器可以根据自身的内存容量,计算第一子数据集能够容纳的记录数。具体地,例如,所述服务器可以根据公式m=c/r计算第一子数据集能够容纳的记录数。m表示第一子数据集能够容纳的记录数,c表示服务器的内容容量,r表示数据集中一条记录的大小。

所述服务器可以从所述数据集中选取m条记录,可以将选取得的记录汇集成一个第一子数据集存储在外存储器中。所述m可以为第一子数据集能够容纳的记录数。所述服务器可以迭代执行以上的步骤,直至所述数据集中的记录被选取完毕。其中,所述服务器可以采用随机的方式从数据集中选取记录。或者,所述服务器还可以依据记录的排序顺序从数据集中选取记录。例如,所述数据集可以包括n条记录。所述服务器可以从数据集中选取第1~m条记录,可以将选取的第1~m条记录汇集成第1个第一子数据集;可以从数据集中选取第m+1~2m条记录,可以将选取的第m+1~2m条记录汇集成第2个第一子数据集;可以从数据集中选取第2m+1~3m条记录,可以将选取的第2m+1~3m条记录汇集成第3个第一子数据集。这样通过迭代以上的步骤,所述服务器便可以将数据集拆分为多个第一子数据集。

或者,所述服务器还可以根据第一子数据集能够容纳的记录数和所述数据集的记录数,确定第一子数据集的数量;可以将所述数据集拆分为所述数量个第一子数据集。例如,所述服务器可以根据公式n=n/m确定第一子数据集的数量。n表示第一子数据集的数量,n表示数据集的记录数,m表示第一子数据集能够容纳的记录数。可以理解的是,在实际中第一子数据集的数量也可以不等于所述n,例如还可以大于所述n。所述服务器可以将所述数据集切分为所述数量个第一子数据集。当然,所述服务器还可以采用其它的方式将所述数据集拆分为所述数量个第一子数据集,这里不做具体限定。

步骤s13:对第一子数据集中的记录进行乱序处理。

在一些实施例中,由于所述第一子数据集为较小规模的数据集,因而所述服务器可以对拆分得到的各第一子数据集中的记录进行乱序处理,以对各第一子数据集中的记录进行重新排列。需要说明的是,由于是以第一子数据集为单位进行乱序处理的,使得通过步骤s13,可以实现对所述数据集中的记录进行局部乱序处理。

在一些实施例中,对于拆分得到的各第一子数据集,所述服务器可以逐个地进行乱序处理。具体地,拆分得到的各第一子数据集可以被存储在外存储器中。所述服务器可以从所述外存储器中读取一个第一子数据集,可以对读取的第一子数据集中的记录进行乱序处理,可以将乱序后的第一子数据集存储在外存储器中。所述服务器可以迭代执行以上的步骤,直至拆分得到的各第一子数据集被乱序处理完毕。

在一些实施例中,拆分得到的每个第一子数据集可以对应有随机种子。所述服务器可以根据随机种子,对拆分得到的第一子数据集进行乱序处理。具体地,针对每个第一子数据集,所述服务器可以根据该第一子数据集对应的随机种子,为该第一子数据集中的记录生成随机数;可以根据记录对应的随机数,对该第一子数据集中的记录进行排序。

每个第一子数据集对应的随机种子可以是根据初始随机种子生成的。具体地,所述服务器可以根据所述初始随机种子,利用一定的规则,为拆分得到的各第一子数据集生成随机种子。例如,所述初始随机种子可以为seed,拆分得到的第一子数据集的数量可以为n。那么,所述服务器可以计算seed+i作为第i个第一子数据集对应的随机种子,1≤i≤n。

当然,还可以预先获得随机种子集,所述随机种子集可以包括多个随机种子。所述服务器可以从所述随机种子集中为拆分得到的各第一子数据集选取随机种子。例如,拆分得到的第一子数据集的数量可以为n。那么,所述服务器可以从所述随机种子集中选取第i个随机种子作为第i个第一子数据集对应的随机种子,1≤i≤n。

需要说明的是,在所述乱序处理方法应用于多方联合建模的场景中时,为了使乱序后的标签集和乱序后的特征集保持数据对齐,所述初始随机种子或者所述随机种子集可以由第一方和第二方通过协商的方式得到,这样所述第一方和所述第二方均可以持有所述初始随机种子或者所述随机种子集。另外,随机种子可以为一种用于生成随机数的随机数。在实际中,基于随机种子,利用随机数生成算法可以生成一个或多个随机数。所述随机数生成算法可以包括平方取中法(midsquaremethod)、线性同余法(linearcongruentialmethod)等等。另外,基于相同的随机种子,由不同的实施主体执行相同的随机数生成算法,得到的随机数是相同的。例如,基于相同的随机种子,所述第一方和所述第二方可以生成相同的随机数。

所述服务器可以根据记录所对应随机数的大小,对第一子数据集中的记录进行排序。或者,所述服务器还可以根据记录对应的随机数,计算该记录在第一子数据集中的位置;可以根据记录的位置,对第一子数据集中的记录进行排序。例如,记录对应的随机数可以为r,第一子数据集的记录数可以为m。那么,所述服务器可以计算r%m作为记录在第一子数据集中的位置。%表示取余运算符。

步骤s15:将乱序后的第一子数据集中的记录分配到多个第二子数据集中。

在一些实施例中,所述服务器可以将乱序后的第一子数据集中的记录分配到多个第二子数据集中。每个第二子数据集可以包括乱序后的各第一子数据集中记录。

所述第二子数据集可以为较小规模的数据集。在实际中,第二子数据集容纳的记录数与服务器的资源相匹配,以使所述服务器的资源能够满足对第二子数据集中的记录进行乱序处理的需求。各第二子数据集可以被存储在外存储器中。例如,各第二子数据集可以以文件的形式存储在外存储器中,所述文件可以为表格文件、文本文件、或者二进制文件等。各第二子数据集的记录数之和等于数据集的记录数。各第二子数据集的记录数可以相同或不同。

在一些实施例中,所述服务器可以从乱序后的各第一子数据集中选取记录;可以将选取的记录汇集成一个第二子数据集存储在外存储器中。所述服务器可以迭代执行以上的步骤,直至乱序后的各第一子数据集中的记录被选取完毕。需要选取的记录数可以为经验值。或者,需要选取的记录数还可以根据第一子数据集的记录数和第二子数据集的数量计算得到。例如,所述服务器可以根据公式t=m/p计算需要选取的记录数。t表示需要选取的记录数,m表示第一子数据集的记录数,p表示第二子数据集的数量。其中,第二子数据集的数量p可以根据第一子数据集的数量设定。例如,所述服务器可以将第二子数据集的数量p设定为等于或者大于第一子数据集的数量。或者,所述服务器还可以获得第二子数据集能够容纳的记录数;可以根据第二子数据集能够容纳的记录数和所述数据集的记录数,确定第二子数据集的数量p。获得第二子数据集能够容纳的记录数的过程可以参见获得第一子数据集能够容纳的记录数的过程,确定第二子数据集的数量的过程可以参见确定第一子数据集的数量的过程,这里不再详述。另外,所述服务器可以从乱序后的各第一子数据集中选取相同数量的记录。当然,所述服务器也可以从乱序后的各第一子数据集中选取不同数量的记录。

或者,针对乱序后的每个第一子数据集,所述服务器还可以将该第一子数据集中的记录划分成p份;可以将所述p份记录计入到p个第二子数据集中,使得每个第二子数据集可以包括该第一子数据集的1份记录。其中,第二子数据集的数量p可以根据第一子数据集的数量设定。例如,所述服务器可以将第二子数据集的数量p设定为等于或者大于第一子数据集的数量。或者,所述服务器还可以获得第二子数据集能够容纳的记录数;可以根据第二子数据集能够容纳的记录数和所述数据集的记录数,确定第二子数据集的数量p。获得第二子数据集能够容纳的记录数的过程可以参见获得第一子数据集能够容纳的记录数的过程,确定第二子数据集的数量的过程可以参见确定第一子数据集的数量的过程,这里不再详述。

步骤s17:对第二子数据集中的记录进行乱序处理。

在一些实施例中,由于所述第二子数据集为较小规模的数据集,因而所述服务器可以对各第二子数据集中的记录进行乱序处理,实现对各第二子数据集中的记录进行重新排列。需要说明的是,通过步骤s15,将乱序后的第一子数据集中的记录分配到多个第二子数据集中,通过步骤s17,可以对第二子数据集中的记录进行乱序处理。这样通过步骤s15和步骤s17,可以实现对所述数据集中的记录进行全局乱序处理。

在一些实施例中,对于各第二子数据集,所述服务器可以逐个地进行乱序处理。具体地,各第二子数据集可以被存储在外存储器中。所述服务器可以从所述外存储器中读取一个第二子数据集,可以对读取的第二子数据集中的记录进行乱序处理,可以将乱序后的第二子数据集存储在外存储器中。所述服务器可以迭代执行以上的步骤,直至各第二子数据集被乱序处理完毕。其中,对第二子数据集中的记录进行乱序处理的过程,可以参见步骤s13中对第一子数据集中的记录进行乱序处理的过程,这里不再详述。

步骤s19:将乱序后的第二子数据集合成为乱序后的数据集。

在一些实施例中,所述服务器可以将乱序后的各第二子数据集进行拼接,得到乱序后的数据集。当然,所述服务器还可以采用其它的方式将乱序后的第二子数据集合成为乱序后的数据集,例如,所述服务器可以从乱序后的各第二子数据集中选取记录,可以将选取的记录计入到乱序后的数据集中。乱序后的数据集可以被存储在外存储器中。

本说明书实施例的乱序处理方法,可以将数据集拆分为第一子数据集;可以对第一子数据集中的记录进行乱序处理;可以将乱序后的第一子数据集中的记录分配到多个第二子数据集中;可以对第二子数据集中的记录进行乱序处理;可以将乱序后的第二子数据集合成为乱序后的数据集。本说明书实施例通过对较小规模的第一子数据集和较小规模的第二子数据集进行乱序处理,实现了在资源有限的情况下对大规模的数据集进行乱序处理。

本说明书实施例还提供一种模型训练方法。所述模型训练方法可以应用于服务器。所述服务器可以为单个服务器、由多个服务器构成的服务器集群、或者部署在云端的服务器。所述模型训练方法可以应用于多方联合建模的场景或者单方建模的场景。在多方联合建模的场景中,所述模型训练方法可以应用于第一方或者第二方。在单方建模的场景中,所述模型训练方法可以应用于建模方。请参阅图4,所述模型训练方法可以包括以下步骤。

步骤s21:将乱序后的数据集拆分为多个子数据集。

在一些实施例中,乱序后的数据集可以被存储在外存储器中。例如,乱序后的数据集可以以文件的形式存储在外存储器中,所述文件可以为表格文件、文本文件、二进制文件等。

乱序后的数据集中可以包括记录。在实际中,乱序后的数据集可以为大规模的数据集,乱序后的数据集中的记录数量是非常多的。例如,乱序后的数据集可以包括100万条记录。

乱序后的数据集可以基于本说明书实施例的乱序处理方法获得。在一些场景(例如单方建模的场景)中,乱序后的数据集可以为乱序后的训练集。在另一些场景(例如多方联合建模的场景)中,乱序后的数据集可以为乱序后的标签集或者乱序后的特征集。

在一些实施例中,所述子数据集可以为较小规模的数据集。每个子数据集可以理解为用于训练模型的一个batch(一批数据)。在实际中,一方面,子数据集的大小(batchsize)可以与服务器的资源相匹配,以使所述服务器的资源能够满足使用子数据集训练模型的需求。另一方面,在子数据集大一些时,模型的训练时间较短,但训练后的模型的泛化能力较差;在子数据集小一些时,模型的训练时间较长,但训练后的模型的泛化能力较好。因此子数据集大小的设定可以综合考虑模型的训练时间和模型的泛化能力。综合考虑以上两个方面,例如,子数据集的大小可以设定为容纳128条记录。各子数据集可以被存储在外存储器中。各子数据集的记录数之和可以等于数据集的记录数。各子数据集的记录数可以相同或不同。

值得说明的是,所述子数据集与图2所对应实施例中第一子数据集的大小可以相同或者不同。所述子数据集与图2所对应实施例中第二子数据集的大小可以相同或者不同。

在一些实施例中,所述服务器可以确定子数据集能够容纳的记录数;可以根据子数据集能够容纳的记录数,将乱序后的数据集拆分为多个子数据集。其中,子数据集能够容纳的记录数可以为经验值。当然,所述服务器还可以采用其它的方式确定子数据集能够容纳的记录数。所述服务器可以从乱序后的数据集中选取m条记录,可以将选取得的记录汇集成一个子数据集存储在外存储器中。所述m可以为子数据集能够容纳的记录数。所述服务器可以迭代执行以上的步骤,直至乱序后的数据集中的记录被选取完毕。或者,所述服务器还可以根据子数据集能够容纳的记录数和乱序后的数据集的记录数,确定子数据集的数量;可以将乱序后的数据集拆分为所述数量个子数据集。以上的详细过程可以参见步骤s11中将数据集拆分为多个第一子数据集的过程,这里不再详述。

步骤s23:在需要训练模型时,从所述外存储器中读取子数据集,根据读取的子数据集训练模型。

在一些实施例中,所述模型训练方法可以应用于单方建模的场景。在单方建模的场景中,所述模型训练方法可以应用于建模方。在需要训练模型时,所述建模方可以从所述外存储器中读取子数据集,可以根据读取的子数据集训练模型。

所述建模方可以采用梯度下降法训练模型。具体地,在需要训练模型时,所述建模方可以从所述外存储器中读取一个子数据集,可以采用梯度下降法根据读取的子数据集训练模型。所述建模方可以迭代执行以上的步骤,直至外存储器中的子数据集被读取完毕。

或者,所述建模方还可以采用牛顿法训练模型。具体地,所述服务器可以从所述外存储器中读取子数据集;可以根据读取的子数据集确定损失函数的子梯度和子海森矩阵;在获得多个子海森矩阵以后,可以将所述多个子海森矩阵相加,得到海森矩阵,所述多个子海森矩阵可以根据外存储器中的多个子数据集获得;可以计算海森矩阵的逆矩阵;在获得多个子梯度以后,可以将所述多个子梯度相加,得到损失函数的梯度,所述多个子梯度可以根据外存储器中的多个子数据集获得;可以根据逆矩阵和损失函数的梯度,确定模型参数。

所述建模方可以从所述外存储器中读取一个子数据集,可以根据读取的一个子数据集确定损失函数的一个子梯度和一个子海森矩阵。所述服务器可以迭代执行以上的步骤,直至外存储器中的子数据集被读取完毕。或者,所述服务器还可以采用并行的方式,从所述外存储器中读取多个子数据集,根据读取的多个子数据集确定损失函数的多个子梯度和多个子海森矩阵。其中,采用并行的方式,每次从外存储器中读取的子数据集的数量可以小于外存储器中存储的子数据集数量。例如,所述外存储器中可以存储有1万个子数据集。所述服务器可以采用并行的方式,从所述外存储器中读取8个子数据集,根据读取的8个子数据集确定损失函数的8个子梯度和8个子海森矩阵。所述服务器可以迭代执行以上的步骤,直至外存储器中的子数据集被读取完毕。通过采用并行的方式,可以减少迭代的次数,有利于快速地获得多个子梯度和多个子海森矩阵。在实际中,例如,所述服务器可以创建多个进程。每个进程可以从所述外存储器中读取一个子数据集,可以根据读取的一个子数据集确定损失函数的一个子梯度和一个子海森矩阵。另举一例,所述服务器还可以创建多个线程。每个线程可以从所述外存储器中读取一个子数据集,可以根据读取的一个子数据集确定损失函数的一个子梯度和一个子海森矩阵。

在一些实施例中,所述模型训练方法可以应用于多方联合建模的场景。在多方联合建模的场景中,在需要训练模型时,所述服务器可以从所述外存储器中读取子数据集,可以根据读取的子数据集与合作方联合训练模型。其中,所述合作方用于与所述服务器联合建模。例如,若所述服务器为第一方,则所述合作方可以为第二方。或者,若所述服务器可以为第二方,则所述合作方可以为第一方。

所述服务器可以采用梯度下降法与合作方联合训练模型。具体地,在需要训练模型时,所述服务器可以从所述外存储器中读取一个子数据集,可以采用梯度下降法根据读取的子数据集与合作方联合训练模型。所述服务器可以迭代执行以上的步骤,直至外存储器中的子数据集被读取完毕。

或者,所述服务器还可以采用牛顿法与合作方联合训练模型。具体地,所述服务器可以从所述外存储器中读取子数据集;可以根据读取的子数据集与合作方秘密分享损失函数的子梯度和子海森矩阵,得到子梯度的分片和子海森矩阵的分片;在获得多个子海森矩阵的分片以后,可以将所述多个子海森矩阵的分片相加,得到海森矩阵的分片,所述多个子海森矩阵的分片可以根据外存储器中的多个子数据集获得;可以根据海森矩阵的分片与合作方秘密分享海森矩阵的逆矩阵,得到逆矩阵的分片;在获得多个子梯度的分片以后,可以将所述多个子梯度的分片相加,得到损失函数的梯度的分片,所述多个子梯度的分片可以根据外存储器中的多个子数据集获得;可以根据逆矩阵的分片和损失函数梯度的分片与合作方秘密分享模型参数,得到模型参数的分片。

所述服务器可以从所述外存储器中读取一个子数据集,可以根据读取的一个子数据集与合作方秘密分享损失函数的一个子梯度和一个子海森矩阵,得到一个子梯度的分片和一个子海森矩阵的分片。所述服务器可以迭代执行以上的步骤,直至外存储器中的子数据集被读取完毕。或者,所述服务器还可以采用并行的方式,从所述外存储器中读取多个子数据集,根据读取的多个子数据集与合作方秘密分享损失函数的多个子梯度和多个子海森矩阵,得到多个子梯度的分片和多个子海森矩阵的分片。其中,采用并行的方式,每次从外存储器中读取的子数据集的数量可以小于外存储器中存储的子数据集数量。例如,所述外存储器中可以存储有1万个子数据集。所述服务器可以采用并行的方式,从所述外存储器中读取8个子数据集,根据读取的8个子数据集与合作方秘密分享损失函数的8个子梯度和8个子海森矩阵,得到8个子梯度的分片和8个子海森矩阵的分片。所述服务器可以迭代执行以上的步骤,直至外存储器中的子数据集被读取完毕。通过采用并行的方式,可以减少迭代的次数,有利于快速地获得多个子梯度的分片和多个子海森矩阵的分片。在实际中,例如,所述服务器可以创建多个进程。每个进程可以从所述外存储器中读取一个子数据集,可以根据读取的一个子数据集与合作方秘密分享损失函数的一个子梯度和一个子海森矩阵,得到一个子梯度的分片和一个子海森矩阵的分片。另举一例,所述服务器可以创建多个线程。每个线程可以从所述外存储器中读取一个子数据集,可以根据读取的一个子数据集与合作方秘密分享损失函数的一个子梯度和一个子海森矩阵,得到一个子梯度的分片和一个子海森矩阵的分片。

本说明书实施例的模型训练方法,通过将乱序后的数据集拆分为多个子数据集,可以实现在资源有限的情况下使用大规模的数据集来训练模型。

以下介绍本说明书实施例的一个场景示例。在本场景示例中,所述第一方和所述第二方可以在资源有限的情况下,通过梯度下降法利用大规模的数据集联合训练模型。

在本场景示例中,第一方和第二方可以为联合建模的双方。所述第一方可以持有标签集,所述第二方可以持有特征集。所述标签集和所述特征集可以为大规模的数据集。所述标签集和所述特征集可以是数据对齐的。所述第一方可以利用本说明书实施例的乱序处理方法,对标签集中的记录进行乱序处理,得到乱序后的标签集。所述第二方可以利用本说明书实施例的乱序处理方法,对特征集中的记录进行乱序处理,得到乱序后的特征集。由于所述第一方和所述第二方均使用本说明书实施例的乱序处理方法进行乱序处理,因而乱序后的标签集和乱序后的特征集也是数据对齐的。

在本场景实施例中,所述第一方可以将乱序后的标签集拆分为多个子标签集。所述多个子标签集可以被存储在外存储器中。所述第二方可以采用相同的拆分方式,将乱序后的特征集拆分为多个子特征集。所述多个子特征集可以被存储在外存储器中。

在本场景实施例中,所述第一方可以从自身的外存储器中读取一个子标签集,所述第二方可以从自身的外存储器中读取一个相应的子特征集。所述第一方可以根据读取的子标签集,所述第二方可以根据读取的子特征集,采用梯度下降法联合训练模型。所述第一方和所述第二方可以迭代执行以上的步骤,从而实现利用大规模的数据集来训练模型。其中,子标签集和子特征集相应可以是指,子标签集和子特征集中包含相同的训练数据标识。

请参阅图5,第一方和第二方通过梯度下降法联合训练模型的过程可以如下。

所述第一方可以持有初始模型参数w的第一分片<w>0,所述第二方可以持有初始模型参数w的第二分片<w>1。<w>0+<w>1=w。所述第一方可以根据初始模型参数的第一分片<w>0,所述第二方可以根据初始模型参数的第二分片<w>1和子特征集x,秘密分享乘积xw。所述第一方可以获得所述乘积的第一分片<xw>0,所述第二方可以获得所述乘积的第二分片<xw>1。所述乘积为子特征集中训练数据的特征和初始模型参数之间的乘积。<xw>0+<xw>1=xw。所述第一方可以根据所述乘积的第一分片<xw>0,所述第二方可以根据所述乘积的第二分片<xw>1,秘密分享激励函数的取值a。所述第一方可以获得激励函数取值的第一分片<a>0,所述第二方可以获得激励函数取值的第二分片<a>1。<a>0+<a>1=a。

所述第一方可以根据子标签集y和激励函数取值的第一分片<a>0,所述第二方可以根据子特征集x和激励函数取值的第二分片<a>1,秘密分享损失函数的梯度dw。所述第一方可以获得损失函数梯度的第一分片<dw>0,所述第二方可以获得损失函数梯度的第二分片<dw>1。<dw>0+<dw>1=dw。所述第一方可以根据初始模型参数的第一分片<w>0、损失函数梯度的第一分片<dw>0和预设步长l,计算新的模型参数w’的第一分片<w’>0。所述第二方可以根据模型参数的第二分片<w>1、损失函数梯度的第二分片<dw>1和预设步长l,计算新的模型参数w’的第二分片<w’>1。其中,<w’>0=<w>0-l×<dw>0,<w’>1=<w>1-l×<dw>1。<w’>0+<w’>1=w’。

请参阅图6。以下介绍本说明书实施例的另一个场景示例。在本场景示例中,所述第一方和所述第二方可以在资源有限的情况下,通过牛顿法利用大规模的数据集联合训练模型。

在本场景示例中,第一方和第二方可以为联合建模的双方。所述第一方可以持有标签集,所述第二方可以持有特征集。所述标签集和所述特征集可以为大规模的数据集。所述标签集和所述特征集可以是数据对齐的。所述第一方可以利用本说明书实施例的乱序处理方法,对标签集中的记录进行乱序处理,得到乱序后的标签集。所述第二方可以利用本说明书实施例的乱序处理方法,对特征集中的记录进行乱序处理,得到乱序后的特征集。由于所述第一方和所述第二方均使用本说明书实施例的乱序处理方法进行乱序处理,因而乱序后的标签集和乱序后的特征集也是数据对齐的。

在本场景实施例中,所述第一方可以将乱序后的标签集拆分为多个子标签集。所述多个子标签集可以被存储在外存储器中。所述第二方可以采用相同的拆分方式,将乱序后的特征集拆分为多个子特征集。所述多个子特征集可以被存储在外存储器中。

在本场景实施例中,所述第一方和所述第二方可以创建相同数量的多个进程。所述第一方的每个进程可以与所述第二方的一个进程秘密分享损失函数的子梯度和子海森矩阵。具体地,所述第一方的一个进程(以下称为第一进程)可以从自身的外存储器中读取一个子标签集。所述第二方的一个进程(以下称为第二进程)可以从自身的外存储器中读取一个相应的子特征集。所述第一进程可以根据读取的子标签集,所述第二进程可以根据读取的子特征集,秘密分享损失函数的子梯度和子海森矩阵,所述第一进程可以获得子梯度的第一分片和子海森矩阵的第一分片,所述第二进程可以获得子梯度的第二分片和子海森矩阵的第二分片。

其中,第一进程和第二进程秘密分享损失函数的子梯度和子海森矩阵的过程可以如下。

所述第一方可以持有初始模型参数w的第一分片<w>0,所述第二方可以持有初始模型参数w的第二分片<w>1。<w>0+<w>1=w。所述第一进程可以根据初始模型参数的第一分片<w>0,所述第二进程可以根据初始模型参数的第二分片<w>1和子特征集x,秘密分享乘积xw。所述第一进程可以获得所述乘积的第一分片<xw>0,所述第二进程可以获得所述乘积的第二分片<xw>1。所述乘积为子特征集中训练数据的特征和初始模型参数之间的乘积。<xw>0+<xw>1=xw。所述第一进程可以根据所述乘积的第一分片<xw>0,所述第二进程可以根据所述乘积的第二分片<xw>1,秘密分享激励函数的取值a。所述第一进程可以获得激励函数取值的第一分片<a>0,所述第二进程可以获得激励函数取值的第二分片<a>1。<a>0+<a>1=a。所述第一进程可以根据子标签集y和激励函数取值的第一分片<a>0,所述第二进程可以根据子特征集x和激励函数取值的第二分片<a>1,秘密分享损失函数的子梯度dw’。所述第一进程可以获得损失函数的子梯度的第一分片<dw’>0,所述第二进程可以获得损失函数的子梯度的第二分片<dw’>1。<dw’>0+<dw’>1=dw’。

所述第一进程可以根据激励函数取值的第一分片<a>0,所述第二进程可以根据激励函数取值的第二分片<a>1,秘密分享对角矩阵rnn=diag(r)=diag(a(1-a))。所述第一进程可以获得对角矩阵的第一分片<rnn>0,所述第二进程可以获得对角矩阵的第二分片<rnn>1。<rnn>0+<rnn>1=rnn。所述第一进程可以根据对角矩阵的第一分片<rnn>0,所述第二进程可以根据子特征集x和对角矩阵的第二分片<rnn>1,秘密分享子海森矩阵h’。所述第一进程可以获得子海森矩阵的第一分片<h’>0,所述第二进程可以获得子海森矩阵的第二分片<h’>1。<h’>0+<h’>1=h’。

通过使用多个进程,所述第一方可以根据自身外存储器中的多个子标签集获得多个子梯度的第一分片<dw’>0和多个子海森矩阵的第一分片<h’>0。所述第一方可以将多个子梯度的第一分片<dw’>0相加,得到损失函数的梯度的第一分片<dw>0;可以将多个子海森矩阵的第一分片<h’>0相加,得到海森矩阵的第一分片<h>0。通过使用多个进程,所述第二方可以根据自身外存储器中的多个子特征集获得多个子梯度的第二分片<dw’>1和多个子海森矩阵的第二分片<h’>1。所述第二方可以将多个子梯度的第二分片<dw’>1相加,得到损失函数的梯度的第二分片<dw>1;可以将多个子海森矩阵的第二分片<h’>1相加,得到海森矩阵的第二分片<h>1。其中,<dw>0+<dw>1=dw。<h>0+<h>1=h。

所述第一方可以根据海森矩阵的第一分片<h>0,所述第二方可以根据海森矩阵的第二分片<h>1,秘密分享海森矩阵h的逆矩阵invh=inv(h)。所述第一方可以获得逆矩阵的第一分片<invh>0。所述第二方可以获得逆矩阵的第二分片<invh>1。<invh>0+<invh>1=invh。所述第一方可以根据逆矩阵的第一分片<invh>0和损失函数梯度的第一分片<dw>0,所述第二方可以根据逆矩阵的第二分片<invh>1和损失函数梯度的第二分片<dw>1,秘密分享新的模型参数w’。所述第一方可以获得新的模型参数的第一分片<w’>0。所述第二方可以获得新的模型参数的第二分片<w’>1。其中,<w’>0=<w>0-<invh>0×<dw>0,<w’>1=<w>1-<invh>1×<dw>1。<w’>0+<w’>1=w’。

请参阅图7。基于本说明书实施例的乱序处理方法,本说明书实施例还提供一种乱序处理装置。所述乱序处理装置可以包括以下单元。

拆分单元31,用于将数据集拆分为多个第一子数据集;

第一乱序单元33,用于对第一子数据集中的记录进行乱序处理;

分配单元35,用于将乱序后的第一子数据集中的记录分配到多个第二子数据集中,每个第二子数据集包括乱序后的各第一子数据集中记录;

第二乱序单元37,用于对第二子数据集中的记录进行乱序处理;

合成单元39,用于将乱序后的第二子数据集合成为乱序后的数据集。

请参阅图8。基于本说明书实施例的模型训练方法,本说明书实施例还提供一种模型训练装置。所述模型训练装置可以包括以下单元。

拆分单元41,用于将乱序后的数据集拆分为多个子数据集,所述多个子数据集被存储在外存储器中;

训练单元43,用于在需要训练模型时,从所述外存储器中读取子数据集,根据读取的子数据集训练模型。

请参阅图9。本说明书实施例还提供一种计算设备。

所述计算设备可以包括存储器和处理器。

在本实施例中,所述存储器包括但不限于动态随机存取存储器(dynamicrandomaccessmemory,dram)和静态随机存取存储器(staticrandomaccessmemory,sram)等。所述存储器可以用于存储计算机指令。

在本实施例中,所述处理器可以按任何适当的方式实现。例如,所述处理器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑控制器和嵌入微控制器的形式等等。所述处理器可以用于执行所述计算机指令以实现图2或者图4所对应的实施例。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。尤其,对于装置实施例和计算设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。另外,可以理解的是,本领域技术人员在阅读本说明书文件之后,可以无需创造性劳动想到将本说明书列举的部分或全部实施例进行任意组合,这些组合也在本说明书公开和保护的范围内。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书各个实施例或者实施例的某些部分所述的方法。

本说明书可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。

本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

虽然通过实施例描绘了本说明书,本领域普通技术人员知道,本说明书有许多变形和变化而不脱离本说明书的精神,希望所附的权利要求包括这些变形和变化而不脱离本说明书的精神。

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