本发明属于神经网络技术领域,具体涉及一种神经网络训练方法及装置。
背景技术:
多层神经网络由于其具有较高的识别准确度和较好的可并行性,受到学术界和工业界越来越广泛的关注,在模式识别、图像处理和自然语言处理等多个领域也有着越来越多的应用。
神经网络由于其庞大的模型参数数据,使之难以应用于嵌入式系统,研究人员通过多种方式减少存储这些模型参数所需的存储空间,最常用的是采用低精度的数据表示方法存储数据,例如采用16位浮点型数据表示方法,16位定点型数据表示方法,更有甚者采用1bit的二值数据表示方法。相比于原精度的浮点数据表示方法,采用低精度的数据表示方法可以减少数据存储空间,然而由于神经网络模型参数数据数值范围非常广,采用低精度的数据表示方法会带来极大的精度损失,影响神经网络的性能。
技术实现要素:
(一)要解决的技术问题
本发明的目的在于,提供一种神经网络训练方法及装置,用于对神经网络中的参数进行训练,以使得训练后的参数具有低位宽并且精度损失较小。
(二)技术方案
本发明提供一种神经网络训练方法,用于对神经网络中的参数进行训练,方法包括:
s1,采用非线性函数对参数进行非线性变换,得到变换参数;
s2,对变换参数转换进行低位宽转换,得到低位宽变换参数;
s3,通过神经网络反向过程,获取低位宽变换参数的待更新梯度值,根据非线性函数和所述低位宽变换参数的待更新梯度值,得到非线性变换前参数的待更新梯度值;
s4,根据参数的待更新梯度值,对参数进行更新。
进一步,步骤s3中,低位宽变换参数的待更新梯度值δy为:
其中,η为神经网络的学习率,
非线性变换前所述参数的待更新梯度值为:
δx=f′(x)δy;
步骤s4中,对参数进行更新的表达式为:
xnew=x-δx。
进一步,非线性函数为双曲正切系列函数或者sigmoid系列函数。
进一步,参数包括神经网络的权值和偏置。
进一步,对更新后的参数重复执行步骤s1~s4,直到参数小于一预定阈值时,训练完成。
本发明还提供一种神经网络训练装置,用于对神经网络中的参数进行训练,装置包括:
非线性变换模块,用于采用非线性函数对参数进行非线性变换,得到变换参数;
低位宽转换模块,用于对变换参数转换进行低位宽转换,得到低位宽变换参数;
反向梯度变换模块,用于通过神经网络反向过程,获取低位宽变换参数的待更新梯度值,根据非线性函数和所述低位宽变换参数的待更新梯度值,得到非线性变换前参数的待更新梯度值;
更新模块,用于根据参数的待更新梯度值,对参数进行更新。
进一步,反向梯度变换模块中,低位宽变换参数的待更新梯度值δy为:
其中,η为神经网络的学习率,
非线性变换前所述参数的待更新梯度值为:
δx=f′(x)δy;
更新模块对所述参数进行更新的表达式为:
xnew=x-δx。
进一步,非线性函数为双曲正切系列函数或者sigmoid系列函数。
进一步,参数包括神经网络的权值和偏置。
进一步,非线性变换模块、低位宽转换模块、反向梯度变换模块及更新模块对更新后的参数反复进行训练,直到参数小于一预定阈值时,训练完成。
(三)有益效果
本发明具有以下优点:
1、由于非线性变换函数对参数的数据范围和数据精度可控,在后续进行低位宽转换时,能够很好的保留数据原本的精度,从而保证神经网络的性能。
2、由于训练获得的参数具有较低的位宽,故参数所需的存储空间大大减少。
3、训练获得的参数可以用于专用的神经网络加速器,由于采用较低精度的参数,故可以减少对加速器传输带宽的要求,并且低精度的数据可以减少硬件的面积开销,例如减小运算器的大小,从而可以优化硬件的面积功耗比。
附图说明
图1为本发明提供的神经网络训练方法的流程图。
图2是本发明提供神经网络训练装置的结构示意图。
具体实施方式
本发明提供一种神经网络训练装置及方法,用于对神经网络中的参数进行训练,方法首先采用非线性函数对所述参数进行非线性变换,得到变换参数,然后对变换参数转换进行位宽转换,得到低位宽变换参数,接着,通过神经网络反向过程,获取低位宽变换参数的待更新梯度值,根据非线性函数和所述低位宽变换参数的待更新梯度值,得到非线性变换前参数的待更新梯度值,最后根据参数的待更新梯度值,对参数进行更新。本发明使得训练后的参数具有较低的位宽并且精度损失较小。
图1为本发明提供的神经网络训练方法的流程图,如图1所示,方法包括:
s1,采用非线性函数对参数进行非线性变换,得到变换参数。
在本步骤中所采用非线性变换函数不唯一,可根据实际使用的需求选择不同的非线性函数,可以是双曲正切系列函数、sigmoid系列函数等。
例如,针对于采用8位浮点表示方法的神经网络,由于8位浮点表示方法所能表示的数据范围较小,而一般采用高精度数据表示方法的神经网络参数数据范围都比较大,若将原全精度数据通过位宽转换成低精度数据,对数据本身会带来的精度损失会影响神经网络的性能。故可以采用双曲正切系列的函数做非线性变换。
双曲正切系列函数可以是如下形式,
在其他场景,根据需要,可以采用其他非线性函数或者函数参数,例如针对于采用16位浮点表示方法的神经网络,由于16位浮点可表示数据范围相对较大,因此,需要更多关注的精度损失可能为个别数据超出16位浮点表示范围带来的精度损失,故可以设计非线性函数使得这部分数据出去饱和段,而其他数据处于非线性段或线性段。
另外,本发明所指的参数为神经网络的权值和偏置,其中,神经网络为多层神经网络时,参数即为每一层神经网络的权值和偏置。
s2,对变换参数转换进行低位宽转换,得到低位宽变换参数。
一般地,神经网络的参数为浮点数,本步骤中,将原全精度浮点数经过非线性变换后转为低精度的低位宽浮点数。此处低位宽浮点数中“低位”表示存储一个数据所需的比特数小于全精度浮点所需的比特位数,“宽”表示数据在统计意义上较均匀分布在该数据表示法所能表示的指数范围内。例如,假设有一堆数据,分布在[-5,5]之间,并且集中分布在[-1.5,1.5]范围内,那么,采用一种非线性变换tanh(x),对于[-1.5,1.5]范围内的数据,处于该变换斜率较大的线性段,能够将密集的数据分布拉散开,而对于[-5,-1.5]和[1.5,5]范围的数据,处于该变换曲率较大的非线性段,能够将原本松散的数据变得密集,由此可以使得数据的分布更加均匀。并且,该变换使得数据范围缩放到[-1,1]区域内。
s3,通过神经网络反向过程,获取低位宽变换参数的待更新梯度值,根据非线性函数和低位宽变换参数的待更新梯度值,得到非线性变换前参数的待更新梯度值。
在本步骤中,设非线性变换采用的非线性变换函数为y=f(x),此处x为变换前的权值或偏置参数,y为变换后的权值或偏置参数。反向过程的损失函数为
s4,根据参数的待更新梯度值,对参数进行更新。
在本步骤中,对参数进行更新的表达式为:
xnew=x-δx。
接着,对更新后的参数重复执行步骤s1~s4,直到参数小于一预定阈值时,训练完成。
图2是本发明提供神经网络训练装置的结构示意图,如图2所示,网络训练装置包括:
非线性变换模块,用于采用非线性函数对参数进行非线性变换,得到变换参数;
非线性变换模块所采用非线性变换函数不唯一,可根据实际使用的需求选择不同的非线性函数,可以是双曲正切系列函数、sigmoid系列函数等。
例如,针对于采用8位浮点表示方法的神经网络,由于8位浮点表示方法所能表示的数据范围较小,而一般采用高精度数据表示方法的神经网络参数数据范围都比较大,若将原全精度数据通过位宽转换成低精度数据,对数据本身会带来的精度损失会影响神经网络的性能。故可以采用双曲正切系列的函数做非线性变换。
双曲正切系列函数可以是如下形式,
在其他场景,根据需要,可以采用其他非线性函数或者函数参数,例如针对于采用16位浮点表示方法的神经网络,由于16位浮点可表示数据范围相对较大,因此,需要更多关注的精度损失可能为个别数据超出16位浮点表示范围带来的精度损失,故可以设计非线性函数使得这部分数据出去饱和段,而其他数据处于非线性段或线性段。
另外,本发明所指的参数为神经网络的权值和偏置,其中,神经网络为多层神经网络时,参数即为每一层神经网络的权值和偏置。
低位宽转换模块,用于对变换参数转换进行低位宽转换,得到低位宽变换参数。
一般地,神经网络的参数为浮点数,低位宽转换模块的作用是将原全精度浮点数经过非线性变换后转为低精度的低位宽浮点数。此处低位宽浮点数中“低位”表示存储一个数据所需的比特数小于全精度浮点所需的比特位数,“宽”表示数据在统计意义上较均匀分布在该数据表示法所能表示的指数范围内。例如,假设有一堆数据,分布在[-5,5]之间,并且集中分布在[-1.5,1.5]范围内,那么,采用一种非线性变换tanh(x),对于[-1.5,1.5]范围内的数据,处于该变换斜率较大的线性段,能够将密集的数据分布拉散开,而对于[-5,-1.5]和[1.5,5]范围的数据,处于该变换曲率较大的非线性段,能够将原本松散的数据变得密集,由此可以使得数据的分布更加均匀。并且,该变换使得数据范围缩放到[-1,1]区域内。
反向梯度变换模块,用于通过神经网络反向过程,获取低位宽变换参数的待更新梯度值,根据非线性函数和所述低位宽变换参数的待更新梯度值,得到非线性变换前参数的待更新梯度值;
在反向梯度变换模块中,设非线性变换采用的非线性变换函数为y=f(x),此处x为变换前的权值或偏置参数,y为变换后的权值或偏置参数。反向过程的损失函数为
更新模块,用于根据参数的待更新梯度值,对参数进行更新。
更新模块,对参数进行更新的表达式为:
xnew=x-δx。
本发明提供的神经网络训练装置,对更新后的参数重复执行步骤s1~s4,直到参数小于一预定阈值时,训练完成。
实施例一
本实施例的神经网络支持16位浮点数据表示方法,并且,本实施例采用非线性变换函数为双曲正切系列函数:
以神经网络一个卷积层的权值数据为例,w为变换前的权值数据,p_w为变换后的权值数据,maxw为该层所有权值数据的最大值,a与b为常数参量,a用于控制变换后的数据范围,b用于控制变换后的数据分布。通过调节a与b,能够将分布不均的数据在指数域上较为均匀分布,能够将数据映射到指定范围内。
具体地,当
对神经网络每一层的权值和偏置,通过非线性变换模块做非线性变换,获得变换后的权值和偏置,即
变换后的权值和偏置数据以及各层输入数据通过低位宽浮点数据转换模块,转换成所需的16位浮点数据,低精度浮点数据转换可以采用直接截断的方法,即对于原全精度的数据,截取16位浮点表示方法所能表示的精度部分,超出该精度的部分直接舍去。
转换后的16位浮点数据用于神经网络训练,通过神经网络反向过程获得待更新梯度值δy。
梯度值通过反向梯度变换模块计算的非线性变换前的权值和偏置的待更新梯度值,即
重复上述步骤直至训练完成。
实施例二
实施例二与实施例一的区别在于,本实施例采用sigmoid系列非线性变换函数:
以神经网络一个卷积层的权值数据为例,则w为变换前的权值数据,p_w为变换后的权值数据,a与b为常数参量,a用于控制变换后的数据范围,b用于控制变换后的数据分布。通过调节a与b,能够将分布不均的数据在指数域上较为均匀分布,能够将数据映射到指定范围内。假设该神经网络的权值参数数据大小一般在10-4量级,可以采用非线性函数
对神经网络每一层的权值和偏置,通过非线性变换模块做非线性变换,获得变换后的权值和偏置,即
变换后的权值和偏置数据以及各层输入数据通过低位宽转换,得到16位浮点数据,低精度浮点数据转换可以采用直接截断的方法,即对于原全精度的数据,截取16位浮点表示方法所能表示的精度部分,超出该精度的部分直接舍去。
转换后的16位浮点数据用于神经网络训练,通过神经网络反向过程获得待更新梯度值δy。
梯度值通过反向梯度变换模块计算的非线性变换前的权值和偏置的待更新梯度值,即
重复上述步骤直至训练完成。
本发明经过训练后的神经网络可用于神经网络加速器、语音识别装置、图像识别装置及自动导航装置等。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。