首页> 中国专利> 一种应用于神经网络的高斯误差函数电路

一种应用于神经网络的高斯误差函数电路

摘要

本发明公开了一种应用于神经网络的高斯误差函数电路,包含3个平方器、2个乘法器、2个乘加器、2个点积数字信号处理器、1个加法器、1个求倒DSP和1个指数DSP。所有这些DSP均为Synopsys公司的Design Ware浮点DSP。本发明结构简单,采用的DSP比较容易获得,容易实现;本发明与传统的泰勒展开法实现方案相比,无论是在精度、面积还是速度方面都有非常明显的优势,尤其是在精度方面至少高出两个数量级。同时,由于本发明可以用Verilog代码实现,与具体工艺无关,因此非常容易应用到不同的工艺上,可移植性非常强。本发明可以作为一个软核IP,应用到神经网络相关的各种硬件电路设计中。

著录项

  • 公开/公告号CN106682732A

    专利类型发明专利

  • 公开/公告日2017-05-17

    原文格式PDF

  • 申请/专利权人 浙江大学;

    申请/专利号CN201611149241.8

  • 申请日2016-12-14

  • 分类号G06N3/063(20060101);G06F7/575(20060101);G06F7/556(20060101);G06F7/544(20060101);

  • 代理机构33200 杭州求是专利事务所有限公司;

  • 代理人林松海

  • 地址 310058 浙江省杭州市西湖区余杭塘路866号

  • 入库时间 2023-06-19 02:13:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-29

    授权

    授权

  • 2017-06-09

    实质审查的生效 IPC(主分类):G06N3/063 申请日:20161214

    实质审查的生效

  • 2017-05-17

    公开

    公开

说明书

技术领域

本发明涉及神经网络及集成电路设计领域,特别是一个应用于神经网络的高斯误差函数电路。

背景技术

自1943年美国心理学家W.McCulloch和数学家W.Pitts提出一个简单的神经元模型之后,神经网络技术迎来了第一次热潮。之后在20世纪70-80年代,由于当时计算机运算水平的限制,神经网络无法得到很好地发展,所以研究进入了低潮。最近,由于集成电路技术的飞速发展,集成电路的集成度和运算能力得到了飞速的提升,这使得受到冷落的神经网络重新进入研究视线,之后发展迅速,并得到了广泛的应用。

在神经网络中,神经元之间通过全或无的动作电位,即神经脉冲(Spike),进行通讯,因此这是一个二值化问题(非0即1)。Logit和probit是两种常用的连接函数用于完成该二值化处理。由于probit连接函数在对神经元Spike进行二值化建模方面具有非常方便的神经生物学表示,所以被广泛采用。Probit连接函数与高斯误差函数erf(x)关系密切,如公式(1)、(2)所示,其中a+x代表一个线性拟合函数。因此它在神经网络中起到非常重要的作用。

Probit(P)=a+x(1)

P=0.5-0.5*erf(a+x)(2)

另一方面,由公式(2)可以看出,erf(x)函数可以计算神经元的条件放电概率强度P,它反映了一个神经元产生一个Spike的条件放电概率。该概率值在神经网络中用于计算神经网络中的权值。由于对模型中的权值进行训练的过程非常复杂、漫长,尤其是数据量非常巨大的情况下,该过程尤其缓慢。因此有一大批研究人员正在研究神经网络硬件加速器用以加速该训练过程。由于求神经网络权值是一个反复迭代的过程,直到求出的权值收敛为止,因此,高斯误差函数的精度将影响训练出来的模型权值的精度,并影响模型收敛的速度。

综上所述,很有必要设计出高精度的高斯误差函数电路来加速神经网络训练的速度并提高模型的精度。目前为止,已有的设计方案精度都比较低,如图1和2所示,或者就是电路过于复杂,导致整个电路的面积非常大,占用大量的逻辑资源。

发明内容

本发明提供了一个高精度、低复杂度、面积小的应用于神经网络的高斯误差函数电路。解决了目前传统高斯误差函数电路精度低、面积大的缺陷。它与具体的制造工艺无关,可以应用到各种工艺尺寸的设计中。因此可以非常灵活、方便的应用到神经网络加速器等神经网络相关的硬件设计中。

为解决传统高斯误差函数电路精度低、面积大的缺陷,本发明创新采用多项式和指数函数逼近算法。多项式部分通过运用子表达式消除技术,减小电路的面积和延时;指数函数部分通过位拼接运算转化负值,消除潜在的减法操作。

一种应用于神经网络的高斯误差函数电路,包括3个平方器、2个乘法器、2个乘加器、2个点积数字信号处理器、1个加法器、1个求倒DSP和1个指数DSP,采用多项式和指数函数式(7)逼近算法来实现高斯误差函数电路;

