一种神经网络训练方法和装置与流程

文档序号:16507188发布日期:2019-01-05 09:06阅读:320来源:国知局
一种神经网络训练方法和装置与流程

本申请数据处理领域,并且更具体地,涉及一种神经网络训练方法和装置。



背景技术:

神经网络(如深度神经网络)在计算机视觉、自然语言处理、大数据挖掘等领域得到广泛应用。神经网络计算具有如下两个典型特点:

1)计算密集

神经网络主要进行的运算为多维矩阵乘法,其计算复杂度一般为o(n3),即完成对n个数据的操作需要耗费的时间跟n的三次方成正比。例如,22层的googlenet(谷歌网络,一种神经元网络结构,由谷歌的研究者提出)一般需要6gflops(floating-pointoperationspersecond,每秒所执行的浮点运算)的计算量。因此对计算硬件和性能优化提出了较高要求。

2)访存密集

首先,神经网络的训练过程往往需要依赖海量的训练数据,如imagenet2012包含1400万幅图片;其次,神经网络包含上亿级的神经元的连接参数,尤其在训练过程中需要频繁更新;再者,神经网络在运算过程中会产生大量的中间结果,如梯度信息。训练数据、连接权重、中间结果等大量数据的访存开销对于数据存储结构和计算性能优化提出迫切要求。

新兴的rram器件(阻变式存储器,resistiverandomaccessmemory)被认为是提升神经网络计算能效的器件之一。首先,rram是一种非易失性的存储器,且具备较高的集成密度,相比闪存flash设备有更高的存取速度,且耗电量更低,更合适于进行靠近处理器的数据存取,从而十分适合应用于手机终端等设备中的非易失性的数据存储介质。再者,rram存储单元利用阻值可变特性能够表征多值,而非传统存储单元的0和1二值。基于rram以上这些特性,通过rram组建一种交叉阵列结构,如图1利用rram单元的交叉阵列结构所示,非常适应神经网络本身的矩阵向量乘运算。

通过使用rram的模拟电路形式,可以快速的实现数字电路中的乘加工作。例如,矩阵运算c=axb中,产生某一列的n个目标数据,所对应的计算复杂度为o(n2),上述目标数据可以认为是矩阵a的所有数据乘以矩阵b的对应的列数据获得的。假设矩阵a为nxn大小,矩阵b的一列为nx1大小,则c矩阵(结果矩阵)的这一个对应列的n个目标数据,每一个元素的获得都需要一次n次乘加,总共的需要nxn次计算。而rram的计算中,可以通过dac(digitaltoanalogconverter,数字/模拟转换器)和adc(analogtodigitalconverter,模拟/数字转换器)的协同作为,将此过程转换到基于rram的模拟电路计算的过程中。对所有的元素现有工作表明,利用rram存储单元搭建的交叉阵列结构对神经网络计算进行加速,同cpu或者gpu相比可提升100-1000倍的能效。

然而rram的应用受到rram寿命的制约,即rram中单个单元的寿命受可擦写次数的限制,当单个单元的阻抗改变次数达到一定次数之后,阻抗的改变能力将变弱,从而影响rram的寿命,并产生错误。尤其是,在神经网络训练过程中,通常有大数据量的训练集进行大量的突触和神经元强度的训练,这个过程中将有大量的更新操作,从而产生大量的擦写任务,直接影响rram的使用寿命,并且,频繁的更新操作也会大幅增加硬错误的潜在发生可能性,从而影响rram的可靠性,其中,硬错误指的是rram中的阻抗已经不能够完成改变,从而在电路上永远呈现为断路(阻抗无穷大)或短路(阻抗无穷小)。对应的数值即为stuck-at-0,即恒为0错误,或者stuck-at-1,即恒为1错误。



技术实现要素:

本申请提供一种神经网络训练的方法和装置,以提高进行神经网络训练的rram的使用寿命。

第一方面,提供一种神经网络训练方法,该方法应用于阻变存储器(resistiverandomaccessmemory,rram)上,包括:将神经网络中第r层的神经元输入值<ri1、ri2……rin>输入到所述rram中,根据所述rram中的过滤器(filter)对所述神经元输入值<ri1、ri2……rin>进行计算,得到所述神经网络中第r层的神经元输出值<ro1、ro2……rom>,其中,n为大于0的正整数,m为大于0的正整数;根据所述rram的核值、所述神经网络中第r层的神经元输入值<ri1、ri2……rin>、所述神经网络中第r层的神经元输出值<ro1、ro2……rom>以及所述神经网络中第r层的反向传播误差值<b1、b2……bm>进行计算,得到所述神经网络中第r层的反向传播更新值<c1、c2……cm>;其中,所述rram的核值为所述rram中的过滤器的矩阵值,所述神经网络中第r层的反向传播误差值<b1、b2……bm>是根据所述神经网络第r层的神经元输出值<ro1、ro2……rom>和所述神经网络第r层的神经元参考输出值<rt1、rt2……rtm>得到的;将所述神经网络中第r层的反向传播更新值<c1、c2……cm>与预设阈值进行比较,当所述神经网络中第r层的反向传播更新值<c1、c2……cm>大于所述预设阈值,则根据所述神经网络中第r层的反向传播更新值<c1、c2……cm>对所述rram中的过滤器进行更新。

本方案通过设置预设阈值对神经网络训练中的更新操作进行判断,当该更新值大于该预设阈值时才执行该更新操作,由于在神经网络训练中权值更新的幅度整体上并不太大,因此该方案可以大大减少由神经网络训练中大量更新操作带给rram的擦写操作,从而延长了rram的使用寿命,也由于更少的更新操作,减少了rram发生更多硬错误的可能性,从而保障了rram的可靠性。

结合第一方面,在第一方面的某些实现方式中,所述预设阈值为静态阈值或动态阈值;当所述预设阈值为静态阈值时,所述神经网络中所有层级的预设阈值的值相同,当所述预设阈值为动态阈值时,所述神经网络中不同层级的预设阈值的值不同或部分不同。

