文献标识码:A
DOI:10.16157/j.issn.0258-7998.190018
中文引用格式:汤知日,朱若华,常胜. 一种基于忆阻特性的监督神经网络算法及电路设计[J].电子技术应用,2019,45(4):19-22,28.
英文引用格式:Tang Zhiri,Zhu Ruohua,Chang Sheng. A memristor-based supervised neural network algorithm and its circuit design[J]. Application of Electronic Technique,2019,45(4):19-22,28.
0 引言
忆阻器[1](Memristor)最早于20世纪70年代由蔡少棠教授首先提出,作为除了电阻、电容和电感之外的第四类基本元器件,忆阻器表达了电荷量和磁通量之间的关系。2008年惠普实验室利用TiO2为原材料首次制成了忆阻器实物[2]。由于忆阻器可以模拟人脑神经元学习规则[3](Spiking Timing-Dependent Plasticity,STDP),因此将忆阻器用作电子突触应用于人工神经网络之中逐渐成为忆阻器的研究热点之一。
受工艺的限制,忆阻器实物的参数波动较大[4],一种可行的对其研究的做法是通过技术手段对忆阻器进行建模[5],从而探索其应用前景;另一方面,对于如何很好地将忆阻器应用于人工神经网络之中[6]也仍处在一个探索阶段[7],目前尚无完备的理论或者实践能够将两者很好地结合在一起。寻找一个新的思路和方法将忆阻器的特性在人工神经网络中发挥出来就显得尤为重要,对人工神经网络和忆阻器两个方向的发展都非常有价值。
针对目前忆阻器和人工神经网络结合不够紧密的问题,本文采用现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)对忆阻器和人工神经网络实现进行数字电路搭建。利用该方式实现的有监督的忆阻神经网络具有鲁棒性强[8]、集成度高[9]、并行度很高[10]等优点。目前FPGA的开发技术已经十分完善,这一整套的设计流程使得对于神经网络的结构完善[11]十分方便,也贴近于电子系统的应用。本文根据忆阻器的存储能力,在FPGA上将该网络应用于图像分类识别,得到了良好的实验结果,为这类有监督的忆阻神经网络的运用提供了一个参考。
1 忆阻器FPGA建模
2008年HP实验室的研究人员采用两块铂(Pt)作为正负电极,再将二氧化钛(TiO2)薄膜置于正负电极之间,对其中—层TiO2进行氧空位掺杂操作。掺杂氧空位后,这一层的TiO2由于部分氧原子的缺失,导致其导电性大大增强,另一层TiO2不进行掺杂操作,体现出类似绝缘体的低导电性。当在忆阻器两端施加一个大于阈值的电流或电压时,掺杂和未掺杂的两层TiO2之间会产生电子和空穴的相互移动,进而让掺杂的分界面发生一定的位移,致使其阻值发生变化。这就是经典的HP忆阻器。
根据HP忆阻器推导得到一般的流控忆阻器[12]模型如下:
其中M(t)为忆阻器的当前阻值。根据上式,利用Verilog代码进行实现并在Quartus上进行仿真,设Roff=16 kΩ,Ron=100 Ω,D=10 nm,μv=10-14m2s-1V-1。忆阻器搭建成功的标志是当其两端加上周期性三角函数电压时,其伏安特性曲线为一个闭合的滞回曲线[2]。在输入端加入U(t)=2sint,保持忆阻器参数不变,应用示波器来对忆阻器模型的伏安特性曲线进行测量,得到的结果如图1所示。
由图1可知,通过上述方法所实现的流控忆阻器模型可以体现忆阻器特有的性能,为将其应用于神经网络系统打下坚实的基础。
2 监督忆阻神经网络的设计和实现
2.1 整体网络设计
基本的网络结构由输入层、隐含层和输出层三层组成,忆阻器在网络中作为权值存储模块,其存储的阻值作为权值模块需要输出的权值,如图2所示。
在硬件设计上,神经网络算法通过模块化的手段进行实现。网络中的神经元结构和算法均由神经元模块进行,神经元模块通过与传递函数模块进行运算,得到输出误差值,并且通过计算得到的误差值来控制训练模块,误差值同样也会传递到权值更新模块,更新之后的权值由忆阻器权值存储模块进行存储和读取。在该网络的整体设计中,采用流水线方式[13]对整体进行优化,尽可能减少多个寄存器同时赋值或者同时运算等操作,以期网络的处理频率达到较高的水平。经过流水线设计的各模块间连接次序如图3所示。
传递函数模块通常采用双曲正切函数,该函数在FPGA中可通过cordic算法[14]完成该设计。cordic算法是一种对三角函数或对数函数等非线性方程进行逼近的一种硬件算法,其利用循环迭代的方式对目标函数进行逼近。在硬件上设计cordic算法时,逼近位数设置的越高,计算精度也就越高,但是同时硬件资源也会消耗越多;如果位数较低,虽然硬件资源占用较少,但是相应的计算精度就会不够,甚至会影响网络识别精度。硬件上实际的设计必须根据实际需要来决定cordic算法的逼近位数,所以本设计位数设置为27位,可以保证该算法在精度较高的情况下来控制硬件资源的占用。
误差计算模块需要预先设定教师信号,对上一次训练的结果进行对比,在硬件中可以通过减法器计算得到权值更新量。该网络通过训练控制模块对得到的权值更新量进行判断,输出训练控制信号,决定下一步的操作是继续当前样本的训练还是跳进下一幅样本图。在硬件电路上,训练控制模块由比较器构成。当网络的结构较小时,可预先将教师信号储存于寄存器中,直接带入误差计算模块进行运算。
整个网络计算过程通过流水线设计提升了运行速度,而在内部计算中,包括最为复杂的传递函数模块和忆阻器权值存储模块,均仅需要通过乘法器和减法器的搭配即可实现,对硬件的资源与速度较为友好。
2.2 神经元模块设计
神经元模块是神经网络硬件化中最重要的基本模块。以3×3像素的二值图像为例,考虑到输入神经元与训练样本图的每一个像素点对应,输入层有10个神经元。其中第一个输入值为偏置电压,值设为-1,后面9个神经元分别对应9个点,当像素为黑色时,输入值为1,当像素为白色时,输入值为-1,如图4所示。
训练方式为,当一幅样本训练完后,接着训练第二幅样本图,一直到所有样本都训练完,即代表训练完成。如果网络没有达到设定的要求,则跳回第一幅样本从头开始训练,直到完成为止。
以3×3图像为例,隐层的神经元个数3,通过输入的数值和权值经过乘累加计算得到Ii的结果,计算过程如下:
其中Wij为神经元之间连接对应的权值,j为输入神经元的编号,i为隐层和输出层神经元的编号。由于输入层神经元个数为10,隐层神经元个数为3,因此权值的个数一共为30个。上述乘累加运算结果可以直接通过寄存器的乘累加得到。
2.3 忆阻权值模块设计
以3×3图像为例,权值更新过程计算如下:
其中ΔQij为通过忆阻器的电荷量在训练中的改变量。由于初始权值为0,可以得到:
其中Qij为累计通过忆阻器的电荷量。以当一次训练结束之后需要修正忆阻权值模块的权值时,可以根据式(5)和式(6),修改通过忆阻器两端的电量值即可。
2.4 训练控制模块设计
以3×3图像为例,当训练集中的图均输出正确的分类结果时,代表网络训练完成,此时训练停止。由于训练集是依次输入进行训练,并且前一幅图的输出结果决定了下一个输入值是下一幅图还是返回第一幅图,因此采用状态机来对训练控制模块进行实现。有限状态机初始状态为状态0,当第一幅训练样本图像输入时,判断图像的分类的结果是否正确,如果正确,有限状态机跳至状态1,不正确就跳至状态0。当第二幅训练样本输入时,判断分类的结果是否正确,如果正确,则跳至状态2,如果不正确,有限状态机跳至状态0,重新从第一个样本图开始训练。以此类推,当所有的训练样本均分类正确时,有限状态机会跳至最后一个状态,此时训练控制模块控制忆阻神经网络停止训练,否则网络会一直训练下去。
3 实验结果和分析
本文以神经网络训练和测试中常用的3×3像素的二值图像作为该神经网络系统的训练和测试数据集,样本集包括30幅3×3的二值图像,每10幅样本图为一组,总共分为3个类别,分别是z、v、n和其被部分损坏的图像,如图5所示。
网络的训练以30幅图为一个训练周期,训练的前10幅图为字母z,中间10幅图为字母v,最后10幅图为字母n。理想情况下,输入第一类,即字母z的图像时,第一个输出神经元的值应该比第二个和第三个输出值要大。输入第二类和第三类与之类似。测试使用的样本与训练一致,任意一幅图输入进该系统应该得出正确的分类结果,连续将30幅图输入也一样可以得到每一幅图各自正确的分类结果。
根据上述理论设置好各类参数,各权值初始值均为0~1之间的任意值,训练一共耗时30个周期之后停止了,状态机的指针也停在了最后一个周期,此时可认为训练已结束。将30幅图再依次输入该系统,得到的3个分类输出如图6所示。
图6中,rst为置位信号,clk为时钟信号,state为状态机跳转信号,k1、k2和k3分别对应z,v和n三个分类。从图中可以看到,30个周期中,前10个周期的分类结果显示第一输出神经元为高电平,即输出为字母z,如图中k1所示;中间10个周期的分类结果显示第二输出神经元为高电平,即输出为字母v,如图中k2所示;最后10个周期的分类结果显示第三输出神经元为高电平,即输出为字母n,如图中k3所示。由图6可知,该网络对3×3数据集的分类准确率为100%,验证了该忆阻网络的有效性和可靠性。
利用Quartus II软件对整个设计进行综合,选用型号为Cyclone II:EP2C70F896I8的FPGA,资源占用和处理速度如表1所示。
由表1可知,训练总共需要30个时钟周期。结合表1中的网络整体处理速度可以得到整个训练时长仅为t=30/(89.64×103)=0.33 ms,在测试时,从将一幅图像输入到硬件中到得到测试结果,仅需t=10 μs即可完成。与现有忆阻神经网络的硬件算法相比,该算法具有准确率高以及处理速度快的优势。
4 结论
本文提出了一种基于忆阻特性的监督神经网络算法,并将其在FPGA上进行了实现。该设计首先通过对忆阻器进行建模和功能仿真,进而将该忆阻器模块用作神经网络中的权值存储模块,最终搭建有监督的忆阻神经网络。将该设计应用于图像分类功能,得到了良好的实验结果,体现出硬件电路高并行度和高处理速度的优势。该设计提出了一种忆阻器和神经网络的结合方法,也对监督忆阻神经网络算法的电路系统实现给出了参考。
参考文献
[1] 蔡坤鹏,王睿,周济.第四种无源电子元件忆阻器的研究及应用进展[J].电子元件与材料,2010(4):78-82.
[2] 刘东青,程海峰,朱玄,等.忆阻器及其阻变机理研究进展[J].物理学报,2014,63(18):187301.
[3] 段美涛.基于STDP规则的忆阻神经网络及应用[D].重庆:西南大学,2013.
[4] 贾林楠,黄安平,郑晓虎,等.界面效应调制忆阻器研究进展[J].物理学报,2012,61(21):217306-217306.
[5] 胡柏林,王丽丹,黄艺文,等.忆阻器Simulink建模和图形用户界面设计[J].西南大学学报(自然科学版),2011,33(9):50-56.
[6] 荣辉,张济世.人工神经网络及其现状与展望[J].电子技术应用,1995(10):4-5.
[7] 王乐毅.忆阻器研究进展及应用前景[J].电子元件与材料,2010(12):71-74.
[8] 陆燕,杜继宏,梁循.人工神经网络在控制中的应用[J].电子技术应用,1996(2):4-7.
[9] 徐智勇,唐根伟,姜新泉,等.硬件友好型合成指纹鉴别算法的研究[J].电子技术应用,2016,42(10):54-57.
[10] 白艳宇,申超群,杨新锋.结合SIFT特征和神经网络池的物体分类方法[J].电子技术应用,2017,43(7):130-134,139.
[11] 王蒙,常胜,王豪.一种自适应训练的BP神经网络FPGA设计[J].现代电子技术,2016,39(15):115-118.
[12] 洪庆辉,曾以成,李志军.含磁控和荷控两种忆阻器的混沌电路设计与仿真[J].物理学报,2013,62(23):230502-230502.
[13] 张科峰,李朝培,古安强.一种可重构流水线结构模数转换器的设计[J].电子技术应用,2008(5):51-53,58.
[14] 李全,李晓欢,陈石平.基于CORDIC算法的高精度浮点超越函数的FPGA实现[J].电子技术应用,2009,35(5):166-170.
作者信息:
汤知日,朱若华,常 胜
(武汉大学 物理科学与技术学院,湖北 武汉430072)