引言
人工神经网络(ArtificialNeuralNetwork,ANN)是一种类似生物神经网络的信息处理结构,它的提出是为了解决一些非线性,非平稳,复杂的实际问题。目前实现ANN还主要依靠软件程序.但是依靠程序很难达到实时性的要求。
神经网络在FPGA上实现是独立于冯·诺依曼架构,利用FPGA的并行性,在一些实时性要求很强的领域应用。通用计算机虽然编程容易,但是很多时间浪费在分析指令,读出写入数据等。于是人们想利用ASIC(专用计算芯片)完成神经网络的计算任务,但是由于资源有限,这种芯片只限于实现特定的算法结构和小规模网络,而且专用芯片的制作成本很高,只适合大批量生产。
可编程逻辑器件FPGA的出现给IC设计行业一个很强的工具,它可以小成本的开发一些专用芯片,如果开发是成功的可以考虑流片生产。用FPGA实现神经网络比ASIC神经计算单元更容易实现,利用可编程逻辑,FPGA可以实现像软件一样的设计灵活性,特别是对于复杂网络,设计周期大大缩短,其内部的重构逻辑模块(ConfigurableLogicBlocks,CLBs)包含若干逻辑单元,利用固有的可重构路径结构可以实现高效率的连接。此外,现在正在开发中的一种神经计算芯片为神经网络的实现提出了一种新的有效方法。
1FPGA实现神经网络关键问题分析
(1)选择合适的神经网络及其拓扑结构
不同的神经网络有不同的应用,而且不同的网络完成知识表达的机理是不同的,某一个神经网络不是万能的.对于实际问题,首先要做的就是选择针对性的神经网络,如线性分类问题可以用简单的感知器,对于复杂的分类问题,函数逼近问题可以使用BP网络,对于一些聚类问题可以使用径向基(RBF)网络等。以BP网络结构为例,这种被广泛采用的架构由具有错误反向传播算法的多层感知器构成(MultilayerPerceptronsu-singBack-Propagation,MLP-BP),训练一个BP网络主要的问题就在于:训练开始之前,对于网络拓扑结构缺乏一种明确的确定方法。而进行各种拓扑结构的实验并不那么容易,因为对于每一个训练周期都要消耗很长的时间,特别是复杂的网络,更是如此;其次,对于硬件而言,最合适的网络运算法则不仅在于它达到收敛有多么快,还要考虑是否容易在硬件上实现且这种实现代价和性能如何;另外,对于同一种NN(NeuralNet-work)。其拓扑结构对网络的收敛特性以及知识表达特性都有影响,一般增加网络的神经元或者神经元的层数,是可以增加网络的逼近能力,但是可能会影响网络的学习收敛情况,而且还可能会因为过适应(Overfit)而失去泛化能力。
(2)正确选择数值表达形式
精度的选择对处理密度(与耗费的硬件资源成反比)有直接影响。其中浮点数可以在计算机中表达实数,它有相对高的精度和大的动态范围,使用浮点数使得计算更为精确,但是在FPGA上实现浮点数运算是一个很大的挑战,而且会耗费很多硬件资源。尽管如此,加拿大研究人员MedhatMoussaandShawkiArei-bi仍然实现了浮点数的运算,并进行了详细的对比分析。
对于MLP-BP而言,HoltandBaker凭借仿真和理论分析指出16为定点(1位标志位,3位整数位和12位小数位)是最小可允许的精度表示(指可以达到收敛)。以逻辑XOR问题为例,文献[1]中表格2.5(见表1)表明与基于FPGA的MLP-BP浮点法实现相比,定点法实现在速度上高出12倍,面积上是浮点实现的1/13,而且有更高的处理密度。
同时数据也说明基于FPGA的16位定点MLP-BP实现在处理密度上高于基于软件方法的MLP-BP实现,这最好地证明可重构计算方法的处理密度优势。应该说,在这种应用中浮点数远不如定点数合适。但是定点数表示的缺点在于有限精度,尽管如此,对于不同的应用选择合适的字长精度,仍然可以得到收敛。因此,目前基于FPGA的ANN大多数是使用定点数进行计算的。
(3)门限非线性激活函数(Non-linearactivationFunction)的实现
ANN的知识表达特性与非线性逼近能力,有很大部分源自门限函数。在MLP网络中,门限函数大部分是非线性函数(少数是线性函数,如输出层的门限函数),但是非线性传递函数的直接硬件实现太昂贵,目前实现门限函数的方法主要有:查表法(look-upta-ble)、分段线性逼近、多项式近似法、有理近似法以及协调旋转数字计算机(CoordinatedRotationDigitalCom-puter,CORDIC)法则,CORDIC法则实现函数的优点在于同一硬件资源能被若干个函数使用,但是性能相当差,因此较少使用。而高次多项式近似法尽管可以实现低误差近似,但是实现需要耗费较高硬件资源。相对而言,查找表法和分段线性逼近法(注意:查找表不易太大,否则速度会慢且代价也大)更适合FPGA技术实现。其中分段线性近似法以y=c1+c2x的形式描述一种线性连接组合(如图1所示),如果线性函数的系数值为2的幂次,则激活函数可以由一系列移位和加法操作实现,许多神经元的传递函数就是这样实现的,而查找表法则是将事先计算的数值依次存储在需要查询的存储器中来实现。
(4)面积节省及相关问题
为了最小化神经元实现的面积,组成每个神经元的各个HDL算法模块的面积也应该最小。乘法器以及基本的传递函数(例如,sigmoid激活函数tanh)是最占用面积的,这类问题非常依赖于所要求的精度,尽管神经网络常并不要求很精确的计算,但是不同的应用所要求的精度不同。一般来讲,浮点运算要比定点运算需要更大的面积,比如浮点运算中的并行加法器本质上是定点运算超前加法器加上必要的逻辑块,减法器、乘法器也类似如此,这在激活函数实现方面更加突出,文献[1]中面积优化对比显示,32位浮点运算要比16位定点运算大250倍。另外,对于小型网络,分布式存储器很适合权值存放,但是对于大型网络,权值存储器不应该被放置在FPGA中,因此当ANN得到有效实现的时候,就要认真考虑存储器的存取问题。其次,神经网络应用有一个显著的缺陷:在神经计算方面,不同运算的计算时间和实现面积并不平衡。在许多标准神经模式中,计算时间的大部分用在需要乘法器和加法器的矩阵向量运算中,而很多耗费面积的运算如激活函数,又必须被实现(它们占用很少的运算时间),而FPGA的面积是严格一定的,因此可将面积的相当一部分用来实现这些运算,以至于FPGA仅剩的一小部分却实现几乎所有的运算时间。
(5)资源和计算速度的平衡(Trade-off)
对于FPGA,科学的设计目标应该是在满足设计时序要求(包括对设计最高频率的要求)的前提下,占用最少的芯片资源,或者在所规定的占用资源下,使设计的时序余量更大,频率更高。这两种目标充分体现了资源和速度的平衡思想。作为矛盾的两个组成部分,资源和速度的地位是不一样的。相比之下,满足时序、工作频率的要求更重要一些,当两者冲突时,采用速度优先的准则。
例如,ANN的FPGA实现需要各种字长的乘法器,如果可以提出一种新的运算法则,从而用FPGA实现变字长的乘法器,则可以根据需要调整字长,从而提高运算速度的可能性,其中,基于BoothEncodedopti-mizedwallencetree架构(见图2)就可以得到快速高效的乘法器,这种方式实现的乘法器比现在所用的基于FPGA的乘法器的处理速度快20%)。
(6)亟待解决的问题
FPGA凭借其如同软件实现一样的灵活性,集合了硬件实现高效和并行性的优点,好像非常适合神经实现的正常需要,但是,FPGA的二维拓扑结构不能处理标准神经网络规则但复杂的连线问题,而且FPGA仍然实现很有限的逻辑门数目,相反,神经计算则需要相当耗费资源的模块(激活函数,乘法器)。这样对于FP-GA,可用的CLBs中部分将被用来增加路径容量(连线),导致计算资源的丢失。一般的方法只能实现很小的低精度神经网络,连线问题不能依靠几个具有比特序列算法的可重构FPGA以及小面积模块(随机比特流或者频率)解决。
2基于FPGA的ANN实现方法
经典实现方法有:
(1)可重构的RNN结构(ReconfigurableNeuraINetwork)
可重构计算是一种增加处理密度(每单元硅片面积的性能)的有效方法,且处理密度远大于用于通用计算方法,FPGA作为可重构计算的平台,可以提供如同软件一样的设计灵活性。该方法基于可扩展的脉动阵列结构、可重用的IP(IntellectualProperties)核及FPGA器件,即将要实现的神经网络算法分为几种基本运算,这些基本运算由可重构单元(ReconfigurableCell,RC)完成,RC间以规则的方式相互连接,当神经网络变化时,只要增减Rc的数量或替换不同功能的RC就可重构成新的神经网络硬件;文献[8]中同时指出,考虑到硬件实现要以最少的硬件资源满足特定应用的性能需求,一般用神经元并行作为可重构部件的基本模式,即神经网络的各层计算可复用相同的阵列结构。
(2)RENCO结构
可重构网络计算机(ReconfigurableNetworkComputer,RENCO)是一种用于逻辑设计原型或可重构系统的平台,所设计的可重构系统对于工作在比特级的算法实现特别有效,比如模式匹配。RENCO的基本架构包括处理器、可重构部分(多为FPGA)以及存储器和总线部分,Altera公司提供的最新的RENCO在可重构部分包括近100万逻辑门,足够实现高复杂度的处理器。具体参见文献[9]。尽管如此,得到的可重构系统并非对所有的硬件实现都是优化的方法,比如不适合于浮点运算。
(3)随机比特流方法
随机比特流(StochasticBitStrearns)的方法是使用串行随机的方法实现一些运算操作,目的是为了节约资源和充分利用神经网络的实时性。随机算法的提出源于它的简易性,基本原理即首先将所有的输入转换成二进制随机比特流,就是任意化;然后,由数字电路组成的随机算法实现取代正常的算法;最后,随机比特流转回到正常的数值(文献[10]中有详细总结)。随机算法提供一种方法,用简单的硬件实现复杂的计算,同时又不失灵活性,而且随机实现又与现代VLSI设计和生产技术兼容。
FPNA实现方法:
凭借着简化的拓扑结构和独特的数据交换流图,FPNA(FieldProgrammableNeuralArrays)成功地解决了以简单的硬件拓扑结构有效地实现复杂的神经架构问题,是一种特别适合FPGA直接实现的神经计算范例。FPNA基于一种类似FPGA的结构:它包含一系列可以自由配置的资源,这些神经资源被定义用来实现标准神经元的计算功能,但是它们是一种自主的方式,这样通过有限的连接可以创造出许多虚拟的连线。利用这种新的神经计算理念,一个标准的但结构复杂的神经网络可以由一个简化的神经网络替代(文献[11]给出了详细的数学表示和说明)。
为了有个直观的理解,图3(a)表示一个简单的MLP结构;图3(b)说明通过节点间的直接连接建立虚拟连接。
文献[11]中的例证表明FPNA计算范例确实允许一系列给定的神经资源代替具有不同架构的标准神经网络。然而,从图4中可能并非如此,MLP架构并没有得到简化,原因在于如此简单的MLP完全没有必要,也不可能再简化。文献[12]描述了大型神经网络得到明显简化的实例。需要注意的是,FPNA是一个适应神经计算的硬件框架,而不是一种处理简化神经计算的实现方法(FieldProgrammableNeuralNetwork,FPNN)。要设计一个FPNA,首先要选择一个针对应用的合适的标准神经架构,然后决定一个既适合于实现又在功能上等价于所选择神经网络的可配置FPNA,FPNA独特的计算方案在于在复杂神经网络和可用的硬件资源之间创造了一座桥梁,它适用于许多实现选择;最后,得到的FP-NA直接映射到硬件设备上,这将得益于完整的模块式实现,即对于每个神经资源,预先给定可配置模块,然后依照。FPNA硬件友好的架构进行组合。
3基于FPGA的神经网络的性能评估及局限性
对于FPGA实现的ANN,最普遍的性能评估方法是每秒神经元乘累加的次数(Connections-Per-Sec-ond,CPS)和即每秒权值更新的次数(Connections-Updates-Per-Second,CPUS)。但是CPS和CPUS并不是适于所有的网络,如RBF径向基网络,另外,更大的CPS和CPUS值并不一定意味着更好的性能。因此,最好的性能测量方法是实际执行时间,但是仍有些问题要讨论。FPGA实现神经网络存在的一些缺点(相对于计算机软件而言):
(1)FPGA上实现的神经网络大多数是计算结构,而不是认知结构(虽然现在有些人试图在FPGA上实现BP算法。但是整个的结构和时序控制变得很复杂,并且无法达到计算机软件那样的计算精度);
(2)在FPGA上实现的神经网络通用性差。目前FPGA的使用者大多数都是在RTL级(寄存器传输级)编写VHDL/VerilogHDL实现数字系统,而正在兴起的Handel-C&SystemC,可以使硬件编程者站在算法级角度,可能对以后的基于FPGA的神经网络的性能有所改善。
4基于FPGA实现神经网络的发展方向
(1)一种基于REMAP-β实现神经网络汁算机的方法。REMAP-β可重构架构基于FPGA技术,RE-MAP-β并行计算机应用在嵌入式实时系统中,以有效提高ANN算法实现的效率,目前它的进一步发展RE-MAP-r正在探讨中。
(2)另一种基于FPGA实现神经网络的发展方向——系统C语言,直接在可编程硬件平台支持C/C++,使得编程更加容易。但是这个转换并不容易,因为:FPGA不是程序,而是电路。
5结语
详细总结了FPGA实现神经网络的方法及相关问题,这里要注意,基于FPGA实现神经网络,并不是要与基于计算机软件实现一比高低,相反,在很多情况下,采用计算机软件测试神经网络的收敛情况,计算出收敛时的权值,然后通过数据口线与FPGA模块通信,把权值交给FPGA中的神经网络,使用FPGA完成现实的工作。直到现在,软件方法仍然是实现神经网络的首选。另外,对于硬件设计者(指利用FPGA或者全定制、半定制ASIC实现设计)而言,maskASICs提供首选的方法以得到大规模、快速和完全的神经网络。现在它已经开发出了所有的新型可编程器件的嵌入式资源,以得到可以实时训练的更有用的神经网络。
评论
查看更多