其中

s=1/(1+(-p)*x),x∈(-∞,0](8);

多项式部分通过运用子表达式消除技术,减小电路的面积和延时;指数函数部分通过位拼接运算转化负值,消除潜在的减法操作。

所述的高斯误差函数电路,输入x进入电路后分成两路并行运算,分别计算式(7)中的多项式和指数部分;

一路,输入x以{1’b1,x[30:0]}的形式经过乘加器(f_mac_dsp)以及求倒DSP(f_recip_dsp)得到s,后经两级平方器(f_square_dsp)得到s的平方项(s2)以及四次方项(s4),这两项分别经过一个乘法器与s相乘得到s的三次方项(s3)以及五次方项(s5);

另一路,输入x依次经过平方器、拼接运算(concat)、指数DSP(f_expo_dsp)求得x2_n_expo,即式(7)中的指数函数部分

前面所述两路的输出作为第三部分的输入,两个点乘DSP,即f_dp3_dsp和f_dp2_dsp,并行运算,它们的输出经过一个加法器求和得到式(7)中的多项式,最后,多项式与指数函数经过一个乘加器和拼接运算即可求得最终结果erf(x)={x[31],bn[30:0]}。

本发明由于采用了以上技术方案,其具有以下的优点和积极效果:

1、本发明与传统的泰勒展开法实现方案相比,无论是在精度、面积还是速度方面都有非常明显的优势,尤其是在精度方面至少高出两个数量级。

2、本发明可以用Verilog代码实现,与实现工艺无关,不同于与实现工艺相关的硬核IP和固核IP,可以非常方便的应用在各种工艺中,可移植性非常强。

3、本发明的电路精度高、面积小,便于硬件实现与软件仿真验证,因此本发明能够促进神经网络加速器等各种神经网络硬件设计的研究。

附图说明

图1是传统的用平方根函数来逼近高斯误差函数的算法仿真结果;

图2是传统的用泰勒展开法设计的硬件的后仿真结果;

图3是本发明应用于神经网络的高斯误差函数电路的一种电路结构图;

图4是本发明应用于神经网络的的高斯误差函数电路在180nm工艺下制造后的裸片图;

图5是本发明应用于神经网络的高斯误差函数电路的流片测试结果。

具体实施方式

以下将结合附图详细说明本发明的具体实施方式。

目前有两种常见的传统高斯误差函数电路实现方式,一种是采用式(3)所示的平方根函数来设计硬件,式中ε(x)代表误差。该算法的Matlab软件仿真结果见图1。可见,该算法的精度非常低,最大绝对误差|ε(x)|为6.3*10-3,精度极差,因此不适合用于硬件电路的设计。

还有一种传统的实现方案是采用泰勒展开法在[-3,3]区间内对erf(x)进行泰勒展开,该方法可以表示为:

该方案在n=28时硬件实现后的硬件输出误差曲线如图2所示。其最大绝对误差|ε(x)|为4.52*10-5。其占用的硬件资源非常多,因此面积非常大,另外精度也不是很高(见表1)。

本发明中创新地使用了另一种算法来对高斯误差函数进行逼近,该算法在(M.Abnmowitz and I.Stegun,Handbook of Mathematical Functions[M],Dover,p.299,1972)中被提出,采用多项式和指数函数来在[0,∞)区间上对高斯误差函数进行拟合,其形式为:

其中,t为中间变量,其表达式为:

t=1/(1+px),x∈[0,∞)(6)

公式中用到的系数为:

p=0.3275911>1=0.254829592>2=-0.284496736

a3=1.421413741>4=-1.453152027>5=1.061405429

由于该算法精度高(最大绝对误差|ε(x)|只有1.5*10-7)。所以本发明主要基于该算法。

下面首先介绍本发明高斯误差函数电路的电路设计及优化原理。

表达式改写:考虑到加法器的面积与延时与减法器相比都比较小,且高斯误差函数是一个奇函数,所以式(5)、(6)可以改写为:

