Sigmoid函数的拟合法分析及其高效处理
扫描二维码
随时随地手机看文章
摘 要: 使用分段非线性逼近算法计算超越函数,以神经网络中应用最为广泛的Sigmoid函数为例,结合函数自身对称的性质及其导数不均匀的特点提出合理的分段方法,给出分段方式同逼近多项式阶数对逼近结果精度的影响。完成算法在FPGA上的硬件实现,给出一种使用三阶多项式处理Sigmoid函数的拟合结果及流水线架构,处理精度达到10-5数量级,最大频率达到127.327 MHz,满足了高速、高精度的处理要求。
0 引言
在实时图像处理、数字信号处理等领域内,经常需要对非线性函数进行高速计算[1]。而在人工神经网络中更是需要对大量的非线性函数进行计算。因此,在人工神经网络的研究领域内,研究如何高速地处理非线性函数具有十分重要的意义。在人工神经网络中应用最为广泛的是Sigmoid函数。目前对于Sigmoid函数实现技术的研究主要分为软件实现和硬件实现两个方面。由于软件相比硬件而言速度较慢并且并行程度很低,所以无法满足其快速处理的要求[2]。因此,在超大规模集成电路快速发展的当今时期,研究如何利用硬件快速处理Sigmoid函数显然更加有意义。
FPGA凭借其可重构技术的灵活性,成为解决Sigmoid函数高速计算问题的有力工具。目前利用FPGA计算Sigmoid函数常用的方法有查找表法、CORDIC算法、Taylor级数展开法和分段线性逼近法。查找表法[3]提前将所有的计算结果保存在一个ROM中,这种方法计算方便且容易实现,但是随着函数计算精度的提高和拟合区间的增加,其所需求的存储资源会显著增加,资源消耗很高。CORDIC算法[4]通过多次迭代将一些复杂的运算转换成为简单的运算,但是随着精度增高,其算法的迭代次数也会提高,计算速度会减慢。Taylor级数展开法[5]在精度要求较高的条件下会增加乘法器和加法器的使用,资源消耗巨大。分段线性逼近法[6-7]将查找表和低阶多项式相结合,计算速度较快,是当前解决此问题的主流方法,然而在有限的分段区间用低阶的多项式进行拟合运算,其计算结果在精度上并没有优势,难以实现高精度的运算要求。
为了解决上述问题,本文采用传统的分段非线性逼近法来处理Sigmoid函数。文献[8]中使用了分段非线性逼近法来处理神经网络中常见的双曲正切函数,然而文中并没有给出分段方法的依据,同时在各小段的分段区间所得到的精度也差异很大。因此,本文针对这一问题,以Sigmoid函数为研究对象,结合Sigmoid函数自身对称及其导数不均匀的性质,利用数值分析中的最小二乘法作为逼近原理,给出合理的分段方式。同时给出对比均匀分段的处理方式下逼近精度的差异情况。利用硬件描述语言实现硬件结构的设计,并在Xilinx Virtex-5系列的XC5VLX110T器件上完成实际验证和性能测试,从资源使用、运算速度同计算精度等方面对设计结果进行合理评估。
1 Sigmoid函数的分段非线性拟合方案及结果分析分段非线性逼近法的基本原理是用高阶多项式来逼近曲线。首先将待逼近函数按照一定的方式进行分段,之后对每一个小段构建高阶多项式近似地代替原曲线,从而将复杂的非线性函数的计算问题转换成为多项式的计算问题。
由泰勒公式的原理可知,函数在某一点按照泰勒公式展开,随着展开的项数越来越多,逼近式的误差会越来越小。并且,随着项数的增加,每一项在数值上逐渐递减,并最终趋向于无穷小。函数在某一点按照泰勒公式展开,保留N阶多项式时,其之后的所有项数均影响误差,并且(N+1)阶导函数的数值直接影响N阶多项式的逼近结果。具体影响的方式为:N+1阶导数取绝对值后,其值越大,表明函数在这一点处使用N阶多项式逼近的误差越高,因此在这点处对应的分段区间间隔应该相对较小;其值越小,表明函数在这一点处使用N阶多项式逼近的误差越低,因此在这点处对应的分段区间间隔应该相对较大。在考虑分段时,可以根据N+1阶导数的数值大小,将函数的分段区间进行动态调整,避免造成误差过大。通过这样的处理方式,可以对分段方式进行一些优化。下面结合Sigmoid函数进行具体分析。
首先分析Sigmoid函数及其导函数的性质,如图1。F(x)为Sigmoid函数,G(x)为其4阶导函数。在保证足够的分段区间时,使用3阶多项式就能够得到较高的逼近精度。因此,本文使用3阶多项式逼近Sigmoid函数,4阶导函数G(x)直接影响逼近的误差。通过研究图像,得出以下结论:
(1)Sigmoid函数F(x)是以点(0,0.5)为对称中心的函数,因此在计算Sigmoid函数值时只需计算正区间或负区间,另一半可通过对称关系得到;
(2)以正区间为研究对象,Sigmoid函数的4阶导数在x=1处附近取得最大值,并向两侧衰减,随着x的不断增大,4阶导数最终趋向于0。