首页 / 深度学习加速的方法和设备及深度神经网络

深度学习加速的方法和设备及深度神经网络实质审查 发明

技术领域

[0001] 本发明涉及一种深度学习加速的方法和设备及深度神经网络。

相关背景技术

[0002] 由于深度神经网络对复杂数据模型的特征提取能力,基于深度学习的方法在大量实际应用中已经实现了非常好的性能。深度神经网络通常采用单精度浮点或双精度浮点格式数据来训练和推理神经网络。单精度浮点和双精度浮点数据操作需要使用CPU或GPU上的浮点处理单元。因此,深度学习所使用的硬件、能耗、速度和内存占用受限于单精度浮点和双精度浮点数据格式。
[0003] NVIDIA通过把单精度浮点压缩到半精度浮点来加速处理时间和降低内存使用。与单精度浮点相比,半精度浮点在内存中占用了16个字节,牺牲了数据精度以追求内存占用更少,速度更快。NVIDIA和微软定义了半精度浮点类型,并把半精度浮点类型应用到GeForce FX产品中。在Suyog Gupta等人的“有限数值精度的深度学习(Deep Learning with Limited Numerical Precision)”中,使用随机舍入的策略来限定浮点数据精度,并训练深度神经网络。
[0004] 虽然现有技术中已存在通过减小数据的表达精度来加速深度学习的方法,但仍期望提供其他深度学习加速的方法。

具体实施方式