本实现方式中的静态阈值为神经网络的更新操作提供了一个固定的比较阈值,即该神经网络中每一层的反向传播更新值都与该静态阈值进行比较,减少很多该静态阈值以下的擦写操作,从而延长rram的使用寿命,本实现方式中的动态阈值为神经网络中的不同层提供不同或部分不同的阈值,这是由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

结合第一方面,在第一方面的某些实现方式中,对所述rram进行错误测试,输出所述rram的硬错误分布图,根据所述rram的硬错误分布图对所述神经网络进行数据重排。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,根据对rram进行错误测试得到rram的硬错误分布图,并进一步根据该硬错误分布图对神经网络进行数据重排,从而降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

结合第一方面,在第一方面的某些实现方式中,所述根据所述rram的硬错误分布图对所述神经网络进行数据重排包括:将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域,可以有效降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

结合第一方面,在第一方面的某些实现方式中,所述对所述rram进行错误测试,输出所述rram的硬错误分布图包括:对所述rram中各个单元分别写入测试值,将所述各个单元的测试值与所述各个单元的实际读出值分别进行比较,得到所述rram中各个单元的硬错误情况,所述rram中各个单元的硬错误情况构成所述rram的硬错误分布图。

结合第一方面,在第一方面的某些实现方式中,所述当所述预设阈值为动态阈值时,所述神经网络中不同层级的预设阈值的值不同或部分不同,具体的,所述神经网络中不同层级的预设阈值的值不同包括:所述预设阈值的值随所述神经网络层级的由后至前逐层递减;所述神经网络中不同层级的预设阈值的值部分不同包括:所述神经网络中靠前层级的预设阈值的值小于所述神经网络中靠后层级的预设阈值的值,其中,所述神经网络中靠前层级为靠近所述神经网络输入层的层级,具体为第1层至第x层;所述神经网络中靠后层级为靠近所述神经网络输出层的层级,具体为第r-x层至第r层,其中,所述r为所述神经网络的总层数,x大于1且小于r。

由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

第二方面,提供一种神经网络训练装置,该装置应用于阻变存储器(resistiverandomaccessmemory,rram)上,所述装置包括:前向计算模块,用于将神经网络中第r层的神经元输入值<ri1、ri2……rin>输入到所述rram中,根据所述rram中的过滤器(filter)对所述神经元输入值<ri1、ri2……rin>进行计算,得到所述神经网络中第r层的神经元输出值<ro1、ro2……rom>,其中,n为大于0的正整数,m为大于0的正整数;反向计算模块,用于根据所述rram的核值、所述神经网络中第r层的神经元输入值<ri1、ri2……rin>、所述神经网络中第r层的神经元输出值<ro1、ro2……rom>以及所述神经网络中第r层的反向传播误差值<b1、b2……bm>进行计算,得到所述神经网络中第r层的反向传播更新值<c1、c2……cm>;其中,所述rram的核值为所述rram中的过滤器的矩阵值,所述神经网络中第r层的反向传播误差值<b1、b2……bm>是根据所述神经网络第r层的神经元输出值<ro1、ro2……rom>和所述神经网络第r层的神经元参考输出值<rt1、rt2……rtm>得到的;比较模块,用于将所述神经网络中第r层的反向传播更新值<c1、c2……cm>与预设阈值进行比较;更新模块,用于当所述神经网络中第r层的反向传播更新值<c1、c2……cm>大于所述预设阈值,则根据所述神经网络中第r层的反向传播更新值<c1、c2……cm>对所述rram中的过滤器进行更新。

本方案通过设置预设阈值对神经网络训练中的更新操作进行判断,当该更新值大于该预设阈值时才执行该更新操作,由于在神经网络训练中权值更新的幅度整体上并不太大,因此该方案可以大大减少由神经网络训练中大量更新操作带给rram的擦写操作,从而延长了rram的使用寿命。

结合第二方面,在第二方面的某些实现方式中,所述装置还包括阈值生成模块,用于生成所述预设阈值,所述预设阈值包括静态阈值或动态阈值;具体的,所述静态阈值是指:所述阈值生成模块将所述神经网络中所有层级的预设阈值的值设置为相同;所述动态阈值是指:所述阈值生成模块将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同。

本实现方式中的静态阈值为神经网络的更新操作提供了一个固定的比较阈值,即该神经网络中每一层的反向传播更新值都与该静态阈值进行比较,减少很多该静态阈值以下的擦写操作,从而延长rram的使用寿命,本实现方式中的动态阈值为神经网络中的不同层提供不同或部分不同的阈值,这是由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

结合第二方面,在第二方面的某些实现方式中,所述比较模块中包含所述预设阈值,所述预设阈值为静态阈值,具体的,所述静态阈值是指:所述处理器将所述神经网络中所有层级的预设阈值的值设置为相同。

结合第二方面,在第二方面的某些实现方式中,所述装置还包括错误测试模块和重排模块,所述错误测试模块用于对所述rram进行错误测试,输出所述rram的硬错误分布图给所述重排模块,所述重排模块用于根据所述rram的硬错误分布图对所述神经网络进行数据重排。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,根据对rram进行错误测试得到rram的硬错误分布图,并进一步根据该硬错误分布图对神经网络进行数据重排,从而降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

结合第二方面,在第二方面的某些实现方式中,所述重排模块具体用于:将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域,可以有效降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

结合第二方面,在第二方面的某些实现方式中,所述错误测试模块具体用于:对所述rram中各个单元分别写入测试值,将所述各个单元的测试值与所述各个单元的实际读出值分别进行比较,得到所述rram中各个单元的硬错误情况,所述rram中各个单元的硬错误情况构成所述rram的硬错误分布图。

结合第二方面,在第二方面的某些实现方式中,所述阈值生成模块将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同,具体包括:所述阈值生成模块设置所述预设阈值的值随所述神经网络层级由后至前逐层递减;或设置所述神经网络中靠前层级的预设阈值的值小于所述神经网络中靠后层级的预设阈值的值,其中,所述神经网络中靠前层级为靠近所述神经网络输入层的层级,具体为第1层至第x层;所述神经网络中靠后层级为靠近所述神经网络输出层的层级,具体为第r-x层至第r层,其中,所述r为所述神经网络的总层数,x大于1且小于r。

