发明内容
针对现有技术中存在的问题,本发明提供一种支持多粒度稀疏与指数量化的卷积神经网络的加速器,通过适用多种剪枝和量化的方式实现加速,硬件的并行效果更好,实现数据的高效压缩加速。
本发明是通过以下技术方案来实现:
支持多粒度稀疏与多模式量化的卷积神经网络的加速器,包括主控制器,并行的第一级激活输入处理模块和第一级权重处理模块,并行的第二级激活输入处理模块和第二级权重处理模块,第三级处理模块,并行的池化处理模块和批归一化处理模块,以及输出控制器;
主控制器输入端经配置器连接I/O端口,输出端输出图案数据连接第三级处理模块输入端;
第一级激活输入处理模块输入端经输入控制器接入激活输入和处理卷积核稀疏的计算序列;用于根据处理卷积核稀疏的计算序列将激活输入进行重排完成一级处理;
第一级权重处理模块输入端经输入控制器接入权重、稀疏图案编码、以及批归一化参数k和b;用于将输入的权重、稀疏图案编码、以及批归一化参数k和b通过数据分配进行分类更新;
第二级激活输入处理模块输入端接入一级处理后的激活输入和更新后的稀疏图案编码;用于根据更新后的稀疏图案编码确定对一级处理后的激活输入的接收,将接收的激活输入输出到第三级处理模块和池化处理模块;
第二级权重处理模块输入端接入更新后的权重,用于将接收的激活输入对应的权重进行导入,输出到第三级处理模块;并且将更新后的批归一化参数k和b输入到批归一化处理模块;
第三级处理模块包括若干并行的计算核;每个计算核对应处理一组接收的激活输入和权重,将接收的激活输入根据权重的大小进行移位和累加处理量化后输出,然后将计算核的量化输出进行第一量化处理或第二量化处理后输入到批归一化处理模块;
第一量化处理是用于将27比特的定点计算结果转化为8比特定点,用于旁路批归一化处理直接经激活函数输出;第二量化处理是将27比特的定点计算结果转化为16比特浮点,用于批归一化处理计算;
池化处理模块将接收的激活输入进行池化处理后输入到输出控制器;
批归一化处理模块根据更新后的批归一化参数k和b,将第三级处理模块输入的数据进行批归一化处理,然后进行第三量化处理和激活量化函数激活后输入到输出控制器;
第三量化处理是将批归一化处理的结果,从16比特浮点转化为8比特定点,然后再进行输出;
输出控制器的输出端经异步寄存器连接I/O端口。
优选的,所述的第一级激活输入处理模块包括写控制单元、存储单元、输出控制单元、处理卷积核稀疏的计算序列存储单元和读控制单元;
所述的存储单元包括5个缓存器组,每个缓存器组包括5个RAM;
所述的写控制单元用于将激活输入存入对应的RAM中;
所述的处理卷积核稀疏的计算序列存储单元用于提供卷积核粒度稀疏的计算序列;
所述的读控制单元用于根据处理卷积核稀疏的计算序列提供的顺序从存储单元中读取对应的数据;
所述的输出控制单元用于将读取的数据输出到第二级激活输入处理模块。
进一步,所述的写控制单元采用状态机控制激活输入存入对应的RAM中。
进一步,具体的,第一级激活输入处理模块包括5个缓存器组,每个缓存器组包括5个3072x8大小的RAM;5个缓存器组对应存储激活输入中特征图数据的5行数据,缓存器组中的5个RAM按顺序存储1行中每一个点的所有激活输入通道,第一个RAM存储第1、6、11、16…个点的所有输入通道,第二个RAM存储第2、7、12、17…个点的所有输入通道,以此类推将所有点对应存入到RAM中;
将5行的激活输入存入对应的RAM中之后,根据处理卷积核稀疏的计算序列提供的顺序直接去RAM中读取,重排的每一拍可读取出一个5x5的激活输入数据块,输出到第二级激活输入处理模块。
再进一步,第二级激活输入处理模块用于将5x5的激活输入数据块进行广播给64个先进先出寄存器,该64个先进先出寄存器将存储的数据对应的输出给第三级处理模块的计算核;当64个先进先出寄存器中有一个不能接收数据时则停止广播。
优选的,第二级激活输入处理模块包括,
数据控制器,用于根据更新后的稀疏图案编码确定对一级处理后的激活输入的接收;
用于存储接收的激活输入的缓存单元,该缓存单元包括64个先进先出寄存器;
用于存储更新后的稀疏图案编码的缓存单元。
进一步,第三级处理模块包括64个计算核,每个计算核中包括一个稀疏图案掩模控制器、权重寄存器、激活输入寄存器和并行的4个计算单元;每个计算单元在稀疏图案掩模控制器的控制器下从权重寄存器和激活输入寄存器读取对应的权重和激活输入进行如下处理步骤;
步骤a,权重预处理,将权重分为第一权重weight_mp和第二权重weight_ap后进行输出,第一权重的数据位数大于第二权重的数据位数;
步骤b,激活输入移位,将激活输入分别根据预处理后的两个输出进行移位;
步骤c,根据权重量化处理的类型,对移位后的两个激活输入和原激活输入进行选择后相加,再将相加结果送入到filter累加加法器中进行累加;
步骤d,将累加结果浮点化后输出。
再进一步,所述计算单元中的处理步骤能够用于权重的多模式量化,包括定点量化、单指数量化、混合指数量化和扩展的混合指数量化;
所述定点量化时选择移位后的两个激活输入和原激活输入进行选择后相加;
单指数量化时选择根据第一权重进行移位后的激活输入;
混合指数量化时,选择移位后的两个激活输入进行相加;
扩展的混合指数量化时,选择移位后的两个激活输入进行相加;并且将第一权重weight_mp扩展型指数量化参数α进行加运算,将第二权重weight_ap和扩展型指数量化参数β进行加运算,两个加运算的结果作为预处理后的两个输出。
进一步,所述的激活量化函数具体如下式所示,
其中,公式2是通过均方差MSE方式求解量化步长,x为激活输入,xq为激活量化输出,δx为量化误差。
与现有技术相比,本发明具有以下有益的技术效果:
本发明对卷积神经网络进行压缩,实现剪枝与量化的结合;通过第三级处理模块的量化处理,分别将激活输入和权重进行量化处理;利用配置器能够实现通道/滤波器剪枝,利用处理卷积核稀疏的计算序列的控制实现卷积核剪枝,利用稀疏图案编码的输入和稀疏图案掩模控制器的处理实现可配置空间的图案剪枝,实现多粒度稀疏架构,从而能够通过多种量化和剪枝对卷积神经网络进行加速,提高其处理能力和速度。
进一步的,通过第三级处理模块中,通过加法和累加代替惩罚的处理步骤,能够适用于1~4b定点量化、4b的单指数量化、4b的混合指数量化和扩展的4b混合指数量化,支持多模式量化架构。
进一步的,通过第三级处理模块中,基于可扩展并行的计算单元,支持权重复用和激活输入复用两种模式,适配不同层的参数需求,实现可配置的并行扩展。
具体实施方式
下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
本发明支持多粒度稀疏与指数量化的卷积神经网络的加速器,支持通道/滤波器剪枝、卷积核剪枝、图案剪枝,以及普通的非结构性稀疏,其中图案剪枝和传统的去掉卷积核内部中的一行或者一列不同,本发明是以图案形式描述,是一种全新的卷积核内部的剪枝形式。
在量化方面,通过统一的硬件架构去同时支持这几种量化方式。从而实现不同网络或不同的应用场景中,通过采取不同的量化达到不一样的量化效果。其中,在混合2的幂指数上,引入两个调整因子,在每一层都会采用不同的调整因子去使得参数最优。在整体运算上,推断运算采用混合精度的方式进行,在卷积操作阶段,使用定点计算模式。
最后是在灵活性上,本发明主要表现在复用和功能上。虽然很有文章已经对不同的数据复用方式进行研究,但是本发明基于此表现在对并行单元的可重构上。本发明中每个计算核中包括四组计算单元,这四组计算单元之间的并行关系是可以配置的,从而对不同层的参数情况进行调整。在功能方面,支持平均池化和最大池化两种操作、1×1和3×3的卷积核尺寸、卷积层/全连接层/批归一化处理/激活函数/元素相加的操作,只要上层的系统主控做好任务调度控制,可以完成CIFAR数据集上几乎所有的主流深度神经网络、以及ImageNet下的VGG系列网络。
从而使得本发明的加速器具备可靠(高精度)、高效(做专门的优化进行加速)、灵活(需要具备一定的可配置可重构性)、标准化(例如芯片外部接口的标准化)等。因此在本发明中,数据复用和功能的多样,以及剪枝与量化的多样,去支撑不同场合的需求,以及特殊的优化处理(例如无乘法器的设计)来降低芯片开销,以及设计相对便捷高效的模型压缩框架,去支撑实际应用。
具体的,本发明支持多粒度稀疏与指数量化的卷积神经网络的加速器的整体架构如图1所示,第一级RAM用于存储输入或输出数据块,不做任何的冗余存储,配置合适的数据排布在第二级阶段完成。池化模块独立于计算引擎,主要用来支持不同size的计算。片上一共有256个计算单元,一共分为3个并行层次。
其包括主控制器,并行的第一级激活输入处理模块和第一级权重处理模块,并行的第二级激活输入处理模块和第二级权重处理模块,第三级处理模块,并行的池化处理模块和批归一化处理模块,以及输出控制器;
主控制器输入端经配置器连接I/O端口,输出端输出图案数据连接第三级处理模块输入端;
第一级激活输入处理模块输入端经输入控制器接入激活输入和处理卷积核稀疏的计算序列;用于根据处理卷积核稀疏的计算序列order将激活输入act进行重排完成一级处理;
第一级权重处理模块输入端经输入控制器接入权重weight、稀疏图案编码index、以及批归一化参数k和b;用于将输入的权重weight、稀疏图案编码index、以及批归一化参数k和b通过数据分配进行分类更新;
第二级激活输入处理模块输入端接入一级处理后的激活输入和更新后的稀疏图案编码;用于根据更新后的稀疏图案编码确定对一级处理后的激活输入的接收,将接收的激活输入输出到第三级处理模块和池化处理模块;
第二级权重处理模块输入端接入更新后的权重,用于将接收的激活输入对应的权重进行导入,输出到第三级处理模块;并且将更新后的批归一化参数k和b输入到批归一化处理模块;
第三级处理模块包括若干并行的计算核;每个计算核对应处理一组接收的激活输入和权重,将接收的激活输入根据权重的大小进行移位和累加处理量化后输出,然后将计算核的量化输出依次进行第一量化处理或第二量化处理后输入到批归一化处理模块;第一量化处理是用于将27比特的定点计算结果转化为8比特定点,用于旁路批归一化处理直接经激活函数输出;第二量化处理是将27比特的定点计算结果转化为16比特浮点,用于批归一化处理计算;
池化处理模块将接收的激活输入进行池化处理后输入到输出控制器;
批归一化处理模块根据更新后的批归一化参数k和b,将第三级处理模块输入的数据进行批归一化处理,然后进行第三量化处理和激活量化函数激活后输入到输出控制器;第三量化处理是将批归一化处理的结果,从16比特浮点转化为8比特定点,然后再进行输出;
输出控制器的输出控制器输出端经异步寄存器连接I/O端口。
其中,如图2所示,第一级激活输入处理模块包括写控制单元wr_ctrl、存储单元RAM cell、输出控制单元output_ctr、处理卷积核稀疏的计算序列存储单元order store和读控制单元re_ctrl;
所述的存储单元包括5个缓存器组,每个缓存器组包括5个RAM;
所述的写控制单元用于将激活输入存入对应的RAM中;
所述的处理卷积核稀疏的计算序列存储单元用于提供处理卷积核稀疏的计算序列;
所述的读控制单元用于根据处理卷积核稀疏的计算序列提供的顺序从存储单元中读取对应的数据;
所述的输出控制单元用于将读取的数据输出到第二级激活输入处理模块。
第一级激活输入处理模块L1_store_act,包括5个缓存器组bank,每个缓存器组包括5个3072x8大小的RAM。5个bank对应存储激活输入中特征图数据的5行数据,缓存器组中的5个RAM按顺序存储1行中每一个点的所有激活输入通道input channel,第一个RAM存储第1、6、11、16…个点的所有输入通道,第二个RAM存储第2、7、12、17…个点的所有输入通道,以此类推,如图4所示,将所有点对应存入到RAM中;
将5行的激活输入存入对应的RAM中之后,根据处理卷积核稀疏的计算序列提供的顺序直接去RAM中读取,重排的每一拍可读取出一个5x5的激活输入数据块,输出到第二级激活输入处理模块。
Wr_ctrl主要是为了实现将激活输入数据存入对应的RAM中的控制逻辑,使用了一个状态机来控制,如图3所示。Wr_ctrl的状态机分为10个状态:IDLE、FC_MODE_WR、ELEMENT_MODE、WR_FIRST、COVER_FIRST、COVER_BANK_0、COVER_BANK_1、COVER_BANK_2、COVER_BANK_3和COVER_BANK_4。
IDLE状态为起始初始状态,复位或clear操作后默认状态,当其所有的激活输入输入完之后,也会回到IDLE状态;
FC_MODE_WR为全连接模式下的状态,因为每一次输入的64bits包含8个激活输入通道input channel的数据,对于全连接模式来说,每一次会把这8个激活输入通道inputchannel分别存入8个RAM中。
ELEMENT_MODE_WR为元素相加element wise模式和2x2或4x4池化pooling模式下的状态,不存在激活输入activation数据复用的情况,且每一次都会更新4行;
WR_FIRST为一层计算层layer开始计算时的状态,第一次把激活输入数据输入,本模块要将5个缓存器组,共25个RAM存满,即本状态至少需要输入5行的激活输入数据;
COVER_FIRST为首次更新的状态,根据filter的步长为1或2,来控制更新1行或3行数据。若filter步长为1,且剩余的行数不足1行时,不会进入COVER_FIRST。若filter步长为2,且剩余的行数不足3行时,则会按照实际剩余的行数更新;
COVER_BANK_X都为正常更新的状态,区别只是在于当前使用的核心行在哪一个缓存器组,以及接下来会核心行会跳到哪一个缓存器组。此5个状态会根据filter的步长为1或2,来控制更新2行或4行数据,当剩余行数不足2行或4行时按照实际行数更新。同时根据是否走S形,是正向或反向来控制更新哪几个缓存器组。
RAM cell主要是实现激活输入进入本模块后,将其写入5个缓存器组中的RAM的控制,由于下游模块对本模块的激活输入的输出要求是5x5的数据块,所以本模块设计的是5个缓存器组,对应的是存储1行的数据,每个缓存器组中有5个RAM,对应的是以点为单位的存储,比如tramp0存储0、5、10、15……的所有激活输入通道input channel,tramp1存储1、5、11、16……的所有激活输入通道input channel。因此把ram的位宽定成8bit,每次从RAM中读出来的数据就是下游模块需求的5x5的数据块。
但是activation输入本模块时是64bit,共8个激活输入通道input channel,因此需要在ram之前用一个FIFO,将其拆分成8个激活输入通道input channel再往RAM中写。
第二级激活输入处理模块包括,数据控制器,用于根据更新后的稀疏图案编码确定对一级处理后的激活输入的接收;用于存储接收的激活输入的缓存单元,该缓存单元包括64个先进先出寄存器;用于存储更新后的稀疏图案编码的缓存单元。
第二级激活输入处理模块L2_store_act,用于将5x5的激活输入数据块进行广播给64个先进先出寄存器,该64个先进先出寄存器将存储的数据对应的输出给第三级处理模块的计算核;当64个先进先出寄存器中有一个不能接收数据时则停止广播。
第二级激活输入处理模块中用到的稀疏图像编码index数据是与第一级激活输入处理模块的处理卷积核稀疏的计算序列order数据配合起来使用,order数据是由于L3级的64个计算核PEA因为卷积核粒度剪枝kernel,有些kernel并不需要用到所有的inputchannel,且用不到的input channel并不统一,为了使PEA的计算效率整体上有一些提高,因此将64个PEA需要用到的input channel进行排序,将需要率高的input channel优先从第一级激活输入处理模块L1_store_act中取出,然后输入到本模块中进行广播。具体的,第二级激活输入处理模块输入的激活输入数据是经过L1_store_act模块重排之后的5x5激活输入块,如图4右侧输出所示。第二级激活输入处理模块主要就是将5x5的数据块进行广播给64个FIFO,这64个FIFO之后对应输出给64个PEA。另外需要控制广播,当64个FIFO中有一个不能接收数据时能及时的停止广播,防止数据的丢失。
Index数据的每一个bit就是按照order的顺序排列,表示当前广播的inputchannel是否是PE需要的input channel,“0”表示不需要,“1”表示需要。因为芯片系统设计的是最多64个PEA同时进行计算,因此稀疏图像编码数据最多需要64组,稀疏图像编码数据的位宽取决于input channel数。
稀疏图像编码数据的更新是跟随weight更新的,所以芯片系统设计稀疏图像编码由第一级权重处理模块输入到本模块。根据第一级激活输入处理模块的端口设计,本需要64组index数据的valid和ready握手接口,数据接口位宽为128bits。
若order_en为disable时,index数据则不需要,也不会判断当前广播的激活输入activation是否需要,无条件接收。
第二级激活输入处理模块在正常卷积模式下输出对应64个PEA或32个PEA,因此需要64组位宽为200bits的激活输入activation数据输出接口,采用valid与ready握手机制。另外由于池化处理pooling模块的设计,本模块对于pooling模块的输出需要1组位宽为200bits的激活输入activation数据输出接口,同样采用valid与ready握手机制。
第三级处理模块包括64个计算核,每个计算核中包括一个稀疏图案掩模控制器mask_ctl、权重寄存器、激活输入寄存器和并行的4个计算单元PE;每个计算单元PE在稀疏图案掩模控制器的控制器下从权重寄存器和激活输入寄存器读取对应的权重和激活输入进行如下处理步骤,如图9所示;
步骤a,权重预处理,将权重分为第一权重weight_mp和第二权重weight_ap后进行输出,第一权重的数据位数大于第二权重的数据位数;
步骤b,激活输入移位,将激活输入分别根据预处理后的两个输出进行移位;
步骤c,根据权重量化处理的类型,对移位后的两个激活输入和原激活输入进行选择后相加,再将相加结果送入到filter累加加法器中进行累加;
步骤d,将累加结果浮点化后输出。
8.根据权利要求7所述的支持多粒度稀疏与多模式量化的卷积神经网络的加速器,其特征在于,所述计算单元中的处理步骤能够用于权重的多模式量化,包括定点量化、单指数量化、混合指数量化和扩展的混合指数量化;
所述定点量化时选择移位后的两个激活输入和原激活输入进行选择后相加;
单指数量化时选择根据第一权重进行移位后的激活输入;
混合指数量化时,选择移位后的两个激活输入进行相加;
扩展的混合指数量化时,选择移位后的两个激活输入进行相加;并且将第一权重weight_mp扩展型指数量化参数α进行加运算,将第二权重weight_ap和扩展型指数量化参数β进行加运算,两个加运算的结果作为预处理后的两个输出。
本发明中优选的以权重为4比特为例进行说明,从而其能够支持4比特权重多模式量化,包括定点量化、单指数量化、混合指数量化和扩展的混合指数量化;
权重定点量化表示权重按均匀量化步长的形式,量化为-8~7;
单指数量化表示权重按2的幂指数的形式,量化为0,±1,±2,±4,±8,±16,±32,±64;
混合指数量化和扩展的混合指数量化表示权重的4比特中,除了1比特表示符号位,中间量比特表示一级2的幂指数,最低位表示二级2的幂指数,并通过α和β系数对两个幂指数进行扩展修饰(对于混合指数量化中,这两个系数均为0,即无修饰),因此对于(α,β)的组合分别为(0,0),(0,1),(1,0)和(1,1)的情形下,所对应的权重量化为0,±2,±3,±4,±5,±6,±9,±10;0,±3,±4,±5,±6,±9,±10,±17;0,±4,±6,±8,±10,±12,±18,±20;0,±3,±4,±5,±6,±8,±10,±12。上面所列出的量化值,能够根据不同权重位数以及权重类型的需求乘以一个系数变成别的数。
具体的,第三级处理模块为了满足时序需求,将计算步骤分成了7个CLK周期,即7个clk输出结果,如图5所示,将每一个clk都进行valid与ready握手机制来控制数据流,这样可以保证当下游数据流卡住时,模块不会覆盖当前的计算结果,且在某一步空闲的时候可以继续接收数据进行运算。
为了实现一个filter累加完成之后输出累加结果,在最后一笔数据进来时会有一个标志信号:alu_covn_end一起进到模块,当流水线检测到该信号时才会将数据往后面的流水线输出。
本阶段主要是实现以activation根据权重大小的移位操作来替代激活与权重的乘法操作。根据不同的权重类型mode,将激活与权重的乘法操作拆分为最多三个激活数据移位之后的加法操作。
移位的位数可以根据以下权重量化中各种模式拆解以及真值表求得,包含RestNet模式在内一共四种模式,可将乘法拆解成图8中所示的三个加法;在硬件实现的过程中将权重分为两个:weight_mp和weight_ap对应图8中的w_mp_reg和w_ap_reg。然后根据权重量化类型alu_mode的选择和输入的权重可以算出对应的激活输入activation需要左移的位数。
在计算出三部分激活输入activation需要左移的位数之后,则可根据结果对activation进行移位操作。最后再根据activation的符号与权重的符号来确定移位操作之后结果的符号。三部分激活输入为移位后的两个激活输入和原激活输入。
累加阶段实现的就是三部分激活输入activation的加法操作以及结果参与filter累加的操作。由于在四种mode下,移位之后的正负不固定,因此会先将三部分的数据先进行取补码的操作,然后直接用补码相加来完成加法或减法,将得到的activation相加结果送入filter累加加法器进行累加。
定点转浮点阶段,为了实现累加器结果的定点格式转换为浮点格式并输出。由于提供的位宽宽度将累加器的位宽设置为27bits:1bit sign+26bits data。因此本阶段的就是基于需支持27bit定点转换为浮点16。
首先需要找到26bits中第一个“1”的位置(除去符号位),用来确定转化为浮点16之后小数点的位置;找到第一个“1”在26bits的位置后,即可根据激活量化的寄存器配置来确定指数e的大小。在找到第一个“1”的位置后也可以确定尾数f的数值,即第一个“1”之后的10bits。在计算出指数与尾数之后即可将数据重新排列,输出浮点16的格式。
本发明中采用了两种图案剪枝,分别为4pattern和5pattern,表示剪枝后剩余4/5个权重。且两种图案剪枝分别有16种不同的组合。在本发明的加速器设计中,这16种不同的组合通过配置器配置到片内,再根据和权重一起输入的图案pattern进行查表,得到剪枝后的权重排列。
第三级处理模块中在进行权重输入时,由于pattern模式、1x1以及FC的需求,所以权重的输入在不同的模式下有起特殊的输入需求,w_data_in的端口宽度为24bits,如图6所示。
Pattern_mode=0时,为4pattern模式,此时只需要1个pattern+4个权重即可组成一个filter,因此需要在高4位补零;
Pattern_mode=1时,为5pattern模式,此次需要1个pattern+5个权重即可组成一个filter,刚好24bits;
Pattern_mode=2时,为9pattern模式,即没有进行kernel内的剪枝,所以需要输入9个权重,由于端口只有24bits,需要将两次的输入组合起来组成一个filter,且第二笔数据高12位补零;
Pattern_mode=3/4时,为1x1模块/FC模式,由于这两种模式filter中的权重都只有1个,所以为了不浪费带宽,且为了保证输入的权重都是有效权重,所以每拍进来4个权重(inputchannel为4的整数倍),高位补零。
第三级处理模块需要支持filter_stride为1或者2,也需要支持多种pattern模式,因此对应的activation输入需要特别的输入格式,activation数据输入接口的宽度为200bits,如图7所示;
正常卷积filter_str=2时,activation为5x5模式,需要如图7所示的A44~A00,其中A44在高位;
正常卷积filter_str=1时,activation为4x4模式,这时只需要4行4列的数据,所以第五行与第五列的数值补零;
1X1模式时,只需要输入A00、A01、A10和A11四个activation即可,其余补零;
Elementwise模式时,需要输入inputA和inputB的两行数据,即A00~A03,A10~A13,B00~B03和B10~B13,类似于4X4;
FC模式时,也是输入一个4x4的数据块;
同时,除了elementwise模式,其他所有模式都需要在卷积的最后一个inputchannel进来的同时给一个conv_end的信号。
本发明中所述的权重量化以4b形式量化,具体量化方法一共有四种,分别是定点均匀量化、2的幂指数量化、混合2的幂指数量化、扩展型混合2的幂指数量化,如图9所示,具体分别如下。
Mode1定点均匀量化。
Fixed-point Quantization Mode:
bit-width of Wk=4
Wk1∈{0,±1,±2,±3,±4,±5,±6,±7}
上式是定点量化方式,4b的定点量化为-7~+7这15个数,即集合Wk1,对应的编码如表1所示。在编码表中,有一个编码4’b1000是没用的,这个目前暂且闲置,之后可能会增补它所代表的特殊含义,从而实现更丰富的功能。
在用定点量化的模式中,权重可以按照上式拆解表示为三部分构成,与激活输入A相乘后,分别代表1A、2A和4A,通过低3位的情况,有选择将这三部分进行相加,从而完成该量化方式下的运算。
表1权重定点量化编码表(定点量化模式)
原值 |
编码 |
原值 |
编码 |
0 |
4’b0000 |
unused |
4’b1000 |
1 |
4’b0001 |
-1 |
4’b1001 |
2 |
4’b0010 |
-2 |
4’b1010 |
3 |
4’b0011 |
-3 |
4’b1011 |
4 |
4’b0100 |
-4 |
4’b1100 |
5 |
4’b0101 |
-5 |
4’b1101 |
6 |
4’b0110 |
-6 |
4’b1110 |
7 |
4’b0111 |
-7 |
4’b1111 |
Mode2 2的幂指数量化。
Single Power-2 Quantization Mode:
Wk×Ak=(-1)s×(Ak<<2k m)
bit-width of Wk=4
Wk2∈{0,±1,±2,±4,±8,±16,±32,±64},
上式是单个2的幂指数量化,4b的单个2的幂指数量化对应的值域集合为Wk2,对应的编码如表2所示。在编码表中,同样也是编码4’b0000是没有用的,这个和定点量化一致,之后会增补其特殊意义,以实现其他功能。
在用单个2的幂指数量化过程中,由于全部的值都是2的幂,所以在计算过程中其实就是移位操作(对于浮点数操作就是对阶码做加法)。
表2权重定点量化编码表(单个2的幂指数量化模式)
原值 |
编码 |
原值 |
编码 |
0 |
4’b0000 |
unused |
4’b1000 |
1 |
4’b0001 |
-1 |
4’b1001 |
2 |
4’b0010 |
-2 |
4’b1010 |
4 |
4’b0011 |
-4 |
4’b1011 |
8 |
4’b0100 |
-8 |
4’b1100 |
16 |
4’b0101 |
-16 |
4’b1101 |
32 |
4’b0110 |
-32 |
4’b1110 |
64 |
4’b0111 |
-64 |
4’b1111 |
Mode3混合2的幂指数量化。
Mix Power-2 Quantization Mode:
Wk×Ak=(-1)s×[(Wk 1+Wk 2)×Ak]
=(-1)s×[(2k m1+2k m2)×Ak]
=(-1)s×(Ak<<2k m1+Ak<<2k m2)
bit-width of Wk=4
Wk3∈{0,±2,±3,±4,±5,±6,±9,±10},
m1∈{0,1,2,3},
m2∈{0,1},
2unused code:Wk=0
上式是混合2的幂指数量化模式,对应的值域为Wk3或Wk4,它们分别对应常规的模式和扩展模式。混合2的幂指数量化的思路是将一个权重拆解成两级,这两级对应的数值集合为m1和m2,通过两部分相加,得到混合2的幂指数量化的值域。可以看到,相比普通的2的幂指数量化,它不会存在两个值之间距离过大的情况。
Mode4扩展型混合2的幂指数量化。
Ex-Mix Power-2 Quantization Mode:
bit-width of Wk=4
Wk4∈{0,±2,±3,±4,±5,±6,±9,±10}(α=0,β=0)or{0,±3,±4,±5,±6,±9,±10,±17}(α=1,β=0)
or{0,±4,±6,±8,±10,±12,±18,±20}(α=1,β=1)
or{0,±3,±4,±5,±6,±8,±10,±12}(α=0,β=1)
m1∈{0,1,2,3},m2∈{0,1},α,β∈{0,1}
上式是扩展型混合2的幂指数量化,其实可以把混合型2的幂指数量化看做是混合型四种模式中的1种,因此在硬件实现的过程中可以把这两种模式合并成一种。
在扩展模式中,每一层有自己共用的α和β参数,我们通过这两个参数,对应选择不同的权重集合。这样在整个网络中就有更强的表征能力,同时也保持了无乘法器设计的计算单元,节省了功耗和面积。在具体操作上,α和β参数对应也是指数部分的参数,因此最终的效果是对原指数进行一个调整,从而实现对不同权重集合的配置,具体的如表3-表6所示。
在设计思想上,主要使用指数系列的量化可以避免乘法器使用,从而可以降低相关的使用开销。但是在量化过程中,我们希望尽可能分布特征可以更好地表达数值。使用混合精度具备小值密集,但也存在一定大值的特征,这种数值分布符合神经网络的特点。虽然单指数也具备这样的特征,但是大值之间间距大,缺乏中间数值,信息缺失问题较大,因此使用混合指数量化可以弥补这一缺点。
表3权重定点量化编码表(两个2的幂指数量化模式,α=0,β=0)
原值 |
编码 |
原值 |
编码 |
2 |
4’b0000 |
-2 |
4’b1000 |
0 |
4’b0001 |
NaN |
4’b1001 |
3 |
4’b0010 |
-3 |
4’b1010 |
4 |
4’b0011 |
-4 |
4’b1011 |
5 |
4’b0100 |
-5 |
4’b1100 |
6 |
4’b0101 |
-6 |
4’b1101 |
9 |
4’b0110 |
-9 |
4’b1110 |
10 |
4’b0111 |
-10 |
4’b1111 |
表4权重定点量化编码表(两个2的幂指数量化模式,α=0,β=1)
原值 |
编码 |
原值 |
编码 |
3 |
4’b0000 |
-3 |
4’b1000 |
5 |
4’b0001 |
-5 |
4’b1001 |
4 |
4’b0010 |
-4 |
4’b1010 |
0 |
4’b0011 |
NaN |
4’b1011 |
6 |
4’b0100 |
-6 |
4’b1100 |
8 |
4’b0101 |
-8 |
4’b1101 |
10 |
4’b0110 |
-10 |
4’b1110 |
12 |
4’b0111 |
-12 |
4’b1111 |
表5权重定点量化编码表(两个2的幂指数量化模式,α=1,β=0)
表6权重定点量化编码表(两个2的幂指数量化模式,α=1,β=1)
原值 |
编码 |
原值 |
编码 |
4 |
4’b0000 |
-4 |
4’b1000 |
0 |
4’b0001 |
NaN |
4’b1001 |
6 |
4’b0010 |
-6 |
4’b1010 |
8 |
4’b0011 |
-8 |
4’b1011 |
10 |
4’b0100 |
-10 |
4’b1100 |
12 |
4’b0101 |
-12 |
4’b1101 |
18 |
4’b0110 |
-18 |
4’b1110 |
20 |
4’b0111 |
-20 |
4’b1111 |
本发明中通过在BN计算中,使用半精度浮点计算,这样以确保最终的硬件计算的精度和开销最优。此外,通过对中间结果位宽的压缩,确定最佳累加器位宽,实现精度和开销最大的效益。通过激活量化对批归一化处理BN进行中间优化。所述的激活量化函数具体如下式所示,
其中,公式2是通过均方差MSE方式求解量化步长,x为激活输入,xq为激活量化输出,δx为量化误差。