发明内容
为了解决上述技术问题,本发明提出了一种神经网络的优化系统和方法,以及用于提高精度的重新训练系统和方法。
本发明的第一方面提供了一种用于神经网络的优化方法,包括以下步骤:评估所述神经网络中同一层中的多个通道的权重之间的相似度;根据评估结果对所述多个通道进行分组,以形成通道组;对同一所述通道组中的所述通道的权重进行聚类分析,以确定聚类中心;以所述聚类中心对应的值作为代表权重值,把所述代表权重值共享为所述同一所述通道组内的所述通道的权重。其中,所述相似度包括各个通道的权重概率分布之间的相似度。其中通过JS散度、KL散度或者推土机距离来评估所述相似度,或者通过计算所述权重的欧氏距离、余弦相似性或曼哈顿距离来评估所述相似度。其中,通过JS散度算法来计算每两个通道的权重分布的JS值,所述JS值用于指示所述两个通道的权重的概率分布的相似度。其中所述聚类分析的步骤通过k均值聚类算法、K中心点聚类或H-K聚类算法来计算和确定所述聚类中心。其中,其中所述K均值聚类算法中的K取值为16,并且所确定的所述聚类中心为16个。所述优化方法进一步包括,根据所述代表权重值建立查找表,所述查找表包括非均匀量化的所述代表权重值和索引。其中所述代表权重值被存储为低位宽索引。
所述优化方法进一步包括:在所述把所述代表权重值共享为所述同一所述通道组内的所述通道的权重的步骤之后,确定所述神经网络的输出精度;把所述输出精度与预设精度阈值进行比较;当所述输出精度低于所述预设精度阈值时,则对所述神经网络进行重新训练。
其中,使用后向传播算法来进行所述重新训练。其中,在所述重新训练中,调整偏置项而保持所述权重不变。其中,当调整所述偏置项不能达到预设的精度阈值时,则调整所述权重或同时调整所述权重和所述偏置项。其中,使用低学习率进行所述重新训练。
本发明的第二方面提供了一种用于神经网络的优化系统,包括:评估分组模块,用于评估所述神经网络中同一层中的多个通道的权重之间的相似度,并根据评估结果对所述多个通道进行分组,以形成通道组;聚类分析模块,用于对同一所述通道组中的所述通道的权重进行聚类分析以确定聚类中心;权重共享模块,用于把所述聚类中心对应的值作为代表权重值并将其共享为所述同一所述通道组内的所述通道的权重。其中所述相似度包括各个通道的权重概率分布之间的相似度。其中通过JS散度、KL散度或者推土机距离来评估所述相似度,或者通过计算所述权重的欧氏距离、余弦相似性或曼哈顿距离来评估所述相似度。其中JS散度算法来计算每两个通道的权重分布的JS值,所述JS值用于指示所述两个通道的权重的概率分布的相似度。其中所述聚类分析的步骤通过k均值聚类算法、K中心点聚类或H-K聚类算法来计算和确定所述聚类中心。其中,所述K均值聚类算法中的K取值为16,并且所确定的所述聚类中心为16个。所述优化系统进一步包括,根据所述代表权重值为通道组建立查找表,所述查找表包括非均匀量化的所述代表权重值和与所述代表权重值相对应的索引。其中所述代表权重值被存储为低位宽索引。所述优化系统进一步包括:比较模块,用于比较所述神经网络的输出精度与预设精度阈值,其中所述输出精度为把所述代表权重值共享为所述同一所述通道组内的所述通道的权重之后所得到的输出的精度;重新训练模块,用于当所述输出精度低于所述预设精度阈值时更新所述神经网络的参数以对所述神经网络进行重新训练。其中使用后向传播算法来进行所述重新训练。其中,在所述重新训练中,调整偏置项而保持所述权重不变。其中当调整所述偏置项不能达到预设的精度阈值时,则调整所述权重或同时调整所述权重和所述偏置项。其中被调整的权重被送入所述评估分组模块,以供所述评估分组模块再次进行评估和分组。其中,使用低学习率进行所述重新训练。
本发明的第三方面提供了一种提升量化后的神经网络的输出精度的重新训练方法,包括以下步骤:调整偏置项,且保持权重不变;比较调整所述偏置项之后所述神经网络的输出精度与预设精度阈值;如果所述输出精度低于所述预设精度阈值,则调整所述权重和所述偏置项。在调整所述权重的步骤中,通过后向传播算法分别单独调整每个权重。所述重新训练方法进一步包括以下步骤:在调整权重后,评估所述神经网络中同一层中的多个通道的调整后的权重之间的相似度;根据评估结果对所述多个通道进行分组,以形成通道组;对同一所述通道组中的所述通道的所述调整后的权重进行聚类分析,以确定聚类中心;把所述聚类中心对应的均值作为代表权重值,并把其共享为所述同一所述通道组内的所述通道的权重。之后,执行上文所述的评估步骤和聚类分析步骤,并建立查找表。
本申请的第四个方面提供了一种提升量化后的神经网络的输出精度的重新训练系统,包括:偏置项调整模块,用于对偏置项进行调整;权重调整模块,用于对权重进行调整;比较模块,用于对调整后所述神经网络的输出精度与预设精度阈值进行比较;决策模块,所述决策模块用于决定调用偏置项调整模块、调用所述权重调整模块或者同时调用所述偏置项调整模块和所述权重调整模块以进行重新训练,其中,所述决策模块优先仅调用偏置项调整模块而保持所述权重不变以进行重新训练,并且仅在所述输出精度低于所述预设精度阈值时调用所述权重调整模块或同时调用所述偏置项调整模块和所述权重调整模块以进行重新训练。其中所述权重调整模块通过后向传播算法分别单独调整每个权重。所述重新训练系统进一步包括:评估分组模块,评估所述神经网络中同一层中的多个通道的调整后的权重之间的相似度,并根据评估结果对所述多个通道进行分组,以形成通道组;聚类分析模块,用于对同一所述通道组中的所述通道的所述调整后的权重进行聚类分析,以确定聚类中心;权重共享模块,用于把所述聚类中心对应的均值作为代表权重值,并把其共享为所述同一所述通道组内的所述通道的权重。之后,执行上文所述的评估步骤和聚类分析步骤,并建立查找表。
本发明还涉及一种处理器,所述处理器具有如上所述的用于神经网络的优化系统和/或被配置用于执行用于神经网络的优化方法。
本发明还涉及一种处理器,所述处理器具有如上所述的用于提升量化后的神经网络的输出精度的重新训练系统和/或被配置用于执行所述重新训练方法。本发明还涉及一种计算机可读介质,用于存储由处理器执行的指令,所述指令被执行时,执行上文所述优化方法或重新训练方法。
根据本发明的系统和方法,通过先进行几轮偏置项微调这种方式的重新训练,节省了权重聚类和权重反向传播计算的时间,大大提高了训练速度,并且获得了很好的精度。并且,如果只通过微调偏置项的训练即可达到预期的精度要求,则可以不进行权重的调整,从而跳过传统优化过程中的权重调整步骤,从而大大节约了训练时间,提高了训练速度。
本发明涉及一种神经网络的权重编码方法。根据该方法,对于神经网络的每一层中的多个通道,根据其中每个通道的权重分布来计算通道之间的相似度,并根据通道的相似度对通道进行分组,每组内的权重分别进行量化编码。检查恢复的神经网络的输出的精确率,将其与预先设置对阈值进行比较,如果精确率低于阈值,则重新训练经过恢复的神经网络以提高精度。其中重新训练的方法包括先调整神经元参数中的偏置项,然后把得到精度与阈值相比,如果仍然低于阈值,则进一步调整权重,直至精度高于阈值。在权重调整之后,根据调整后的权重,更新通道分组。
根据本发明的方法,不但通过降低神经网络中每层的参数存储数据量从而降低神经网络的参数存储数据量,同时,神经网络输出的精确率没有因此而变劣。
具体实施方式
需要注意的是,附图仅用于对本发明的示范性实施例进行说明,并不能理解为对本发明的限制。下文结合附图对本发明的示范性实施例进行进一步的说明和解释。
本文描述的本发明的代表性实施例优先用于卷积神经网络,当然也可以用于任何神经网络。
卷积神经网络主要由这几类层构成:输入层、卷积层,ReLU层、池化(Pooling)层和全连接层。通过将这些层叠加起来,构建一个完整的卷积神经网络。在实际应用中往往将卷积层与ReLU层共同称之为卷积层,所以卷积层经过卷积操作也是要经过激活函数的。具体说来,卷积层和全连接层对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数,即神经元的权重和偏置项。参数的数据量会直接影响整个系统的性能和速度以及能耗。本发明提出的用法能够有效地降低所需处理的参数数据量,同时能够保持精度在期望水平。
图1A展示了根据本发明的一个实施例的数据处理架构100的示例性结构框图,该数据处理系统包括处理器160、存储器170、一个或多个输入接口180和一个或多个输出接口190以及数据通信总线。
处理器160可以实施为一个或多个常规微处理器、微控制器、或被配置为解释和执行提供给处理器160的指令(包括以代码或信号的形式的指令)的类似或等效的数据/信号处理部件(例如,专用集成电路(ASIC)或现场可编程门阵列(FGPA))。存储器170可以包括任何常规的随机存取存储器(RAM)设备、任何常规的只读存储器(ROM)设备、或可以存储供处理器160执行的信息和指令的任何其他类型的易失性或非易失性数据存储设备。存储器170还可以包括用于持久存储电子数据的存储设备,该存储设备包括例如基于磁、光或电路的数据记录介质以及用于向/从记录介质读取和写入数据的任何相关的电路系统和物理部件。输入接口180可以包括用于接收以下各项的一个或多个常规数据通信装置:(i)表示神经网络的权重的输入数据;(ii)表示用于控制数据处理架构100的操作的一个或多个参数的配置数据;和/或(iii)表示用于控制数据处理架构100的操作的(例如,将存储在存储器170中的)指令代码的指令数据。输出接口190可以包括用于向外部系统或用户提供输出数据的一个或多个常规数据通信装置。在本发明的代表性实施例中,数据处理架构在诸如ASIC或FPGA等集成电路芯片中实施。可替代地,数据处理架构100可以在常规的台式机、服务器或基于云的计算机系统上实施。
在根据本发明的一个实施例中,数据处理架构100的处理器160提供一种用于卷积神经网络的优化系统104。该优化系统104可以通过软件程序来实现,也可以通过硬件设备来实现,或者通过软硬件结合的方式来实现。根据本发明的优化系统包括一个或多个模块,这些模块可以通过软件程序来实现,也可以通过硬件设备来实现,或者通过软硬件结合的方式来实现。其中的不同的模块可以分别单独实施,用于完成指定的功能,也可以组合在一起成为共同实施指定的多个功能,也可以进一步拆分成多个模块,以实施指定的细分的功能。所有的类似的变型都是本发明的精神内的变型,都落入本申请的保护范围之内,而不应视为超出了本发明的保护范围。
根据本发明的优化系统104包括评估分组模块106、聚类分析模块108和权重共享模块110。其中,所述聚类分析模块108和权重共享模块110可以实施为同一模块,也可以实施为分开的模块。其中,评估分组模块106用于评估所述卷积神经网络中同一层中的多个通道的权重之间的相似度,并根据评估结果对所述多个通道进行分组以形成通道组;聚类分析模块108用于对同一所述通道组中的所述通道的权重进行聚类分析以确定聚类中心,而权重共享模块110则用于把所述聚类中心对应的均值作为代表权重值,并将其共享为所述同一所述通道组内的所述通道的权重。
下文结合1B详细解释图1A所示的系统的具体工作流程。
在步骤200和202中,由评估分组模块106分析神经网络的同一层中每个通道的权重分布,然后对每个通道的权重分布进行比较,并根据比较结果把权重分布相似的通道分为一组。由于各个通道权重可能不同,权重的分布范围可能比较大,比如有些通道的权重较为接近而可以归为一组,而有的通道的权重可能和其他通道的权重之间差异较大而只能自己成为一组,因此,每个通道组可能包含不同数量的通道,有的通道组可能具有较多的通道数量,而有的通道组可能之后一个通道。需要阐明的是,每个通道组中通道的数量在不同的训练循环中不是一成不变的,可能是动态变化的。即,在下一个训练循环中,这些通道可能会因为权重的更新而被重新安排分组,以提高输出结果的精确度。
前文所述的根据权重分布的相似度进行分组,其中,通道之间的相似度主要指权重分布的相似,包括最大值、最小值和方差等。也可以根据其它统计方法来评估通道的相似度,例如通过概率分布相似度,例如通过KL散度(Kullback-Leibler Divergence)、JS散度(Jensen-Shannon Divergence),Wasserstein距离(Wasserstein distance)等来进行评估。Wasserstein距离(Wasserstein distance)也叫推土机距离(Earth Mover Distance),是一种用于描述两个多维分布之间相似度的度量。所谓推土机距离,就和“推土机”稍微有点联系。如果将分布看做空间中泥土的分布,那么这两个分布间的距离就是将这些泥土从一个分布改变到另一个分布所需要消耗的最小能量。这里的能量是泥土重量(权重)和移动距离的乘积。
或者,可以通过计算两个通道权重值的欧氏距离(Euclidean distance)、余弦相似度(cosine distance)以及曼哈顿距离(Manhattan distance)等来计算和评估相似度。
根据本申请的一个实施例,使用JS散度来计算和评估通道权重的相似度。JS散度衡量两个概率分布的相似度,取值在0和1之间,JS值越小说明两个分布越相似。在本发明中用JS衡量训练过程中前后两次迭代同一个通道的权重大小分布,若前后两次权重值所计算得到的JS值越小,说明分布越相似,即权重值的变化趋于稳定,模型逐渐收敛。
需要说明的是,本申请的分组方法,是在单个卷积内操作,是对单个卷积的内部进行分组。当然,本申请的分组方法也可以应用在分组卷积上,即对多个卷积内部进行操作。
通过把权重分布相似的通道形成通道组且同一通道组内的所有通道共享同一组权重,从而实现了尽可能少的占用硬件存储资源的目的。同时,同一组内的所有通道对应的权重分布越相似,使用共享权重来代替原来的权重后的量化误差也会尽可能地小。
可以通过实验以获得经验值以此来设定相似度阈值,当相似度小于该阈值,则把对应的通道分为一组。
图1C展示了通道分组前和分组后的示意图。如图所示,分组前通道是按照原始顺序排列,分组后则原本并不相邻但是权重分布相似的通道被组合在一起形成新的通道组。
接下来,在步骤204中,对于分组后的每个通道组,通过聚类分析模块108把其中每个通道的权重值聚在一起并进行聚类计算。本申请的一个实施例采用无监督机器学习,比如k均值聚类算法(K-means)进行聚类计算。这种算法用于查找最能代表主要集群的聚类中心。通道组的聚类中心数应为2的幂(2n),其中n小于当前的卷积神经网络的量化位宽。因此,较低(n)位宽度的量化表示可用于将权重索引存储在外部存储器上。
k均值聚类算法是一种迭代求解的聚类分析算法,其步骤是,将数据预分为K组,随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
根据本发明的一个实施例中,在使用K均值聚类算法进行聚类计算时,k取固定值。固定的k值便于硬件实现。K值由硬件资源决定。在本申请的一个实施例中,k取值16,K=16刚好就用4位数字代表,把原来8位的权重以一半位数代表,压缩率是50%,这样硬件设计也比较有规律。
k均值聚类算法是一种比较普遍通用的数据聚类算法。除此之外,还可以采用其他聚类分析算法来进行聚类操作,比如K中心点聚类(K-Medoids)和H-K聚类算法(Hierarchical K-means Clustering)。K均值聚类和K中心点聚类算法是两种简单的基于划分的聚类算法。而H-K聚类算法是前两者的混合体,其主要差别是使用了不同的距离函数确定相似度。这些算法都可以用于本发明。
通过聚类计算找到这些权重值的“聚类中心”后,在步骤206中,通过权重共享模块110把聚类中心所对应的值作为代表权重值,把其更新为该通道组中所有通道的权重。可以把这些对应于聚类中心的代表权重值存储为较低的位宽索引,而且可以把这些代表权重值构建成为查找表,在需要使用权重值时可以直接从查找表中调用对应的权重值。该查找表存储和索引非均匀量化的权重参数。这样一来,不但减少了所需要存储的权重值的数量(通道组中的所有通道共享同一个权重值),而且调用更加方便,提高了计算效率。在进行训练时,可以通过索引直接从存储在外部存储器的查找表中读取权重,然后共享给整个通道组。同一通道组中的所有通道在前向传播中共享相同的权重参考查找表。
需要注意的是,在根据本申请的一个实施例中,k均值聚类算法是针对每个通道的权重参数进行优化聚类,即对同类相同对象进行聚类优化,可重复进行多次,以对共享的聚类中心进行优化。根据上述优化方法,如果得到的输出结果的精度符合预期精度,则可以终止训练。
根据本发明的进一步的实施例中,考虑到上述过程中的非线性量化以及把聚类中心对应的代表权重值共享为整个通道组的权重,会造成整个通道组输出的精度下降,进而会使得整个层以及整个卷积神经网络的输出的精度下降。因此,在上述聚类运算以及整个通道组共享权重之后,得到整个卷积神经网络的输出结果时,还包括继续评估该输出结果的精度的步骤。
因此,可选地,图1A所示的优化系统进一步包括比较模块112。如图1B中虚线方框所示,在步骤208中,使用比较模块112对输出结果的精度与预先设置的精度阈值进行比较。精度阈值可以根据经验来预先设定,也可以参考通过运行没有经历深度压缩的神经网络获得的输出值来确定。比如,把输入数据(包括图像数据、音频数据或视频数据)提供给所述卷积神经网络的输入层,然后运行该神经网络以得到输出结果。根据该输出结果,考虑到实际应用场景中所能接受的损耗,确定期望的精度阈值。如果精度高于预设的阈值,说明该精度符合要求,结束本次迭代;如果低于预设阈值,则需对网络进行重新训练,以恢复和提升精度。
在根据本发明的另一个实施例中,如图2A所示,该神经网络优化系统104’进一步包括比较模块112和重新训练模块114。如上所述,比较模块112用于比较所述卷积神经网络的输出精度与预设精度阈值。而重新训练模块114用于当输出精度低于预设精度阈值时更新神经网络的参数以重新训练卷积神经网络。除此之外,与图1A类似,该优化系统104’可以应用于数据处理架构100’的处理器160’中。该数据处理架构100’还包括存储器170’、一个或多个输入接口180’和一个或多个输出接口190’以及数据通信总线。
该优化系统104’可以通过软件程序来实现,也可以通过硬件设备来实现,或者通过软硬件结合的方式来实现。根据本发明的优化系统中的模块可以通过软件程序来实现,也可以通过硬件设备来实现,或者通过软硬件结合的方式来实现。其中的不同的模块可以分别单独实施,用于完成指定的功能,也可以组合在一起共同实施多个指定功能,也可以进一步拆分成多个模块,以实施指定的细分的功能。
根据本申请的一个实施例,通过反向传播来进行重新训练,从而恢复因权重损失而损失的精度。该方法对网络中的权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权重以最小化损失函数。
图2B示出了根据本发明的一个实施例的重新训练模块114的内部结构框图。如图所示,该重新训练模块可以包含用于调整偏置项的偏置项调整单元120、用于对权重进行调整的权重调整单元122、用于比较输出精度和预设精度阈值的比较单元124以及决策单元126。决策单元126优先调用偏置项调整单元以进行重新训练,并仅在输出精度低于预设精度阈值时调用权重调整单元122和偏置项调整单元120来进行重新训练。这些模块可以通过软件程序来实现,也可以通过硬件设备来实现,或者通过软硬件结合的方式来实现。其中的不同的模块可以分别单独实施,用于完成指定的功能,也可以组合在一起共同实施多个指定功能,也可以进一步拆分成多个模块,以实施指定的细分的功能。
如图2C所示,重新训练时,重新训练模块114对每一层先调整偏置项,只有在调整偏置项达不到要求的精度时才调整权重。在反传梯度值时,将权重的更新数值固定为0,则权重将不再被更新,此时训练只会调整偏置项。如果达不到要求的精度(通常2%内),将权重的更新数值固定标志取消,便可以同时更新权重和偏置。
具体来说,在步骤212中,由决策单元126调用偏置项调整单元120微调每一层每个通道组的偏置项,同时保持神经网络的聚类权重固定。然后,进入步骤214。在步骤214中,由比较单元124比较调整偏置项之后的卷积神经网络的输出精度与预设精度阈值。如步骤216所示,如果输出精度大于预设阈值,则表示输出精度符合要求,则决策单元126做出结束本次迭代的决定。
若输出精度低于预设精度,则表示误差仍然较大,不能满足要求。此时,决策单元126做出决策进入步骤218,调用权重调整单元122对权重进行调整。在调用权重调整单元122调整权重的时候,决策单元126还可以同时调用偏置项调整单元120来对偏置项进行调整。即,如果只调整偏置项达不到要求的精度,则在重新训练神经网络时允许神经网络的所有偏置项和权重分别进行更新。
经过权重调整步骤之后,把调整后的权重馈送入所述评估分组模块以重复上文所述的步骤200-210,再次分析通道权重分布以构建通道组,然后针对更新后的权重再次进行权重聚类和共享操作。因为权重的更新,所以之前的通道分组可能会被重新安排分组,以提高输出结果的精确度。同时,每隔几个迭代则重新应用非线性量化(即聚类),即,在训练过程中分别更新聚类权重并重新聚类。根据本申请的一个实施例,通过对权重和偏置项的调整之后,再次比较输出精度和预设精度阈值。重复该过程直到输出结果的精度达到预设精度阈值。优选地,调整权重和偏置项直到验证精度与原始预训练网络的验证精度的偏差在可接受的范围内(例如2-3%之内)。在此过程中,所有权重都可以在反向传播中单独更新,以找到能够获得最佳性能的权重值。在本发明的一个优选实施例中,重新训练后所有模型的权重都会单独更新。
根据本申请的一个实施例,使用低学习率以避免过度拟合。所有权重都会在反向传播中单独更新,以找到权重值以获得最佳性能。
在根据本发明的一个实施例中,在初始权重聚类分析之后,在使用微调偏置项的方法对整个样本集进行完整训练的头几次训练的过程中,都不需要对权重进行大规模的更新,也不会出现显著的权重重新分布。在本发明的一个实施例中,在使用ResNet50神经网络架构以及Facenet预训练人脸识别模型的情况下,在使用微调偏置项的方法对整个样本集进行完整训练的八次训练之后,才需要对权重进行实质性的更新调整。
尤其考虑到ResNet50加Facenet进行权重聚类分析大概需要30分钟的时间,因此,使用仅微调偏置项而固定权重的训练方法,可以通过跳过权重聚类分析从而大大节省训练时间,同时通过该训练方法检测到的精确度会维持在比较高的水平。如图2D所示,在微调偏置项和权重的迭代中,网络偏置项的JS值之和随迭代次数增加而先上升后下降,表示网络权重的相似性先降低后增加,趋近收敛。同时,如图2F所示,权重JS大多数时候是零,除第14000次迭代JS值增大以外,说明迭代前后的网络权重大多数时候是不变。同时,如图2E所示,根据本发明的一个实施例,在非线性量化卷积神经网络ResNet50上使用ILSVRC2012数据集作为样本集,使用微调偏置项和权重的方法进行训练,所得到的精度维持在75.0左右,且呈现不断升高的趋势。此外,同样的,在非线性量化卷积神经网络ResNet50上使用ILSVRC2012数据集作为样本集,在训练时,如果固定权重只训练偏置项,一样可以达到相近的准确率,其准确率变化趋势如图2G所示。因为权重是被固定的,其JS值是零,故不再做展示图。
本发明还提供了一种应用于卷积神经网络的重新训练的方法和系统。图3A提供了根据发明的一个实施例的数据处理架构300的示例性结构框图,类似于图1A所示的实施例,本实施例的数据处理结构300也包括处理器301、存储器314、一个或多个输入接口316和一个或多个输出接口318以及数据通信总线。
如图3A所示,根据本发明的一个实施例的重新训练系统302可以集成于所述处理器301中。类似于图2B所示的实施例中的重新训练模块,本示范性实施例的重新训练系统302包含用于对偏置项进行调整的偏置项调整模块304、用于对权重进行调整的权重调整模块306和用于比较输出精度和预设精度阈值的比较模块308以及决策模块310,决策模块310用于保持权重不变而只调用偏置项调整模块304以进行重新训练,并仅在所述输出精度低于所述预设精度阈值时调用所述权重调整模块306并同时调用所述偏置项调整模块304。这些模块可以通过软件程序来实现,也可以通过硬件设备来实现,或者通过软硬件结合的方式来实现。其中的不同的模块可以分别单独实施,用于完成指定的功能,也可以组合在一起共同实施多个指定功能,也可以进一步拆分成多个模块,以实施指定的细分的功能。
下面结合图3A和图3C对该重新训练方法进行介绍。首先,由偏置项调整模块304实施步骤360对偏置项进行微调,同时保持权重不变。然后由比较模块308来实施步骤362,比较调整偏置项之后所述卷积神经网络的输出精度与预设精度阈值。预设精度阈值可根据经验值来设置。
如步骤364所示,如果比较结果显示所述输出精度低于所述预设精度阈值,则进入步骤364,由决策模块310调用所述权重调整模块306和偏置项调整模块304来调整所述权重和所述偏置项。在权重调整步骤366中,通过后向传播算法分别单独调整每个权重。如果比较结果显示所述输出精度高于或等于所述预设精度阈值,则表明当前精度已经符合要求,决策模块310则决定结束本次迭代。
图3B给出了本发明的重新训练系统的进一步的实施例。与图3A中的重新训练系统相比,图3B中的重新训练系统进一步包括评估分组模块320’、聚类分析模块322’和权重共享模块324’。这些模块的功能与图1A所示的实施例中的对应模块的功能相同,此处不再赘述。这些模块可以通过软件程序来实现,也可以通过硬件设备来实现,或者通过软硬件结合的方式来实现。其中的不同的模块可以分别单独实施,用于完成指定的功能,也可以组合在一起共同实施多个指定功能,也可以进一步拆分成多个模块,以实施指定的细分的功能。这些模块用于执行图3C中虚线框所示部分的步骤368-378。步骤368-378与图1B所示步骤200-210基本相同,此处不再详细描述。简单来说,调整后的权重被送入评估分组模块320’,以便对所述卷积神经网络中同一层中的调整后的通道的权重的相似度进行评估,并根据评估结果对所述多个通道进行分组以形成通道组。然后,聚类分析模块322’对分组后的通道的经调整的权重进行聚类分析,以确定聚类中心。之后,由权重共享模块324’在同一通道组内为每个通道确定共享权重。优选地,用较低的位宽表示权重以节省存储和访问带宽。
与图1A-B和图2A-C所示实施例相同,可以把对应于聚类中心的代表权重值存储为较低的位宽索引,而且可以基于这些代表权重值构建查找表,在需要使用权重值时可以根据索引直接从查找表中调用对应的代表权重值。该查找表存储和索引非均匀量化的代表权重参数。这样一来,不但减少了所需要存储的权重值的数量(通道组中的所有通道共享同一组代表权重值),而且调用更加方便,提高了计算效率。在进行训练时,可以通过索引直接从存储在外部存储器的查找表中读取代表权重值,然后共享给整个通道组。通道组中的所有通道在前向传播中共享相同的代表权重参考查找表。
本发明所述的方法可以应用于各种神经网络架构,例如残差神经网络(Resnet)、VGG或密集卷积网络(DenseNet)等。图4示出了将本发明应用于Resnet50的示例性方法,而图2D-2G则展示了该应用场景中的性能变化状况。如图4所示,数据(例如用于进行图像识别的图像、声音识别的频谱图、医学影像或其他转换成张量格式的数据等)进入Resnet网络后,经过输入层进入中间卷积层,例如第一层(layer1)、第二层(layer2)、第三层(layer3)、第四层(layer4)四个阶段;最后数据经过一个平均池化(average pooling)和全连接层(fully connected layer)输出得到结果。以下以特征图作为输入数据进行说明,但是可以理解,该方法不限于输入数据为图像的情形,也可以为音频等输入数据。
·网络输入部分
ResNet50网络输入部分是由一个卷积核大小为7x7步长为2的卷积层,加一个池化核为3x3步长为2的最大池化层组成的。输出的特征图是输入图像的1/4,但通道数由3(RGB)增加至64。例如,一个224x224x3的输入图像,通过本模块,输出56x56x64大小的特征图,64为输出通道数。
·中间卷积部分
中间卷积部分每一个阶段层都包括多个残差块,并使用重复残差块提取特征。其基本思想是,对输入的数据例如特征图进行处理,使得其通道数扩展为原来的两倍,而长宽都缩减为原先的1/2。具体而言,每一个阶段都会由一个下采样块和两个残差块构成。其中,下采样会设置最初的卷积步长为2,通过这样的方式对特征图进行下采样,使得长宽得到缩减。而在残差块中,通过对卷积相关参数的设置,可以控制使得残差块的输入和输出的特征图尺寸一致,从而进行相加处理,避免深层网络的梯度消失和退化问题。
例如在图4所示的每个残差块中,输入数据分成两条路径,一条路径经过两个残差块输出,另一条路径则根据需要进行下采样或者不经下采样而直接输出,两条路径的输出进行相加。
例如在一个实施例中,本发明的方法应用于残差块1,包括以下步骤:
第一步:合并卷积和批量归一化。
通常情况下,在初始训练时,会在卷积层后添加一个批量归一化层,该层包括四个参数:批平均数μ,批方差δ,批放大系数γ,批偏移系数β,目的是为了加快网络收敛,减少过拟合现象。但在向前推理时,这些参数可以相当于对上一层卷积层的权重做放大缩小,并添加偏置,最终合并为一层。根据卷积和批归一化层的特性,如下式所示,
Fi,conv=WiX+bi (公式1)
其中w为权重,b为偏置项。
其中,μ是批平均数,δ是批方差,γ是批放大系数,β是批偏移系数,i表示第i个输出特征图;ε是一个极小的非零常数,用于避免除数为零。
在根据本发明的一个实施例中,通过使用训练好的8位定点数模型为初始点同时使用较小的学习率,有效地避开了网络的收敛和过拟合的问题。因此,作为优选实施例,可以将批归一层合并入卷积层做训练。
第二步:恢复目标权重。
在该步骤中,将目标权重从8位整数恢复为32位浮点数。
通常的,对一个浮点数做定点化,通过一个特定的比例小数scale,可以得到一个8位整数,方法如下式所示
其中,x8bit是定点数,scale是选择的特定比例小数,xfp32是浮点数。
相对应的,恢复浮点数,如下式所示
xfp32=x8bit*scale
(公式4)
第三步:对目标权重进行聚类。
在该步骤中,根据恢复的目标权重的概率分布,利用聚类算法计算各个通道的权重分布之间的相似性。其中聚类算法包括但不限于K均值聚类算法、K中心点聚类或H-K聚类算法。
在一个实施例中,使用K均值聚类算法对目标权重进行聚类,将目标权重相似的通道分为同一通道组,每个通道组的权重具有一个聚类中心。
K均值聚类算法中K值可以根据硬件设计的要求或压缩率确定。例如原始权重为8位,K=16时权重用4位数字代表,压缩率即为50%。
第四步:更新、量化目标权重。
在该步骤中,每次训练迭代通过重复运行k均值聚类算法找到与所有权重差异总和最小的2n个聚类中心,并将其对应的值设置为该通道组的共享权重组合,即同一通道组里的每个通道都具有相同的一组权重聚类中心。最后将确定的权重以查询表的形式记录,保存查询表的索引(位宽为n),由此降低权重存储量。其中n是权重共享后的查询表索引位宽数字。一般来说,n比原来的权重位宽小,比如n=4,所以24=16。
如图5所示,本申请的系统和方法,尤其适合适用于边缘设备上。相对于云端应用,边缘设备的应用需求和场景约束要复杂很多,针对不同的情况可能需要专门的架构设计。而本申请的方法和系统所展现出的性能,比如可控的精度损失,显著提高的运算速度和显著降低的功耗,尤其适合用于边缘设备上,用于执行各种功能,比如近距离的人脸识别、超近距离的指纹识别、远距离的姿势识别以及多重特征认证等。集成有本发明的系统的处理器,在处理边缘运算时具有显著的高效能和低延迟,特别适合应用于3D传感智能认证设备上,可以广泛应用于各种场景,比如出入境通关、服务行业VIP识别,安全场所出入口管制以及设备用户许可等等。
虽然参考示例性实施例对本发明进行以上描述,但是本领域技术人员将理解,在不脱离本发明的精神和范围的情况下,可以进行各种改变并且可以对其元素进行等效替换。另外,在不脱离本发明的实质范围的情况下,可以进行修改以使本发明得以适应特定的情况和材料。因此,本发明不限于在本说明书中披露的特定示例,而是涵盖落入所附权利要求的范围内的所有实施例。