由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

第三方面,提供一种神经网络训练装置,应用于阻变存储器(resistiverandomaccessmemory,rram)上,所述装置包括:处理器,用于将神经网络中第r层的神经元输入值<ri1、ri2……rin>输入到所述rram中,根据所述rram中的过滤器(filter)对所述神经元输入值<ri1、ri2……rin>进行计算,得到所述神经网络中第r层的神经元输出值<ro1、ro2……rom>,其中,n为大于0的正整数,m为大于0的正整数;并根据所述rram的核值、所述神经网络中第r层的神经元输入值<ri1、ri2……rin>、所述神经网络中第r层的神经元输出值<ro1、ro2……rom>以及所述神经网络中第r层的反向传播误差值<b1、b2……bm>进行计算,得到所述神经网络中第r层的反向传播更新值<c1、c2……cm>;其中,所述rram的核值为所述rram中的过滤器的矩阵值,所述神经网络中第r层的反向传播误差值<b1、b2……bm>是根据所述神经网络第r层的神经元输出值<ro1、ro2……rom>和所述神经网络第r层的神经元参考输出值<rt1、rt2……rtm>得到的;比较器,用于将所述神经网络中第r层的反向传播更新值<c1、c2……cm>与预设阈值进行比较,当所述神经网络中第r层的反向传播更新值<c1、c2……cm>大于所述预设阈值,则由所述处理器根据所述神经网络中第r层的反向传播更新值<c1、c2……cm>对所述rram中的过滤器进行更新。

本方案通过设置预设阈值对神经网络训练中的更新操作进行判断,当该更新值大于该预设阈值时才执行该更新操作,由于在神经网络训练中权值更新的幅度整体上并不太大,因此该方案可以大大减少由神经网络训练中大量更新操作带给rram的擦写操作,从而延长了rram的使用寿命。

结合第三方面,在第三方面的某些实现方式中,所述处理器还用于生成所述预设阈值,所述预设阈值包括静态阈值或动态阈值;具体的,所述静态阈值是指:所述处理器将所述神经网络中所有层级的预设阈值的值设置为相同;所述动态阈值是指:所述处理器将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同。

本实现方式中的静态阈值为神经网络的更新操作提供了一个固定的比较阈值,即该神经网络中每一层的反向传播更新值都与该静态阈值进行比较,减少很多该静态阈值以下的擦写操作,从而延长rram的使用寿命,本实现方式中的动态阈值为神经网络中的不同层提供不同或部分不同的阈值,这是由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

结合第三方面,在第三方面的某些实现方式中,所述比较器中包含所述预设阈值,所述预设阈值为静态阈值,具体的,所述静态阈值是指:所述处理器将所述神经网络中所有层级的预设阈值的值设置为相同。

结合第三方面,在第三方面的某些实现方式中,所述处理器还用于接收rram的硬错误分布图,并根据所述rram的硬错误分布图对所述神经网络进行数据重排,其中,所述硬错误分布图由所述处理器的周边电路对所述rram进行错误测试得到。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,根据对rram进行错误测试得到rram的硬错误分布图,并进一步根据该硬错误分布图对神经网络进行数据重排,从而降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

结合第三方面,在第三方面的某些实现方式中,所述处理器具体用于根据所述rram的硬错误分布图将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域,可以有效降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

结合第三方面,在第三方面的某些实现方式中,所述处理器接收到的rram的硬错误分布图,具体是通过错误测试电路得到的,所述错误测试电路具体用于:对所述rram中各个单元分别写入测试值,将所述各个单元的测试值与所述各个单元的实际读出值分别进行比较,得到所述rram中各个单元的硬错误情况,所述rram中各个单元的硬错误情况构成所述rram的硬错误分布图,其中,所述错误测试电路独立于处理器存在,并与所述处理器电连接。

结合第三方面,在第三方面的某些实现方式中,所述处理器将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同,具体包括:所述处理器设置所述预设阈值的值随所述神经网络层级由后至前逐层递减;或设置所述神经网络中靠前层级的预设阈值的值小于所述神经网络中靠后层级的预设阈值的值,其中,所述神经网络中靠前层级为靠近所述神经网络输入层的层级,具体为第1层至第x层;所述神经网络中靠后层级为靠近所述神经网络输出层的层级,具体为第r-x层至第r层,其中,所述r为所述神经网络的总层数,x大于1且小于r。

由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

第四方面,提供一种计算机可读存储介质,包括指令,其特征在于,当其在服务器或终端上运行时,使得所述服务器或所述终端执行如权利要求1-6中任一项所述的神经网络训练方法。

附图说明

图1是rram单元的交叉阵列结构图。

图2是神经元工作原理图。

图3是本申请一个实施例的神经网络训练方法流程图。

图4是本申请一个实施例的神经网络训练装置结构示意图。

图5是本申请实施例的更新逻辑示意图。

图6是本申请另一个实施例的神经网络训练装置结构示意图。

图7是本申请又一个实施例的神经网络训练装置结构示意图。

图8是本申请错误检测模块的工作示意图。

图9是本申请又一个实施例的神经网络训练装置结构示意图。

具体实施方式

为了便于理解,先对神经网络及rram进行相关介绍。

神经网络(nns)或称作连接模型(connectionmodel),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调节内部大量节点之间相互连接的关系,从而达到处理信息的目的。

rram,阻变式存储器(resistiverandomaccessmemory),可显著提高耐久性和数据传输速度的可擦写内存技术。rram是一种“根据施加在金属氧化物(metaloxide)上的电压的不同,使材料的电阻在高阻态和低阻态间发生相应变化,从而开启或阻断电流流动通道,并利用这种性质储存各种信息的内存”。

新兴的rram器件被认为是提升神经网络计算能效的器件之一。首先,rram是一种非易失性的存储器,且具备较高的集成密度,相比闪存flash设备有更高的存取速度,且耗电量更低,更合适于进行靠近处理器的数据存取,从而十分适合应用于手机终端等设备中的非易失性的数据存储介质。再者,rram存储单元利用阻值可变特性能够表征多值,而非传统存储单元的0和1二值。基于rram以上这些特性,通过rram组建一种交叉阵列结构,如图1利用rram单元的交叉阵列结构所示,非常适应神经网络本身的矩阵向量乘运算。