[0020] 现参照附图对本发明的实施方式进行详细描述。应注意,以下描述仅仅是示例性的,而并不旨在限制本发明。此外,在以下描述中,将采用相同的附图标记表示不同附图中的相同或相似的部件。在以下描述的不同实施方式中的不同特征,可彼此结合,以形成本发明范围内的其他实施方式。
[0021] 图1示出了深度神经网络的基本结构。如图1所示,深度神经网络包括输入层L1、隐藏层L2至Ln-1以及输出层Ln。输入层接收将由深度神经网络加以分析处理的信息的值,这些值可以是一张图片的像素,或者一段音频的样本振幅或者某系统或者游戏状态的数字化表示。隐藏层根据深度神经网络所要实现的功能来设计,并且根据实际应用情况的不同而可能具有不同的形态和大小。隐藏层可以包含卷积层、池化层、批标准化(batch normalization)层、全连接层、droupout层、ReLU层、损失(loss)层、accurcy层,等等。输出层输出深度神经网络的处理结果。输入层、隐藏层和输出层的神经元的个数不限于图中所示,并且可以根据实际需要来设置。
[0022] 图2示出了根据本发明实施方式的对图1所述的深度神经网络的训练进行加速的方法的流程图。如图2所示,深度学习加速的方法200包括初始化步骤S210、削减步骤S230和训练步骤S240。
[0023] 在初始化步骤S210中,将深度神经网络的权重和偏差随机地初始化为n位定点数。可以通过读取训练好的定点数据,或者读取训练好的浮点数据并将浮点数据转换成定点数据来执行初始化。
[0024] 另外,在初始化过程中,可以根据数据在深度神经网络中所归属的参数类型来为数据设定相应的定点数格式。一般而言,参数的数值越大,则定点数格式的小数部的位数越少。例如,对于权重、梯度和偏差,因其数值一般较小,从而可以使用1个符号位、0个整数位和n-1(或m-1)个小数位的定点数格式;而对于每层的输入和输出数据,因其数值一般校对,从而可以使用1个符号位、8个整数位和n-8(或m-8)个小数位的定点数格式。
[0025] 在削减步骤S230中,将深度神经网络中计算量大于预定第一阈值的层中的数据削减为m位定点数,其中m
[0026] 在训练步骤S240中,对削减后的深度神经网络进行训练,直至收敛。
[0027] 在训练过程中,当数据溢出时,可以根据数据的大小来自动调整数据的定点数格式。图3示出了自动调整数据的定点数格式的处理的流程图。如图3所示,该调整处理300包括步骤S310至步骤S340。首先,在步骤S310中,判断数据是否超出当前定点数格式所能表达的范围。如果判断出数据未超出当前定点数格式所能表达的范围,则结束处理。如果在步骤S310中判断出数据超出当前定点数格式所能表达的范围,则处理进入步骤S320,在步骤S320中通过使当前定点数格式的整数部的位数增加1且使小数部的位数减小1来更新定点数格式。然后,处理进入步骤S330,在步骤S330中判断更新后的定点数格式的小数部的位数是否小于预定的第二阈值。如果判断出更新后的定点数格式的小数部的位数大于等于第二阈值,则处理转入步骤S310继续处理。如果在步骤S330中判断出更新后的定点数格式的小数部的位数小于第二阈值,则处理进入步骤S340,在步骤S340中增加更新后的定点数格式的小数部的位数,从而增加m的值。接着,处理进入步骤S310继续后续处理,直至数据未超出更新后的定点数格式所能表达的范围且更新后的定点数格式的小数部的位数大于等于预定第二阈值。
[0028] 本领域技术人员可以综合考虑诸如硬件资源、处理时间、能耗等因素来预先设定上述第二阈值。
[0029] 另外,在训练步骤S240中,在前向传播和反向传播过程中会涉及到对小数部位数不同的数据进行运算。此时,在进行运算前,需要对数据进行数据精度转换。具体地,在前向传播过程中,在将上一层i中的输出数据Douti输入到下一层i+1进行运算之前,需要根据以下等式(1)对下一层i+1中的数据Di+1进行数据精度转换,以匹配输出数据Douti的数据精度。
[0030] Di+1*=Di+1×K……(1)
[0031] 其中,Di+1*是数据精度转换后的数据;以及K是数据精度转换因子,其根据输出数据Douti的小数部的位数与下一层i+1中的数据Di+1的小数部的位数之差来确定。通过前向传播中的数据精度转换,数据之间的精度已经相互匹配,从而在反向传播中无需再执行数据精度转换。定点数据精度转换的操作已为本领域技术人员所熟知,在此不再详细描述。
[0032] 此外,定点位数削减后的深度神经网络在训练过程中可能出现不收敛或者损失衰减或消失。在训练步骤S240期间,在利用梯度下降法来求解在前向传播中计算的损失项极值的情形下,该网络不收敛或损失衰减或消失由下述引起:在训练步骤中产生的一些较小梯度值超出了m位定点数格式所能表达的最小范围,而被简单地处理为0,进而影响了权重和偏差的更新值。图4示出了在未执行定点位数削减(均为n位定点数)的情形下在深度神经网络的训练期间从所有层采集的梯度值占比的示例的直方图。在图4中,x轴表示对数形式的梯度值并且被分割成多个梯度值区间,以及y轴表示落在各个梯度值区间的梯度值的数目与所采集的所有梯度值的数目之比,也称为梯度值占比,例如,约2%的梯度值落在[2-34,2-32]的范围中,以及约64%的梯度值为零(如图中最左方的单独矩形块所示)。图中各个矩形块所表示的梯度值占比之和为1,换言之各个矩形块所表示的y轴上的值的总和为1。从图中可以看出,m位定点数格式的可表达范围中的大部分没有梯度值,而且大部分梯度值落在m位定点数格式的最小可表达值以下,从而该大部分梯度值在以m位定点数格式表示时均变为零。
[0033] 放大梯度值会使梯度值占据更多的m位定点数格式的可表达范围从而保留下在未放大时因在最小可表达值下方而变为零的梯度值。通过将削减后的深度神经网络的梯度值放大一定倍数可以使削减后的深度神经网络的处理精度大致匹配未削减的深度神经网络的处理精度。
[0034] 一种将梯度值放大到m位定点数格式的可表达范围的方法是:首先,按照预定的放大因子来放大损失项,如以下等式(2)所示,从而通过链式法则的反向传播来确保所有的梯度值被放大相同的量。
[0035] L*(ω)=L(ω)×S……(2),
[0036] 其中,L(ω)为深度神经网络的损失项,S为放大因子,以及L*(ω)为放大后的损失项。
[0037] 然后,在权重和偏差更新之前如以下等式(3)所示来缩小梯度值,以保持权重和偏差更新幅度如在n位定点数训练中一样。恰好在反向传播经过之后但在梯度裁剪之前或任何其他梯度相关计算之前来执行该缩小,从而确保不需要调节超参数(如,梯度裁剪阈值、权重衰减等)。
[0038] G*(ω)=G(ω)/S……(3)
[0039] 其中,G(ω)为反向传播中计算的梯度值,S为放大因子,以及G*(ω)为缩小后的梯度值。
[0040] 放大因子S可以被设置为恒定的放大因子。可以根据经验设置恒定的放大因子,或者如果存在关于梯度值的统计,则可以将放大因子设置为使其与最大绝对梯度值的乘积在m位定点数格式可表达的最大值以下。设置较大放大因子没有负面影响,只要所设置的放大因子在反向传播中不引起溢出就行。溢出将导致梯度值为无穷大或非数值,这将在更新之后不可避免地损害权重。可以通过例如在梯度值被缩小时检查所计算的梯度值来有效地检测溢出。并且,可以在检测到溢出时跳过权重和偏差更新,并且简单地继续下一次迭代。此外,放大因子S的设置不限于上述方式,本领域技术人员可以根据实际应用来设置合适的放大因子。
[0041] 以上示例性地说明书了在利用梯度下降法求解损失项极值时削减后的深度神经网络不收敛或者损失项衰减或消失的成因及其弥补措施,但方法不限于此,本领域技术人员可以根据损失项极值求解的不同方法而采用不同的措施来避免削减后的深度神经网络不收敛或者损失项衰减或消失。
[0042] 继续参考图2,根据本发明优选实施方式的深度学习加速的方法200还包括初步训练步骤S220。在该步骤S220中,对初始化后的深度神经网络进行初步训练,达预定轮数。在该优选实施方式中,在步骤S230中,针对初步训练后的深度神经网络来执行削减。
[0043] 通过执行初步训练步骤S220,能够使权重和偏差被随机设定的深度神经网络在一定程度上收敛,从而随后在该适当收敛的深度神经网络上执行削减步骤S230和训练步骤S240时,能够在一定程度上避免深度神经网络发散并且能够加快深度神经网络收敛。
[0044] 在初步训练过程中,当数据溢出时,可以根据数据的大小来自动调整数据的定点数格式。自动调整数据的定点数格式的处理参见以上关于图3的描述,在此不再赘述。
[0045] 另外,在初步训练过程中,在前向传播和反向传播过程中会涉及到对小数部位数不同的数据进行运算。此时,在进行运算前,需要对数据进行数据精度转换。具体地,在前向传播过程中,在将上一层i中的输出数据Douti输入到下一层i+1进行运算之前,需要根据上述等式(1)对下一层i+1中的数据Di+1进行数据精度转换,以匹配输出数据Douti的数据精度。通过前向传播中的数据精度转换,数据之间的精度已经相互匹配,从而在反向传播中无需再执行精度转换。定点数据精度转换的操作已为本领域技术人员所熟知,在此不再详细描述。
[0046] 以上参照图1至图4详细描述了根据本发明实施方式的对深度神经网络的训练进行加速的方法。根据上述方法训练的深度神经网络同样能够在推理过程中加速处理,节约硬件资源和能耗,并减少处理时间。下面,参照图5来描述深度学习加速的设备的结构。
[0047] 图5示出了根据本发明实施方式的深度学习加速的设备的结构框图。如图5所示,深度学习加速设备500包括:初始化装置510,其配置成将深度神经网络的权重和偏差随机地初始化为n位定点数;削减装置530,其配置成将深度神经网络中计算量大于预定第一阈值的层中的数据削减为m位定点数,其中m
[0048] 另外,初始化装置还被配置成,根据数据所归属的所述深度神经网络中的参数的类型来为数据设定相应的定点数格式。其中,参数的数值越大,则定点数格式中的小数部的位数越少。
[0049] 另外,训练装置540还被配置成,在小数部的位数不同的数据之间进行运算之前,根据数据的小数部的位数之差来对数据执行数据精度转换。
[0050] 优选地,根据本发明实施方式的深度学习加速设备500还包括初步训练装置520,其配置成对初始化后的深度神经网络进行初步训练,达预定轮数,其中,削减装置530针对初步训练后的深度神经网络来执行削减。
[0051] 另外,初步训练装置520和训练装置540还被配置成:在数据溢出时,根据该数据的大小来自动调整该数据的定点数格式。具体地,当数据溢出时,初步训练装置520和训练装置540被操作为:
[0052] i)判定该数据是否超出当前的定点数格式所能表达的范围;
[0053] ii)如果判定出该数据超出当前的定点数格式所能表达的范围,则通过使当前的定点数格式的整数部的位数增加1且小数部的位数减小1来更新定点数格式;
[0054] iii)重复执行上述操作i)和ii),直至该数据未超出更新后的定点数格式所能表达的范围且更新后的定点数格式的小数部的位数大于等于预定第二阈值,此时用更新后的定点数格式表示该数据,或者直至更新后的定点数格式的小数部的位数小于预定第二阈值;
[0055] iv)当更新后的定点数格式的小数部的位数小于预定第二阈值时,增加小数部的位数,从而增加m的值;以及
[0056] v)重复执行上述操作i)至iv),直至该数据未超出更新后的定点数格式所能表达的范围且更新后的定点数格式的小数部的位数大于等于预定第二阈值,此时用更新后的定点数格式表示该数据。
[0057] 以上参考图5简单地描述了深度学习加速设备的构造和操作。关于该设备及其内部的部件的详细操作可以参见以上关于深度学习加速的方法的描述。在此,不再详细描述。
[0058] 另外,这里尚需指出的是,上述系统中各个组成部件可以通过软件、固件、硬件或其组合的方式进行配置。配置可使用的具体手段或方式为本领域技术人员所熟知,在此不再赘述。在通过软件或固件实现的情况下,从存储介质或网络向具有专用硬件结构的计算机(例如图6所示的通用计算机600)安装构成该软件的程序,该计算机在安装有各种程序时,能够执行各种功能等。
[0059] 图6示出了可用于实施根据本发明实施例的方法和系统的计算机的示意性框图。
[0060] 在图6中,中央处理单元(CPU)601根据只读存储器(ROM)602中存储的程序或从存储部分608加载到随机存取存储器(RAM)603的程序执行各种处理。在RAM 603中,还根据需要存储当CPU 601执行各种处理等时所需的数据。CPU 601、ROM 602和RAM 603经由总线604彼此连接。输入/输出接口605也连接到总线604。
[0061] 下述部件连接到输入/输出接口605:输入部分606(包括键盘、鼠标等等)、输出部分607(包括显示器,比如阴极射线管(CRT)、液晶显示器(LCD)等,和扬声器等)、存储部分608(包括硬盘等)、通信部分609(包括网络接口卡比如LAN卡、调制解调器等)。通信部分609经由网络比如因特网执行通信处理。根据需要,驱动器610也可连接到输入/输出接口605。
可拆卸介质611比如磁盘、光盘、磁光盘、半导体存储器等等可以根据需要被安装在驱动器
610上,使得从中读出的计算机程序根据需要被安装到存储部分608中。
[0062] 在通过软件实现上述系列处理的情况下,从网络比如因特网或存储介质比如可拆卸介质611安装构成软件的程序。
[0063] 本领域的技术人员应当理解,这种存储介质不局限于图6所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质611。可拆卸介质611的例子包含磁盘(包含软盘(注册商标))、光盘(包含光盘只读存储器(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)(注册商标))和半导体存储器。或者,存储介质可以是ROM 602、存储部分608中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。
[0064] 本发明还提出一种存储有机器可读取的指令代码的程序产品。所述指令代码由机器读取并执行时,可执行上述根据本发明实施方式的方法。
[0065] 相应地,用于承载上述存储有机器可读取的指令代码的程序产品的存储介质也包括在本发明的范围内。所述存储介质包括但不限于软盘、光盘、磁光盘、存储卡、存储棒等等。
[0066] 应当注意,本发明的方法不限于按照说明书中描述的时间顺序来执行,也可以按照其他的次序顺序地、并行地或独立地执行。因此,本说明书中描述的方法的执行顺序不对本发明的技术范围构成限制。
[0067] 以上对本发明各实施方式的描述是为了更好地理解本发明,其仅仅是示例性的,而非旨在对本发明进行限制。应注意,在以上描述中,针对一种实施方式描述和/或示出的特征可以以相同或类似的方式在一个或更多个其它实施方式中使用,与其它实施方式中的特征相组合,或替代其它实施方式中的特征。本领域技术人员可以理解,在不脱离本发明的发明构思的情况下,针对以上所描述的实施方式进行的各种变化和修改,均属于本发明的范围内。
[0068] 综上,在根据本发明的实施例中,本发明提供了如下技术方案。
[0069] 方案1.一种深度学习加速的方法,包括:
[0070] 将深度神经网络的权重和偏差随机地初始化为n位定点数;
[0071] 将所述深度神经网络中计算量大于预定第一阈值的层中的数据削减为m位定点数,其中m和n为整数且m
[0072] 对削减后的深度神经网络进行训练,直至收敛。
[0073] 方案2.根据方案1所述的方法,还包括:对初始化后的深度神经网络进行初步训练,达预定轮数,
[0074] 其中,所述削减针对初步训练后的深度神经网络来执行。
[0075] 方案3.根据方案2所述的方法,在所述初步训练和所述训练中,当数据溢出时,根据所述数据的大小来自动调整所述数据的定点数格式。
[0076] 方案4.根据方案3所述的方法,其中,当数据溢出时自动调整所述数据的定点数格式包括:
[0077] i)判定所述数据是否超出当前的定点数格式所能表达的范围;
[0078] ii)如果判定出所述数据超出当前的定点数格式所能表达的范围,则通过使当前的定点数格式的整数部的位数增加1且小数部的位数减小1来更新定点数格式;
[0079] iii)重复执行上述操作i)和ii),直至所述数据未超出更新后的定点数格式所能表达的范围且更新后的定点数格式的小数部的位数大于等于预定第二阈值,此时用更新后的定点数格式表示所述数据,或者直至更新后的定点数格式的小数部的位数小于预定第二阈值;
[0080] iv)当更新后的定点数格式的小数部的位数小于预定第二阈值时,增加小数部的位数,从而增加m的值;以及
[0081] v)重复执行上述操作i)至iv),直至所述数据未超出更新后的定点数格式所能表达的范围且更新后的定点数格式的小数部的位数大于等于预定第二阈值,此时用更新后的定点数格式表示所述数据。
[0082] 方案5.根据方案1至4中任一项所述的方法,其中,在所述训练期间,在反向传播中利用梯度下降法来求解在前向传播中计算的损失项的极值。
[0083] 方案6.根据方案5所述的方法,其中,在反向传播中,首先按照预定比例放大所述损失项,然后在更新权重和偏差之前,按照所述预定比例缩小梯度。
[0084] 方案7.根据方案1至4中任一项所述的方法,其中,在所述训练中,在其小数部的位数不同的数据之间进行运算之前,根据数据的小数部的位数之差来对数据执行数据精度转换。
[0085] 方案8.根据方案1至4中任一项所述的方法,其中,在所述初始化中,根据所述数据所归属的所述深度神经网络中的参数的类型来为所述数据设定相应的定点数格式。
[0086] 方案9.根据方案8所述的方法,其中,参数的值越大,则定点数格式中的小数部的位数越少。
[0087] 方案10.一种深度学习加速的设备,包括:
[0088] 初始化装置,被配置成将深度神经网络的权重和偏差随机地初始化为n位定点数;
[0089] 削减装置,被配置成将所述深度神经网络中计算量大于预定第一阈值的层中的数据削减为m位定点数,其中m和n为整数且m
[0091] 方案11.根据方案10所述的设备,还包括初步训练装置,其被配置成对初始化后的深度神经网络进行初步训练,达预定轮数,
[0092] 其中,所述削减装置针对初步训练后的深度神经网络来进行削减。
[0093] 方案12.根据方案11所述的设备,所述初步训练装置和所述训练装置还被配置成:当数据溢出时,根据所述数据的大小来自动调整所述数据的定点数格式。
[0094] 方案13.根据方案12所述的设备,其中,当数据溢出时,自动调整所述数据的定点数格式包括:
[0095] i)判定所述数据是否超出当前的定点数格式所能表达的范围;
[0096] ii)如果判定出所述数据超出当前的定点数格式所能表达的范围,则通过使当前的定点数格式的整数部的位数增加1且小数部的位数减小1来更新定点数格式;
[0097] iii)重复执行上述操作i)和ii),直至所述数据未超出更新后的定点数格式所能表达的范围且更新后的定点数格式的小数部的位数大于等于预定第二阈值,此时用更新后的定点数格式表示所述数据,或者直至更新后的定点数格式的小数部的位数小于预定第二阈值;
[0098] iv)当更新后的定点数格式的小数部的位数小于预定第二阈值时,增加小数部的位数,从而增加m的值;以及
[0099] v)重复执行上述操作i)至iv),直至所述数据未超出更新后的定点数格式所能表达的范围且更新后的定点数格式的小数部的位数大于等于预定第二阈值,此时用更新后的定点数格式表示所述数据。
[0100] 方案14.根据方案10-13中任一项所述的设备,其中,所述训练装置还被配置成:在反向传播中利用梯度下降法来求解在前向传播中计算的损失项的极值。
[0101] 方案15.根据方案14所述的设备,其中,所述训练装置还被配置成:在反向传播中,首先按照预定比例放大所述损失项,然后在更新权重和偏差之前,按照所述预定比例缩小梯度。
[0102] 方案16.根据方案10至13中任一项所述的设备,其中,所述训练装置还被配置成:在其小数部的位数不同的数据之间执行运算之前,根据数据的小数部的位数之差来对数据执行数据精度转换。
[0103] 方案17.根据方案10至13中任一项所述的设备,其中,所述初始化装置还被配置成:根据所述数据所归属的所述深度神经网络中的参数的类型来为所述数据设定相应的定点数格式。
[0104] 方案18.根据方案17所述的设备,其中,参数的值越大,则定点数格式中的小数部的位数越少。
[0105] 方案19.一种深度神经网络,包括:
[0106] 输入层,接收要由所述深度神经网络处理的数据;
[0107] 输出层,输出由所述深度神经网络处理后的结果;以及
[0108] 多个隐藏层,耦接在所述输入层与所述输出层之间并且根据所述深度神经网络所要实现的功能来设计,
[0109] 其中,所述深度神经网络根据方案1至8中任一项所述的方法来进行训练。

当前第1页 第1页 第2页 第3页