一种针对量化后的LSTM的激活函数计算单元
技术领域
本发明涉及一种针对量化后的LSTM的激活函数计算单元,属于集成电路设计技术领域。
背景技术
近年来,深度学习算法凭借其优异的性能开始替代传统的算法成为多个领域的主流算法。但当前主流的处理器(CPU、GPU、DSP等)还无法较好地适配其数据密集型的计算特点,因此学界以及工业界掀起了一波深度学习处理器的研究热潮。
深度学习算法中重要的一类算法——LSTM(Long Short-Term Memory),因为能够有效解决梯度消失的问题,正替代传统的RNN(Recurrent Neural Network)广泛应用在对序列数据进行处理的场景,如自然语言处理、语音识别等。但LSTM中所使用的激活函数:
因为涉及到复杂的指数、除法运算,所以硬件直接实现具备非常大的复杂度。因此需要一个更加高效、硬件友好的实现方案。
在现有的解决方案中,利用查找表来计算这两种激活函数是一种比较常用的方法。其原理是通过对输入数据在输入区间进行等间隔采样,然后分别计算出这些输入值对应的输出值,然后将它们存储在存储器中。等实际工作时,通过线性插值,将输入数据与采样点对应起来,然后再从存储器中取出之前计算好的对应的输出值。该方法虽然能够避免复杂的计算,降低硬件复杂度,但其缺点也是相当明显的。为了实现较高的计算精度,就需要尽可能多地采样,从而导致需要的存储资源大幅增加。而存储资源的增加造成的直接影响就是芯片面积增加以及因为频繁的数据访存带来的功耗的增加。
使用曲线拟合来计算这两种激活函数也是一种比较常用的方法。其原理是通过拟合的方法得出一个多项式函数,利用该函数来计算激活值。该方法只需要乘法以及加减法而不需要更复杂的指数运算以及除法运算。但该方法通常需要计算多次乘法,仍具有一定的复杂度。
经观察发现,这两个激活函数在各个分区间具备较好的线性性质,可以分段使用线性函数对这两个激活函数进行近似。尽管先前已经有工作使用分段线性近似的方法来计算这两个激活函数,但这些工作没有考虑LSTM的操作数被量化后的特点。
线性量化是用的比较多的一种网络压缩方法,其原理如下列公式所示:
k为量化后的操作数位宽。可见,操作数经线性量化后,取值范围被限定在一个特定的区间:
而现有的利用分段线性近似计算激活函数的解决方案中,输入操作数的取值范围为全体实数,显然会造成分段数过多、硬件复杂度过高、资源浪费的情况。另一方面还要考虑量化后的操作数的位宽与网络精度的关系,从而确定激活函数计算单元的操作数位宽以及用来近似激活函数的线性函数的系数的位宽。还有一点,分段线性近似激活函数存在一定的近似误差,会对网络精度带来影响。而线性量化操作可以为系统提高一部分噪声容限,从而在一定程度上抑制近似误差。线性量化操作所引入的噪声容限x
NM与操作数位宽k紧密相关,其关系如以下公式所示:
综上,激活函数计算单元的设计要综合考虑硬件复杂度、网络精度、以及系统对近似误差的抑制能力这三个方面,谨慎设计线性函数的系数。
发明内容
本发明要解决技术问题是:克服上述技术的缺点,提供一种针对量化后的LSTM的激活函数计算单元。
为了解决上述技术问题,本发明提出的技术方案是:一种针对量化后的LSTM的激活函数计算单元,包括:sigmoid函数计算单元和tanh函数计算单元;所述tanh函数计算单元包括第一求补码单元、第二求补码单元、幅度比较器、算术运算单元、第一选择器和第二选择器;
所述第一求补码单元用于计算负的输入数据x的绝对值;
所述第一选择器根据输入数据x的符号位选择的输入数据x的绝对值,若符号位为0,则说明输入数据x为正数,输入数据x的绝对值即为x的值;若符号位为1,则说明输入数据为负数,输入数据x的绝对值为求补码运算单元的输出;
所述幅度比较器用于判断输入数据x的绝对值属于哪一个区间,然后分别产生对应的标志位信号{c2,c1,c0};
当输入数据x的绝对值位于区间[0,0.375,标志位信号{c2,c1,c0}为{0,0,1};
当输入数据x的绝对值位于区间[0.75,1,标志位信号{c
2,c
1,c
0}为{1,0,0};当输入数据x的绝对值位于区间[0.375,0.75,标志位信号{c
2,c
1,c
0}满足
所述算术运算单元根据以下公式计算线性函数tanh(x):
当0≤x<0.375,tanh(x)=x;
当0.375≤x<0.75,tanh(x)=0.75x+0.078125;
当0.75≤x<1,tanh(x)=0.5x+0.265625;
当x<0,tanh(x)=-tanh(x);
所述第二求补码单元用于将所述算术运算单元的结果取相反数;
所述第二个选择器用于选择输出算术运算单元的结果或它的相反数。如果输入数据x为正数,则输出所述算术运算单元的结果,否则则输出它的相反数;
所述Sigmoid函数计算单元根据以下公式计算线性函数sigmoid(x):
当-1<x<1,sigmoid(x)=0.25x+0.5。
上述方案进一步的改进在于:所述第一求补码单元和第二求补码单元均为以补码方式进行数值转换。
本发明提供的针对量化后的LSTM的激活函数计算单元,针对LSTM网络的操作数被量化后,根据其网络精度、噪声容限以及线性函数中的偏置系数对操作数的位宽需求确定激活函数计算单元的操作数位宽。针对8bits位宽的操作数,确定用于近似激活函数的线性函数表达式。针对线性函数表达式设计对应的计算单元。利用booth算法,使用简单的移位相加快速计算系数固定的乘法。
附图说明
下面结合附图对本发明作进一步说明。
图1是本发明一个优选的实施例中tanh函数计算单元结构示意图。
图2是幅度比较器的结构示意图。
具体实施方式
实施例
本实施例的针对量化后的LSTM的激活函数计算单元,在使用线性量化方法量化神经网络的时候,一方面,将操作数量化成8位定点数几乎能够满足所有网络的精度需求。另一方面,为了比较准确地线性近似激活函数,需要一个比较小的偏置系数,因此操作数位宽也不能太低。再一方面,由噪声容限xNM与操作数位宽k关系公式可知,操作数位宽越大,由线性量化操作所引入的噪声容限越小,因此计算单元的操作数位宽也不能太大。综合考虑以上几个方面的因素,最终将计算单元的操作数位宽确定为8位,用于计算这两个激活函数的分段线性函数如表1和表2所示:
表1:分段线性近似计算tanh函数
表2:分段线性近似计算sigmoid函数
该计算单元可对1-8位的操作数进行计算(不足8位的低位补零)。
该计算单元包括sigmoid函数计算单元和tanh函数计算单元。
如附图1所示,tanh函数计算单元由第一和第二求补码单元、幅度比较器、算术运算单元和两个二选一选择器组成。
第一求补码单元用于将负的输入数据x转换成正数,即后续的操作都是对输入数据x的绝对值absx进行操作。
第一二选一选择器根据输入数据x的符号位选择absx的值,若符号位为0,则说明输入数据x为正数,其绝对值即为x的值。若符号位为1,则说明输入数据为负数,其绝对值为求补码运算单元的输出。
幅度比较器用于判断输入数据的绝对值absx属于三个区间中的哪一个区间,然后分别产生对应的标志位{c
2,c
1,c
0}。当absx位于区间[0,0.375,二进制表示为0.000_0000,0.010_1111。位于该区间的数据的共同点为第七位恒为0,第六位和第五位不能同时为1,即
absx位于该区间时,标志位信号{c
2,c
1,c
0}为{0,0,1}。当absx位于区间[0.75,1,二进制表示为[0.110_0000,0.111_1111。位于该区间的数据的共同点为第七位和第六位都为1,即absx[6]&absx[5。absx位于该区间时,标志位信号{c
2,c
1,c
0}为{1,0,0}。显然,当absx既不位于区间[0,0.375,也不位于区间[0.75,1时,它就位于区间[0.375,0.75,因此用于标志absx位于该区间的信号
幅度比较器的电路如附图2所示。
算术运算单元用于计算表1中的三个线性函数。因为线性函数的系数已经确定,因此可以利用booth算法并根据确定的系数来快速计算乘法。
第二个系数0.75的二进制表示为0.110_0000,由2位booth算法部分积产生规则可知,一共有两个有效的部分积产生。分别是由该系数的第[6:4]位数据”100”确定的-2[absx]补和该系数的第[8:6]位数据”011”确定的+2[absx]补。其余的部分积都为零。其中absx_n为absx取反加一得到。
第三个系数0.5的二进制表示为0.100_0000,由2位booth算法部分积产生规则可知,一共只有一个有效的部分积产生。即由该系数的[8:6]位数据”010”确定的+[absx]补。其余的部分积都为零。
由幅度比较器产生的标志位信号{c2,c1,c0}选择输出表1中的三个线性函数的计算结果。
第二个求补码单元用于将算术运算单元的结果取相反数。
第二个二选一选择器用于选择输出算术运算单元的结果或它的相反数。如果输入数据x为正数,则输出算术运算单元的结果,否则则输出它的相反数。
如表2所示,Sigmoid函数计算单元只需要计算一个线性函数。系数0.25的二进制表示为0.010_0000,由2位booth算法部分积产生规则可知,一共有两个有效的部分积产生。分别是由该系数的第[6:4]位数据”100”确定的-2[absx]补和该系数的第[8:6]位数据”001”确定的+[absx]补。其余的部分积都为零。
本发明不局限于上述实施例。凡采用等同替换形成的技术方案,均落在本发明要求的保护范围。