其中,交叉阵列(crossbar或xbar)结构是指具有行列交叉的一种结构。如图1所示,每个交叉节点设置有nvm(下称交叉节点为nvm节点),用于存储数据和计算。由于神经网络层的计算主要以向量-矩阵乘法,或矩阵-矩阵乘法为主,因此,交叉阵列很适合用于神经网络计算。具体的,如图1所示,假设待计算向量的维度为n,待计算向量中的n个元素分别通过数字信号d1至dn表示。然后,通过模拟/数字转换器(digitaltoanalogconverter,dac)将数字信号d1至dn转换成模拟信号v1至vn,此时,待计算向量中的n个元素分别通过模拟信号v1至vn表示。接着,将该模拟信号v1至vn分别输入至交叉阵列的n行。交叉阵列中的每列的nvm节点的电导值代表的是该nvm节点存储的权值的大小,因此,当模拟信号v1至vn作用在每列对应的nvm节点上之后,每个nvm节点输出的电流值表示该nvm节点存储的权值与该nvm节点接收到的模拟信号所表示的数据元素的乘积。由于交叉阵列的每列对应一个核(kernel)向量,因此,每列的输出电流总和代表的是该列对应的核与待计算向量对应的子矩阵的矩阵乘积的运算结果。然后,如图1所示,通过交叉阵列每列末尾的模拟/数字转换器(analogtodigitalconverter,adc)将矩阵乘积的运算结果从模拟量转换成数字量进行输出。基于以上工作原理可以看出,交叉阵列将矩阵-矩阵乘法转换成两个向量(待计算向量和核向量)的乘法运算,并能够基于模拟计算快速得到计算结果,非常适于处理向量-矩阵乘法或矩阵-矩阵乘法等运算。由于神经网络中90%以上的运算均为此类运算,因此,交叉阵列非常适合作为神经网络中的计算单元。

又如图2所示,其表示了一个由a1,a2,…,an神经元的输入到出口t的一个信息传递。其中,传递的方式为,每个神经元产生的信号强度,通过突触的传递力度向出口方向汇集传递。在数学上可以表示为:向量<a1,a2,…,an>与突触的权值向量<w1,w2,…,wn>的乘加。这里的向量<a1,a2,…,an>相当于上文所说的待计算向量,这里的突触的传递力度,即突触的权值向量<w1,w2,…,wn>相当于上文所说的核向量。综上,这样的乘加比较容易采用图1中的交叉阵列来实现。即左方dac端汇入神经元强度<a1,…an>,交叉阵列中储存kernel,第一列纵向为<w1,…,wn>,则在adc上输出sum(乘加)的结果。其中,b表示偏差,用于将神经元输入固定的调高或者调低一个值。

然而,rram的应用受到rram寿命的制约,rram的与flash设备类似,单个单元的寿命受可擦写次数的限制,单个单元的阻抗改变次数到达一定次数后,阻抗的改变的能力将变弱,影响寿命,产生错误。且频繁的更新操作也会大幅增加硬错误的潜在发生可能性,从而影响rram的可靠性。

在现有工作中,大多数情况下只是将rram交叉阵列用于神经网络的前向计算,即,将在其他设备上训练完的神经网络参数,包含神经元和突触的强度(权值),载入rram交叉阵列。这种方法主要使用rram的低功耗、计算与存储融合、高速矩阵乘的特性来增加神经网络在推理(inference)过程中的应用。如果更进一步,把rram的低功耗、计算存储融合、高速矩阵乘的特性应用到神经网络的训练(training)的过程中,就会受到上述的软错误、硬错误的影响。这是由于训练过程和推理过程的不同引起的:推理过程只包含前向计算,包含大量的矩阵乘;训练过程包含前向计算、反向传播和参数更新,其中的前向和反向,包含大量的矩阵乘,而参数更新则需要根据反向传播的结果,对神经元和突触的强度进行更新。由于训练过程中,可以认为是针对训练集,通常是大数据量的训练集进行大量的突触和神经元强度的训练,这个过程中将有大量的更新操作。更新操作带来的频繁的写操作会大幅度影响rram单元的可靠性,增加软错误和硬错误潜在的发生可能性。

为了解决上述问题,下面结合图3,详细描述本申请实施例的一种神经网络训练方法,该方法应用于阻变存储器(resistiverandomaccessmemory,rram)上,具体的,该方法应用于阻变存储器的交叉阵列(crossbar)结构上。

图3是本申请实施例提供的一种申请网络训练方法的流程图,包括:

301、将神经网络中第r层的神经元输入值<ri1、ri2……rin>输入到所述rram中,根据所述rram中的过滤器(filter)对所述神经元输入值<ri1、ri2……rin>进行计算,得到所述神经网络中第r层的神经元输出值<ro1、ro2……rom>,其中,n为大于0的正整数,m为大于0的正整数。

我们将rram交叉阵列中的每个节点视为一个单元(cell),该单元用于数据的储存和计算,将神经网络中第r层的神经元输入值<ri1、ri2……rin>输入到所述rram中,所述根据所述rram中的过滤器(filter)对所述神经元输入值<ri1、ri2……rin>进行计算具体可以为:由rram构成的神经网络加速器对该神经元输入值<ri1、ri2……rin>进行计算,具体的,该神经网络加速器包括多个过滤器,这些过滤器形成过滤器组,该过滤器组(filters)表现为一个矩阵,其中每一列由一个过滤器,也称为核向量表示。因此,根据所述rram中的过滤器对神经元输入值进行计算,具体表现为将神经元输入值向量与上述核向量相乘加,乘加的结果由rram中的adc进行转换,从而得到所述神经网络中第r层的神经元输出值<ro1、ro2……rom>。

值得介绍的是,交叉阵列是rram的一种。rram的范围较广,近年来,交叉阵列是用的比较多的一种神经网络加速器实现的载体。其中,交叉阵列用作神经网络加速器是基于它的rram特性,即基于阻抗的存储方式。

