一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种用于神经网络数据流计算架构的1D向量计算单元的制作方法

2022-02-20 01:31:54 来源:中国专利 TAG:

一种用于神经网络数据流计算架构的1d向量计算单元
技术领域
1.本发明涉及神经网络张量处理器的计算架构领域,尤其涉及一种用于神经网络数据流计算架构的1d向量计算单元。


背景技术:

2.在现有的通用处理器中(如cpu),非线性函数通常基于通用运算单元,使用基础运算步骤(例如乘法和加法等),通过某种近似方法计算得到,计算过程复杂且周期长,计算效率极低。
3.在专用的人工智能处理器中,非线性函数的计算通常是以查找表(lut)的方式来实现,也即把非线性函数的y数值直接存储在以x数值为索引的查找表中。
4.上述查找表方法存在明显缺点:局限性比较大,可以实现的非线性函数较少;实现资源使用较大,为了较高精度需要使用较多的查找表存储器存储更多的y值;实现的精度误差较大,lut是以离散点的坐标来查找对应的函数值,如果lut数量没有足够大,查找的函数值将会有比较大的误差。


技术实现要素:

5.有鉴于现有技术的上述缺陷,本发明的目的是提供一种用于神经网络数据流计算架构的1d向量计算单元,实现神经网络数据的高效计算。
6.为实现上述目的,本发明提供了一种用于神经网络数据流计算架构的1d向量计算单元,包含可重构配置单元和首尾相连的线性模块、非线性模块,其中,所述可重构配置单元用于根据外部输入输出可重构配置信息,将所述线性模块、所述非线性模块配置成某种功能算子,所述线性模块用于实现一维线性函数计算;所述非线性模块用于实现一维非线性函数计算。
7.进一步地,所述线性计算模块包括乘法单元、加减法和比较单元、多阈值relu单元以及第一精度转换单元;
8.所述乘法单元、加减法和比较单元、多阈值relu单元以及第一精度转换单元通过可重构配置信息进行配置,从而决定每个模块是否参与计算以及参与计算的数据来源;
9.所述乘法单元用于根据所述可重构配置信息完成任意位宽的有符号二进制补码乘法;
10.所述加减法和比较单元用于根据所述可重构配置信息及所述乘法单元的计算结果完成加/减法运算和/或最大/小值运算;
11.所述多阈值relu单元用于根据所述可重构配置信息及所述加减法和比较单元的计算结果完成一种relu计算;
12.所述第一精度转换单元用于读取可重构配置单元的移位寄存器值,根据所述移位寄存器值对所述多阈值relu单元输出的结果进行精度转换和位宽截断。
13.进一步地,所述多阈值relu单元完成的计算包括:relu计算、relu6计算、prelu计
算及leaky relu计算,其中,relu计算的实现是通过判断输入数值与0的大小关系,小于0,则该多阈值relu单元的输出为0,大于0,则为输入数值本身;relu6计算则是在relu计算的实现基础上,多加了一个判断大于6的条件,如果大于6则单元输出结果为6;prelu计算的实现则是结合乘法单元,判断输入数值与0的大小关系,小于0,则乘以一个系数,然后通过选通信号,使其输出值等于输入值,完成prelu计算;leaky relu计算的实现则是结合乘法单元,乘以一个固定系数,然后通过选通信号,使其输出值等于输入值,完成leaky relu计算。
14.进一步地,所述非线性模块采用以查找表结合分段函数拟合的方式来实现一维非线性函数的计算。
15.进一步地,所述非线性模块包括:查找表、写逻辑单元、读地址计算单元、多个乘法加法单元和第二精度转换单元,
16.所述查找表用于存储所述一维非线性函数的各分段函数的参数值,每个分段函数对应一个查找表地址;
17.所述写逻辑单元用于根据所述可重构配置单元给出的写地址信息,将所述一维非线性函数的分段函数的参数值写入所述查找表的存储单元;
18.所述读地址计算单元,用于根据所述一维非线性函数的输入数值换算其对应输入区间的分段函数的参数值在查找表中的地址;
19.所述乘法加法单元用于实现二进制补码乘法,每个乘法加法单元都用于实现ax b的一个运算,p个乘法加法单元级联实现一个p次多项式函数的运算,上一个乘法加法单元的输出作为下一个乘法加法单元的一个输入,各乘法加法单元的参数值根据所述读地址计算单元得到的查找表的地址从所述查找表读取;
20.所述第二精度转换单元用于读取可重构配置单元的移位寄存器值,根据所述移位寄存器值对所述p次多项式函数的运算结果进行精度转换和位宽截断。
21.进一步地,所述p次多项式函数为二次多项式函数。
22.进一步地,所述查找表的地址做如下约束设定:
23.设定一维非线性函数的查找表的地址个数为2^n 1;非线性函数的输入数值x_r表示为ef16格式的整数x,二者的关系为:
24.x_r=(-1)
signbit
×2(-exponent)
×
x
25.设定整数x的最大值和最小值分别为inmax和inmin,并设置inmax-inmin的值也为2的m次方;将所述一维非线性函数的输入区间划分成2的n次方段输入区间,其中m≤n,所述一维非线性函数在每个输入区间的曲线通过一个p次多项式函数进行拟合,所述p次多项式函数为所述一维非线性函数的分段函数。
26.进一步地,所述读地址计算单元计算查找表读地址的方法为:
27.当整数x处于inmin-inmax区间,则读地址=(整数x-inmin)*2^(n-m);同时,当整数x大于inmax或小于inmin,其对应的读地址为查找表地址的边界,即对应的读地址为整数x等于inmax时的读地址或为整数x等于inmin时的读地址。
28.进一步地,所述写逻辑单元将查找表各个地址的存储单元写入相应的值的方法为:每次写个地址紧接着写入数据;或者写入一个地址,通过写逻辑内部会自动增加地址,写入一连串的数据。
29.本发明实现了如下技术效果:
30.本发明提出的可重构1d向量计算单元,通过可重构配置单元的配置功能,将线性模块和/或非线性模块配置成为某种功能算子,实现多种1d向量计算,从而实现神经网络数据的高效计算。
31.本发明的非线性模块采用基于查找表的曲线拟合方法。不同于传统的y值存储查找表方法,曲线拟合方法使用查找表分段存储二次曲线方程的系数,通过二次曲线方程分段拟合的方法实现高效率、高准确度以及低面积的非线性函数计算。
附图说明
32.图1是本发明的1d向量计算单元的在神经网络张量处理器架构中的位置图;
33.图2是本发明的1d向量计算单元的结构图;
34.图3是本发明的1d向量计算单元中的线性计算模块的结构图;
35.图4是本发明的1d向量计算单元中的非线性模块的结构图;
36.图5是sigmoid函数曲线。
具体实施方式
37.为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
38.现结合附图和具体实施方式对本发明进一步说明。
39.如图1所示,本发明提出一种用于神经网络数据流计算架构的可重构1d向量计算单元,可以实现多种1d向量计算。
40.如图2所示,该1d向量计算单元包含可重构配置单元和首尾相连的线性模块、非线性模块,其中,线性模块可实现包括乘法、加法、减法、求最大/最小值、relu、prelu等一维线性计算,非线性模块可实现包括sigmoid、tanh、mish、elu等一维非线性计算。另外,还可以通过算子组合实现其他的计算,如取反、取绝对值和平方值等其他一维计算。可重构配置单元用于提供可重构配置信息,可重构配置信息用于配置线性模块和非线性模块成为某种功能算子,从而实现神经网络数据的高效计算。
41.可重构配置单元
42.可重构配置单元:计算模块采用的是数据流的架构,通过可重构配置单元给出的可重构配置信息可以配置每个小的计算模块,从而决定每个模块是否参与计算以及参与计算的数据来源。
43.线性计算模块
44.如图3所示,包含了乘法单元、加减法和比较单元、多阈值relu单元以及精度转换单元。
45.乘法单元:根据可重构配置单元给出的可重构配置信息可以完成任意位宽的有符号二进制补码乘法,该乘法单元的计算结果的精度无损失。
46.加减法和比较单元:根据可重构配置单元给出的可重构配置信息及乘法单元的计算结果,可以选择完成加/减法运算以及最大/小值运算,并且该计算单元实现的都是有符
号计算。
47.多阈值relu单元:根据可重构配置单元给出的可重构配置信息选择计算算子及加减法和比较单元的计算结果,可以实现诸如relu、relu6、prelu及leaky relu等计算,其中,relu的实现是通过判断输入数值与0的大小,小于0,则该单元的输出为0,大于0,则为输入数值本身;relu6则是在relu的实现基础上,多加了一个判断大于6的条件,如果大于6则单元输出结果为6;prelu的实现则是结合乘法单元,判断输入数值与0的大小,小于0,则乘以一个系数,然后传入到relu单元的数值,通过选通信号,使其输出值等于输入值,完成prelu计算;leaky relu计算的实现则是结合乘法单元,乘以一个固定系数,然后通过选通信号,使其输出值等于输入值,完成leaky relu计算;另外还有高低阈值的实现,通过配置单元寄存器设定高低阈值,加上relu单元对高低阈值的判断,可以实现诸如clip算子的非线性激活函数。
48.精度转换单元:则是读取可重构配置单元的移位寄存器值,根据不同的精度转换,会有不同的移位值,并且移位后的值,还会做位宽截断。
49.非线性模块
50.本实施例中的非线性模块采用基于查找表的曲线拟合方法。不同于传统的y值存储查找表方法,曲线拟合方法使用查找表分段存储二次曲线方程的系数,通过二次曲线方程分段拟合的方法实现高效率、高准确度以及低面积的非线性函数计算。
51.本实施例中的非线性模块,包括写逻辑单元、读地址计算单元、多个乘法加法单元以查找表结合分段函数拟合的方式来实现多种神经网络非线性函数的计算。此方法的优点是可以显著的减小查找表的数量,同时以分段多项式函数曲线拟合,可以大大增加非线性计算的精度。
52.写逻辑单元:该模块将查找表(lut)各个地址的存储单元写入相应的值,上位机可以通过每次写个地址紧接着写入数据的方式编程lut;或者写入一个地址,写逻辑内部会自动增加地址,而上位机执行写入一连串的数据的方式,来编程lut。
53.读地址计算单元:为了方便计算lut读地址,设计中查找表的地址个数为2^n 1,非线性函数的输入数值x_r经过ef16格式转化为整数x,二者关系为:
54.x_r=(-1)
signbit
×2(-exponent)
×
x
55.设定整数x的最大最小值分别为inmax和inmin,并设置inmax-inmin的值也为2的m次方。则读地址=(输入数值-inmin)*2^(n-m);同时,整数x与inmax/inmin比较,其对应的读地址为lut地址的边界。
56.查找表地址说明
57.设x_r/inmin_r/inmax_r是实际输入值,经过ef16格式转换后为x/inmin/inmax(x/inmin/inmax为硬件电路中计算使用的值),那么根据ef16格式(参见申请号为202011427161.0的发明专利)的定义,可以得到如下关系:
58.x_r=(-1)
signbit
×2(-exponent)
×
x
59.inmin_r=(-1)
signbit
×2(-exponent)
×
inmin
60.inmax_r=(-1)
signbit
×2(-exponent)
×
inmax
61.假设x轴的坐标范围为(inmin_r,inmax_r),lut的个数为lut_num=2^n 1,相当于把x轴坐标分成了lut_num-1份,其中每一份的步进为step=(inmax_r-inmin_r)/(lut_
num-1)。这样对应输入数值x_r,可以有x_r=k*step inmin_r,其中k就表示lut的地址(即lut表中第k个),那么
62.k=(x_r-inmin_r)/step=(x_r-inmin_r)*(lut_num-1)/(inmax_r-inmin_r)
63.结合x与x_r的关系可以得到如下公式
[0064][0065]
简化后得出:
[0066][0067]
预先设置inmax-inmin=2^m,则上式进一步简化为:
[0068][0069]
因此在硬件计算中,只需计算x-inmin的值然后进行移位就可以得到lut的地址(也就是序号)。
[0070]
对于lut的边界,当x_r大于inmax_r时,lut的地址为x_r=inmax_r计算得到的地址;当x_r小于inmin_r时,lut的地址为x_r=inmin_r计算得到的地址。
[0071]
乘法加法单元:与线性计算模块一样实现二进制补码乘法,每个单元都可以实现ax b的一个运算,经过多个乘法加法单元后即可实现多项式函数。例如,二次多项式函数需要两个乘法加法单元来实现,假如输入设为x,二次多项式函数的3个参数a,b,c可以分别存储为参数1、参数2、参数3。第一个乘法加法单元实现ax b,第一个乘法加法单元结果,作为第二个乘法加法单元的一个输入,那么第二个乘法加法单元的输出结果就实现(ax b)x c,这样一个二次多项式曲线y=ax^2 bx c就实现了。同样类似,三次多项式函数由三个乘法加法单元实现,四个参数分别为a,b,c,d分别存储为参数1,参数2,参数3,参数4。第一个单元实现ax b,第二个单元实现(ax b)x c,第三个单元实现((ax b)x c) d,最终实现三次多项式曲线y=ax^3 bx^2 cx d。以此类推,可以实现更高次多项式曲线。
[0072]
下面以激活函数sigmoid来讲述该非线性函数如何通过lut参数曲线拟合来实现。
[0073]
如图5所示,sigmoid函数曲线,在大于5时,曲线函数值趋近于1;在小于-5时,曲线函数值趋近于0。那么我们在做曲线拟合时,需要重点考虑的是区间[-5,5]的曲线拟合。根据读地址模块要求,我们需要inmax-inmin的值要为2的n次方,因此我们可以设定inmax=8,inmin=-8,inmax-inmin=16=2^4。这样我们把区间[-8,8],平均分成16份,每份区间范围差值为1。然后我们通过二次多项式函数拟合每个区间的曲线,可以计算出二次多项式函数参数a/b/c,如表1所示。
[0074]
通过写逻辑模块,将这些二次多项式函数的参数分别写到对应参数的lut中,在实际计算sigmoid函数时,lut根据输入值的大小,查找的对应的a/b/c值,送到乘法加法单元进行计算,得到sigmoid函数值。并且,与线性计算模块一样,在乘法加法单元中,都保留了计算位宽,而在最终输出结果之前经过精度转换模块得到精度损失较小的输出数据。
[0075]
表1
[0076][0077]
在本实施例中,在每个输入区间的多项式函数为二次多项式函数。根据实践,在一个小的输入区间,采用二次多项式函数基本可以满足大多数曲线的拟合要求。
[0078]
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献