1.本发明属于超大规模集成电路设计领域,涉及一种求解softmax函数的硬件实现方法。
背景技术:2.近年来,深度学习在图像识别、自然语言处理等领域有了突破性的发展,成为广泛应用于各种领域的工具。由此,针对深度学习的推理加速设计用于加快计算速度,减少计算时间的硬件模块成为目前的趋势之一。在设计基于硬件的深度神经网络时,激活函数的运算成为了一大挑战。激活函数是深度神经网络中常用的一种算子,主要在其中起到非线性传递的作用,由于这个特点,在硬件中一般需要实现较为复杂的运算,很难在进行高速计算的同时保持较理想的精度。softmax函数在深度神经网络中属于一种常见的激活函数,其可将多个神经元的输出映射到(0,1)区间内,一般可以用于多分类的任务中。因此迫切需要研究出一种新型的,可以在高精度要求下实现近似softmax计算,并且具有低功耗、小面积、低延迟的硬件设计方案。
3.在深度神经网络的使用环境中,softmax函数计算通常指代一层预处理,该过程将函数的输入向量减去这些向量的最大值,然后对这些向量的指数函数进行归一化操作从而得到结果,这种方法有助于训练的稳定性,但代价是引入额外的输入向量遍历。如果通过“在线归一化”的计算方法,即在计算归一化值(即分母的总和)的同时连续计算最大值,那么这样可以减少对输入数据的限制,从而能够减少对硬件设计的要求,提升运算速度。
技术实现要素:4.有鉴于此,本发明旨在提供一种近似计算softmax函数的装置,以实现较高的计算精度和较低的计算延时。
5.为了实现上述目的,本发明方法采用的技术方案如下:
6.一种近似计算softmax函数的装置,包括求最大值和上次输入最大值单元、减法运算单元、近似求解exp单元、树形求和单元、局部和累积单元、近似求解ln单元和输入数据暂存单元;所述求最大值和上次输入最大值单元,用于求出输入数据的最大值并将比较后最终的最大值暂存到输入数据暂存单元;所述减法运算单元,用于对所述求最大值和上次输入最大值单元和输入数据暂存单元输出的数据分别进行减法运算,并将运算结果输出给近似求解exp单元;所述近似求解exp单元,用于近似求解得到任意输入的指数函数的结果,并输出给树形求解单元;所述树形求解单元,用于对输入数据进行树形的累加求和,并将求和的结果输出给局部和累积单元;所述局部和累积单元,用于将多次输入的局部和进行累积,最后获得多次输入的累积值,然后输出至近似求解ln单元;所述近似求解ln单元,用于近似求解得到任意输入的对数函数的结果,并将其暂存到输入数据暂存单元;所述输入数据暂存单元,用于暂存数据。
7.进一步地,所述求最大值单元和上次输入最大值单元,采用树形结构构造,将输入
数据先每两个并行进行最大值的求解,得到局部的最大值,以此类推再每两个数据并行求解,最后得到所有输入数据中的最大值;将当前得到的最大值与上次输入数据的最大值进行比较,若上次输入数据的最大值更大,那么将当前得到的最大值由上次输入数据的最大值取代进行输出。
8.进一步地,所述近似求解exp单元,通过将以e为底的指数函数转化成为以2为底的函数,即然后将指数划分为整数部分y
int
和小数部分y
frac
,即,即将整数部分划分成移位的形式,而小数部分通过查找表来近似进行求解。
9.进一步地,所述近似求解ln单元,首先根据公式x=2i·
a,将输入数据x分解成为2的幂2i乘以(1,2]之间的一个数a的形式,然后对其进行拆解,得到ln 2
·
(i+log
2 a);再通过查找表近似求解ln 2
·
log
2 a的值,最后累加之后就可得到近似求解的结果,即y=ln 2
·
i+g(y
frac
)。
10.本发明提供了一种能创新地实现近似计算softmax函数的装置,利用exp-log-exp的一种计算公式,同时使用多次求和局部累积的方式,以及将复杂函数数据进行拆分从而实现近似计算指数函数和对数函数的值,从而在能够保证近似计算结果精度的情况下实现计算速度更快的效果,增强了硬件电路实现的泛用性。
附图说明
11.图1是本发明装置的架构图;
12.图2是近似求解exp单元的结构示意图;
13.图3是近似求解ln单元的结构示意图。
具体实施方式
14.下面结合附图和具体实施例对本发明的技术方案作进一步详细的说明。
15.本实施例采用如下公式对softmax函数进行近似:
[0016][0017]
其中,x为输入向量,f(xi)为输出结果,x
max
为一系列输入向量中的最大值。这里的i可以是一个任意的值,但本实施例的装置只支持8个数据的输入,所以对于i大于8的情况,需要多次进行输入,从而遍历所有的自变量。具体的方式可以通过下面的步骤来介绍:
[0018]
步骤1,将输入的向量序列分解为t
×
8的序列,其具体含义为,从第1,2,3,...,t个时刻,每个时刻同时到达8个元素作为模块的输入,并求出当前输入序列最大值m
t
:
[0019]mt
=max(x
8t
,x
8t+1
,...,x
8t+7
),t=0,1,2,...
[0020]
步骤2,使用c0,c1,c2,...,c
t
表示输入向量的第t次迭代中所求的8个数的最大值,并将当前最大值与对第t-1次迭代的最大值c
t-1
(第0次迭代的上一次迭代c-1
取0)进行比较,求出其中的最大值:
[0021]ct
=max(m
t
,c
t-1
),t=0,1,2,...
[0022]
输出。
[0023]
步骤3,局部和累积单元会根据上一次迭代得到的结果,结合上一次迭代的输入,求得下一次迭代的结果,将该结果称作局部和。使用s0,s1,s2,...,s
t
表示第t次迭代中局部和累积单元的局部和(第0次迭代的上一次迭代s-1
取0),这时,对当前时刻下的输入序列x
8t
,x
8t+1
,...,x
8t+7
,将其与第t次迭代的最大值相减,接着求出结果的以自然常数e为底的指数函数的值,同时求出第t次迭代和第t-1次迭代之差的自然常数e为底的指数函数,最后,通过对前一时刻的局部和s
t-1
和进行更新,得到当前时刻的局部和s
t
:
[0024][0025]
步骤4,在第t次迭代后,对整次计算的所有输入处理完毕,将得到的最终局部和s
t
求解对应的自然对数的值,然后在对输入序列进行最终计算,得到softmax函数计算的结果:f(xi)=exp(x
i-x
max-log(s
t
))。
[0026]
当输入的i不是8的倍数时,可以将输入序列的末尾进行补0,从而使输入变量达到8的倍数。
[0027]
本实施例的近似计算softmax函数的装置,其输入的向量x为16bit定点数,包括1bit符号位,8bit整数部分和7bit小数部分。整体硬件架构示意图如图1所示,主要包括以下顺序工作的六个模块:求最大值和上次输入最大值单元、近似求解exp单元、树形求和单元、局部和累积单元、近似求解ln单元、输入数据暂存单元。每个模块详细介绍如下。
[0028]
求最大值和上次输入最大值单元,用于求出输入的最大值并将其暂存,用于接下来进行数据运算。这里的求最大值可以使用树形结构,即可以在每两个值中找出最大的值,这样在单级寄存器上可以求得数据中一半较大的数,然后以此类推即可得到最终的最大值,同时这里还有比较逻辑单元,需要将其与上次输入的最大值进行比较,若上次输入的最大值更大,那么当前的最大值输出由该上次输入的最大值取代,这样在接下来的减法器计算得到的结果将为0,以避免减法运算中产生负数。
[0029]
近似求解exp单元用于近似求解任意输入的指数函数的结果。通过将以e为底的指数函数转化成为以2为底的函数,即然后将指数划分为整数部分y
int
和小数部分y
frac
,即将整数部分划分成移位的形式,而小数部分通过查找表来近似进行求解。
[0030]
树形求解单元用于将8个输入数据进行树形的累加求和,从而快速的得到想要的值。
[0031]
局部和累积单元用于将多次输入的局部和进行累积,最后获得多次输入的累积值。该单元根据softmax函数求解的因变量的个数,进行对输入值的累计求和,具体来说,其首先将之前的输出暂存下来,如果没有之前的输出,则置为0,然后将其与路径中的最大值之差得到的结果进行相乘,从而实现缩放的效果,接下来将得到的结果与树形求和单元输出的局部和进行累计,从而得到输出。该单元将以这种方式迭代,最终将所有softmax函数的因变量都囊括入内后,将输出送到近似求解ln单元进行接下来的计算。
[0032]
近似求解ln单元则用于近似求解任意输入的对数函数的结果。首先将输入分解成为2的幂2i乘以(1,2]之间的一个数a的形式,即x=2i·
a,然后对其进行拆解,得到ln 2
·
(i+log
2 a),这时候可以通过查找表近似求解g(y
frac
)=ln 2
·
log
2 a的值,最后累加之后就
可得到近似求解的结果,即y=ln 2
·
i+g(y
frac
)。
[0033]
所述输入数据暂存单元,用于暂存输入的数据。
[0034]
本实施例中的近似求解exp单元,如图2所示,输入为上述所述的减法求值后的结果。在输入到近似求解exp单元后,通过如图所示的逻辑实现内部计算,具体来说,首先进行一次常数的乘法,然后对得到的结果进行首个“1”的检测,从而得到以2的幂的形式的指数部分和剩余的尾数部分,在这里exp的输入量均为负数,所以不用考虑符号位的影响。随后对尾数部分进行查找表的操作,完成近似计算过程,得到计算结果的近似值。随后将结果输入到可控的位移寄存器中去,使用提取出的2的指数部分来控制位移的方向和大小,最终得到近似求解exp单元的计算结果。在这里为了和后面的计算保持一致,结果的位宽仍然为16bit,包括1bit符号位,8bit整数部分和7bit小数部分。
[0035]
本实施例中使用的树形求解单元,主要使用加法构成的加法数,用于将8个输入进行树形的累加求和,在第一次计算中8个数两两相加,得到4个局部和的结果,在第二次计算中4个局部和两两相加,得到2个局部和的结果,最终将这两个数相加,得到8个数相加整体的计算结果。这样通过树形结构,可以极大的减少运算的时延。
[0036]
本实施例中使用的局部和累计单元,主要针对的是softmax函数的输入自变量大于8的情况,此时树型求和单元所求的加权和并不是期望值,所以在多次输入的情况下,装置需要将输入值进行再次加权并求和。这里使用刚才所示的求最大值和上次输入最大值单元用于调整权重,该模块则负责将权重调整后的值进行累加。
[0037]
本实施例中的近似求解ln单元,如图3所示,其输入为累积求值后的结果。在输入到近似求解ln单元后,通过如图所示的逻辑实现内部计算,具体来说,首先进行一次首个“1”的检测,来得到以2的幂的形式的指数部分和剩余的尾数部分。随后对尾数部分进行查找表的操作,完成近似计算过程,得到计算结果的近似值。而对整数部分进行常数的乘法操作。随后将结果累加得到近似求解ln单元的计算结果。这里使用的位宽仍然为16bit,包括1bit符号位,8bit整数部分和7bit小数部分。
[0038]
本实施例中的输入数据暂存单元,主要是使用fifo进行数据的暂存。等到接下来计算所依赖的数据都计算完毕后,将输入的暂存数据再进行输出,一一对应送入到接下来的两个减法器单元和近似求解exp单元,将计算结果最终8个一组进行输出,得到想要的softmax计算的结果。
[0039]
本实施例中的减法运算单元,包括设置在求最大值和上次输入最大值单元与近似求解exp单元之间的减法器,以及输入数据暂存单元和近似求解exp单元之间的减法器,同样使用16bit定点数,包括1bit符号位,8bit整数部分和7bit小数部分。这里的减法运算模块的具体实现方式为:通过对减数直接取补码,然后进行加法计算。具体来说,如果符号位为0,即减数是正数,则通过对其进行取反后加1得到补码的结果,然后再进行相加;如果符号位为1,即减数是负数,则通过将负数的补码形式进行还原得到正数,从而得到原来的结果。完成减法运算后的数仍然使用16bir定点数,包括1bit符号位,8bit整数部分和7bit小数部分。
[0040]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围
为准。
技术特征:1.一种近似计算softmax函数的装置,其特征在于,包括求最大值和上次输入最大值单元、减法运算单元、近似求解exp单元、树形求和单元、局部和累积单元、近似求解ln单元和输入数据暂存单元;所述求最大值和上次输入最大值单元,用于求出输入数据的最大值并将比较后最终的最大值暂存到输入数据暂存单元;所述减法运算单元,用于对所述求最大值和上次输入最大值单元和输入数据暂存单元输出的数据分别进行减法运算,并将运算结果输出给近似求解exp单元;所述近似求解exp单元,用于近似求解得到任意输入的指数函数的结果,并输出给树形求解单元;所述树形求解单元,用于对输入数据进行树形的累加求和,并将求和的结果输出给局部和累积单元;所述局部和累积单元,用于将多次输入的局部和进行累积,最后获得多次输入的累积值,然后输出至近似求解ln单元;所述近似求解ln单元,用于近似求解得到任意输入的对数函数的结果,并将其暂存到输入数据暂存单元;所述输入数据暂存单元,用于暂存数据。2.根据权利要求1所述的一种近似计算softmax函数的装置,其特征在于,所述求最大值单元和上次输入最大值单元,采用树形结构构造,将输入数据先每两个并行进行最大值的求解,得到局部的最大值,以此类推再每两个数据并行求解,最后得到所有输入数据中的最大值;将当前得到的最大值与上次输入数据的最大值进行比较,若上次输入数据的最大值更大,那么将当前得到的最大值由上次输入数据的最大值取代进行输出。3.根据权利要求1所述的一种近似计算softmax函数的装置,其特征在于,所述近似求解exp单元,通过将以e为底的指数函数转化成为以2为底的函数,即然后将指数划分为整数部分y
int
和小数部分y
frac
,即将整数部分划分成移位的形式,而小数部分通过查找表来近似进行求解。4.根据权利要求3所述的一种近似计算softmax函数的装置,其特征在于,所述近似求解ln单元,首先根据公式x=2
i
·
a,将输入数据x分解成为2的幂2
i
乘以(1,2]之间的一个数a的形式,然后对其进行拆解,得到ln 2
·
(i+log2a);再通过查找表近似求解ln 2
·
log2a的值,最后累加之后就可得到近似求解的结果,即y=ln 2
·
i+g(y
frac
)。
技术总结本发明公开了一种近似计算softmax函数的装置。该装置包括:求最大值和上次输入最大值单元,用于求出输入数据的最大值并将比较后最终的最大值暂存到输入数据暂存单元;减法运算单元,用于对求最大值和上次输入最大值单元和输入数据暂存单元输出的数据进行减法运算;近似求解exp单元,用于近似求解得到任意输入的指数函数的结果;树形求解单元,用于对输入数据进行树形的累加求和;局部和累积单元,用于将多次输入的局部和进行累积,最后获得多次输入的累积值;近似求解ln单元,用于近似求解得到任意输入的对数函数的结果,并将其暂存到输入数据暂存单元。本发明的计算装置在保持一定精度的同时,可以降低硬件架构的功耗、面积以及延时开销。及延时开销。及延时开销。
技术研发人员:王宇宣 张威 董虹希 梅正宇 潘红兵
受保护的技术使用者:南京大学
技术研发日:2022.07.08
技术公布日:2022/11/1