实现sigmoid函数逼近的模型、FPGA电路及工作方法
文献发布时间:2023-06-19 13:49:36
技术领域
本发明涉及集成电路设计的技术领域,尤其涉及一种实现sigmoid函数逼近的模型,对应的FPGA电路,以及实现sigmoid函数逼近的FPGA电路的工作方法,其在FPGA电路中实现sigmoid函数逼近时保证精度的前提下降低运算资源消耗。
背景技术
在实际生活中的很多领域,诸如实时图像处理、数字信号处理等方面,经常需要对非线性函数进行高速计算,尤其在近年来特别受欢迎的神经网络算法中更是包括了大量的非线性函数。sigmoid函数是被广泛应用的激活函数之一,高效实现sigmoid函数具有重要的研究意义。研究人员从软件和硬件两个方面实现sigmoid函数展开了大量的研究,相比于软件实现,硬件实现速度更快,然而,sigmoid函数如诸多的S型函数一样,在硬件实现过程中面临很多的挑战。因为此类函数都会包括指数运算以及除法运算等复杂的运算,这些运算在FPGA中难以直接实现,目前存在的很多硬件实现方法一方面使用了较多的乘法器和除法器,带来了大量的硬件资源消耗,另一方面,在精度等方面难以达到要求。因此,高效的非线性函数硬件实现方法成为研究人员关注的热点。
sigmoid函数的表达式为:
步骤100:设计逼近函数;
步骤101:判断逼近函数是否能很好的拟合sigmoid函数,是否满足精度要求,如果满足,则进入步骤102,如果不满足,则返回步骤100;
步骤102:设计sigmoid的逼近函数的硬件实现电路;
步骤103:将逼近函数的硬件电路分解成各个基本单元模块;
步骤104:判断在FPGA中实现的逼近函数是否满足精度、资源等性能要求,如果满足,则设计完成,如果不满足,则返回步骤102。
目前数字实现激活函数的主要经典方法有查找表法、泰勒级数展开法和分段拟合法。多项式拟合法拟合效果好,但是多项式拟合中会使用很多乘法器和加法器等资源,有限的FPGA资源不适合采用这种消耗大量资源的方法。查找表法实现方法简单,需要将之前计算好的结果保存在存储器中,通过访问存储器地址读取数值。查找表法具有灵活度高的优点,可以调整精度。但随着精度的提高,查找表将消耗大量的存储资源。由于上述两种方法均需要消耗大量资源,因此CORDIC算法被提出并应用于实现激活函数。CORDIC算法只需要使用加法和移位来计算非线性函数且具有灵活性强的优点,然而,随着系统精度要求的提高,CORDIC算法会导致很大的计算延迟。
为了解决这些问题,研究人员提出了分段线性近似和分段非线性近似方法,分段线性近似的算法质量,取决于如何将输入区间划分为合适的分段来获得期望的精度,不同的方案可能产生不同的精度和硬件性能。为了达到比较好的性能需要找到合适的分段方式,这是方案设计的难点和关键。对于分段非线性近似,因为其本身由非线性函数组成,不合理的函数设计可能会消耗大量的乘法器和加法器,导致电路面积过大以及工作频率低的问题。因此,亟需一种sigmoid函数逼近的模型,以兼顾资源消耗和精度。
发明内容
为克服现有技术的缺陷,本发明要解决的技术问题是提供了一种实现sigmoid函数逼近的模型,其能够在FPGA电路中实现sigmoid函数逼近时保证精度的前提下降低运算资源消耗。
这种实现sigmoid函数逼近的模型,其为公式(1)
本发明采用了一种区间(-4,4)中定义的二阶近似方案,可大量减少乘法资源的消耗,与其他二阶近似方案相比,它只需要一个乘法器,由公式可以看出,该分段非线性近似函数避免了使用指数函数,为了尽量减少使用乘法器和除法器,公式中采用的系数都可以通过移位获得,从而减少了硬件资源消耗,降低了功耗。
还提供了一种实现sigmoid函数逼近的模型的FPGA电路,其包括:输入数据模块(201)、比较器模块(202)、运算模块(203)、输出数据模块(204);
输入数据模块(201)一方面进入比较器模块(202)进行逼近函数的分段判断,另一方面进入运算模块(203)进行逼近函数的计算;比较器模块(202)包括:绝对值生成单元(301)和比较器(302);运算模块(203)使用移位器,加法器以及乘法器来完成计算;输出数据模块(204)通过比较器模块输出的索引选择输出计算模块得到的结果。
还提供了一种实现sigmoid函数逼近的模型的FPGA电路的工作方法,输入数据模块进入运算模块进行运算,运算模块使用二选一MUX来决定进入第一加法器的其中一个数据为1或者-1,第一移位器对输入数据右移两位,相当于除以4,此数据为第一加法器的其中一个数据,第一加法器的数据输入到乘法器中进行平方操作,运算结果进入第二移位器中右移一位,相当于除以2,此时数据作为一个区间的输出数据,该数据进入第二加法器成为另外一个输出数据;在计算完成后,通过比较器模块生成数据输出模块的索引;绝对值生成单元,当输入数据data的符号位为0时,输出数据本身,当符号位为1时,输出数据取反加一;经过绝对值生成单元后生成的数据被送入比较器单元中,输入数据的绝对值只进行一次比较就作为输出数据模块的索引;通过比较器模块生成的索引通过四选一的选择器进行数据输出。
本发明的设计电路架构简单,尽量减少资源消耗的同时保持较高的精度。在LSTM网络上进行了训练实验,实验表明,提出的二阶近似公式代替sigmoid函数应用于LSTM网络时,基本达到了同样的精度。
附图说明
图1示出了在FPGA电路中实现sigmoid函数逼近的步骤。
图2示出了根据本发明的实现sigmoid函数逼近的FPGA电路的结构示意图。
图3示出了根据本发明的实现sigmoid函数逼近的FPGA电路中比较器模块的结构示意图。
图4示出了根据本发明的实现sigmoid函数逼近的FPGA电路中输出数据模块的结构示意图。
图5示出了根据本发明的实现sigmoid函数逼近的FPGA电路中运算模块的结构示意图。
具体实施方式
本发明针对sigmoid函数采用分段非线性近似方法在FPGA上部署时面临的资源以及精度的问题提出了降低运算资源消耗的近似函设计方案,使得sigmoid激活函数能更好的应用到神经网络算法中去。
通过分析sigmoid函数曲线特点,针对分段非线性近似方法面临的消耗大量乘法及乘法资源的问题,提出一种降低运算资源消耗的分段非线性拟合sigmoid函数的表达式如公式(1)所示:
本发明采用了一种区间(-4,4)中定义的二阶近似方案,可大量减少乘法资源的消耗,与其他二阶近似方案相比,它只需要一个乘法器,由公式可以看出,该分段非线性近似函数避免了使用指数函数,为了尽量减少使用乘法器和除法器,公式中采用的系数都可以通过移位获得,从而减少了硬件资源消耗,降低了功耗。
如图2所示,还提供了一种实现sigmoid函数逼近的模型的FPGA电路,其包括:输入数据模块201、比较器模块202、运算模块203、输出数据模块204;
输入数据模块201一方面进入比较器模块202进行逼近函数的分段判断,另一方面进入运算模块203进行逼近函数的计算;比较器模块202包括:绝对值生成单元301和比较器302(如图3所示);运算模块203使用移位器,加法器以及乘法器来完成计算;输出数据模块204通过比较器模块输出的索引选择输出计算模块得到的结果(如图4所示)。
本发明的设计电路架构简单,尽量减少资源消耗的同时保持较高的精度。在LSTM网络上进行了训练实验,实验表明,提出的二阶近似公式代替sigmoid函数应用于LSTM网络时,基本达到了同样的精度。
优选地,如图5所示,所述运算模块包括:二选一MUX501、第一加法器503、乘法器504、第一移位器502、第二移位器505、第二加法器506;运算模块使用二选一MUX来决定进入第一加法器的其中一个数据为1或者-1,第一移位器对输入数据右移两位,相当于除以4,此数据为第一加法器的其中一个数据,第一加法器的数据输入到乘法器中进行平方操作,运算结果进入第二移位器中右移一位,相当于除以2,此时数据作为一个区间的输出数据,该数据进入第二加法器成为另外一个输出数据。
优选地,所述输出数据模块204通过比较器模块输出的索引选择输出结果,由于sigmoid逼近函数有四个分段,因此选用四选一的选择器。
还提供了一种实现sigmoid函数逼近的模型的FPGA电路的工作方法,由于sigmoid函数的分段非线性近似函数有四个分段,当输入数据小于-4时,输出为0,当输入数据大于4时,输出为1,因此在这两个区间内,不需要进行表达式计算,运算主要集中在(-4,0)和(0,4)两个区间。由公式可以看出,在这两个区间内,表达式的核心计算十分相近,可通过判断输入数据所在区间来决定核心计算中的正负号。输入数据模块201进入运算模块203进行运算,运算模块需要使用到二选一MUX501来决定进入加法器503的其中一个数据为1或者-1,移位器502对输入数据右移两位,相当于除以4,此数据为加法器503的其中一个数据,加法器503的数据输入到乘法器504中进行平方操作,运算结果进入移位器505中右移一位相当于除以2,此时数据可以作为一个区间的输出数据,该数据进入加法器506成为另外一个输出数据。在计算完成后,需要通过比较器模块202生成数据输出模块的索引。由公式可以看出,绝对值生成单元301的设计方法简单,当输入数据data的符号位为0时,输出数据本身,当符号位为1时,输出数据取反加一。经过绝对值生成单元301后生成的数据将被送入比较器单元302中,由于当输入数据大于0时,只有两个分段,因此输入数据的绝对值只需要进行一次比较即可作为输出数据模块的索引。由于sigmoid逼近函数有四个分段,因此通过比较器模块202生成的索引,通过采用四选一的选择器即可实现数据输出。
由于分段非线性近似方法是由非线性函数组成,不合理的函数设计可能会消耗大量的乘法器和加法器,导致电路面积过大以及工作频率低。为了解决这种问题,本文采用了一种区间(-4,4)中定义的二阶近似方案,可大量减少乘法资源的消耗,与其他二阶近似方案相比,它只需要一个乘法器,由公式可以看出,本文采用的分段非线性近似函数避免了使用指数函数,为了尽量减少使用乘法器和除法器,公式中采用的系数都可以通过移位获得,从而减少了硬件资源消耗,降低了功耗。本文提出的设计电路架构简单,尽量减少资源消耗的同时保持较高的精度。在LSTM网络上进行了训练实验,实验表明,提出的二阶近似公式代替sigmoid函数应用于LSTM网络时,基本达到了同样的精度。
与其他近似方法相比,分段非线性近似方法在功耗较小的情况下具有较高的性能。这种近似方法能以较低的实现代价得到最精确的结果。
以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。
- 实现sigmoid函数逼近的模型、FPGA电路及工作方法
- 基于FPGAs的重配置异或门RO PUF电路及其工作方法