模型训练方法、装置、设备和计算机存储介质
技术领域
本公开涉及计算机应用
技术领域
,尤其涉及人工智能技术领域
下的深度学习和自然语言处理技术。背景技术
近年来随着深度学习和自然语言处理技术的不断发展,基于大规模语料的预训练模型+下游任务微调的模式逐渐成为经典的框架。预训练模型效果的提升往往伴随着数据量和模型参数规模的飞速膨胀,从开始的亿级别逐渐扩展到千亿级别,甚至仍会继续膨胀。
从零开始训练一个大规模的预训练模型的代价是巨大的,这对时间和算力成本都带来了严峻的挑战。因此,如何能够高效率、低成本的进行模型训练成为亟待解决的问题。
发明内容
有鉴于此,本公开提供了一种模型训练方法、装置、设备和计算机存储介质,以便于提高模型训练的效率,降低成本。
根据本公开的第一方面,提供了一种模型训练方法,包括:
获取已训练得到的第一模型;
利用所述第一模型的参数对第二模型的参数进行初始化;
利用预设的训练目标,对所述第二模型进行训练以迭代更新所述第二模型的参数;
其中,所述第二模型的规模大于所述第一模型,且所述第一模型和第二模型的类型相同。
根据本公开的第二方面,提供了一种模型训练装置,包括:
模型获取单元,用于获取已训练得到的第一模型;
初始化单元,用于利用所述第一模型的参数对第二模型的参数进行初始化;
模型训练单元,用于利用预设的训练目标,对所述第二模型进行训练以迭代更新所述第二模型的参数;
其中,所述第二模型的规模大于所述第一模型,且所述第一模型和第二模型的类型相同。
根据本公开的第三方面,提供了一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的方法。
根据本公开的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行如上所述的方法。
根据本公开的第五方面,一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现如上所述的方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1为本公开实施例提供的模型训练方法的流程图;
图2为本公开实施例提供的模型参数矩阵的示意图;
图3a~图3b为本公开实施例提供的两种对第一部分参数初始化的示意图;
图4a~图4d为本公开实施例提供的四种对第二部分参数初始化的示意图;
图5为本公开实施例提供的模型训练装置的示意图;
图6是用来实现本公开实施例的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
由于获得一个训练完备的小模型是一个比较容易的事情,如果在训练大模型的过程中能够利用小模型已经学到的知识,则能够加速大模型的收敛。
若采用传统的知识蒸馏方法,将小模型作为Teacher(老师)模型,大模型作为Student(学生)模型。在训练过程中大模型的参数进行随机初始化后,学习训练任务的同时,也会拟合小模型的输出分布来获得小模型的知识来帮助自身的训练,从而加快模型的收敛。然而,上述传统的知识蒸馏方法存在以下缺陷:
1)在训练过程中实际上仅仅融合了小模型提供的训练目标,对小模型知识的学习不直接,对大模型效果的提升有限。
2)随着训练的进行,大模型的能力会逐渐突破小模型的能力上限,使得小模型反而逐渐成为训练大模型的制约。为了防止这种情况,往往需要动态调整小模型在训练中的占比,进一步增加了训练的复杂度。
3)在训练过程中需要同时利用两个模型,增加了显存的压力。
鉴于上述缺陷,本公开不再采用传统的知识蒸馏方法,转换了一种新的思路,来实现基于已经训练得到的小模型来加速大模型的训练。图1为本公开实施例提供的模型训练方法的流程图,如图1中所示,该方法可以包括以下步骤:
在101中,获取已训练得到的第一模型。
在102中,利用第一模型的参数对第二模型的参数进行初始化,其中第二模型的规模大于第一模型,且第一模型和第二模型的类型相同。
在103中,利用预设的训练目标,对第二模型进行训练以迭代更新第二模型的参数。
由图1所示实施例可以看出,本公开通过模型参数扩展的方式来充分利用小模型的参数,将其用于大模型的参数初始化,实现基于已经训练得到的小模型来加速大模型的训练,提高了大模型训练的效率,降低了时间和算力成本。
下面结合实施例对上述步骤102进行详细描述。
本公开中涉及的第一模型和第二模型的类型相同,可以是各种深度学习模型,包括但不限于:基于Transformer的预训练语言模型、基于CNN(Convolutional NeuralNetworks,卷积神经网络)等的分类模型、基于DNN(Deep Neural Networks,深度神经网络)等的排序模型,等等。
在本公开中第一模型是预先已经训练得到的规模相比较第二模型而言较小的模型。对于深度学习模型而言,是由多个网络层构成的,在每个网络层的参数具有一定的特征维度,特征维度是由输入和输出的维度决定的。因此,模型的规模也就体现于网络层的数量和特征维度上。通常规模越大的模型,具有越多的网络层和/或具有越多的特征维度。
举个例子,若将一个模型的参数采用矩阵的形式来表示,则在纵向上区分参数所属的网络层级,在横向上区分参数的特征维度。如图2中所示,假设一个模型有4个网络层,那么可以表示成一个矩阵,图中该矩阵由4个长矩形来示意,每个长矩形包含一个网络层中的参数,维度由模型输入和输出的维度决定。
在本公开中,第二模型的参数在初始化时与传统方式存在差异,不再采用将所有参数随机化的方式,而是利用已经训练得到的第一模型的参数来对第二模型参数进行初始化,以这种方式来对第一模型的知识进行继承和“消化”。
在将第一模型的参数应用于第二模型的参数初始化过程中,由于作为小模型的第一模型的特征维度和网络层数往往会小于作为大模型的第二模型,因此在本公开中,可以首先执行步骤S1、将第一模型的参数值作为第二模型的第一部分参数的初始值。然后执行步骤S2、对第二模型剩余的第二部分参数按照预设的策略进行填充。
需要说明的是,在本公开实施例中涉及的“第一”、“第二”等表述,例如“第一模型”、“第二模型”、“第一部分参数”、“第二部分参数”等中的“第一”、“第二”并不具备数量、顺序等方面的限定,仅仅用以在名称上对模型或部分参数进行区分。
其中,在上述步骤S1中,可以包括但不限于以下两种方式:
第一种方式:从第二模型的最低网络层和最低维度开始,依次对应填充第一模型的参数值。
这种方式适用于第一模型和第二模型中各网络层级类型相同的情况,例如,基于Transformer的预训练语言模型中,各网络层均为Transformer层,则可以将第一模型从第二模型的最低网络层和最低维度开始映射,一一映射至第二模型的相应位置,采用第一模型的参数值填充第二模型中所映射的参数位置。如图3a中所示,可以看做是将第一模型的参数值一一对应的填充到第二模型左下角的位置。图3a中左斜杠阴影表示第一模型中的参数值。
第二种方式:将第一模型中的参数按照相同网络层类型和相同特征维度的对应关系填充至第二模型中对应参数位置。
这种方式适用于第一模型和第二模型中网络层级类型并非都相同的情况。例如,对于分类模型而言,其网络层可能包含CNN层、Softmax层等。那么第一模型需要按照相同网络层类型进行映射。如图3b中所示,假设第一模型中的层级1与第二模型中的层级1是相同网络层类型,第一模型中的层级2与第二模型中的层级3是相同网络层类型,那么将第一模型层级1的参数值按照特征维度的对应关系填充至第二模型的层级1,将第一模型层级2的参数值按照特征维度的对应关系填充至第二模型的层级3。
需要说明的是,在上述两种方式中,由于第二模型在特征维度上相比较第一模型可能也存在了扩充,即增加了一些第一模型没有的特征维度。因此,第一模型的参数在进行步骤S1的填充时需要按照特征维度的对应关系进行填充。在图3a和图3b中是假设第二模型中靠右的特征维度为相比较第一模型而言新增的特征维度,靠左的特征维度是与第一模型一致的。
在上述步骤S2中,对第二模型剩余的第二部分参数按照预设的策略进行填充的方式可以采用但不限于以下四种:
第一种方式:对第二部分参数采用随机数进行填充。
如图4a中所示,对于除了已经初始化的第一部分参数之外剩余的第二部分参数,可以采用随机数进行填充。这种方式适用于任意场景,在使用小模型参数的同时,又保留了大模型参数的自由度。也就是说,相比较完全冷启动(所有参数都随机化)的方式具有更快的收敛速度,同时又可以保持充分的能力上限。
第二种方式:将第一部分参数的初始值复制至第二部分参数中相同层级的位置,将第二部分参数中剩余的位置填充为零。
对于第二部分参数可以在相同层级之内进行横向复制,即在同一层级之内将第一部分参数的初始值横向复制至其他特征维度。如图4b中所示,在第二模型的参数中,分别将层级1和层级2中第一部分参数的初始值复制到横向的其他维度。图4b中以第二模型中参数的特征维度是第一模型的2倍为例,即将第一部分参数的初始值横向复制一次即可。若多于2倍,则横向复制多次。横向复制完成后,对于其他层级的剩余位置则填充为零。
由于在特征维度上尽可能模拟了小模型(即第一模型)的输出,使得大模型(即第二模型)在训练初期就会有一个很好的表现,收敛速度很快。如果对第二模型的期望训练时间有较高要求,例如期望小于或等于预设时间阈值,则可以采用这种方式。
但由于大量参数被设置为零,使得这部分被置零的参数在梯度更新时均一致,因此在一定程度上缩减了模型参数的自由度。并且,这种方式有一个局限性,就是需要大模型在特征维度上是小模型的整数倍,否则只能采用其他几种方式。
第三种方式:将第一部分参数的初始值复制至第二部分参数中相同维度的位置,将第二部分参数中剩余的位置采用随机数进行填充。
这种方式实际上是将第一部分参数的初始值在不同层级之间进行纵向复制,复制到其他层级的相同特征维度上。如图4c中所示,在第二模型的参数中,分别将层级1和层级2中第一部分参数的初始值纵向复制到层级3和层级4,复制时在维度上对应。图4c中以第二模型中参数的层级是第一模型的2倍为例。如果多于2倍,则纵向复制多次。另外,需要说明的是,这种方式下对于第二模型和第一模型之间的层级倍数没有严格限制,如果不是整数倍同样可以适用。例如,如果第二模型具有5个层级,第一模型具有2个层级,可以将第二模型的前4个层级进行如图4c中所示的复制后,将第5个层级采用第一模型中任一个层级的参数进行复制即可。
进行上述纵向复制之后,对于剩余的位置可以采用随机数进行填充。即将各层级中剩余维度的参数填充为随机数。
这种方式在充分利用小模型参数的同时,又保证了大模型的参数自由度和模型收敛效果。
第四种方式:将第一部分参数的初始值复制至第二部分参数中相同维度的位置后,将第二模型中已具备初始值的参数对应复制至第二部分参数中相同层级的剩余位置并对该剩余位置的参数值添加随机噪声。
这种方式与第三种方式存在一定类似,首先将第一部分参数的初始值在不同层级之间进行纵向复制,复制到其他层级的相同特征维度上。这部分参见第三种方式中的相关记载。不同之处在于,在完成纵向复制之后,进一步在各层级分别进行横向复制,将已完成初始化的参数横向复制至剩余维度的位置。如图4d中所示,以第二模型是第一模型特征维度的2倍为例,在完成不同层级之间的纵向复制之后,再将第二模型中前半部分维度的参数值均横向复制到后半部分,然后再对后半部分的参数值添加随机噪声,图中随机噪声以黑色点进行示意性表示。
这种方式更进一步提升了第二模型前期的收敛速度,在收敛效果上更具优势。并且添加的随机噪声也能够弥补因参数复制所造成的模型参数自由度的损失。
下面结合实施例对上述步骤103进行详细描述。
第一模型和第二模型可以采用相同的训练目标。即设置相同的loss来对参数进行迭代更新,也可以在loss的设置上存在些许差异和改进。但原则上两个模型采用的训练目标的整体思路是一致的。
第一模型和第二模型可以采用同一训练数据集,也可以采用各自的训练数据集。
在本公开中,第二模型在进行训练的过程中,不再对第一模型进行知识蒸馏,也就是说,第二模型是独立的训练过程,单独对第二模型进行训练,不再有第一模型的参与。第一模型实际上仅仅在参数初始化上对第二模型的训练提供“知识”。这种方式避免了传统知识蒸馏方式中大模型能力受限于小模型的限制,也避免了训练过程中同时利用两个模型所带来的显存压力,降低了硬件和时间上的开销。
上面实施例中已经提到本公开实施例提供的上述方法可以适用于任意的深度学习模型的训练。在此列举其中一个应用场景:
目前已经完成了亿级别参数规模的预训练语言模型的训练,伴随着预训练语言模型效果提升的需求,需要扩展到千亿级别。那么可以将该已训练得到的亿级别的预训练语言模型作为第一模型,然后利用第一模型的参数初始化待训练的千亿级别参数规模的预训练语言模型即第二模型。然后,基于初始化的第二模型的模型参数对第二模型单独进行训练。其中亿级别的预训练语言模型和千亿级别的语言模型的模型类型相同,例如都是基于Transformer的预训练语言模型。但千亿级别的语言模型的网络层级数和特征维度数大于亿级别的预训练语言模型。两者采用相同的训练目标,例如均为:最小化文本被Mask(掩码)部分的预测结果与真实值之间的差异。另外,千亿级别的语言模型可以采用更大规模的训练数据。
以上是对本公开所提供方法进行的详细描述,下面结合实施例对本公开所提供的装置进行详细描述。
图5为本公开实施例提供的模型训练装置的示意图,该装置可以为位于服务器端的应用,或者还可以为位于服务器端的应用中的插件或软件开发工具包(SoftwareDevelopment Kit,SDK)等功能单元,或者,还可以位于具有较高计算能力的计算机终端,本发明实施例对此不进行特别限定。如图5中所示,该装置500可以包括:模型获取单元501、初始化单元502和模型训练单元503。其中各组成单元的主要功能如下:
模型获取单元501,用于获取已训练得到的第一模型。
初始化单元502,用于利用第一模型的参数对第二模型的参数进行初始化。其中,第二模型的规模大于第一模型,且第一模型和第二模型的类型相同。
模型训练单元503,用于利用预设的训练目标,对第二模型进行训练以迭代更新第二模型的参数。
作为一种可实现的方式,初始化单元502可以将第一模型的参数值作为第二模型的第一部分参数的初始值;对第二模型剩余的第二部分参数按照预设的策略进行填充。
其中,初始化单元502在将第一模型的参数值作为第二模型的第一部分参数的初始值时,可以具体用于:从第二模型的最低网络层和最低维度开始,依次对应填充第一模型的参数值;或者,将第一模型中的参数按照相同网络层类型的对应关系填充至第二模型中的对应参数位置。
其中,初始化单元502在对第二模型剩余的第二部分参数按照预设的策略进行填充时,可以具体采用以下方式中的至少一种:
方式一、对第二部分参数采用随机数进行填充。
方式二、将第一部分参数的初始值复制至第二部分参数中相同层级其他维度的位置,将第二部分参数中剩余的位置填充为零。
方式三、将第一部分参数的初始值复制至第二部分参数中相同维度其他层级的位置,将第二部分参数中剩余的位置采用随机数进行填充。
方式四、将第一部分参数的初始值复制至第二部分参数中相同维度其他层级的位置后,将第二模型中已具备初始值的参数对应复制至第二部分参数中相同层级的剩余位置并对该剩余位置的参数值添加随机噪声。
作为一种优选的实施方式,若第二模型的参数维度不是第一模型的整数倍,则初始化单元502可以采用上述方式一、方式三或方式四。
作为另一种优选的实施方式,若第二模型的期望训练时间小于或等于预设时间阈值,则初始化单元502可以采用上述方式二。
第一模型和第二模型可以采用相同的训练目标。即设置相同的loss来对参数进行迭代更新,也可以在loss的设置上存在些许差异和改进。第一模型和第二模型可以采用同一训练数据集,也可以采用各自的训练数据集。
模型训练单元503在对第二模型进行训练的过程中,不再对第一模型进行知识蒸馏,也就是说,第二模型是独立的训练过程,单独对第二模型进行训练,不再有第一模型的参与。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
如图6所示,是根据本公开实施例的模型训练方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图6所示,设备600包括计算单元601,其可以根据存储在只读存储器(ROM)602中的计算机程序或者从存储单元608加载到随机访问存储器(RAM)603中的计算机程序,来执行各种适当的动作和处理。在RAM 603中,还可存储设备600操作所需的各种程序和数据。计算单元601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
设备600中的多个部件连接至I/O接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元601执行上文所描述的各个方法和处理,例如模型训练方法。例如,在一些实施例中,模型训练方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。
在一些实施例中,计算机程序的部分或者全部可以经由ROM 802和/或通信单元609而被载入和/或安装到设备600上。当计算机程序加载到RAM 603并由计算单元601执行时,可以执行上文描述的模型训练方法的一个或多个步骤。备选地,在其他实施例中,计算单元601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行模型训练方法。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控30制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决传统物理主机与虚拟专用服务器(VPs,Ⅵirtual Private Server)服务中存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。