CN114610267A - 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 - Google Patents
一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 Download PDFInfo
- Publication number
- CN114610267A CN114610267A CN202210283260.9A CN202210283260A CN114610267A CN 114610267 A CN114610267 A CN 114610267A CN 202210283260 A CN202210283260 A CN 202210283260A CN 114610267 A CN114610267 A CN 114610267A
- Authority
- CN
- China
- Prior art keywords
- data
- floating point
- point data
- calculated
- exponent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/556—Logarithmic or exponential functions
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本申请适用于人工神经网络技术领域,提供一种基于指数函数和softmax函数的优化方法、硬件系统及芯片,包括:读取待计算数据并对各待计算数据进行反量化,得到对应的浮点数据;对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;分别对整数部分和小数部分的浮点数据进行预设函数计算得到整数部分和小数部分对应的计算结果,将计算结果重组得到浮点数据的指数运算结果;对各浮点数据对应的指数运算结果进行量化得到各待计算数据的指数函数运算结果。本申请实施例通过将待计算数据转化成浮点数据进行指数函数计算,对输入数据的数值范围不予限制,同时可以大大提升计算精度。
Description
技术领域
本发明属于神经网络技术领域,尤其涉及一种基于指数函数和归一化指数函数(softmax函数)的优化方法、硬件系统及芯片。
背景技术
目前,在实现的时候通常通过分段线性拟合来实现。具体地,将输入数据xj设定在一个范围内,限制在一定范围内的数据实现softmax,在该设定的范围内,又分成若干个区间,每个区间内将用一元一次函数来近似表示,从而求解出然后累加求解最后利用除法器求解出
由此可见,现有技术无法在任意数值范围实现softmax计算。
发明内容
有鉴于此,本发明实施例提供了一种基于指数函数和softmax函数的优化方法、硬件系统及芯片,能够解决相关技术中的一个或多个技术问题。
第一方面,本申请一实施例提供了一种基于指数函数的优化方法,包括:读取待计算数据并对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;对所述各浮点数据对应的所述指数运算结果进行量化,得到所述各待计算数据的指数函数运算结果。
第二方面,本申请一实施例提供了一种基于softmax函数的优化方法,包括:读取待计算数据并对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;将所述各浮点数据对应的所述指数运算结果进行累加得到累加运算结果,并计算所述指数运算结果与所述累加运算结果的比值;量化所述浮点数据对应的所述比值,得到所述待计算数据的softmax函数运算结果。
第三方面,本申请一实施例提供了一种指数函数的硬件系统,包括:数据读取模块,用于读取待计算数据;指数函数计算模块,用于对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;以及根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;对所述各浮点数据对应的所述指数运算结果进行量化,得到所述各待计算数据的指数函数运算结果。
第四方面,本申请一实施例提供一种softmax函数的硬件系统,包括:数据读取模块,用于读取待计算数据;softmax函数计算模块,用于对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;以及分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;将所述各浮点数据对应的所述指数运算结果进行累加得到累加运算结果,并计算所述指数运算结果与所述累加运算结果的比值;量化所述浮点数据对应的所述比值,得到所述待计算数据的softmax函数运算结果。
第五方面,本申请一实施例提供了一种芯片,包括如第三方面任一实施例所述的指数函数的硬件系统,或第四方面任一实施例所述的softmax函数的硬件系统。
第六方面,本申请一实施例提供了一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一实施例所述的基于指数函数的优化方法,或第二方面任一实施例所述的基于softmax函数的优化方法。
第七方面,本申请一实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备可实现如第一方面任一实施例所述的基于指数函数的优化方法,或第二方面任一实施例所述的基于softmax函数的优化方法。
本申请实施例通过将待计算数据转化成浮点数据进行计算,对输入数据的数值范围不予限制,同时可以大大提升计算精度及计算速率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的一种基于softmax函数的优化方法的实现流程示意图;
图2是本申请一实施例提供的一种基于softmax函数的优化方法的过程示意图;
图3是本申请一实施例提供的一种4个通道各自的待计算数据的示意图;
图4是本申请一实施例提供的一种4个通道的待计算数据在DDR中的排布格式的示意图;
图5是本申请一实施例提供的一种从DDR中读取4个通道相应的待计算数据的过程示意图;
图6是本申请一实施例提供的一种fp32类型的数据格式示意图;
图7是本申请一实施例提供的一种单精度浮点数计算模块的结构示意图;
图8是本申请一实施例提供的一种查找单元73的结构示意图;
图9是本申请一实施例提供的一种加法器模块的结构示意图;
图10是本申请一实施例提供的一种softmax函数的硬件系统的结构示意图;
图11是本申请一实施例提供的一种softmax函数的硬件系统的结构示意图;
图12是本申请一实施例提供的一种softmax函数的硬件系统的结构示意图;
图13是本申请一实施例提供的一种softmax函数计算模块1020的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
在本申请说明书中描述的“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
此外,在本申请的描述中,“多个”的含义是两个或两个以上。术语“第一”和“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
还应当理解,除非另有明确的规定或限定,术语“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是直接相连,也可以是通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
本申请一实施例提供一种基于softmax函数的优化方法,该方法可部署于任意一种芯片中。如图1所示,是本申请一实施例提供的一种基于softmax函数的优化方法的流程示意图。图2是本申请一实施例提供的图1所示实施例的一种基于softmax函数的优化方法的过程示意图。
在一个实施例中,如图1所示,基于softmax函数的优化方法可以包括:步骤S110至步骤S160。
S110,读取待计算数据,并发送相应的待计算数据至各预设通道。
其中,待计算数据,即存储在第二存储器中的待计算数据。第二存储器可以为诸如双倍数据率同步动态随机存取存储器(Double Data Rate Synchronous Dynamic RandomAccess Memory,DDR SDRAM)等动态随机存取存储器(Dynamic Random Access Memory,DRAM)。
在一些实施例中,通过数据读取从第二存储器中读取待计算数据,并给每个通道发送相应的待计算数据。在图2所示实施例中,通过数据读取从DDR存中读取待计算数据,并给预设四通道中的每个通道发送相应的待计算数据,直至各通道的数据读取完毕为止。
在一个实施例中,在数据读取之前,需将需计算的数据按预设排布格式进行排布得到待计算数据,优选地,预设排布格式为NC4HW格式,更具体地,需计算的数据通常为int8或int16等类型的数据,则需计算的数据按照NC4HW格式写入DDR中,得到按照NC4HW格式排布的待计算数据。具体地,若需计算的数据的数量为C,则对应的可分为C/4组,分组后通过交织排布的方式得到NC4HW格式的待计算数据。需要说明的是,若需计算的数据的数量不能整除,则通过补零方式进行数据补齐,此处不作限制。
作为一非限制性示例,如图3所示,待计算数据为从上往下依次是通道0、通道1、通道2和通道3的数据。在DDR中按照NC4HW格式对4个通道的数据进行排布,排布格式如图4所示,4个通道中相同位置处的数据依次相邻排列。如图5所示,从DDR中将按照NC4HW格式排布的数据读取出来,一次读取4个数据并发送至相应的通道进行后处理,从而实现4组数据的softmax同时求解,实现4倍加速,从而大大缩短求解时间。
需要说明的是,本申请一些实施例包含多个预设通道,例如4个预设通道,每个预设通道可以实现一组数据的softmax求解,每个预设通道的硬件实现方式和硬件结构相同。因此,在下面实施例中只对其中一个预设通道的数据进行阐述。本申请实施例通过实现多通道数据的同时求解,大大缩短求解时间,从而提供了一种高效快速的softmax硬件实现方法。
还需要说明的是,本申请其他一些实施例中,可以仅包括一个通道,即对一组数据求解softmax。
S120,通过各预设通道将待计算数据进行反量化,得到各预设通道对应的浮点数据。
其中,根据预设通道中的预设反量化参数将待计算数据进行反量化,转化成浮点数据;预设反量化参数可以通过系统配置得到。
作为一非限制性示例,根据反量化参数,将从DDR中读取的int8或int16类型数据转成单精度浮点数(fp32)或半精度浮点数(fp16)。
需要说明的是,在后续的实施例中以将待计算数据转化成单精度浮点数(fp32)为例进行说明,应理解,示例性说明不能解释为对本申请的限制。单精度浮点数的格式如图6所示,通过fp32可以实现小数的表示和计算。其中,fp32为采用4个字节,即32位(bit)进行编码存储的一种数据类型,第一bit为符号位(sig),接着8bit表示指数位(exp),最后23bit为尾数位(fra)。对于任何一个fp32,存在以下五种表示数据的方法:
(1)当exp==0,fra==0时,表示该数据为:0。
(2)当exp==0,fra!=0时,表示该数据为:(-1)sig×(0.尾数位)×2(1-127)。
(3)当exp==8’b1111_1111,fra==23’d0,表示该数据为:正无穷大或负无穷大。具体地,当sig==1时,为负无穷大;当sig==0时,为正无穷大。其中,b表示当前这个数采用二进制表示,b前面的数字8’表示当前这个数为8bit,b后面的数表示当前这个数的具体二进制数据;d表示当前这个数采用十进制表示,d前面的数字23’表示当前这个数为23bit,d后面的数表示当前这个数的具体十进制数据。
(4)当exp==8’b1111_1111,fra!=23’d0,表示该数据不是一个数,即为非数(Not a Number,NAN)。
(5)除上述之外的数据,其余数据均可表示为:(-1)sig×(1.尾数位)×2(exp-127)。
在一个实施例中,假设反量化参数是fp32_scale,那么输入的待计算数据input_0通过反量化,转化成单精度浮点数,即input_00=fp32_scale*input_0。需要说明的是,后续提及的量化过程是反量化的逆过程,即由input_00得到input_0。
S130,对浮点数据进行变型拆分得到指数位为整数部分和小数部分的浮点数据,分别对拆分后的浮点数据进行预设函数计算得到对应的计算结果,重组计算结果得到指数运算结果并将其进行存储。
需要说明的是,本实施例以ex进行举例说明,如图2所示,指数计算为对浮点数据进行ex计算,更具体地,对各预设通道中经过反量化得到的浮点数据进行ex的指数运算得到各预设通道对应的指数运算结果,即求解e的input_00次方。
在一个实施例中,基于单精度浮点数形式对ex进行拟合求解,并将指数运算结果写入第一存储器ram;其中,ex中的x为需要进行指数函数计算的浮点数据,第一存储器诸如随机存取存储器(random access memory,RAM)等。
在另一个实施例中,由于硬件无法直接实现ex计算,因此,本申请在进行ex指数计算之前,需要对浮点数据进行变型拆分得到指数位为整数部分和小数部分的浮点数据,分别对拆分后的浮点数据进行预设函数计算得到对应的计算结果,重组计算结果得到指数运算结果并将其进行存储,具体地,变型拆分重组可通过如图7所示的单精度浮点数计算模块实现。
在一个实施例中,单精度浮点数计算模块设计的基本原理为:由于e是个常数,约等于2.718181828459,因此,可先对ex进行变型(即换底),换成2为底数的指数函数,即其中,log2ex=x×log2e,由于log2e为常数,所以log2ex可理解为x乘以一个常数。因此,基于上述理解对x×log2e的结果进行拆分,任意一个浮点数均可以拆成整数和小数部分。更具体地,对x×log2e拆分,假设temp是x×log2e结果的整数部分,decim是x×log2e结果的小数部分,将拆分后的数据进行组合可得到x×log2e=temp+decim。所以,
为了便于描述,本申请实施例中将(aa)2表示为aa的二进制形式,aa默认是十进制,(aa)10表示为aa的十进制,(aa)fp32表示为aa的单精度浮点数表示形式。由于(decim)10∈[0,1),所以(2decim)10∈[1,2),此时根据步骤S120一实施例中fp32的表达方法,可以得到ex的fp32表示的结果,即:
(ex)fp32=2temp×2decim=(-1)0×1.xxxxxxxxxxxxxxxxxxx×2temp
=(-1)0×1.xxxxxxxxxxxxxxxxxxx×2(temp+127)-127
基于上述公式,可知,当前浮点数据的指数部分为temp+127,假设2decim的单精度浮点计算结果是result_decim=(2decim)fp32,那么(ex)fp32为:
当temp+127>0时:
ex=temp+127>255?
32′h7f80_0000∶{1′b0,temp+127,result_decim[22:0]}
即,当temp+127>255,(ex)fp32的十六进制数是正无穷32′h7f80_0000;当temp+127≤255,(ex)fp32的十六进制数是{1′b0,temp+127,result_decim[22:0]},其中,h为十六进制的表示形式,result_decim[22:0]表示result_decim这个数的二进制数的低23位。
当temp+127≤0,即(ex)fp32的指数位为0,则根据步骤S120中的表示方法,当前待计算数据可通过(-1)sig×(0.尾数位)×2(1-127)表示,即:
ex=2temp×2decim=21-127×2decim/(2-temp-126)
根据上式可得(0.尾数位)=2decim/(2-temp-126),又基于result_decim=(2decim)fp32,得2decim={1.result_decim[22:0]},即{1’b1,result_decim[22:0]},进一步根据fp32的表达方式,尾数位仅能为23位,即以23为界限确定ex的计算方式,具体地:
ex=temp+127>-23?
{1′b0,8′h00,({1′b1,result_decim[22:0]}>>(-temp-126))}:0
其中,当temp+127>-23时,即-temp-126不超过23,此时(ex)fp32的十六进制数是{1′b0,8′h00,({1’b1,result_decim[22:0]}>>(-temp-126))},{1’b1,result_decim[22:0]}>>(-temp-126)表示{1’b1,result_decim[22:0]}向右移动(-temp-126)位后的整数;当temp+127≤-23时,即当前待计算数据超出fp32所能表示的范围,则默认(ex)fp32的十六进制数是0。
可见,在进行指数函数计算时,通过对ex进行换底,将换底后的得到的中的x×log2e拆分为整数部分temp和小数部分decim,再根据步骤S120一实施例中fp32的表达方法,即通过预设函数计算对浮点数据的指数部分进行判断,得到(ex)fp32的相关表示方式;基于上述表示方式,整数部分temp经过上述拆分后为已知数据,此时只需求result_decim[22:0]值便可得到(ex)fp32的表示结果,也即只需对(2decim)fp32进行求解,再通过将上述整数部分为已知数据及(2decim)fp32进行重组便可得到浮点数据在单精度浮点数形式下的指数运算结果。
进一步地,基于上述设计原理,单精度浮点数计算模块包括:换底单元71、拆分单元72、查找单元73、指数位求解单元74和组合单元75;其中,换底单元71用于对待计算数据的浮点数据(input_00)进行换底得到换底后的待计算数据,即拆分单元72用于将换底后的待计算数据的指数拆分为整数部分temp和小数部分decim,即 查找单元73用于查找浮点数据的指数为小数部分decim的单精度浮点数据,即查找(2decim)fp32的浮点数据;指数位求解单元74用于根据浮点数据的指数为整数部分temp求解ex在fp32表示形式下的指数;组合单元75用于根据小数部分decim的单精度浮点数据和整数部分temp求解的ex在fp32表示形式下的指数进行重组,获取待计算数据对应的浮点数据的指数运算结果。通过上述设计的硬件系统,一方面对输入数据的范围没有限制,另一方面精度可大大提升,例如当采用单精度浮点数时,精度可提升至10-4。
在一个实施例中,查找单元73通过预设查表法查找的指数为小数部分decim的单精度浮点数据。
在一个实现方式中,通过对浮点数据的指数为小数部分进行拆分,后通过预设查表法分别求解拆分后数据的单精度浮点数据,具体地,
(decim)2=0.xxxxxxyyyyyyzzzzzzvvvvv
=0.xxxxxx+0.000000yyyyyy+0.000000000000zzzzzz+0.000000000000000000vvvvv
则
(decim0)2=0.xxxxxx,表示decim的二进制数的第一个6位数;
(decim1)2=0.000000yyyyyy,表示decim的二进制数的第二个6位数;
(decim2)2=0.000000000000zzzzzz,表示decim的二进制数的第三个6位数;
(decim3)2=0.000000000000000000vvvvv,表示decim的二进制数的末尾5位数。
因此,在本实现方式中,(2decim)fp32求解方法如下:
(2decim)fp32=(2decim0+decim1+decim2+decim3)fp32=(2decim0)fp32×(2decim1)fp32×(2decim2)fp32×(2decim3)fp32。
作为一非限制性实现方式,如图8所示,查找单元73包括分割子单元731、4个查找子单元732和浮点乘法器子单元733;其中,分割子单元731的4个输出分别连接4个查找子单元732的输入,4个查找子单元732的输出分别连接浮点乘法器单元733的输入;分割子单元731用于将23位的小数部分decim的二进制数拆分为4个部分,依次为(decim0)2、(decim1)2、(decim2)2和(decim3)2,4个查找子单元732分别通过查表法算出(2decim0)fp32、(2decim1)fp32、(2decim2)fp32和的结果,即分别通过查表法算出小数部分decim的二进制数的前6位,接着6位,再接着6位,最后5位各自对应的浮点数;浮点乘法器子单元733根据4个查找子单元732的查表结果完成(2decim)fp32求解,即将(2decim0)fp32、(2decim1)fp32、(2decim2)fp32和(2decim3)fp32相乘得到result_decim。在图8所示的示例中,浮点乘法器子单元733包括3个乘法器,利用3个乘法器对4个查找子单元732的查表结果进行运算得到result_decim,即(2decim)fp32。本实施例通过将查找表分割,使查找表的数据量大大减少,从而大幅减少存储资源。
在一个实施例中,组合单元75包括比较器子单元,其中,比较器子单元,用于若确定指数位求解单元74得到的浮点数据的指数为整数部分temp时,ex在fp32表示形式下的指数是否满足第一预设数值范围或第四预设数值范围,则对应输出浮点数据的指数运算结果为第一定值或第二定值;若确定指数位求解单元74得到的浮点数据的指数为整数部分temp时,ex在fp32表示形式下的指数是否满足第二预设数值范围或第三预设数值范围,则根据查找单元73得到的对应值获取浮点数据的指数运算结果。其中,第一预设数值范围、第二预设数值范围、第三预设数值范围和第四预设数值范围中的数值依次由大到小。
在本申请实施例中,比较器子单元可以包括一个或多个比较器,例如可以包括级联的多个比较器,本申请对此不予限制。
具体地,比较器子单元,用于若确定指数位求解单元74得到的指数满足第一预设数值范围,则输出浮点数据的指数运算结果为第一定值。作为一非限制性示例,若确定该指数temp+127>255,则输出(ex)fp32的十六进制数是32′h7f80_0000。
比较器子单元,还用于若确定指数位求解单元74得到的指数满足第二预设数值范围,则根据查找单元73得到的对应值获取浮点数据的指数运算结果。具体地,根据查找单元73得到的对应值result_decim和指数位求解单元74得到的指数,获取浮点数据的指数运算结果。作为一非限制性示例,若确定指数0<temp+127≤255,则输出(ex)fp32的十六进制数是1′b0,temp+127,result_decim[22:0]。
比较器子单元,还用于若确定指数位求解单元74得到的指数满足第三预设数值范围,则根据查找单元73得到的对应值获取浮点数据的指数运算结果。具体地,根据查找单元73得到的对应值result_decim和指数位求解单元74得到的指数,获取浮点数据的指数运算结果。作为一非限制性示例,若确定指数-23<temp+127≤0,则输出(ex)fp32的十六进制数是{1′b0,8′h00,({1’b1,result_decim[22:0]}>>(-temp-126))}。
比较器子单元,还用于若确定指数位求解单元74得到的指数满足第四预设数值范围,则输出浮点数据的指数运算结果为第二定值。作为一非限制性示例,若确定指数temp+127≤-23,输出(ex)fp32的十六进制数是0。
在一个实施例中,若本申请仅用于进行指数函数计算,则需对上述的指数运算结果进行量化,即可得到待计算数据最终的指数函数运算结果;但在实际应用上,本申请基于上述步骤还可进一步对softmax函数运算进行加速,具体还包括以下步骤:
S140,读取各浮点数据的指数运算结果并进行累加,得到累加运算结果。
其中,从第一存储器中依次读取对应的浮点数据指数运算结果并进行累加,得到累加运算结果。也就是说,根据相应数量的浮点数据指数运算结果ex,ey,ez,…,求解ex+ey+ez+…。相应数量指的是任一预设通道中输入的待计算数据的数量,即输入数组的维度。在下面针对通道0的示例中,以待计算数据的数量为13进行示例性描述。
在一个实施例中,如图2所示,通过从第一存储器ram0中读取相应数量的浮点数据的指数运算结果进行累加Σ,得到累加运算结果。
作为一非限制性示例,可通过多个加法器对浮点数据指数运算结果进行累加得到累加运算结果,具体地,多个加法器的组成的加法器模块结构如图9所示,加法器模块包括多个加法器,多个加法器形成加法树。具体地,加法器模块包括7个浮点加法器单元91和一个累加器单元92,因此,加法器模块每次可求解8个数据的累加和,即从第一存储器ram中连续读取8个数据(即指数运算结果)做累加,求出部分累加和,记为然后依次求出下一8个数的部分累加和并和上一部分累加和相加,重复相同的步骤直至该通道的所有指数运算结果都进行一次累加为止,最后得到所有数据的累加运算结果。
需要说明的是,当数据的数量少于8时,可通过零进行补齐。比如,针对通道0而言,输入的待计算数据包括13个,依次为a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,那么通过求ex后,第一存储器ram中对应存有13个指数运算结果,依次为ea0,ea1,ea2,ea3,ea4,ea5,ea6,ea7,ea8,ea9,ea10,ea11,ea12。在求累加和的过程如下,先从第一存储器ram读取8个数,即ea0,ea1,ea2,ea3,ea4,ea5,ea6,ea7做累加得到部分累加和p_sum0,然后再从第一存储器ram读取ea8,ea9,ea10,ea11,ea12,由于此时只有5个数据,那么不足的3个用0替代,即求ea8,ea9,ea10,ea11,ea12,0,0,0的累加,得到部分累加和p_sum1,然后加上上次的部分累加和p_sum0,得到所有指数运算结果的累加运算结果,即累加和p_sum。另外,本实施例中的加法器数量可根据实际情况设计,此处不作限制。
S150,计算各浮点数据的指数运算结果与累加运算结果的比值并将比值进行量化,得到softmax函数运算结果。
基于步骤S140,可通过上述获取的指数运算结果和累加运算结果对softmax函数进行变型求解。在一个实施例中,softmax函数公式为基于该公式,假设累加运算结果为根据累加运算结果从第一存储器中读取对应的指数运算结果,即然后利用指数运算结果与累加运算结果进行比值计算,便可以得到浮点数据的softmax结果。
在一个实施例中,如图2所示,从第一存储器ram中读取各浮点数据的指数运算结果,并对各浮点数据的指数运算结果与累加运算结果进行除法计算div,得到对应的比值。
作为一非限制性示例,除法计算div可通过除法器进行计算,具体利用除法器实现过程如下,从第一存储器中依次读出ex结果,作为除法器的被除数,然后将步骤S140中求得的累加和p_sum作为除法器的除数。比如,针对通道0而言,将步骤S140一示例中存在第一存储器ram中的ea0,ea1,ea2,ea3,ea4,ea5,ea6,ea7,ea8,ea9,ea10,ea11,ea12依次取出与p_sum相除,则除法器的输出便是
进一步地,得到浮点数据的指数运算结果与累加运算结果的比值,需将比值进行量化,通过量化将浮点数据转换为整型数据,即得到待计算数据的softmax函数运算结果。
其中,量化是指将浮点数据类型转化成整型数据类型;量化后的结果需写入第一存储器中进行暂存,以待所有浮点数据均完成量化后同时并行输出。需要说明的是,量化过程是反量化的逆过程,可以参考前述的反量化过程。
在一些实施例中,将浮点数据类型的比值进行量化,得到in8或int16数据类型的比值,并写入第一存储器ram中进行暂存,如图2所示。
S160,待所有待计算数据对应的softmax函数运算结果计算完毕,对softmax函数运算结果执行写入操作。
其中,在各通道的待计算数据对应的比值都经过量化得到softmax函数运算结果后,将各通道的softmax函数运算结果写入第二存储器,第二存储器可以为DDR。
在一个实施例中,如图2所示,当4个通道的待计算数据的softmax结果计算完毕,通过数据读取从第一存储器ram中读取4个通道各自的softmax函数运算结果,然后按照NC4HW格式将写入第二存储器DDR中。应理解,4个通道的经量化的比值与4个通道的待计算数据的排布格式相同,此处不再赘述。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请一实施例还提供一种指数函数的硬件系统。该指数函数的硬件系统中未详细描述之处请详见前述方法的相关描述,此处不再赘述。
图10是本发明实施例提供的一种指数函数的硬件系统的结构示意图。系统具体包括控制模块1010、指数函数计算模块1110、数据读取模块1030、数据写入模块1040、第一存储器1050和第二存储器1060;其中,控制模块1010分别连接指数函数计算模块1110、数据读取模块1030、数据写入模块1040、第一存储器1050及第二存储器1060,用于控制数据的读写时间和数量,以及各模块的工作逻辑和流程等。具体地,控制模块1010用于控制数据读取模块1030从诸如DDR等第二存储器1060中读取待计算数据、数据量和读数据的时间等,还用于控制数据写入模块1040将待计算数据的指数函数运算结果写入第二存储器1060和写数据的时间等。控制模块1010还用于控制指数函数计算模块1110的工作流程等。
数据读取模块1030用于在控制模块1010的控制下从第二存储器1060中读取待计算数据,并将待计算数据发送给指数函数计算模块1110。指数函数计算模块1110用于求解待计算数据的指数函数运算结果。指数函数计算模块1110包括一个或多个,当包括一个时,数据读取模块1030用于在控制模块1010的控制下从第二存储器1060中读取待计算数据,并将待计算数据发送给指数函数计算模块1110;当包括多个时,数据读取模块1030用于在控制模块1010的控制下从第二存储器1060中读取待计算数据,并将待计算数据发送给相应通道的s指数函数计算模块1110。
在一些实施例中,如图11所示,指数函数计算模块1110包括:反量化子模块1021、指数计算子模块1022及量化子模块1025,其中,反量化子模块1021用于将待计算数据进行反量化,得到待计算数据对应的浮点数据;指数计算子模块1022用于根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;以及分别对整数部分和小数部分的浮点数据进行预设函数计算得到整数部分和小数部分对应的计算结果,将计算结果重组得到所述浮点数据的指数运算结果;量化子模块1025用于对指数运算结果进行量化得到待计算数据的指数函数运算结果。需要说明的是,指数函数计算模块1110中包括的各子模块具体内容参见步骤S120~S130,此处不再赘述。
在一些实施例中,指数计算子模块1022为如图7所示的指数计算模块,包括:换底单元71、拆分单元72、查找单元73、指数位求解单元74和组合单元75,具体参见前述内容,此处不再赘述。
本申请一实施例还提供一种softmax函数的硬件系统。该softmax函数的硬件系统中未详细描述之处请详见前述方法的相关描述,此处不再赘述。
图12是本发明实施例提供的一种softmax函数的硬件系统的结构示意图。需要说明的是,在图10所示的实施例中示出了4个softmax函数计算模块1020,在其他实施例中,softmax函数的硬件系统可以仅包括1个softmax函数计算模块1020,或者包括其他数量个softmax函数计算模块1020,计算模块的数量根据具体的通道数进行设计,本申请对此不予具体限制。
如图12所示,softmax函数的硬件系统包括:控制模块1010、softmax函数计算模块1020、数据读取模块1030、数据写入模块1040、第一存储器1050和第二存储器1060。控制模块分别连接softmax函数计算模块1020、数据读取模块1030、数据写入模块1040、第一存储器1050和第二存储器1060,用于控制数据的读写时间和数量,以及各模块的工作逻辑和流程等。具体地,控制模块1010用于控制数据读取模块1030从诸如DDR等第二存储器1060中读取待计算数据、数据量和读数据的时间等,还用于控制数据写入模块1040将待计算数据的softmax结果写入第二存储器1060和写数据的时间等。控制模块1010还用于控制softmax函数计算模块1020的工作流程等。
数据读取模块1030用于在控制模块1010的控制下从第二存储器1060中读取待计算数据,并将待计算数据发送给softmax函数计算模块1020。softmax函数计算模块1020用于求解待计算数据的softmax函数计算结果。softmax函数计算模块1020包括一个或多个,当包括一个时,数据读取模块1030用于在控制模块1010的控制下从第二存储器1060中读取待计算数据,并将待计算数据发送给softmax函数计算模块1020;当包括多个时,数据读取模块1030用于在控制模块1010的控制下从第二存储器1060中读取待计算数据,并将待计算数据发送给相应通道的softmax函数计算模块1020。
在一些实施例中,如图13所示,softmax函数计算模块1020包括:反量化子模块1021、指数计算子模块1022、加法器子模块1023、除法器子模块1024和量化子模块1025,其中,反量化子模块1021用于将待计算数据进行反量化,得到待计算数据对应的浮点数据;指数计算子模块1022用于根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;以及分别对整数部分和小数部分的浮点数据进行预设函数计算得到整数部分和小数部分对应的计算结果,将计算结果重组得到所述浮点数据的指数运算结果;加法器子模块1023用于各浮点数据对应的指数运算结结果进行累加运算,得到累加运算结果;除法器子模块1024用于根据存储的各浮点数据对应的指数运算结果和累加运算结果计算两者之间的比值;量化子模块1025用于对比值进行量化得到softmax函数运算结果。需要说明的是,在图10中4个softmax函数计算模块1020的结构相同;softmax函数计算模块1020中包括的各子模块具体内容参见步骤S120~S150,此处不再赘述。
在一些实施例中,指数计算子模块1022为如图7所示的指数计算模块,包括:换底单元71、拆分单元72、查找单元73、指数位求解单元74和组合单元75,具体参见前述内容,此处不再赘述。
本申请一实施例还提供了一种芯片,该芯片包括前述的指数函数的硬件系统和/或softmax函数的硬件系统。
本申请一实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时可实现前述指数函数的硬件系统和/或基于softmax函数的优化方法。
本申请一实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得终端设备可实现前述指数函数的硬件系统和/或基于softmax函数的优化方法实施例中的步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(read-only memory,ROM)、RAM、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (11)
1.一种基于指数函数的优化方法,其特征在于,包括:
读取待计算数据并对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;
根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;
分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;
对所述各浮点数据对应的所述指数运算结果进行量化,得到所述各待计算数据的指数函数运算结果。
2.一种基于softmax函数的优化方法,其特征在于,包括:
读取待计算数据并对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;
根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;
分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;
将所述各浮点数据对应的所述指数运算结果进行累加得到累加运算结果,并计算所述指数运算结果与所述累加运算结果的比值;
量化所述浮点数据对应的所述比值,得到所述各待计算数据的softmax函数运算结果。
3.如权利要求1或2所述的优化方法,其特征在于,在所述读取待计算数据之前,还包括:
将需计算的数据按预设排布格式进行排布,得到所述待计算数据。
4.如权利要求1或2所述的优化方法,其特征在于,所述读取待计算数据并对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据,包括:
读取待计算数据,并发送相应的待计算数据至各预设通道;
通过所述各预设通道将相应的所述待计算数据进行反量化,得到所述各预设通道对应的浮点数据。
5.如权利要求1或2所述的优化方法,其特征在于,所述根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据,包括:
根据预设拆分公式对对所述各待计算数据的浮点数据进行变型,得到变型后的所述浮点数据;
将变型后的所述浮点数据的指数位拆分为整数部分和小数部分。
6.如权利要求1或2所述的优化方法,其特征在于,所述分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果,包括:
通过预设查表法查找所述浮点数据的指数位为所述小数部分的单精度浮点数据;
根据所述浮点数据的指数位为所述整数部分求解指数函数在单精度浮点数据表示形式下的指数;
根据所述小数部分的单精度浮点数据和所述整数部分求解的指数函数在单精度浮点数据表示形式下的指数进行重组,获取所述浮点数据的指数运算结果。
7.如权利要求6所述的优化方法,其特征在于,所述根据所述小数部分的单精度浮点数据和所述整数部分求解的指数函数在单精度浮点数据表示形式下的指数进行重组,获取所述浮点数据的指数运算结果,包括:
若确定所述整数部分求解指数函数在单精度浮点数据表示形式下的指数满足第一预设数值范围或第四预设数值范围,则对应输出所述浮点数据的指数运算结果对应为第一定值或第二定值;
若确定所述整数部分求解指数函数在单精度浮点数据表示形式下的指数满足第二预设数值范围或第三预设数值范围,则根据所述小数部分的单精度浮点数据和所述整数部分进行重组,获取所述浮点数据的指数运算结果;所述第一预设数值范围、所述第二预设数值范围、所述第三预设数值范围和所述第四预设数值范围中的数值依次由大到小。
8.一种指数函数的硬件系统,其特征在于,包括:
数据读取模块,用于读取待计算数据;
指数函数计算模块,用于对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;以及
分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;对所述各浮点数据对应的所述指数运算结果进行量化,得到所述各待计算数据的指数函数运算结果。
9.一种softmax函数的硬件系统,其特征在于,包括:
数据读取模块,用于读取待计算数据;
softmax函数计算模块,用于对各待计算数据进行反量化,得到所述各待计算数据对应的浮点数据;根据预设拆分公式对各浮点数据进行变型拆分,得到指数位分别为整数部分和小数部分的浮点数据;以及
分别对所述整数部分和小数部分的浮点数据进行预设函数计算得到所述整数部分和小数部分对应的计算结果,将所述计算结果重组得到所述浮点数据的指数运算结果;将所述各浮点数据对应的所述指数运算结果进行累加得到累加运算结果,并计算所述指数运算结果与所述累加运算结果的比值;量化所述浮点数据对应的所述比值,得到所述待计算数据的softmax函数运算结果。
10.一种芯片,其特征在于,包括如权利要求8所述指数函数的硬件系统和/或如权利要求9所述的softmax函数的硬件系统。
11.一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的优化方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210283260.9A CN114610267A (zh) | 2022-03-22 | 2022-03-22 | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 |
PCT/CN2022/100635 WO2023178860A1 (zh) | 2022-03-22 | 2022-06-23 | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210283260.9A CN114610267A (zh) | 2022-03-22 | 2022-03-22 | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114610267A true CN114610267A (zh) | 2022-06-10 |
Family
ID=81864197
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210283260.9A Pending CN114610267A (zh) | 2022-03-22 | 2022-03-22 | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114610267A (zh) |
WO (1) | WO2023178860A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023178860A1 (zh) * | 2022-03-22 | 2023-09-28 | 奥比中光科技集团股份有限公司 | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 |
WO2023206832A1 (zh) * | 2022-04-26 | 2023-11-02 | 成都登临科技有限公司 | 函数实现方法、逼近区间分段方法、芯片、设备及介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108021537B (zh) * | 2018-01-05 | 2022-09-16 | 南京大学 | 一种基于硬件平台的softmax函数计算方法 |
US11163533B2 (en) * | 2019-07-18 | 2021-11-02 | International Business Machines Corporation | Floating point unit for exponential function implementation |
CN111240746B (zh) * | 2020-01-12 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种浮点数据反量化及量化的方法和设备 |
CN112685693B (zh) * | 2020-12-31 | 2022-08-02 | 南方电网科学研究院有限责任公司 | 一种实现Softmax函数的设备 |
CN113721884B (zh) * | 2021-09-01 | 2022-04-19 | 北京百度网讯科技有限公司 | 运算方法、装置、芯片、电子装置及存储介质 |
CN114201140B (zh) * | 2021-12-16 | 2022-08-16 | 千芯半导体科技(北京)有限公司 | 指数函数处理单元、方法和神经网络芯片 |
CN114610267A (zh) * | 2022-03-22 | 2022-06-10 | 奥比中光科技集团股份有限公司 | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 |
-
2022
- 2022-03-22 CN CN202210283260.9A patent/CN114610267A/zh active Pending
- 2022-06-23 WO PCT/CN2022/100635 patent/WO2023178860A1/zh unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023178860A1 (zh) * | 2022-03-22 | 2023-09-28 | 奥比中光科技集团股份有限公司 | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 |
WO2023206832A1 (zh) * | 2022-04-26 | 2023-11-02 | 成都登临科技有限公司 | 函数实现方法、逼近区间分段方法、芯片、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023178860A1 (zh) | 2023-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110070178B (zh) | 一种卷积神经网络计算装置及方法 | |
CN110852416B (zh) | 基于低精度浮点数数据表现形式的cnn硬件加速计算方法及系统 | |
CN114610267A (zh) | 一种基于指数函数和softmax函数的优化方法、硬件系统及芯片 | |
CN109214509B (zh) | 一种用于深度神经网络高速实时量化结构和运算实现方法 | |
US10491239B1 (en) | Large-scale computations using an adaptive numerical format | |
CN110852434B (zh) | 基于低精度浮点数的cnn量化方法、前向计算方法及硬件装置 | |
CN111382860B (zh) | 一种lstm网络的压缩加速方法及fpga加速器 | |
CN109165006B (zh) | Softmax函数的设计优化及硬件实现方法及系统 | |
CN111985495A (zh) | 模型部署方法、装置、系统及存储介质 | |
CN111240746B (zh) | 一种浮点数据反量化及量化的方法和设备 | |
CN111696149A (zh) | 针对基于cnn的立体匹配算法的量化方法 | |
CN114647399B (zh) | 一种低能耗高精度近似并行定宽乘法累加装置 | |
CN110955403B (zh) | 近似基-8布斯编码器及混合布斯编码的近似二进制乘法器 | |
US20210004679A1 (en) | Asymmetric quantization for compression and for acceleration of inference for neural networks | |
US11907680B2 (en) | Multiplication and accumulation (MAC) operator | |
CN110825346A (zh) | 一种低逻辑复杂度的无符号近似乘法器 | |
WO2021039164A1 (ja) | 情報処理装置、情報処理システム及び情報処理方法 | |
KR102243119B1 (ko) | 가변 정밀도 양자화 장치 및 방법 | |
JP7299134B2 (ja) | データ処理装置及びその動作方法、プログラム | |
Madadum et al. | A resource-efficient convolutional neural network accelerator using fine-grained logarithmic quantization | |
CN113313253A (zh) | 神经网络压缩方法、数据处理方法、装置及计算机设备 | |
CN109117114B (zh) | 一种基于查找表的低复杂度近似乘法器 | |
Kilambi et al. | A diversity controlled genetic algorithm for optimization of FRM digital filters over DBNS multiplier coefficient space | |
Liu et al. | Optimize FPGA-Based Neural Network Accelerator with Bit-Shift Quantization | |
WO2023028884A1 (zh) | 一种浮点数计算电路以及浮点数计算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |