基于FPGA的Gaussian传输函数实现
2019-03-30朱智云
朱智云
摘要:Gaussian函数作为RBF神经网络常用的激活函数,在FPGA上实现Gaussian函数,有利于提高神经网络的运算速度。本文简要介绍了Gaussian函数模型,并基于FPGA平台,分析了几种实现复杂函数的方案,最终采用分段拟合的方法对Gaussian函数进行逼近。首先用MATLAB对Gaussian函数进行初步的拟合,在FPGA平台用Verilog HDL语言实现Gaussian函数。仿真结果表明,误差可以控制在较小的数量级,满足神经网络运算的精度。
关键词:FPGA;RBF神经网络;Gaussian函数;分段拟合
中图分类号:TP315 文献标识码:A 文章编号:1007-9416(2019)12-0124-03
0 引言
神经网络是机器学习领域一个重要模型,随着集成电路的发展,计算机处理能力不断提高,加上深度学习等概念的提出,神经网络再次成为人工智能研究和发展的热点[1]。但是现阶段神经网络的实现还是多以软件形式为主,无法满足实时性的要求。FPGA又称现场可编程门阵列,它能通过硬件编程实现并行计算。用FPGA来实现神经网络,能够提高运算速度和灵活性[2]。
Gaussian函数是RBF神经网络算法中常用的激励函数,是神经网络实现复杂非线性计算的关键[3]。本文首先对Gaussian函数进行简单介绍,提出基于FPGA平台的若干种实现方案,经过分析各种方案优缺点,最终选择分段拟合逼近的方式对Gaussian函数进行仿真实现,并对其误差进行分析。
1 Gaussian函数简介
RBF神经网络是比较典型的单隐层神经网络,其由三层网络构成,分别是输入层、隐含层以及输出层,其结构如图1所示[4]。
径向基函数有多种形式,如:二次型、逆二次型或Gaussian型等。若采用高斯函数作为径向基函数,则神经元的输出为:
(1)
上式中,m是隐含层节点数;||·||是欧几里得范数;Ci和σ分别为与每个隐含层节点相关的参数向量的中心和宽度;ωi是第i个基函数与输出节点的连接权值[4]。
Gaussian函数是一个非线性函数,其函数表达式如式(1)中所示,其函数图像如图2所示。可以看出,Gaussian函数的值域为(0,1],输入值为0时函数值为1。
2 方案选择
Gaussian函数是非线性函数,因此不能直接在硬件上进行设计实现。常用的设计方式有泰勒展开逼近法、多项式拟合法、查表法、坐标旋转数字计算(CORDIC)算法以及分段拟合方法等。
泰勒展开逼近与多项式拟合能够实现较高的精度,但主要不足在于所需的计算量过大,利用MATLAB工具进行仿真可以发现,要实现高精度的拟合至少需要六阶以上的多项式,并且需要较长的计算时间。泰勒展开要想实现高精度不仅需要较多的阶数,还需保证后续的矩阵乘算。考虑到硬件设计方面,过多的乘法器使用不仅会增加电路面积,也会增加电路功耗,因此这两种方式不适合高精度应用场景。
CORDIC算法的优势主要在于不需要乘法器等复杂运算单元,但带来的问题是拟合时间长,并且精度不高,因此使用场景也不多。查表法最为直接快捷,但要想实现高精度会消耗巨大的存储资源。
分段拟合则是将Gaussian函数划分为若干段,而后利用多项式对每一段进行拟合的方式。由于分段的存在,其各段拟合阶数相比于直接多项式拟合少了许多,并且保证了精度的要求。
参考上面几种方式,考虑到精度与资源消耗的折衷,本次设计采用分段函数拟合进行设计。此外,结合Gaussian函数图像特点,首先图像基于x轴对称,只需要计算[0,+∞)區间的函数值。另外在输入大于某个值(大约3.18)后,函数值趋近于0,误差仅在0.001以下数量级。因此只需要拟合输入数据在[0,3.18]区间内的函数值。
3 函数设计
3.1 MATLAB拟合
用MATLAB的内置函数polyfit并设置最高阶为二次,可以依次得到每一阶的系数[2]。整个函数分为10个区间进行拟合,具体如表1所示。
利用MATLAB工具箱对拟合性能进行分析,取输入范围为[0,3.18],取点间隔为0.01,其误差值如图3所示。
从结果可以看出,函数的最大误差在0.001以下,说明Gaussian函数的分段拟合性能良好,能实现良好的逼近效果。
3.2 FPGA实现
一般而言,神经网络计算会涉及大量浮点数计算。在FPGA中为了表示浮点数,如果采用IEEE32位浮点标准表示,虽然可以提高精度,不过会消耗大量浮点乘法器等资源[1]。因此,为了保证模型的计算精度,本次设计决定采用32位定点数进行设计。
从表1可以看出,拟合函数具有多个区间且最多采用二阶多项式,则对应的基本框架可如图4所示。
考虑到资源的消耗,因此本次设计不采取流水线的设计方式,同时为了保证一定的计算速度,在设计中引入并行计算。根据图4可以看出,一个二阶多项式的计算大体可以分为四个过程:首先,根据输入数据x查找对应的二阶多项式系数a,b,c;然后,第二阶段采用两个乘法器并行计算x2与bx;之后,利用一个乘法器与加法器同时计算x2与bx+c;最后,利用加法器计算输出y。因为本次设计中不采用流水线设计思路,因此其中的加法器、乘法器模块能够进行复用以降低资源消耗。
4 仿真实现与误差分析
本次设计基于FPGA平台实现Gaussian函数,为了获得更全面的性能分析,本次随机选取了20个数据点进行仿真,并将结果与MATLAB理论值进行比较,表2为对比结果,图5为仿真结果。
从结果可以看出,误差绝对值控制在0.001以下,可以满足计算精度要求。
5 结语
本次简单介绍了RBF神经网络计算中常用的Gaussian激活函数,采用分段拟合逼近的方法在FPGA平台实现,对计算的结果进行与理论值进行对比,基本实现了设计的目标。
参考文献
[1] 张玉玺,刘寒颖,张耀天.基于FPGA的sigmoid函数实现[C]//第十届全国信号和智能信息处理与应用学术会议.2016.
[2] 李建龙.基于FPGA的GO硅桥湿度传感器温度补偿系统设计与实现[D].西南交通大学,2014.
[3] 刘培龙.基于FPGA的神經网络硬件实现的研究与设计[D].电子科技大学,2012.
[4] 王兴.基于FPGA的RBF神经网络的硬件实现[J].电子设计工程,2012,20(16):164-166.
FPGA-based Implementation of Gaussian Transfer Function
ZHU Zhi-yun
(School of Physics and Information Engineering,Fuzhou University,Fuzhou Fujian 350116)
Abstract:As a commonly used activation function of RBF neural network, Gaussian function realizes Gaussian function on FPGA, which is beneficial to improve the operation speed of neural network. This paper briefly introduces the Gaussian function model, and based on the FPGA platform, analyzes several schemes for implementing complex functions. Finally, the Gaussian function is approximated by the piecewise fitting method. Firstly, the Gaussian function is firstly fitted with MATLAB, and the Gaussian function is implemented in the FPGA platform with Verilog HDL language. The simulation results show that the error can be controlled to a small order of magnitude, which satisfies the accuracy of neural network operations.
Key words:FPGA; RBF neural network;Gaussian function;piecewise fitting