具体实施方式
在本申请中,除非另外指明,否则术语“包括(comprising)”、“包括(comprise)”及其语法变体旨在表示开放或包容性语言,以使得它们包括所列举的元素,但还允许包括附加的、非明确地列举的元素。术语“包括(includes)”是指包括但不限于,并且术语“包括(including)”是指包括但不限于此。术语“基于(based on)”是指至少部分地基于。术语“数量(number)”是指等于或大于一的任何自然数。术语“一(a)”和“一个(an)”旨在表示特定元素中的至少一个。
为了易于参考,将描述分为三个部分,其中,参考附图对这些示例进行描述。
第1部分参考图1A至图3,并且描述了一种用于生成神经网络的二值化权重的方法、处理器和系统,其中,对表示权重的二值权重串的选择至少部分基于选定二值权重串的编码长度。
第2部分参考图4A至图13,并借鉴了第1部分中披露的原理,但详细描述了特定的实施方式,其中,对二值权重串(在第2部分中称为“二值权重矩阵”)的选择基于二值权重串的编码长度和二值权重串的全局概率值(也称为“特定概率值”)。
第3部分参考图14至图20,并借鉴了第1部分中披露的原理,但详细描述了特定的实施方式,其中,基于使用多个不同编码方案的编码方法确定编码长度。
在第1部分、第2部分或第3部分中披露的教导和特征可以部分或全部组合在一起,除非明确指出不是这种情况,或者常识和逻辑另有规定。因此,例如,可以实现使用全局概率值的系统(如第2部分中所披露的)和使用多个编码方案的编码方法(如第3部分中所披露的)。在另一示例中,可以实现这样的系统,该系统确定各个权重的局部概率值(如第2部分所述),并利用使用多个编码方案的编码方法(如第3部分中所述),但不使用全局概率值(如第2部分所述)。
第1部分——用于表示神经网络中权重分组的候选二值权重串的生成和选择
图1A是展示了数据处理系统100A的示例性内部结构的框图,该数据处理系统包括处理器102A、存储器110、一个或多个输入接口120和一个或多个输出接口130。这些元件可以通过任何适当的手段彼此通信,诸如但不限于数据通信总线112。总线112可以例如包括一个或多个导体,以使计算机的部件彼此通信(例如,发送或交换数据)。
处理器102A可以包括一个或多个微处理器、微控制器、或被配置为解释和执行提供给处理器102A的指令(包括以代码或信号的形式的指令)的类似或等效的数据/信号处理部件(例如,专用集成电路(ASIC)或现场可编程门阵列(FGPA))。存储器110可以包括任何常规的随机存取存储器(RAM)设备、任何常规的只读存储器(ROM)设备、或可以存储供处理器102A执行的信息和指令的任何其他类型的易失性或非易失性数据存储设备。存储器110还可以包括用于持久存储电子数据的存储设备(图1A中未示出)(例如,硬盘驱动器),该存储设备包括例如基于磁、光或电路的数据记录介质以及用于向/从记录介质读取和写入数据的任何相关的电路系统和物理部件。
输入接口120可以包括用于接收以下各项的一个或多个常规数据通信装置:(i)表示神经网络的权重的输入数据;(ii)表示用于控制系统100A的操作的一个或多个参数的配置数据;和/或(iii)表示用于控制系统100A的操作的(例如,将存储在存储器110中的)指令代码的指令数据。输出接口130可以包括用于向外部系统或用户提供输出数据的一个或多个常规数据通信装置,该输出数据包括例如表示由系统100A生成的一个或多个二值权重的二值权重数据。
在本披露的一些示例中,系统100A可以在诸如ASIC或FPGA等集成电路芯片中实施。在其他示例中,系统100A可以在常规的台式机、服务器或基于云的计算机系统上实施。尽管存储器110、输入接口120和输出接口130在图1A中被示出为单独的元件,但是在一些示例中,这些元件中的任何一个或全部可以被集成到处理器102A中。
系统100A的处理器102A被配置为提供二值化方案生成模块104A、二值化方案选择模块106A和权重生成模块108A,这些模块各自被配置为执行二值化方法204的过程以生成神经网络的二值权重。处理器102A可以被配置为通过执行存储在存储器110中的指令和/或通过处理器102A中提供的专门配置或专用的硬件逻辑电路来实施这些模块。本文描述的示例可以应用于任何神经网络,包括卷积神经网络。二值化方法204可以作为如图2所示的训练过程200的一部分来执行,或者可以作为单独且独立的过程来执行。
一个简单的神经网络可以包括一个或多个全连接(或隐藏)层。每一层由多个神经元组成,其中每个神经元具有可学习的权重和可学习的偏置。每个神经元从输入层接收输入值,并基于与该神经元相关联的权重和偏置来变换该输入值以生成输出值,该输出值作为输入提供给下一层的一个或多个神经元。该过程一直持续到最后一层生成神经网络的最终输出为止。在本上下文中,一层的权重矩阵是指与该层中的每个神经元相关联的权重值的数组。
卷积神经网络通常用于从由输入层提供的输入中提取特征。在图像处理的上下文中,输入层可以提供图像形式的输入。输入图像可以包括单通道(例如,其中输入的元素对应于黑色或白色的图像像素)。在另一示例中,输入图像可以是包括多个通道的彩色图像,其中每个通道的元素对应于图像的不同颜色分量(例如,红色通道、绿色通道和蓝色通道)的强度或程度。
可以使用不同的滤波器来检测输入图像的不同特征(例如,水平边缘、竖直边缘或对角线边缘)。这些特征是采用滤波器通过卷积提取的,其中通过训练确定和调整该滤波器的权重。内核是指权重的二维数组(或权重矩阵)。每个内核都是唯一的,并用于检测或提取输入图像的不同特征。滤波器是指内核的集合(例如,堆叠在一起以形成三维数组)。例如,为了检测包括多个通道的输入图像中的特定特征,为每个通道提供不同的内核以检测每个通道中的相关特征。在这种情况下,每个内核将具有相同的大小(例如,3×3矩阵),其中滤波器是指用于检测图像的不同通道中的相同相关特征的一组内核。对于只有一个通道的输入图像,仅使用一个内核来检测相关特征,因此,滤波器与内核相同。在卷积神经网络的上下文中,本披露可以应用于单通道输入层的内核,或者应用于多通道输入层的一个或多个滤波器中的内核。
卷积是指基于内核中的权重与来自与该内核相关联的输入通道的输入值的对应矩阵的逐元素乘法(或点积)生成输出值的过程。例如,首先将3×3内核与来自输入通道的3×3输入值矩阵相关联(例如,从该通道的输入值的二维输入矩阵的一个角开始)。将内核中的权重与输入值矩阵之间执行点积运算,并将所得值加在一起以生成初始输入权重矩阵的单个输出值。然后,内核“滑移(slides over)”到输入矩阵的不同位置(例如,如果将“步幅(stride)”参数设置为1,则向左滑动一个元素),以使内核与不同的3×3输入值矩阵相关联。之后,对新的3×3输入值矩阵执行卷积运算以生成对应的输出值。重复该过程,直到内核“滑移”了整个输入矩阵为止。
图2是根据本披露的代表性实施例的训练过程200的示例性流程图,其中,本披露的二值化方法用于生成神经网络的二值权重。在图2所示的示例性实施例中,训练过程200在步骤202处开始,其中,处理器102A获得神经网络的初始权重。初始权重可以是神经网络(例如,卷积神经网络)的一个或多个层(即,稠密层或全连接层)的随机确定的浮点权重值。可替代地,初始权重可以是先前已经为神经网络确定的浮点值或二元权重值。此类预定权重值可以经由输入接口106(例如,从与系统100A通信的单独设备)提供给处理器102A,或者可替代地,处理器102A可以获取存储在存储器104中的任何此类预定权重值。
在步骤204处,处理器102A(及其相关模块104A至108A)被配置为执行用于生成神经网络的二值权重的二值化方法。下文将参考图1B以及图3至图6更详细地对此进行描述。在步骤204处生成的二值权重可以存储在存储器110中,以供处理器102A在训练过程200的后续步骤中使用。
在步骤206处,处理器102A被配置为向神经网络提供在步骤204处生成的二值权重。该神经网络可以由系统100A的处理器102A来实施,或者可替代地由与处理器102A或系统100A通信的单独设备或机器上的处理器来实施。该神经网络被配置为(例如,由处理器102A对其进行配置)对一组训练数据执行训练任务以确定训练结果。例如,训练数据可以包括与不同主题有关的多个训练图像,并且神经网络(当采用在步骤204处生成的二值权重对其进行配置时)将生成一训练结果,指示神经网络最终将每个训练图像中的主题确定为什么结果。
在步骤208处,处理器102A评估在步骤206处生成的训练结果,以评估由在步骤204处生成的二值权重表示的数据模型的准确性。如果步骤208确定模型的准确性是可接受的(例如,训练结果充分接近预期结果或在预期结果的可接受范围内),则训练过程200前进到步骤210,在该步骤中确定该模型可以付诸使用。在这种情况下,可以将与数据模型相对应的二值权重存储在存储器104中,并且还可以经由输出接口108将其提供给单独的设备以在该设备上配置神经网络。训练过程200在步骤210之后结束。然而,如果步骤208确定模型的准确性是不可接受的(例如,训练结果没有充分接近预期结果,或者不在预期结果的可接受范围内),则训练过程200前进到步骤212。
在步骤212处,处理器102A被配置为使用合适的成本函数来生成与在步骤206处生成的训练结果相关联的成本或误差。在步骤214处,使用在步骤212中确定的成本或误差来确定要提供的新权重值(例如,浮点权重),以作为输入在步骤204处提供给二值化方法。例如,步骤214可以涉及基于在步骤212处确定的成本或误差以及先前在步骤204处提供给二值化方法的输入权重(例如,在步骤202处最后获得的输入权重或最后由步骤214确定的权重)来生成新的浮点权重值。可替代地,步骤214可以涉及根据基于在步骤212处确定的成本或误差确定的值来修改先前在步骤204处提供给二值化方法的输入权重。将由步骤214确定的权重存储在存储器104中。之后,训练过程200前进到步骤204,在该步骤中,二值化方法使用由步骤214确定的权重作为输入权重来执行上述步骤。
尽管根据本披露的一个代表性实施例,步骤202和206至214可以由系统100A的处理器102A执行,但是在本披露的其他代表性实施例中,此类步骤可以在与系统100A分开(但与其通信并与其协同工作)的一个或多个计算设备、处理器、芯片组等上执行。
图1B展示了可以由图1A所示的处理器102A实施的二值化方法100B的示例。二值化方法100B可以在神经网络的训练过程中使用,例如,其可以在图2的方法的步骤204中使用。与某些其他二值化方法相比,图1B的二值化方法100B可以减少存储神经网络中使用的二值权重所需的内存量。由于需要较少的存储器资源,因此该方法可以允许使用更便宜的硬件和/或减少操作神经网络所需的功率。下面描述方法100B的各个框。
在框104B处,该方法生成表示从神经网络的一个或多个层的一组输入权重获得的权重分组的一个或多个候选二值权重串。可以将生成的表示权重分组的候选二值权重串视为所述权重分组的候选二值化方案。因此,该方法的这一部分可以被称为二值化方案生成,并且可以由图1A所示的处理器的二值化方案生成模块104A来实施。
在框106B处,从一个或多个候选二值权重串中选择表示权重分组的二值权重串。该选择至少部分基于根据预定编码方法表示候选二值权重串所需的数据比特数。该方法的这一部分可以被视为是选择适当的二值化方案(即,二值权重串),并且可以由图1A的处理器的二值化方案选择模块106A来实施。
表示候选二值权重串所需的数据比特数可以称为候选二值权重串的编码长度。由于选择方法至少部分地基于选定的二值权重串的编码长度,所以该方法可以选择可被更高效地编码的二值权重串。以这种方式,该方法可以减少存储神经网络中的二值化权重所需的内存量。
在一些示例中,框106B中的选择可以选择具有最低编码长度的二值串。例如,二值化方案选择模块可以计算每个候选二值权重串的编码长度,并选择具有最低编码长度的串。在其他示例中,二值化方案选择模块还可以考虑其他标准,诸如但不限于候选二值串是正确的二值串的概率(称为‘全局概率’)或候选二值串对神经网络的准确性的预期影响等。
在框108B处,该方法输出表示用于表示该权重分组的选定二值权重串的数据。在一些示例中,该方法可以输出选定的二值权重串本身。在其他示例中,该方法可以输出用于表示选定的二值权重串的码字(也称为编码),其中,该码字是根据预定编码方法生成的。框108B可以由图1A的权重生成模块106A实施。
现在将参考图3(a)至(d)中所示的具体示例来说明图1B的方法100B。
图3(a)示出了用于神经网络的一组输入权重300,其被分为包括第一分组310和第二分组320的多个权重分组。在图3(a)的示例中,该组输入权重包括八个权重,并被分为两个分组,每个分组由四个权重组成。然而,应当理解,这仅是举例说明,并且实际上该组输入权重可能大的多,因为现代神经网络可能具有数千个权重,并且分组大小可能大于或小于四个权重。
该组权重可以包括神经网络中的所有权重,神经网络的一层或多层的所有权重,或神经网络中的一层或多层中的一些权重;例如,该组可以对应于神经网络的一个或多个层。限定该组输入权重的各种方法在本申请的第2部分中进行了描述。该组输入权重被分为几个分组(也称为编码分组)。每个分组形成一个基本单元,将通过编码方法对该基本单元进行编码,以减少存储权重所需的内存量。
根据预定规则,分组可以具有相同的大小或不同的大小。例如,在图3(a)中,每个分组具有四个权重,前四个权重进入第一分组,后四个权重进入第二分组等等。在另一实施方式中,前四个权重可以进入第一分组,第二四个权重可以进入第二分组,第九个权重可以进入仅由一个权重组成的第三分组,接下来的九个权重以类似的方式分组。编码方法可以是游程长度编码(RLE)方法、霍夫曼方法或其他无损压缩方法。
图3(b)示出了在为每个权重分配了第一二元值(例如,+1)、第二二元值(例如,-1)、或指定为模糊权重之后的权重分组,该模糊权重可以是第一二元值也可以是第二二元值(例如,+1或-1)。可以在将一组输入权重划分为分组之前或之后执行二元值的分配。可以使用各种方法将输入权重分配给这三个类别之一。
在一个示例中,可以将输入权重与预定阈值进行比较,并且如果输入权重高于第一阈值(例如,>0.2),则向其分配第一二元值(例如,+1),如果输入权重低于第二阈值(例如,<-0.2),则向其分配第二二元值(例如,-1),并且其他情况下指定为模糊权重(例如,可以二值化为+1或-1的权重)。在另一示例中,可以对输入权重执行概率分析,并且可以基于概率分析为输入权重分配第一二元值、第二二元值或将其指定为模糊权重。概率分析将在本申请的第2部分中进行详细解释。在一些示例中,可以在确定二元值之前对输入权重进行归一化。
在图3(b)的示例中,可以看出第一分组不包含任何模糊权重。因此,第一分组中的权重分别被二值化为1、1、-1、-1。该二值权重模式可以由附图标记330表示的二值串1100表示。因此,对于第一权重分组仅生成一个候选的二值串330。
在该示例中,第二分组320具有一个模糊权重321(第二分组中的第四权重)。因此,由于该模糊权重321可以被二值化为+1或-1,因此为第二分组生成了两个候选二值权重串0001和0000,并且在图3(b)中由附图标记340和350表示。可以看出,由于模糊权重341、351的可能值不同,候选二值权重串也有所不同。通常,一个权重分组的候选二值权重串的数量将等于2n,其中,n是该分组中模糊权重的数量。因此,尽管在图3的示例中仅示出了两个候选二值权重串,但是在许多情况下,可能存在更大数量的候选二值权重串,尤其是在分组具有更大数量的权重时。
图3(c)示出了对表示每个权重分组的二值权重串的选择。对于第一分组,选择很简单,因为只有一个候选二值权重串。对于具有两个或更多个候选二值权重串的分组,使用选择方法来选择一个候选二值权重来表示该分组。该选择方法可以至少部分地基于候选二值权重串的编码长度。候选二值权重串的编码长度是根据预定编码方法对候选二值权重串进行编码所需的数据比特数。
给定的编码方法可能对于某些比特序列(称为“权重模式”)更高效。在图3(c)的示例中,当将预定编码方法应用于第二分组的第一候选二值权重串340时,编码长度为5比特。当将预定编码方法应用于第二分组的第二候选二值权重串350时,编码长度为1比特。因此,由于第二候选二值权重串350具有较短的编码长度,所以选择第二候选二值权重串350来表示第二权重分组。
图3(d)示出了输出表示选定二值权重串的数据。输出数据可以包括选定的二值串本身,或者可以包括压缩数据,该压缩数据包括表示选定的二值串的码字,其中,该码字是根据预定编码方法生成的。如果选定的二值串以未编码形式输出,则可以随后在存储到神经网络的存储器中之前对它们进行编码。
在图3(c)和(d)的示例中,被选择表示第一分组的二值串330的编码长度是5比特,而被选择表示第二分组的二值串350的编码长度是1比特。因此,如果根据预定编码方法将数据输出为码字,则数据将包括5+1=6比特,而如果二值串以原始未编码形式输出,则数据将为4+4=8比特。由于减少了存储输入权重所需的数据量,因此可以在硬件中以更少的成本、更少的存储器资源和更少的功耗更高效地实施神经网络。
如上所述,在一些示例中,候选二值权重串可以基于每个输入权重与特定二元值相关联的概率。例如,处理器可以包括权重概率分析模块,该权重概率分析模块被配置为基于一组输入权重来生成表示每个所述输入权重与二元值相关联的概率的数据。进一步地,二值化方案生成模块可以被配置为基于该组输入权重的概率来生成多个候选二值权重串。这些概率可以称为‘局部概率’,因为它们是指单个权重。
在图3(c)的示例中,在权重分组具有多个候选二值权重串的情况下,对表示该分组的二值权重串的选择至少部分地基于二值权重串的编码长度。在一些示例中,对二值权重串的选择可以考虑其他因素。通过考虑多个因素,可以选择最佳的二值串。例如,在一些示例中,二值化方案选择模块可以根据除编码长度以外的标准来筛选出某些候选二值权重串,计算候选二值权重串的剩余子集的编码长度,并选择所述子集中具有最低编码长度的候选二值权重串。在其他示例中,可以使用成本函数基于编码长度和其他标准来选择二值权重串。
在一些示例中,二值化方案选择模块可以被配置为至少:生成表示每个所述候选二值权重串的概率值的数据(称为‘全局概率’),生成表示用于根据预定编码方法表示每个所述候选二值权重串的数据比特数的数据,并且基于所述全局概率值和所述数据比特数对所述候选二值权重串执行选择。关于概率分析、局部概率值和全局概率值的进一步示例在本申请的第2部分中进行了描述。
如上所述,二值化方案生成模块被配置为将一组输入权重划分为多个权重分组,并且将预定编码方法应用于权重分组。
预定编码方法可以通过使用一个或多个编码方案来对二值权重串进行编码。编码方案将二值权重串编码为码字。在一些示例中,预定编码方法对每个权重分组使用相同的编码方案。本申请第2部分中给出的示例对每个权重分组使用相同的编码方案。
在其他示例中,预定编码方法可以对权重分组中的至少一些使用不同的编码方案。例如,对于给定长度的二值权重串,编码方案可以将每个可能的权重模式(以及因此每个可能的二值权重串)映射到相应的码字。不同的编码方案将至少一个相同的权重模式映射到不同的码字。
二值化方案生成模块可以被配置为将该组输入权重划分为多个权重分组,并且预定编码方法可以基于预定规则从多个编码方案中选择每个权重分组的编码方案。例如,预定规则可以规定编码方法使用编码模式的预定序列。本申请的第3部分描述了使用多个不同编码方案的示例。
第2部分——使用概率分析的处理器和方法
图4A示出了类似于图1A的系统100A的数据处理系统400A。系统400A包括处理器402、存储器410、一个或多个输入接口420和一个或多个输出接口430,它们可以经由数据总线412或其他通信手段彼此通信,这些部分与在图1A中描述的相同。处理器402被配置为提供二值化方案生成模块402b、二值化方案选择模块402c和权重生成模块402d,这些模块类似于图1A中描述的具有相同名称的模块。图4A的系统与图1A的系统的不同之处在于,处理器402进一步被配置为提供概率分析模块402a,该概率分析模块确定输入权重与二元值相关联的“局部概率”或“局部权重概率”。
图4B是示出图4A的处理器402A的操作方法400B的示例性流程图。方法400B实施为用于二值化神经网络的输入权重的二值化方法。方法400B可以用作神经网络的训练方法的一部分,诸如图2的方法的步骤204,或者可以独立地和单独地实施。现在将描述方法400B的步骤。
在步骤204a处,处理器102的权重概率分析模块102a被配置为基于神经网络的(例如,一个或多个层的)一组输入权重,生成至少表示每个输入权重与二元值相关联的“局部”权重概率的数据。在本上下文中,二元值是指两个候选值之一(例如,1和-1,或1和0)。输入权重可以是从图2中的训练过程200的步骤202或214接收的权重,或者可以是从存储器104获取的权重,或者可以是经由输入接口106提供给处理器402的权重。在图4所示的实施例中,步骤204a可以包括步骤204a-1和204a-2。
在步骤204a-1处,权重概率分析模块402a被配置为基于输入权重生成一组归一化的权重集。这涉及将输入权重变换为预定权重范围内的对应权重值,并将所述对应权重值作为输入权重。例如,训练后每一层的浮点输入权重(例如,每个BNN层中的权重)的最大绝对值通常不等于1,或者不一定落在期望值的范围(例如,介于1和-1之间)内。为了帮助更加准确且高效地估计每个输入权重的概率,步骤204a-1被配置为基于要归一化的特定输入权重的值(x)与输入权重(x)所属的层的所有输入权重的最大绝对值之间的关系来线性地缩放每个输入权重。该关系由等式1表示,其中,x表示要归一化的特定输入权重的值,X表示输入权重(x)所属的层的所有输入权重的值,并且x'表示由等式1生成的归一化权重值。
根据等式1生成的归一化权重将落在+1和-1的范围内。本领域技术人员将理解,还可以在不同的二元值范围(例如,1到0之间)内对权重进行归一化。图7是由等式1表示的示例性函数关系图,其中,范围从+1.5至-1.5的原始输入权重值按比例缩放至范围从+1至-1的归一化权重值。
在步骤204a-2处,权重概率分析模块402a被配置为基于神经网络的(例如,一个或多个层的)第一组归一化输入权重,生成至少表示每个输入权重在第二组选定或特定的输入权重中与一个二元值相关联的“局部”权重概率的数据。在本上下文中,第二组选定或特定的输入权重可以包括:
i)选自神经网络的至少一层的一些输入权重;
ii)选自神经网络的所有层的一些输入权重;
iii)神经网络的至少一层的所有输入权重;或
iv)神经网络的所有层的所有输入权重。
可以基于以下各项确定“局部”权重概率:
i)输入权重的不同候选值与对应概率之间的预定关系;
ii)与输入权重相对应的权重的一个或多个先前确定的概率(例如,基于求和、平均值、计数、频率或基于与输入权重相对应的权重的一个或多个先前确定的概率而确定的其他值,其中,此类值可以基于针对神经网络或由神经网络执行的一个或多个先前训练事件来确定);和/或
iii)与输入权重相对应的权重的一个或多个先前确定的权重值(例如,基于求和、平均值、计数、频率或根据先前训练事件基于与输入权重相对应的权重的一个或多个先前确定的权重值而确定的其他值,其中,此类值可以基于针对神经网络或由神经网络执行的一个或多个先前训练事件来确定)。
图8是用于确定不同输入权重的局部权重概率的示例性预定关系的图。第一函数800可以用于确定输入权重(在水平轴上)与二元值+1相关联的概率(在竖直轴上)。函数800可以基于S型函数、双曲线正切函数、反正切函数或定义不同输入权重值与对应概率之间的关联的任何其他合适的函数。函数800的特征在于拐点,在该拐点处,输入权重0对应于概率0.5,并且拐点处的斜率约为1.6。第二函数802可以用于确定输入权重与二元值-1相关联的概率。在图8所示的示例中,函数802是函数800的反函数。
在本披露的代表性实施例中,基于下文的等式2a、2b和3定义用于确定不同输入权重的局部权重概率的预定关系,其中,等式2a表示输入权重(x')与二元值+1相关联的概率(p+1),并且等式3表示输入权重(x')与二元值-1相关联的概率(p-1)。
等式2b是表示输入权重(x')与二元值+1相关联的概率(p+1)的替代方式。
p-1=1-p+1 等式3
参考图4B,在步骤204b处,针对输入权重的选定分组(或编码分组),处理器402的二值化方案生成模块402b被配置为基于针对选定输入权重确定的概率生成至少表示一个或多个候选二值权重矩阵(或方案)的数据。该候选二值权重矩阵对应于本申请的第一部分中的候选二值权重串。在图4B所示的实施例中,步骤204b可以包括步骤204b-1和204b-2。
在步骤204b-1处,处理器402的二值化方案生成模块402b被配置为定义输入权重的至少一个选定分组(或编码分组)。每层的权重矩阵通常具有多个维度。卷积层通常将具有至少四个维度,包括例如:输入通道、输出通道、内核行和内核列。全连接层通常会具有至少两个维度,包括例如输入大小和输出大小。步骤204b-1涉及将每层的权重矩阵划分为权重的较小选定分组(或编码分组)。可以沿着该层的任何一个或多个维度形成权重的选定分组。可以以这种方式形成一层的权重的一个或多个选定分组。在生成权重的多个选定分组后,根据下面的步骤204b-2、204c、204d处理每个选定分组,并且基于步骤204c和204d针对所有(或至少一些)选定分组生成的输出执行步骤204e处的选择。例如,如图9所示,可以将3×3内核900视为权重的一个选定分组(或编码分组),其中,内核的行和列为3。在图9中,w0到w8表示3×3内核900、908、910、912中不同权重的位置。可替代地,可以根据该层的一个或多个维度基于其他预定选择标准来形成权重的选定分组,这些其他预定选择标准包括例如:
i)来自卷积层的内核900的选定行902的一个或多个权重;
ii)来自卷积层的内核900的选定列904的一个或多个权重;
iii)来自与卷积层的同一通道或滤波器相关联的不同内核908、910、912的一个或多个权重906(例如,其中权重906是从每个内核908、910、912中相同的对应位置中选择的——诸如包括每个内核908、910、912中的第一行的第一位、然后是每个内核908、910、912中的第一行的第二位、然后是每个内核908、910、912中的第一行的第三位、然后是每个内核908、910、912中的第二行的第一位等);
iv)来自与同一卷积层相关联的不同滤波器916、918、920的不同对应内核的一个或多个权重914(例如,其中权重914是从每个滤波器916、918、920中用于特定通道(例如,红色通道)的内核中相同的对应位置中选择的——诸如包括滤波器916、918、920中用于红色通道的内核中的第一行的第一位、然后是滤波器916、918、920中用于红色通道的内核中的第一行的第二位、然后是滤波器916、918、920中用于红色通道的内核中的第一行的第三位、然后是滤波器916、918、920中用于红色通道的内核中的第二行的第一位等);
v)全连接层的一个或多个输入权重;
vi)全连接层的一个或多个输出权重;
vii)以上一个或多个的组合;和/或
viii)以上一个或多个与一个或多个其他预定选择标准的组合。
如从以上示例可以理解的,预定选择标准定义了如何选择并以一定顺序排列来自一层的(一个或多个滤波器的)一个或多个内核的权重的基础。任何基础都可以用作预定选择标准,只要其不涉及随机选择并且层中的每个权重只被选择一次(以避免再次选择相同的权重)即可。
在步骤204b-2处,处理器402的二值化方案生成模块402b被配置为基于针对在步骤204b-1中生成的输入权重的选定分组确定的概率,生成至少表示一个或多个候选二值权重矩阵(或方案)的数据。
在权重的每个选定分组(或编码分组)中,每个浮点权重具有权重与第一二元值(例如,+1)相关联的第一“局部”权重概率,并且还可以具有权重与第二二元值(例如,-1)相关联的第二“局部”权重概率。基于与每个权重相关联的第一“局部”权重概率和第二“局部”权重概率之一或两者,生成一个或多个候选二值权重矩阵。
例如,根据本披露的代表性实施例,处理器402生成可以基于与每个权重相关联的第一“局部”权重概率和第二“局部”权重概率的不同组合而形成的所有候选二值权重矩阵。例如,在权重的选定分组是3×3内核的情况下,总共形成29(即,512)个不同的3×3候选二值权重矩阵。根据下文描述的步骤204c和204d,对每个生成的候选二值权重矩阵执行进一步处理。
在本披露的另一个代表性实施例中,处理器402被配置为基于每个权重的第一“局部”概率和第二“局部”概率中的至少一个以及预定概率阈值来生成一个或多个候选二值权重矩阵。例如,这可以通过首先从与针对每个权重确定的第一“局部”概率和第二“局部”概率中的较大者相对应的二值权重生成初始二值权重矩阵来实现。可替代地,可以基于每个权重的第一“局部”概率和第二“局部”概率之一与表示预定概率值的预定选择阈值的比较来生成初始二值权重矩阵(例如,如果第一概率等于或高于预定选择阈值,则将权重设置为与第一“局部”概率相关联的二元值,并且如果第一概率低于预定选择阈值,则将权重设置为另一二元值)。
然后,处理器402可以将初始权重矩阵中每个权重的“局部”概率与表示预定概率值的预定评估阈值进行比较。对于“局部”概率等于或超过评估阈值的权重,二值权重保持不变。然而,对于“局部”概率低于评估阈值的权重,这些权重没有足够强的概率与其当前二元值相关联,并且因此,需要考虑到权重与其当前二元值(例如,+1)或另一二元值(例如,-1)相关联的概率进行进一步分析。
处理器402然后可以基于与“局部”概率低于评估阈值的权重相关联的第一“局部”权重概率和第二“局部”权重概率的不同组合,生成可以从上述初始权重矩阵形成的所有候选二值权重矩阵。处理器402基于被确定为与所述第一二元值或所述第二二元值相关联的所述选定输入权重的数量来生成多个候选二值权重矩阵,其中,每个所述二值权重矩阵包括权重值的不同组合。例如,取决于初始二值权重矩阵中“局部”概率低于评估阈值的权重数(n),处理器402将生成候选二值权重矩阵的2n个不同组合。候选二值权重矩阵对应于本申请第1部分中提到的候选二值权重串。
可以通过如图10所示的示例更好地理解用于生成候选二值权重矩阵的方法。处理器402首先接收一层的输入浮点权重(例如,对应于图2中的步骤202或214),这些输入浮点权重在该示例中被示出为输入权重矩阵1002。将输入权重归一化为从+1到-1的预定范围内的值(例如,对应于图4B中的步骤204a-1)以产生归一化权重矩阵1004。确定每个归一化输入权重与候选二元值之一或两者相关联的“局部”权重概率(例如,对应于图4B中的步骤204a-2)。在该示例中,矩阵1006表示归一化输入权重与二元值+1相关联的“局部”权重概率,并且矩阵1008表示归一化输入权重与二元值-1相关联的“局部”权重概率。在该示例中,权重的选定分组(或编码分组)是3×3的权重矩阵(例如,对应于图3中的步骤204b-1)。然后基于“局部”权重概率生成初始二值矩阵1010(例如,对应于图3中的步骤204b-2)。这可以通过不同的方式来实现。一种方法是考虑矩阵1006或1008之一中的权重,其中,在使用矩阵1006的情况下,如果矩阵1006中该权重的概率等于或超过预定选择阈值(例如,50%),则将初始权重矩阵中权重的二元值确定为+1,否则将权重的二元值确定为-1。可以以类似方式使用矩阵1008来确定初始权重矩阵中的哪些权重应具有值-1。可替代地,初始二值矩阵1010中权重的二元值的生成取决于哪个矩阵(1006或1008)中该权重具有更大的概率。例如,如果矩阵1006中与某一权重相对应的概率值比矩阵1008高,则该权重的二元值为+1。然后,处理器402基于二值权重和初始权重矩阵1010中每个权重的“局部”权重概率来生成一个或多个候选二值权重矩阵(例如,对应于图3中的步骤204b-2)。例如,在将初始权重矩阵1010中每个权重的“局部”权重概率与评估阈值(例如,55%)进行比较时,处理器402确定只有一个权重的“局部”权重概率低于评估阈值(在矩阵1012中以灰色示出)。然后,处理器402生成两个候选二值权重矩阵1014和1016(即,2n个组合,在该示例中n=1),以表示来自初始权重矩阵的二值权重的不同组合,其中,“局部”概率低于评估阈值的权重可以取值+1(矩阵1014中)或-1(矩阵1016中)。
参考图4B,处理器402被配置为提供二值化方案选择模块402c,该二值化方案选择模块执行图3中的步骤204c、204d和204e以选择在先前步骤中生成的候选二值权重矩阵之一。
在步骤204c处,二值化方案选择模块402c被配置为生成至少表示每个候选二值权重矩阵的矩阵特定概率值的数据。矩阵特定概率值也可以称为‘全局概率’,因为它是指整个二值权重矩阵或二值权重串的概率,而不是单个权重的概率。根据一个实施例,生成矩阵特定概率值涉及基于每个候选二值权重矩阵的所有“局部”权重概率的乘积来生成一个值。在图11所示的示例中,矩阵1102、1104、1106和1108表示四个不同的候选二值权重矩阵中的二值权重,矩阵1102'、1104'、1106'和1108'表示与矩阵1102、1104、1106和1108中的每个二值权重相对应的权重概率。矩阵1102'、1104'、1106'和1108'的矩阵特定概率值分别为0.025038、0.02507、0.020060和0.020052。
在步骤204d处,二值化方案选择模块402c用于生成至少表示用于根据预定编码方法表示每个候选二值权重矩阵的数据比特数的数据。首先,将每个候选二值权重矩阵中的二值化权重编码为1和0的字符串。例如,在图11中,将在矩阵1102中逐行获取的二值权重(即,1、-1、-1、1、1、-1、-1、1、1)编码为一比特串(即,1、0、0、1、1、0、0、1、1),其中,比特值1表示一二值权重1,并且比特值0表示另一二值权重(例如,-1)。
然后,将比特串划分为若干个比特分组,以进行编码。参考图12中的示例,表示来自3×3候选二值权重矩阵(例如,1102、1104、1106和1108)的权重的比特(b0至b8)可以按每3个连续比特进行分组(1202、1204和1206),或按每4个连续比特分为两组(1208和1210)和一个剩余比特(1212)。图12中所示的分组仅是示例,并且可以使用任何形式的分组(根据任何预定义的分组标准)。
根据本披露的代表性实施例,使用广义游程长度编码(RLE)对表示二值权重的比特串进行编码。然而,可以替代地使用其他编码方法,诸如广义霍夫曼编码。广义RLE的结果主要由两个主要部分组成:第一部分表示同一符号或同一组符号的编码排列方式,其中每个符号由一个或多个比特组成,第二部分表示与所述同一符号或同一组符号相对应的符号信息。广义霍夫曼编码方法是根据每个符号或每组符号的出现概率定义其相应的编码长度。
下文参考图11、图12和表1描述了对用于表示3×3二值权重矩阵的比特串进行RLE编码的示例,该二值权重矩阵已按每3个连续比特划分为3组(例如,如图12所示)。
i)如果每行1202、1204和1206中的比特模式相同,则可以使用编码模式指示符“00”以及其中一行的比特串一起对这些行进行编码(参见如下所示表1中的Data0字段)。在这种情况下,编码需要5比特。
ii)如果行1202和1204中的比特模式相同,而行1206中的比特模式不同,则可以使用编码模式指示符“01”以及行1202或1204的比特串(参见表1中的Data0字段)和行1206的比特串(参见表1中的Data1字段)一起对这些行进行编码。在这种情况下,编码需要8比特。
iii)如果行1202和1206中的比特模式相同,而行1204中的比特模式不同,则可以使用编码模式指示符“01”以及行1202或1206的比特串(参见表1中的Data0字段)和1204的比特串(参见表1中的Data1字段)一起对这些行进行编码。在这种情况下,编码需要8比特。
iv)如果行1204和1206中的比特模式相同,而行1202中的比特模式不同,则可以使用编码模式指示符“11”以及每行的比特串一起对这些行进行编码(参见表1中的Data0、Data1、Data2字段)。在这种情况下,编码需要11比特。
v)如果每行1202、1204和1206中的比特模式都不同,则可以使用编码模式指示符“11”以及每行的比特串一起对这些行进行编码(参见表1中的Data0、Data1、Data2字段)。在这种情况下,编码需要11比特。
表1
如本领域技术人员可以理解的,在以上示例中,可以在如上所示的三个条件(ii)至(iv)中的任何两个条件下将编码模式指示符01和10分配给比特串,而将编码模式指示符11分配给剩余的一个条件。此外,可以以任何方式(例如,通过预定设置或参数)来定义用于在以上五个条件下对比特串进行编码的编码模式指示符,而不限于以上示例。表1中的每一行都可以与一不同于表1所示的唯一编码模式指示符相关联。例如,可以将用于在以上五个条件下对比特串进行编码的编码模式指示符定义为11、10、01、00、00(这样表1的第1行至第4行的编码模式指示符将分别为11、10、01、00)。注意,向表1的每一行分配不同的(例如,2比特)编码模式指示符不会改变对表1的每一行中描述的(或在以上条件(i)至(v)中描述的)数据类型进行编码的基础。此外,表示二值权重的比特串可以以任何方式进行分段,例如,按列进行分段,而不限于如图12所示的分段方式(即,按行进行分段)。
在步骤204e处,二值化方案选择模块402c用于基于候选二值权重矩阵的对应矩阵特定概率值(在步骤204c处确定的)和用于编码的数据比特数(在步骤204d处确定的)来对候选二值权重矩阵执行选择。如图5和图6所示,有两种方法可以实现此目的。
如图5所示,根据本披露的一个代表性实施例,二值化方案选择模块402c(在步骤204e-1处)首先基于候选二值权重矩阵的矩阵特定概率值来选择一个或多个候选二值权重矩阵(例如,具有最高矩阵特定概率值的候选二值权重矩阵,或矩阵特定概率值高于预定概率阈值的候选二值权重矩阵)。在步骤204e-2处,二值化方案选择模块402c基于对每个矩阵进行编码所需的比特数(例如,所需编码比特数最少),从步骤204e-1处选择的候选二值权重矩阵中选择一个。
如图6所示,根据本披露的另一代表性实施例,二值化方案选择模块402c(在步骤204e-1'处)首先基于对每个矩阵进行编码所需的比特数(例如,所需编码比特数最少,或所需编码比特数低于预定比特数阈值),选择一个或多个候选二值权重矩阵。在步骤204e-2'处,二值化方案选择模块402c基于每个矩阵的矩阵特定概率值(例如,具有最高矩阵特定概率值),从步骤204e-1'处选择的候选二值权重矩阵中选择一个。
通过同时考虑矩阵特定概率和编码长度,可以选择最佳的二值权重矩阵来表示权重分组。以这种方式,可以在保持神经网络的准确性的同时对权重进行二值化和高效编码以减少存储神经网络所需的内存量。
参考图4B,在步骤204e处,处理器402用于提供权重生成模块402d,以根据在步骤204e中选择的候选二值权重矩阵来生成一个或多个二值权重的数据。
图4C是根据本披露的代表性实施例的另一二值化方法204'中的关键步骤的示例性流程图。除了步骤204a-1'、204a-2'和204a-3'以外,二值化方法204'中的步骤与图4B所示的方法400B基本相同(其中相同的附图标记指示相同的步骤)。在步骤204a-1'处,基于每个浮点输入权重的符号生成二值化权重矩阵(例如,将二值权重+1分配给等于或大于0的输入权重,并且将二值权重-1分配给低于0的输入权重)。在步骤204a-2'处,将二值化权重矩阵存储在存储器104中,并且步骤204a-1'和204a-2'重复预定迭代次数(N),其中,例如,基于每次迭代中使用的不同训练数据生成不同的输入权重集。在步骤204a-3'处,基于所存储的二值化权重矩阵针对每个输入权重生成“局部”权重概率。例如,在步骤204a-3'中,可以基于在N次迭代中权重被分配为+1的二值权重的计数(n)来确定权重的“局部”概率(在这种情况下,可以基于关系n/N来生成权重与二值+1相关联的概率)。可以类似地生成相同权重与二值-1相关联的“局部”概率(例如,基于关系1-n/N)。
第3部分——使用多种编码模式的处理器和方法
如以上在本申请的第1部分和第2部分中所述,本文所描述的处理器和方法可以将神经网络的一组输入权重分为多个分组。可以生成表示每个权重分组的一个或多个候选二值权重串。对于具有多于一个候选二值权重串的权重分组,可以至少部分地基于根据预定编码方法表示比特串所需的比特数(即,编码长度)来选择表示该分组的二值权重串。
编码方法可以使用至少一个编码方案来将二值权重串映射到码字。在本申请的第2部分的示例中,编码方法使用单个编码方案,即,对于每个权重分组使用相同的编码方案。
例如,示例编码方案如以上第2部分的表1所示。由于表1的编码方法中只有一个编码方案,因此将始终以相同的方式对给定的二值权重串进行编码,而不管其属于哪个分组。例如,按照表1中的规则,二值权重串0、0、0、0、0、0、0、0、0将始终被编码为码字00000(编码指示符00和比特b1、b0、b2),而不管其属于哪个权重分组。
本申请的第3部分描述了编码方法使用多个编码方案的示例。这可以有助于在保持神经网络的准确性的同时改善通过编码方法实现的压缩。
图13示出了根据本申请的第3部分的用于二值化神经网络的权重的方法1300的示例。方法1300可以由处理器实施,例如,诸如图1A或图4A所示的处理器。图13的方法1300可以用作训练方法的一部分,诸如图2中的二值化步骤204,或者可以单独地并且独立于任何训练方法使用。现在将描述该方法。
在框1310处,将神经网络的一个或多个层的一组输入权重划分为多个权重分组。
在框1320处,针对每个权重分组生成表示该权重分组的一个或多个候选二值权重串。
框1310和1320例如可以由二值化方案生成模块执行,诸如图1A的模块104A或图4A的模块402b。
在框1330处,针对至少一个权重分组根据预定编码方法确定用于表示权重分组的至少两个候选二值权重串的编码长度。
在框1340处,至少部分基于所确定的编码长度从至少两个候选二值权重串中选择表示至少一个权重分组的二值权重串。框1340可以以原始形式或编码形式(例如,作为通过预定编码方法生成的码字)输出选定的二值权重串。
可以针对框1310和1320的多个权重分组中的至少一个权重分组执行框1330和1340。至少一个权重分组可以包括多个权重分组中的所有权重分组或多个权重分组的子集。例如,具有至少两个候选二值权重串的权重分组。框1330和1340可以由二值化方案选择模块来执行,诸如图1A中的模块104B或图4A中的模块402c。对于仅具有一个候选二值权重串的权重分组,选择该候选二值权重串来表示该分组,并且可能不需要计算编码长度。
在框1350处,输出表示每个分组的选定二值权重串的数据。框1350例如可以由权重生成模块执行,诸如图1A中的模块108A或图4A中的模块402d。
在一些示例中,在框1350处,权重生成模块可以将数据作为已经根据预定编码方法进行了编码(即,压缩)的已编码二值权重串(例如,码字)输出,使得输出数据占用更少的存储空间。在其他示例中,权重生成模块可以输出每个分组的未压缩的选定二值权重串,并且可以在稍后对数据进行编码(即,压缩)。例如,当将数据写入要实施神经网络的推理阶段的设备时,可以对数据进行编码(即,压缩)。
重要的是要注意,图13中提到的预定编码方法被配置为根据预定序列从多个编码方案中选择每个权重分组的编码方案。根据预定序列使用多个编码方案可以在保持神经网络的准确性的同时增强压缩。
图14示出了框1330的示例实施方式。
在框1410处,根据预定序列从多种编码模式中选择权重分组的编码模式。
在框1420处,根据选定的编码模式,确定权重分组的至少两个候选二值权重串的编码长度。
在框1430处,至少部分地基于所确定的编码长度,选择表示权重分组的二值权重串。
二值化方案选择模块可以对图13的框1330所应用于的每个权重分组执行该过程。以这种方式,二值化方案选择模块可以选择每个分组的二值权重串,使得当根据预定方法对表示二值串的数据进行编码时,该二值权重串将最适合应用于该分组的编码方案。
由于预定编码方法根据预定序列利用编码方案,因此编码数据不必包括附加数据比特(例如,编码方案指示符)来指示针对编码数据的每个部分使用了哪个编码方案。例如,解码器可以被配置为根据相同的预定序列通过使用相同的编码方案来对编码数据进行解码。以这种方式,通过使用预定序列,可以甚至进一步减少存储表示二值权重串的数据所需的内存量。
在存在多个编码方案的情况下,可以取决于给定的二值权重串所属的分组来对给定的二值权重串进行不同的编码。例如,方案选择模块可以被配置为基于根据第一编码方案确定的编码长度选择一个权重分组的二值权重串,并且基于根据第二编码方案确定的编码长度选择另一权重分组的二值权重串。编码方案将二值权重串编码为码字,并且不同的编码方案将至少一个相同的二值权重串编码为不同的码字。如将在下面解释的,使用多个不同的编码方案可以提高对于包括多个权重分组的一组输入权重的压缩,同时仍然保持神经网络的准确性。
本发明人设计了各种编码方案,以试图实现更好的压缩率。压缩率定义为当未经压缩表示二值化权重时(即,以未编码形式)的比特数除以通过压缩表示二值化权重所需的比特数(即,当二值化权重转换为二值权重串时并对二值权重串进行编码时)。
表2示出了本发明人设计的一个编码方案的示例。
表2
将表2的编码方案应用于具有4比特长度的二值权重串。对于长度为4比特的二值权重串,有24=16个可能的不同权重模式,即0000、0001、0010、0011…1111。因此,编码方案将这些可能的权重模式中的每一个映射到不同的码字。在这个编码方案中,生成码字的方式取决于权重模式的类型。
在第一种类型的权重模式中,如第1行所示,所有二值权重都相同。有两种所有权重都相同的可能权重模式:0000和1111。这些权重模式被编码为0_b0,其中,下划线“_”之前的数据比特指示码字的前缀,并且下划线“_”之后的(多个)数据比特指示码字的数据段。B0指示权重模式中的第一比特的值。因此,如果权重模式为0000,则前缀为0,数据段为b0,即0,因此码字将为00。然而,如果权重模式为1111,则b0为1,因此码字将为01。在任一情况下,编码长度均为2比特。
如第2行所示,第二种类型的权重模式包括所有其他可能的权重模式。4比特长的比特串中有14种这样的其他可能的权重模式。这些权重模式编码为1_b0b1b2b3,其中,1是前缀并且b0b1b2b3是码字的数据段。b0、b1、b2和b3分别指示权重模式中的第一比特、第二比特、第三比特和第四比特的值。因此,例如,如果权重模式为1001,则码字将为11001;如果权重模式为1010,则码字将为11010,等等。在每种情况下,编码长度均为5比特。
因此,使用表2的编码方案,将使用2比特码字对与权重模式0000或1111相匹配的二值权重串进行编码,而将使用5比特码字对与其他权重模式相匹配的比特串进行编码。原始的二值权重串具有4比特。因此,只要有足够数量的二值权重串与1111或0000权重模式相匹配,该编码方案就将实现合理的压缩率。
由于图13和图14的二值化方法至少部分地基于编码长度选择二值权重串,因此当使用表2的编码方案时,二值化方法将优先选择与权重模式1111和0000相匹配的二值权重串,这些二值权重串具有低编码长度。
表2的编码方案是将二值权重串编码成固定长度的前缀和可变长度的数据段的多个可能编码方案中的一个示例,其中,前缀的值决定数据段的长度。将理解的是,表1的编码方案也以这种方式工作(在表1中,权重模式指示符充当前缀,而Data1、Data2和Data3的内容充当数据段)。
为了进一步提高压缩率,本发明人修改了表2的编码方案,并提出了表3所示的编码方案。
表3
表3的编码方案类似于表2,并使用相同的符号,但是不同之处在于,第一种类型的权重模式仅包括单个权重模式0000,该权重模式被编码为码字0。即,码字仅包括前缀且没有数据段。因为与0000相匹配的二值权重串的编码长度只有1比特长,所以如果存在大量二值权重串与该权重模式相匹配,则压缩率将比表2的编码方案更好。
将理解的是,尽管在表3中最低长度码字是0并且权重模式0000被分配了最低长度的码字,但这仅是示例。在其他类似的编码方案中,可以向不同的模式(例如,1111)分配最低长度的码字。进一步地,最低长度的码字可以是1,其他码字的前缀可以是0。因此,表3是码字包括前缀和可变长度数据段的编码方案类型的一个示例,并且其中,第一前缀值对应零长度数据段,并且第二前缀值对应长度等于被编码的二值权重串的长度的数据段。
换言之,如果二值权重串与编码方案的预定权重模式相匹配,则编码方案将二值权重串编码成第一前缀值并且无数据段;否则,将二值权重串编码成第二前缀值和包括二值权重串的数据段。
本发明人在神经网络的多组权重上测试了上述编码方案,以便评估可实现的压缩率和重新训练准确性。结果在表4中示出。
表4
表4的第一行示出了简单的量化,其中,基于神经网络的每个输入权重的符号为每个输入权重分配二值权重。在这种情况下,未进行压缩,但是重新训练准确性为95%。重新训练准确性是指与使用非二值化浮点权重的同一神经网络的准确性相比,二值化神经网络在对输入特征图进行分类时的准确性(在如图2的步骤206-214所示的重新训练之后)。
第二行和第三行示出了使用本申请第1部分和第2部分所述的二值化方法的结果,其中,表示神经网络的输入权重的二值权重串是通过仅使用单个编码方案的编码方法、根据编码长度选择的。当使用表2的编码方案时,实现了中等程度的压缩,并且重新训练准确性为94.9%。然而,当使用表3的编码方案时,尽管可以实现较高程度的压缩率,但重新训练准确性却骤降为20%。即使在重新训练神经网络之后,也无法恢复这种准确性损失。
本发明人推断,表3的编码方案可能由于过度选择了仅包含0的二值权重串而降低了二值化神经网络的准确性。因此,为了提高准确性,本发明人开发了使用多个编码方案的编码方法,希望由一个编码方案引起的任何选择偏置将由(多个)其他编码方案的选择偏置来平衡。表5示出了该方法与表4的方法相比的结果。
表5
表5的前三行与表4相同。最后一行示出了根据预定序列在第一编码方案与第二编码方案之间交换的编码方法。第一编码方案与表4的编码方案相同。第二编码方案类似于第一编码方案,区别在于,将1比特码字0分配至权重模式1111(而不是0000)。因此,第二方案将二值权重串选择偏向于所有二值权重均为1的权重模式。第一编码方案和第二编码方案被认为是不平衡的,但是通过在第一编码方案与第二编码方案之间交替,编码方法达到了平衡。发现该方法实现了高压缩率,同时将重新训练准确性保持在94.9%。
通过进一步的工作,本发明人发现,通过包括多个编码方案的编码方法可以实现高压缩和重新训练准确性,该多个编码方案中的至少一些编码方案是不平衡的。条件是根据预定序列使用编码方案,这在组成一组输入权重的多个权重分组上平衡编码方案,从而平衡该组输入权重的二值化。现在将解释和定义平衡和不平衡的概念。
本发明人研究了神经网络的特性,以确定为何准确性会下降这么多,并发现所测试的神经网络中原始(非二值化)输入权重值的分布主要接近于0。实际上,如图15所示,约60%的输入权重在-0.05到0.05的范围内。由于在0值附近有许多权重,因此许多权重可能被认为是模糊的,因此可以更改某些权重的二元值以创建与高度可压缩权重模式相匹配的二值权重串。结果,本文描述的编码方案和二值化方法能够实现高度的压缩。
通过进一步的研究,本发明人发现,根据本披露的二值化方法二值化的神经网络的准确性对一组二值化权重中的高二元值与低二元值的比率(例如,1与0的比率)敏感。具体地,通过二值权重串选择产生的高二元值与低二元值的比率与通过根据输入权重的符号分配二元值的简单量化(即,表4和表5的第1行的方法)产生的高二元值与低二元值的比率明显不同,这导致准确性下降。
因此,不平衡编码方案是这样一种编码方案,在该编码方案下,根据不平衡编码方案的被选择用于表示权重分组的二值权重串具有与已经基于权重的符号执行二值化的情况相比明显不同的高比特与低比特的比率。
编码方法可以根据预定序列部署多个不平衡编码方案,从而实现针对一组输入权重的平衡二值化。当被选择用于表示一组输入权重的二值串具有与已经基于输入权重的符号执行二值化的情况相比基本相同的高比特与低比特的比率时,该组输入权重在二值化后整体上是平衡的。该组输入权重可以是神经网络的一个或多个层的输入权重和/或可以如本申请的第2部分中所解释的那样定义。
预定序列可以整体上和/或针对神经网络的各个部分来平衡二值化后的神经网络的输入权重。在一些示例中,预定序列可以平衡神经网络的每一层的二值化或神经网络的其他较小部分的二值化。在神经网络的每一层都平衡的情况下,整个神经网络将是平衡的,但是据认为,由于每一层都是平衡的,所以重新训练的准确性可能更高。
以上已经参考输出数据解释了平衡和不平衡的概念。现在将描述产生平衡和不平衡编码方案的特定结构特性以及实现平衡的预定编码方案序列的结构特性。
每个编码方案将多个可能的权重模式映射到多个码字。多个可能的权重模式可以包括具有预定长度(该预定长度等于正被编码的分组中的权重数)的一些或所有可能的权重模式。例如,对于4比特的二值权重串,有24=16个可能的权重模式。因此,用于具有4比特的二值权重串的编码方案会将16种可能的权重模式映射到16个不同的码字。一些码字可能比其他码字短。一些编码方案具有最短长度的码字,其比编码方案中的所有其他码字都短。
在本披露的一些示例中,预定编码方法包括多个编码方案,其中,每个编码方案将最短长度的码字分配给选定的权重模式,其中,每个编码方案将最短长度的码字分配给不同的权重模式。
在一些示例中,至少一些编码方案仅将单个权重模式分配给它们的最短长度的码字。例如,表5的第4行中的方案1将最短长度的码字(0)分配给权重模式0000,而表5的第4行中的方案2将最短长度的码字(0)分配给权重模式1111。
尽管已经参考游程长度编码(RLE)并且更具体地参考具有前缀和可变长度数据段的RLE解释了编码方案,但是本披露不限于此,并且平衡和不平衡编码的概念也适用于其他类型的编码方案。表6中示出了霍夫曼编码方案的示例,该编码方案没有前缀,但是将最低长度的码字分配给权重模式0000。当然,这仅是霍夫曼编码方案的一个示例,并且在其他示例中,最短长度的码字可以分配给不同的权重模式。
二值化方法将优先选择与具有最短长度的码字的权重模式相匹配的二值权重串。因此,可以将编码方案中的最短长度的码字分配给在神经网络中频繁出现或预期频繁出现的权重模式。将单个选定权重模式分配给最短长度的码字的编码方案通常将是不平衡的。
由于一个编码方案可以根据所述编码方案将权重分组的二值化偏置为具有最短长度的码字的第一二值权重串,而另一个编码方案可以根据该另一个编码方案将权重分组的二值化偏置为具有最短压缩码的第二特定二值权重串,其中,第一二值权重串和第二二值权重串彼此不同,因此本披露的示例提出根据预定序列使用多个编码方案以使多个权重分组的二值化平衡。
因此,如图16所示,根据本披露的示例方法1600提出使用使编码方案平衡的预定序列。编码方法1600包括多个编码方案1600-1…1600-N。其中至少两个编码方案是不平衡的,但是在一些情况下,编码方法也可以使用平衡的编码方案。编码方法根据预定序列1610循环遍历这些编码方案,使得根据预定序列将编码方案应用于神经网络1620的输入权重。例如,根据预定序列为一组权重中的每个权重分组选择一个编码方案。这产生了神经网络的一组平衡的二值化权重1630,其具有相对高压缩率,同时实现了良好的重新训练准确性。
在结构方面,为了平衡一组二值化后的输入权重,预定序列应使得在预定序列的一个完整循环中与编码方案相关联的选定权重模式(即,最低编码长度的权重模式)的组合中的高比特与低比特的比率等于预定比率。预定比率是通过常规方法(例如,通过权重的符号)对一组权重执行二值化而获得的高比特与低比特的比率。
参考图17可以更好地理解,该图示出了包括多个编码方案p1、p2、p3、p4的示例编码方法。编码方法根据预定序列p1、p2、p3、p4将编码方案应用于权重分组。因此,将编码方案p1应用于第一分组,p2应用于第二分组,p3应用于第三分组,p4应用于第四分组,p1应用于第五分组,p2应用于第六分组,等等。为了简化说明,对于每个编码方案仅示出了最短长度的码字和相应的选定权重模式。在该示例中,每个方案的最短长度的码字为0;p1将最短长度的码字0分配给权重模式0000,p2分配给1111,p3分配给0101,并且p4分配给0111。
在预定序列的完整循环中,与编码方案相关联的选定权重模式(即,最低编码长度的权重模式)的组合为0000111101010111。此组合的1与0的比率为9:7或约1.286。因此,如果在按符号二值化后,神经网络的层、部分或整体的一组权重的1与0的比率基本上类似于1.286(例如,偏差不超过5%或10%),则当根据图13和图14的方法执行二值化时,预定序列将为一组权重提供平衡的二值化。因此,通过在根据权重的符号进行二值化时确定特定神经网络中高二元值与低二元权重值的比率,可以设计编码方案序列以逼近该比率。
尽管图17的示例中的预定序列在整个循环中包括每个编码方案一次,但是本披露不限于此。例如,预定序列可以在整个循环中包括两次或更多次的一些编码方案。例如,在一个示例中,四个编码方案的预定序列可以是p1、p1、p2、p2、p3、p4。只要针对目标神经网络,在预定序列的一个完整循环中与编码方案相关联的选定权重模式的组合的高二元值与低二元值的比率基本上等于通过权重的基于符号的二值化产生的比率,二值化就将达到平衡。
由于编码方案和应用编码方案的顺序是预定的,因此可以根据相同的编码方案序列容易地对已编码二元权重值进行解码。尽管在以上示例中每个权重分组具有相同的大小,但是在其他示例中,一些权重分组和为这些分组选择的编码方案可能具有不同的大小,并且只要所使用的分组大小和编码方案是根据预定序列定义的,就仍然可以进行解码。
以下示例示出了可以用于根据四个编码方案的预定序列对神经网络的一层中的权重分组进行编码的逻辑:p1、p2、p3、p4。
G:每层所有分组(每个分组4个二值权重)
P:所有编码方案(=3)
i=0
图18A至图18C示出了根据预定序列使用多个编码方案的二值化方法1800的示例。图18A示出了生成权重分组的多个候选二值权重串。二值化方法1800将一组输入权重(其可以是浮点权重)划分为多个权重分组。图18A中示出了一个这样的权重分组1810。可以如1820所示对浮点权重值进行归一化。如1830所示,可以确定每个权重与特定二元值相关联的概率。可以基于归一化的权重值针对每个权重确定基于符号的二元值,并且可以基于先前为那些二元值确定的概率来确定每个权重具有基于符号的二元值的局部概率,如1840所示。
在1850处,可以将局部概率与阈值(在该示例中为60%)进行比较。在基于符号的二元值的局部概率超过阈值的情况下,可以向权重分配基于符号的二元值。否则,可以确定权重具有模糊的二元值,该二元值可以被调整以允许二值权重串适合特定的权重模式。在图18A的示例中,输入权重分组中的第三权重被确定为具有模糊的二元值。结果,生成权重分组1810的两个候选二值权重串1850和1855。可以根据本申请的第2部分中的教导来执行以上步骤1810至1850。然而,在其他示例中,可以使用生成候选二值权重串的不同方法,例如,如本申请的第1部分中所讨论的。
图18B示出了从图18A中生成的多个候选二值权重串1850、1855中选择表示权重分组1810的二值权重串的示例方法1800-B。候选二值权重串可以被转换成高比特由1表示且低比特由0表示的形式,如分别针对第一候选二值权重串和第二候选二值权重串的1850a和1850b所示。
接下来,可以生成表示第一候选二值权重串1850a和第二候选二值权重串1855a的码字1850b、1855b。码字1850b、1855b是根据编码方案生成的,在该示例中,编码方案1与以上表5的第4行所示的编码方案1相同。第一候选二值权重串的码字1850b是11001,因此第一候选二值权重串的编码长度1850c是5比特。第二候选二值权重串的码字1855b是0,因此第二候选二值权重串的编码长度1855c是1比特。
如第2部分所述,可以基于局部概率值计算第一候选二值权重串和第二候选二值权重串的全局概率值1850d、1855d。可以在选择二值权重串时考虑全局概率值,但本发明人发现,当仅基于编码长度进行选择时,可以实现令人满意的结果。在该示例中,可以选择第二二值权重串0000,因为它具有最低的编码长度。
图18C示出了选择过程如何取决于分组编号而不同。例如,在根据预定序列使用多个编码方案的情况下,应用于特定分组的编码方案可以取决于分组编号。例如,可以取决于分组在被二值化的一组权重中的位置,为每个权重分组分配一个分组编号i。在图18C的示例中,有两个编码方案p1、p2,它们对应于表5第4行中所示的第一编码方案和第二编码方案。预定序列可以例如以交替方式应用这些编码方案,使得第一编码方案p1应用于分组i并且第二编码方案p2应用于分组i+1。例如,p1可以应用于奇数分组编号,并且p2可以应用于偶数分组编号。
在1800-B1中示出了对应用了第一编码方案p1的分组的处理,并且该处理与图18B相同。
在1800-B2中示出了对应用了第二编码方案p2的分组的处理。在这种情况下,第一候选二值权重串为0011,并且第二候选二值权重串为0001。这些候选二值权重串都不匹配编码方案p2的最低长度编码模式,因此它们分别被编码为10011和10001。各自情况下的编码长度为5比特。在这种情况下,可以基于其他标准来选择候选二值权重串,诸如全局概率值(如果已计算的话),或者可以使用与按输入权重的符号确定的二值权重相匹配的字符串。
被配置为执行本文所述的二值化方法的处理器和其他逻辑硬件可以实现神经网络的权重的显著压缩,从而允许以更少的存储器资源来构造神经网络,从而降低成本和/或节省功率。图19示出了被配置为实施本文披露的二值化方法的硬件1900的示例。该硬件包括可以由处理器或逻辑电路实施的二值化方案选择模块1910。二值化方案选择模块1910包括二值权重串选择器1920,该二值权重串选择器至少接收第一候选二值权重串和第二候选二值权重串。二值权重串选择器1920与编码模块1930通信,该编码模块至少包括编码模式选择器1932、用于实施第一编码方案的第一编码器1934和用于实施第二编码方案的第二编码器1936。编码模块可以由通用处理器、查找表和/或专用逻辑电路系统来实施。
二值权重串选择器1920将第一候选二值权重串和第二候选二值权重串传送到编码模块1930。编码模块基于由编码模式选择器1932控制的预定序列选择至少第一编码器1934和第二编码器1936之一来使用。编码模块使用选定的编码器确定每个字符串的编码长度。然后,二值权重串选择器至少部分地基于由编码模块确定的编码长度来选择二值权重串。表示选定二值权重串的数据由二值化方案选择模块输出。数据可以包括原始形式或编码形式的选定二值权重串。
以上描述涉及用于神经网络的权重的二值化方法,该二值化方法可以例如在神经网络的训练阶段中使用。训练阶段可以在具有更多资源的处理设备(诸如台式计算机、服务器或云计算服务)上执行。然而,实际上使用神经网络的推理阶段可能在资源受限的设备(诸如移动电话、无人机、平板计算机、物联网设备等)上实施。因此,为了最大程度地使用稀缺的存储器资源,神经网络权重可以以编码(即,压缩)形式存储在推理阶段设备上。
图20示出了可以用于实施神经网络的推理阶段的处理单元2000的示例。
用于实施神经网络的处理单元2000包括用于存储输入特征图2015的第一存储器2010以及用于存储已编码二值权重串2025的第二存储器2020,该二值权重串表示在神经网络中使用的二值化滤波器权重。
处理单元进一步包括解码器2030,该解码器用于解码存储在第二存储器2020中的已编码二值权重串2025并且输出解码的二值化滤波器权重。图20示出了解码器可以从第二存储器接收的已编码二值权重串2025a的示例。已编码二值权重串2025a可以表示要在神经网络中使用的权重分组。图20示出了解码器可以如何将已编码二值权重串的解码版本2025b输出到卷积单元2040。
卷积单元2040被配置用于执行存储在第一存储器中的输入特征图(例如,从第一存储器读取的特征图2015a)与从解码器输出的二值化滤波器权重2025b的卷积运算。例如,卷积单元可以包括用于对二元值进行运算的多个XNOR门2045。
解码器2030包括多个解码单元2034、2036。每个解码单元被配置为根据不同的编码方案解码二值权重串,其中,解码器被配置为根据预定序列在这些解码单元之间切换。预定序列可以例如由模式选择器2032控制,该模式选择器可以由解码器2030的控制器实施。
通过以编码形式存储表示卷积网络滤波器权重的二值权重串,处理单元2000可以节省存储器和功率。对于给定的内存量,与不使用编码的情况相比,处理单元可以能够实施更大、更复杂的神经网络。尽管在卷积之前需要对已编码权重进行解码,但是由于在任何时候都只对一些权重进行操作,因此使用已编码二值权重串和解码器减少了存储器资源的总体负担。此外,由于解码器被配置为根据预定序列使用多个编码方案,因此即使在编码数据未指示所使用的特定编码方法的情况下,解码器也可以解码二值串。进一步地,如以上所解释,预定序列可以有助于确保以尽管压缩程度很高但仍然保持神经网络准确性的方式对数据进行二值化和编码。
处理单元可以被配置为实施适于解码环境的上述本披露的任何教导。例如,至少一些解码单元可以具有不平衡的编码方案,并且预定序列在该预定序列的一个完整循环上平衡这些编码方案。在一些示例中,每个编码方案将多个权重模式映射到码字,并且将最短长度的码字分配给选定的权重模式,其中,每个编码方案将最短长度的码字分配给不同的权重模式。在一些示例中,编码方案的预定序列使得该预定序列的一个完整循环中与编码方案相关联的选定权重模式的组合中的高比特与低比特的比率等于预定比率。
虽然参考示例性实施例对本披露进行以上描述,但是本领域技术人员将理解,在不脱离本披露的精神和范围的情况下,可以进行各种改变并且可以对其元素进行等效替换。另外,在不脱离本披露的实质范围的情况下,可以进行修改以使本披露得以适应特定的情况和材料。因此,本披露不限于在本说明书中披露的特定示例,而是涵盖落入所附权利要求的范围内的所有实施例。