303、根据所述rram的核值、所述神经网络中第r层的神经元输入值<ri1、ri2……rin>、所述神经网络中第r层的神经元输出值<ro1、ro2……rom>以及所述神经网络中第r层的反向传播误差值<b1、b2……bm>进行计算,得到所述神经网络中第r层的反向传播更新值<c1、c2……cm>;其中,所述rram的核值为所述rram中的过滤器的矩阵值,所述神经网络中第r层的反向传播误差值<b1、b2……bm>是根据所述神经网络第r层的神经元输出值<ro1、ro2……rom>和所述神经网络第r层的神经元参考输出值<rt1、rt2……rtm>得到的。

如图3所述的b步骤所示,针对所述神经网络的第r层,将神经元输入值<ri1、ri2……rin>与rram的核值(图中表示为<w1、w2……wn>)、神经元输出值<ro1、ro2……rom>以及反向传播误差值<b1、b2……bm>进行乘积运算,得到该层的反向传播更新值<c1、c2……cm>。值得说明的是,神经元输出值的个数与神经元输出值的个数不一定相同,因此用n和m分开表示,n与m的取值范围均为大于0的正整数,n可以等于m,但更多的情况下,n与m并不相同。

305、将所述神经网络中第r层的反向传播更新值<c1、c2……cm>与预设阈值进行比较,当所述神经网络中第r层的反向传播更新值<c1、c2……cm>大于所述预设阈值,则

307、根据所述神经网络中第r层的反向传播更新值<c1、c2……cm>对所述rram中的过滤器进行更新。

本方案通过设置预设阈值对神经网络训练中的更新操作进行判断,当该更新值大于该预设阈值时才执行该更新操作,由于在神经网络训练中权值更新的幅度整体上并不太大,因此该方案可以大大减少由神经网络训练中大量更新操作带给rram的擦写操作,从而延长了rram的使用寿命,也由于更少的更新操作,减少了rram发生更多硬错误的可能性,从而保障了rram的可靠性。

可选地,在一些实施例中,所述预设阈值为静态阈值或动态阈值;当所述预设阈值为静态阈值时,所述神经网络中所有层级的预设阈值的值相同,当所述预设阈值为动态阈值时,所述神经网络中不同层级的预设阈值的值不同或部分不同。

当采用静态阈值,比较直接的做法是取一个较小的通用的阈值,例如0.01。当更新值不超过0.01的时候,忽略更新。当采用动态阈值时,分为两种情况,一种是对神经网络中不同层取不同阈值,另一种是对神经网络中部分层取一个阈值,另一部分层取另一个值,当然,此处的另一部分也可以是另几部分,这样的话将神经网络不同层级分为不同部分,每个部分对应的阈值取值均不相同,这样做是考虑到神经网络中的误差传递导致的各层级更新敏感度不同。

本实现方式中的静态阈值为神经网络的更新操作提供了一个固定的比较阈值,即该神经网络中每一层的反向传播更新值都与该静态阈值进行比较,减少很多该静态阈值以下的擦写操作,从而延长rram的使用寿命,本实现方式中的动态阈值为神经网络中的不同层提供不同或部分不同的阈值,这是由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

具体的,在一些实施例中,所述当所述预设阈值为动态阈值时,所述神经网络中不同层级的预设阈值的值不同或部分不同,具体的,所述神经网络中不同层级的预设阈值的值不同包括:所述预设阈值的值随所述神经网络层级的由后至前逐层递减;所述神经网络中不同层级的预设阈值的值部分不同包括:所述神经网络中靠前层级的预设阈值的值小于所述神经网络中靠后层级的预设阈值的值,其中,所述神经网络中靠前层级为靠近所述神经网络输入层的层级,具体为第1层至第x层;所述神经网络中靠后层级为靠近所述神经网络输出层的层级,具体为第r-x层至第r层,其中,所述r为所述神经网络的总层数,x大于1且小于r。

这样做是由于神经网络的误差传递自后向前会迅速变小,因此靠近神经网络输入层的层级对更新较为敏感,因此其预设阈值可以取较小阈值,而靠近神经网络输出层的层级对更新相对不敏感,因此其预设阈值可以取较大阈值。

综上,由于神经网络的误差传递使得神经网络中不同层网络的更新敏感度不同,为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

可选地,在一些实施例中,对所述rram进行错误测试,输出所述rram的硬错误分布图,根据所述rram的硬错误分布图对所述神经网络进行数据重排。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,根据对rram进行错误测试得到rram的硬错误分布图,并进一步根据该硬错误分布图对神经网络进行数据重排,从而降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

可选地,在一些实施例中,所述根据所述rram的硬错误分布图对所述神经网络进行数据重排包括:将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域。

由于rram的应用受很多非易失性存储的自然特性的制约,比如产生较多硬错误,又由于神经网络具有稀疏性,因此在本实现方式中,将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域,可以有效降低rram硬错误对神经网络训练精度的影响,或增加神经网络在有一定不良单元的rram上的使用率。

值得说明的是,上述的错误测试并不需要在每次神经网络迭代的时候都进行,其可以是在神经网络训练之前进行,输出rram的硬错误分布图给本发明实施例以使得本发明实施例根据该硬错误分布图对神经网络进行重排,其也可以在进行了一定次数迭代之后进行,这是由于在神经网络训练的过程中,rram的硬错误有可能会持续产生,这样训练一段时间即对该rram进行阶段性的错误测试并输出当时的rram的硬错误分布图,再根据这个rram的硬错误分布图对神经网络进行数据重排,这样有利于充分的利用rram中恒为0的硬错误单元,使神经网络中的稀疏数据尽可能的分配到这个恒为0的错误区域,从而增加神经网络在rram中的使用效率。

可选地,在一些实施例中,所述对所述rram进行错误测试,输出所述rram的硬错误分布图包括:对所述rram中各个单元分别写入测试值,将所述各个单元的测试值与所述各个单元的实际读出值分别进行比较,得到所述rram中各个单元的硬错误情况,所述rram中各个单元的硬错误情况构成所述rram的硬错误分布图。