s=1/(1+p*(-x),x∈(-∞,0](8)

运算逻辑的简化:电路中有一些项是负值,因此存在一些减法运算,这可以通过简单的位拼接运算(不消耗任何逻辑资源)来将其转化为负值,这样便消除了潜在的减法操作,因此能够节省面积。例如,(7)中存在一项在设计电路时不用引入一个额外的减法器来求出-x2,可以直接将x2的符号位设置为1’b1即可得到-x2,即{1’b1,x2[30:0]}。另外,为了减小电路的面积和延时,多项式部分可以采用子表达式消除技术。由于平方器的面积和延时与乘法器相比都比较小,所以多项式中的平方项、三次方、四次方等项可以充分利用平方器来实现。例如,s5可以写成s5=(s2)2*s;相比于传统的(((s*s)*s)*s)*s而言,无论是面积还是延时,都是前者更加小,更有优势。

符号位的获得:由于erf(x)函数是一个奇函数,当x≥0时,输入输出的符号位均为0;x<0时,输入输出的符号位均为1。因此,函数值的符号位其实是不用经过计算得到的,输入数据的最高位(即符号位)即可直接作为输出数据的符号位,不但简化了逻辑,而且几乎消除了输出数据符号位的延迟。

工作区间的拓展:前面考虑的是x≤0的情形,此时erf(x)=erf(-(-x))=erf(-|x|)。当x>0时,考虑到erf(x)函数是一个奇函数,所以erf(x)=-erf(-x)=-erf(-|x|),而负号仅体现在结果的符号位上。所以,在不考虑符号位的情况下,数值部分为erf(-|x|),这其实和x≤0时完全相同。所以,计算输出结果时,只需要用{1’b1,x[30:0]}即-|x|参加运算即可。这样便能很简单的将电路的工作区间扩展到整个实数域。

接下来介绍电路的具体实现。

本发明的高斯误差函数电路的结构图如图3所示,它包含3个平方器(f_square_dsp)、2个乘法器、2个乘加器(f_mac_dsp)、2个点积DSP(f_dp2_dsp,f_dp3_dsp)、1个加法器、1个求倒DSP(f_recip_dsp)和1个指数DSP(f_expo_dsp)。上述DSP均采用Synopsys公司的Design Ware库中的浮点DSP,非常容易获得,且能够在精度、速度、面积等方面获得很好的效果。图3中用到的拼接运算concat并不消耗任何逻辑资源。

图3中所用的所有数据均采用32位单精度浮点数格式(即符合IEEE-754标准)。图中用到的所有系数(1,-1,-p,a1,a2,a3,a4,a5)均需要采用其对应的32位单精度浮点数格式。这可以在Matlab中通过简单的num2bin函数来求得。

图3上面部分,主要来实现公式(8)中的s以及式(7)中对应的s2、s3、s4、s5。图中的s对应公式中的s,图中的s2、s3、s4、s5分别对应公式中s2、s3、s4、s5。用到的乘加器f_mac_dsp实现的运算为a*b+c。与普通的乘法器与加法器组合方案相比,面积更小,精度更高。求倒单元f_recip_dsp用于实现求倒运算,即实现s=1/as。由于平方器与普通的乘法器相比,面积小、延迟短,所以这里充分利用平方器来构建s的各次方项。

图3中间部分,x2是x的平方项,它通过一个平方器来求得。平方器的输出经过拼接运算更改其符号位得到-x2,即图中的{1’b1,x2[30:0]}。之后通过一个浮点指数运算单元f_expo_dsp即可计算出公式(7)中的即图中的x2_n_expo。

图3下面部分,用来计算最终输出。图中用到的两个点积DSP f_dp2_dsp和f_dp3_dsp,它们实现的运算分别为:a*b+c*d、a*b+c*d+e*f。它们并行运算,输出经过一个加法器求和得到式(7)中的多项式a1s+a2s2+a3s3+a4s4+a5s5。最后,多项式与指数函数经过一个乘加器和拼接运算即可求得最终的输出结果erf(x)={x[31],bn[30:0]}。

将上述结构写成Verilog代码调用Design Ware中的浮点DSP即可实现该电路。如果要设计成版图,需要用逻辑综合工具(如Design Compiler)进行综合,最后用自动布局布线工具(如IC Compiler)进行布局布线。

本发明在SMIC 180nm工艺下对该结构进行了流片、测试、验证,相应的裸片图如图4所示,图5给出了它的测试结果,即本发明的硬件输出误差曲线。从图中可以看出本发明的最大绝对误差为3.12*10-7,其中核心面积为62932μm2,整个芯片的面积为2.03mm*1.19mm=2.42mm2

本发明与泰勒展开法的结果对比如表1所示:

表1

从表1可知本发明无论是在绝对误差、面积还是延时方面都比传统的泰勒展开法有优势。在绝对误差方面,本发明比泰勒展开法小99.21%;在面积方面,本发明比它要小77.21%;在电路延时方面,本发明比它要小11.96%。

本发明的绝对误差不会因为所用工艺不同而有所改变(因为电路结构是一定的),但是面积和延时的优化率可能会随所用标准单元库的不同而有所变化。一般情况下,本发明会随着使用工艺的特征尺寸的减小而表现出更加出色的性能。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号