下面对本申请的装置实施例进行描述,装置实施例与方法实施例对应,因此未详细描述的部分可以参见前面各方法实施例,同样的,在方法实施例中未详细展开的内容也可参见装置实施例的描述,不再重复赘述。

图4是本申请实施例的一种神经网络训练装置结构示意图。该神经网络训练装置应用于阻变存储器(resistiverandomaccessmemory,rram)上,所述装置包括:

前向计算模块,用于将神经网络中第r层的神经元输入值<ri1、ri2……rin>输入到所述rram中,根据所述rram中的过滤器(filter)对所述神经元输入值<ri1、ri2……rin>进行计算,得到所述神经网络中第r层的神经元输出值<ro1、ro2……rom>,其中,n为大于0的正整数,m为大于0的正整数。

反向计算模块,用于根据所述rram的核值、所述神经网络中第r层的神经元输入值<ri1、ri2……rin>、所述神经网络中第r层的神经元输出值<ro1、ro2……rom>以及所述神经网络中第r层的反向传播误差值<b1、b2……bm>进行计算,得到所述神经网络中第r层的反向传播更新值<c1、c2……cm>;其中,所述rram的核值为所述rram中的过滤器的矩阵值,所述神经网络中第r层的反向传播误差值<b1、b2……bm>是根据所述神经网络第r层的神经元输出值<ro1、ro2……rom>和所述神经网络第r层的神经元参考输出值<rt1、rt2……rtm>得到的。

比较模块,用于将所述神经网络中第r层的反向传播更新值<c1、c2……cm>与预设阈值进行比较。

更新模块,用于当所述神经网络中第r层的反向传播更新值<c1、c2……cm>大于所述预设阈值,则根据所述神经网络中第r层的反向传播更新值<c1、c2……cm>对所述rram中的过滤器进行更新。

值得说明的是,此处的比较模块可以作为rram的一部分,也可以独立于rram设置,此处不做限制。

本方案通过设置预设阈值对神经网络训练中的更新操作进行判断,当该更新值大于该预设阈值时才执行该更新操作,由于在神经网络训练中权值更新的幅度整体上并不太大,因此该方案可以大大减少由神经网络训练中大量更新操作带给rram的擦写操作,从而延长了rram的使用寿命,也由于更少的更新操作,减少了rram发生更多硬错误的可能性,从而保障了rram的可靠性。

可选地,在一些实施例中,所述装置还包括阈值生成模块,用于生成所述预设阈值,所述预设阈值包括静态阈值或动态阈值;具体的,所述静态阈值是指:所述阈值生成模块将所述神经网络中所有层级的预设阈值的值设置为相同;所述动态阈值是指:所述阈值生成模块将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同。

可选地,在一些实施例中,所述比较模块中包含所述预设阈值,所述预设阈值为静态阈值,具体的,所述静态阈值是指:所述处理器将所述神经网络中所有层级的预设阈值的值设置为相同。

可选地,在一些实施例中,所述阈值生成模块将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同,具体包括:所述阈值生成模块设置所述预设阈值的值随所述神经网络层级由后至前逐层递减;或设置所述神经网络中靠前层级的预设阈值的值小于所述神经网络中靠后层级的预设阈值的值,其中,所述神经网络中靠前层级为靠近所述神经网络输入层的层级,具体为第1层至第x层;所述神经网络中靠后层级为靠近所述神经网络输出层的层级,具体为第r-x层至第r层,其中,所述r为所述神经网络的总层数,x大于1且小于r。

图5体现了本发明实施例的更新逻辑,即通过反向计算模块计算出反向传播更新值<c1、c2……cm>(图中用c表示向量),该反向传播更新值c进入比较模块,与阈值生成模块的预设阈值进行比较,当所述反向传播更新值小于预设阈值时,写入使能信号置0,则该反向传播更新值不被写入rram交叉阵列;当所述反向传播更新值大于预设阈值时,写入使能信号置1,该反向传播更新值写入rram交叉阵列。基于这个逻辑,一些过小的反向传播更新将不被即时的反映到rram阵列中去,仅有足够显著的反向传播更新值才会得到反映,这样的结果是得到一个近似的神经网络训练,在下一次迭代的过程中,这个近似的神经网络训练将产生比非近似的神经网络更大的反向传播误差值<b1、b2……bm>(图中用b表示向量),而这个更大的反向传播误差值b将在反向计算的过程中倾向性的产生一个更大的反向传播更新值c,当这个反向传播更新值c超过所述预设阈值时,则可以在下一次迭代中反映到rram交叉阵列中。通过这样的方式,可以认为这种近似的方法累计了多次的反向传播更新值,更这种累计的方式,是通过神经网络的训练过程本身的主要通路实现的。本发明实施例在更新的时候加入特殊的单元(如图5所示的更新逻辑)对部分更新进行阻止,而整个神经网络训练的其他过程并不受影响。

并且,本发明实施例除了可以设置静态阈值,还可以为神经网络的不同网络层设置不同或部分不同的阈值,上面称为动态阈值,由于神经网络的误差传递自后向前会迅速变小,在反向传播的过程中相当于对误差逐层取微分,因此超过一定层数后反向传播更新值就变得很小,因此对于靠近神经网络输入层的层级对于更新更为敏感,可以对其对应的预设阈值取较小阈值,而靠近神经网络输出层的层级对更新相对不敏感,因此对其对应的预设阈值取较大阈值。这样为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

可选地,在一些实施例中,所述装置还包括错误测试模块和重排模块,所述错误测试模块用于对所述rram进行错误测试,输出所述rram的硬错误分布图给所述重排模块,所述重排模块用于根据所述rram的硬错误分布图对所述神经网络进行数据重排。

可选地,在一些实施例中,所述重排模块具体用于:将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域。

如图6所示,前向计算模块、反向计算模块、比较模块及更新模块完成一次或多次神经网络训练的迭代后,错误测试模块可以对所述rram进行错误测试,并由重排模块根据测试输出的rram的硬错误分布图对所述神经网络进行重排。这里需要说明的是,错误测试模块和重排模块不一定也不需要在每次神经网络训练迭代中都执行其测错和重排的工作,错误测试的工作可以在神经网络训练前,即离线的时候提前进行,也可以在进行了一定次数迭代之后进行,这是由于在神经网络训练的过程中,rram的硬错误有可能会持续产生,这样训练一段时间即对该rram进行阶段性的错误测试并输出当时的rram的硬错误分布图,再由重排模块根据这个rram的硬错误分布图对神经网络进行数据重排,这样有利于充分的利用rram中恒为0的硬错误单元,使神经网络中的稀疏数据尽可能的分配到这个恒为0的错误区域,从而增加神经网络在rram中的使用效率。

具体的,可以如图7所示,重排模块接受神经网络迭代完成或者部分完成得到的神经网络参数w’输入(该神经网络参数w’具体由图4中的更新模块输出,该w’为经过c向量对w向量进行更新后的结果,多列w’向量构成p矩阵),具体如图7中的待重排神经网络权值内存区(假设为p)所示。另外一个输入为该rram的硬错误分布图(假设为q)。该模块的主要作用为对权值矩阵p和错误分布矩阵q进行匹配,以p的行为粒度,将p中为0(或者近似接近0)的部分,最优化的交换到q中恒为0的部分。重排的结果为待写入神经网络权值内存区(假设为p’)。本发明中p’是由p经过行交换获得的。

对于交换,图7给出了一个交换的例子。如图7中的错误测试模块所示,假设该rram是一个6x6的交叉阵列,则q为一个6x6的矩阵。错误测试模块执行完rram的错误测试之后,q中得到了3个带有恒为0错误的单元,分别为第一行的第5列元素,第二行的第6列元素,和第四行的第3列元素。

如图7中的重排模块所示,p是一个示例的重排前的权值矩阵(即神经网络的权值数据,由更新后的神经网络权值w’构成),其中为0的单元实际为近似接近0的值,与其他例如0.003这样的值相比,属于更高阶的小值,在图中用0表示。可以看到,p中的大约有2/3的数值为0。如果直接将p写入rram,则p中的不为0的元素,例如第一行第5列的0.009和第四行第3列的0.003,会落入到q中的恒为0的错误单元上。

如图7中的重排模块所示,重排过程中,根据q中的恒为0的单元的分布情况,重排模块将p中的第一行和第二行进行了交换,第5行和第6行进行了交换,得到了更新后的p’,在p’中,q中恒为0的3个单元格(1,5),(2,6),(4,3)(注:格式为行,列),在p’中相应的位置都对应为数值0,对后续的计算不产生影响。

在本发明实施例中,具体可以采用软件的方法进行重排逻辑的实现。具体的执行可以使用通用处理器进行完成。错误测试模块得到的硬错误分布图q可以写入到rram的外围电路的专用区域中,和神经网络更新后的权值区域一起送入到通用处理器中进行重排。

在重排模块中,其重排逻辑的出发点在于神经网络具有稀疏性。大多数数据都近似的接近0。在具有稀疏性的神经网络中,能够较简单的获得和恒为0的单元的匹配结果。

另外,需要说明的是,由于rram的硬错误包括恒为0的硬错误和恒为1的硬错误,由于恒为1的错误远少于恒为0的错误,因此在本发明的实施例中,重点关注恒为0的硬错误,对于恒为1的错误可以采取整行跳过的方式进行处理,或者也可以采取别的方式进行处理,本发明实施例对此不做限制。

可选地,在一些实施例中,所述错误测试模块具体用于:对所述rram中各个单元分别写入测试值,将所述各个单元的测试值与所述各个单元的实际读出值分别进行比较,得到所述rram中各个单元的硬错误情况,所述rram中各个单元的硬错误情况构成所述rram的硬错误分布图。

如图8示出了错误检测模块的工作原理,恒为0,恒为1的错误需要通过修改rram阻值并与理想修改结果进行比较来检测。因此,在检错前,需先读取并记录全部rram的当前阻值。为提升检错效率,本发明实施例可以使用分块检错的方式,首先将原始rram阵列分成若干个互不相交的子矩阵,并对每一个子矩阵整体进行检错。

如图8展示了阵列大小为5×5的示例性检错电路(该阵列是一个检错子阵列,具体可以是前文或前图中交叉阵列(下文称原始交叉阵列)中的部分阵列,由于总的交叉阵列通常比较大,因此,错误检测模块进行检错的时候可以依次对检错子阵列进行错误检测),在进行恒为0,恒为1的检错时,首先对待检错的子阵列中的所有rram单元写入一个最小偏差,该偏差的大小由rram器件的阻值精度决定。为避免器件阻值的写入饱和,在检错恒为0错误时,需写入减小电阻(增大电导)的最小偏差;在检错恒为1错误时,需写入增大电阻(减小电导)的最小偏差。之后,对检错子阵列的输入接口(该输入接口如图8左端所示)施加检错电压,可以在该检错子阵列的输出接口(该输出接口如图8下端adc所示)得到写入偏差后的计算结果,经过模数转换作为待比较的信号。同时,对同一列的原始计算结果增加相同数量的最小偏差,可以得到无错误情况下的理想计算结果,用作待比较的参考信号。将每一列的实际结果(即待比较的信号)和理想结果(即待比较的参考信号)进行比较,若二者相同,则认为该列不包含错误;若二者不同,则认为该列包含错误。

rram器件具有双极性,允许施加反向偏置电压。因此,可以在检错子阵列的输出接口施加检错电压,并将图8所示检错电路连接在检错子阵列的输入接口,从而进行rram行的检错。最终综合子阵列的行检错结果与列检错结果,如果某一单元对应的行和列都包含错误,则认为该单元具有包含错误的可能性,并将其记录在图7所示的错误分布图q中。

假设原始交叉阵列的尺寸为m×n,检错子阵列的尺寸为s×t。由于同一行的子阵列可以同时进行列检错,同一列的子阵列可以同时进行行检错,相比于原始的逐个检错的方法,该方法能够有效的降低检错复杂度。

下面对本申请的另一装置实施例进行描述,该装置实施例与上面的各方法实施例及装置实施例对应,因此未详细描述的部分可以参见前面各方法实施例与装置实施例,不再重复赘述。

图9是本申请实施例的一种神经网络训练装置900结构示意图。该神经网络训练装置应用于阻变存储器(resistiverandomaccessmemory,rram)上,所述装置包括:

处理器910,用于将神经网络中第r层的神经元输入值<ri1、ri2……rin>输入到所述rram中,根据所述rram中的过滤器(filter)对所述神经元输入值<ri1、ri2……rin>进行计算,得到所述神经网络中第r层的神经元输出值<ro1、ro2……rom>,其中,n为大于0的正整数,m为大于0的正整数;并根据所述rram的核值、所述神经网络中第r层的神经元输入值<ri1、ri2……rin>、所述神经网络中第r层的神经元输出值<ro1、ro2……rom>以及所述神经网络中第r层的反向传播误差值<b1、b2……bm>进行计算,得到所述神经网络中第r层的反向传播更新值<c1、c2……cm>;其中,所述rram的核值为所述rram中的过滤器的矩阵值,所述神经网络中第r层的反向传播误差值<b1、b2……bm>是根据所述神经网络第r层的神经元输出值<ro1、ro2……rom>和所述神经网络第r层的神经元参考输出值<rt1、rt2……rtm>得到的。

比较器920,用于将所述神经网络中第r层的反向传播更新值<c1、c2……cm>与预设阈值进行比较,当所述神经网络中第r层的反向传播更新值<c1、c2……cm>大于所述预设阈值,则

由所述处理器910根据所述神经网络中第r层的反向传播更新值<c1、c2……cm>对所述rram中的过滤器进行更新。

值得说明的是,此处的比较器920可以作为rram的一部分,也可以独立于rram设置,此处不做限制。

本方案通过设置预设阈值对神经网络训练中的更新操作进行判断,当该更新值大于该预设阈值时才执行该更新操作,由于在神经网络训练中权值更新的幅度整体上并不太大,因此该方案可以大大减少由神经网络训练中大量更新操作带给rram的擦写操作,从而延长了rram的使用寿命,也由于更少的更新操作,减少了rram发生更多硬错误的可能性,从而保障了rram的可靠性。

可选地,在一些实施例中,所述处理器910还用于生成所述预设阈值,所述预设阈值包括静态阈值或动态阈值;具体的,所述静态阈值是指:所述处理器910将所述神经网络中所有层级的预设阈值的值设置为相同;所述动态阈值是指:所述处理器910将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同。

可选地,在一些实施例中,所述比较器920中包含所述预设阈值,所述预设阈值为静态阈值,具体的,所述静态阈值是指:所述处理器910将所述神经网络中所有层级的预设阈值的值设置为相同。

可选地,在一些实施例中,所述处理器910将所述神经网络中不同层级的预设阈值的值设置为不同或部分不同,具体包括:所述处理器910设置所述预设阈值的值随所述神经网络层级由后至前逐层递减;或设置所述神经网络中靠前层级的预设阈值的值小于所述神经网络中靠后层级的预设阈值的值,其中,所述神经网络中靠前层级为靠近所述神经网络输入层的层级,具体为第1层至第x层;所述神经网络中靠后层级为靠近所述神经网络输出层的层级,具体为第r-x层至第r层,其中,所述r为所述神经网络的总层数,x大于1且小于r。

本发明实施例除了可以设置静态阈值,还可以为神经网络的不同网络层设置不同或部分不同的阈值,上面称为动态阈值,由于神经网络的误差传递自后向前会迅速变小,在反向传播的过程中相当于对误差逐层取微分,因此超过一定层数后反向传播更新值就变得很小,因此对于靠近神经网络输入层的层级对于更新更为敏感,可以对其对应的预设阈值取较小阈值,而靠近神经网络输出层的层级对更新相对不敏感,因此对其对应的预设阈值取较大阈值。这样为不同层的神经网络层设置不同或部分不同的阈值,可以更有针对性的进行更新操作,从而进一步保证了rram的使用寿命。

可选地,在一些实施例中,所述处理器910还用于接收rram的硬错误分布图,并根据所述rram的硬错误分布图对所述神经网络进行数据重排,其中,所述硬错误分布图由所述处理器910的周边电路对所述rram进行错误测试得到。

可选地,在一些实施例中,所述处理器910具体用于根据所述rram的硬错误分布图将所述神经网络的稀疏数据排布到所述rram上恒为0的硬错误区域。

值得说明的是,该错误测试可以是一个程序,或一个测试电路,搭载在所述rram上实现。

值得说明的是,上述的错误测试逻辑并不需要在每次神经网络迭代的时候都进行,其可以是在神经网络训练之前进行,输出rram的硬错误分布图给本发明实施例以使得本发明实施例中的处理器910根据该硬错误分布图对神经网络进行重排,其也可以在进行了一定次数迭代之后进行,这是由于在神经网络训练的过程中,rram的硬错误有可能会持续产生,这样训练一段时间即对该rram进行阶段性的错误测试并输出当时的rram的硬错误分布图,再由处理器910根据这个rram的硬错误分布图对神经网络进行数据重排,这样有利于充分的利用rram中恒为0的硬错误单元,使神经网络中的稀疏数据尽可能的分配到这个恒为0的错误区域,从而增加神经网络在rram中的使用效率。

可选地,在一些实施例中,所述处理器910接收到的rram的硬错误分布图,具体是通过错误测试电路得到的,所述错误测试电路具体用于:对所述rram中各个单元分别写入测试值,将所述各个单元的测试值与所述各个单元的实际读出值分别进行比较,得到所述rram中各个单元的硬错误情况,所述rram中各个单元的硬错误情况构成所述rram的硬错误分布图,其中,所述错误测试电路可以独立于处理器910存在,并与所述处理器910电连接。

一种计算机可读存储介质,当其在服务器或终端上运行时,使得所述服务器或所述终端执行如上述方法实施例中任一个实施例所述的神经网络训练方法。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1