一种静态策略定点化训练方法及装置
发明领域
本申请涉及一种用于深度神经网络的定点训练方法及装置。更具体地,本申请涉及一种用于LSTM神经网络的基于静态定点参数的定点训练方法及装置。
背景技术
人工神经网络
人工神经网络(Artificial Neural Networks,ANNs),又称神经网络(NNs),是一种模仿动物神经网络的行为特征,进行分布式并行信息处理的数学计算模型。近年来,神经网络得到快速发展,被广泛应用于诸多领域,如图像识别、语音识别、自然语言处理、基因表达、内容推送等等。
在神经网络模型,存在大量彼此连接的节点(也称“神经元”)。每个神经元,通过某种特定的输出函数(也称“激活函数”(Activation Function))计算处理来自其它相邻神经元的加权输入值,并且神经元之间的信息传递强度用“权值”来定义。算法通过自我学习,调整该权值。
早期的神经网络只有输入和输出层两层,无法处理复杂的逻辑,限制了其实用性。
如图1所示,深度神经网络(Deep Neural Network,DNNs)通过在输入和输出层之间添加隐藏的中间层,有效提升了网络在处理复杂问题时的表现。
为了适应不同的应用场景,深度神经网络进而衍生出多种不同的结构。例如,循环神经网络(Recurrent Neural Networks,RNNs)是一种常用的深度神经网络模型。不同于传统前向神经网络(Feed-forward Neural Networks),循环神经网络本身具有记忆性,神经元既可以从上一层神经元获取信息,又可以从自身所在的隐层获取信息,这使其能够广泛应用于与时序相关的问题处理上。
深度神经网络的应用包括“训练”(Training)、“推断”(Inference)两个过程。训练神经网络旨在提升网络的学习能力。输入特征通过前向传播过程计算预测结果,该计算结果与标准值比较后将残差通过反向传播回传,并将比较结果用于更新网络权值参数,从而达到修正网络的目的。神经网络训练完成后,可以将训练好的神经网络应用到实际场景中,即推断,在该过程中,根据输入特征通过前向传播过程计算得到合理的预测结果。
通过近几年的迅速发展,神经网络的规模不断增长,已公开的比较先进的神经网络可达数百层、数亿个连接,属于计算和访存密集型应用。在神经网络逐渐变大的情况下,神经网络模型的压缩变得极为重要。此外,由于压缩后的神经网络模型的精度可能下降,因此,需要对压缩的神经网络进行重训(Fine tuning),以使精度恢复至所需水平。
深度神经网络的压缩分为网络稀疏化和低比特量化两部分。
一方面,深度神经网络中,神经元的连接关系在数学上可以表示为一系列矩阵。经过训练后的网络虽然预测准确,但其矩阵都是稠密的,即“矩阵中充满了非零元素”,从而导致大量的存储和计算资源被消耗。研究表明,在通过训练得到的神经网络模型矩阵中,仅有部分权值较大的元素代表着重要连接,而其他权值较小的元素可以通过剪枝(Pruning)操作被移除(置为零)。通过将神经网络中的稠密矩阵稀疏化,能够有效的降低存储量、减少计算量。
另一方面,深度神经网络中的权重在传统硬件平台GPU上的运算均使用32比特(bit)浮点数表示,这样的多比特参数与高精度导致了大量的存储和计算资源被消耗。研究表明,通过低比特的位宽量化矩阵权重,并以定点数替代浮点数进行前向计算,可以有效降低网络的计算与存储资源消耗。
语音识别Speech Recognition
语音识别是将语言的模拟信号顺序映射到一个具体的单词集合上。
利用传统统计方法进行语音识别的系统首先对语音输入进行特征提取,随后通过解码器输出识别结果。具体地,前端的特征提取包括信号处理与模型构建两个模块:信号处理包括语音活动检测、预处理、特征提取以及特征变换等步骤;模型构建则通过隐马尔科夫模型(Hidden Markov Model,HMM)进行建模计算对应文本的概率。后端的解码器则包括解码网络构建以及最优路径搜索,结合声学模型以及语言模型给出最终的识别结果。
近年来,人工神经网络在语音识别领域有着非常广泛的应用。其中,深度学习的模型则主要被应用于后端的声学输出概率的预测上。语音识别过程中一个关键问题是信号的前后关联性很强,例如识别句子中的单词,和该单词前面的单词序列关系十分紧密。深度神经网络,例如循环神经网络(RNN)通过引入定向循环,解决了输入之间前后关联的问题,因此在语音识别中有着极为广泛的应用。
图2示出了一种使用神经网络的语音识别引擎的例子。在图2的模型中,利用深度学习模型来计算语音输出概率,即输入语音串与各匹配候选之间得相似度预测。
图3a和图3b进一步示出了应用于图2的语音识别引擎的深度学习模型。其中,图3a的深度学习模型显示了包含CNN(卷积神经网络)、LSTM(长短时记忆模型)、DNN(深度神经网络)、Softmax等模块。图3b的深度学习模型使用了多层长短时记忆(LSTM)模型。
LSTM(长短时记忆)模型
在语音识别领域,为了解决对长期信息的记忆问题,Hochreiter&Schmidhuber于1997年提出了长短时记忆(Long Short-Term Memory,LSTM)模型。
LSTM神经网络是RNN的一种。与DNN不同,RNN是时间依赖型的。具体而言,时刻T的输入依赖于时刻T-1的输出,即,当前帧的计算需要前一帧的计算结果。进一步地,LSTM神经网络将普通RNN当中简单的重复神经网络模块改变为复杂的连接交互关系。LSTM神经网络在语音识别中取得了非常好的应用效果。
关于LSTM的更多信息,可以参见如下文章:Sak H,Senior AW,Beaufays F.Longshort-term memory recurrent neural network architectures for large scaleacoustic modeling[C]//INTERSPEECH.2014:338-342,Sak H,Senior A,Beaufays F.Longshort-term memory based recurrent neural network architectures for largevocabulary speech recognition[J].arXiv preprint arXiv:1402.1128,2014.
图4示出了在语音识别领域中使用的一种LSTM网络模型。在图4所示的LSTM的结构中,各个参数的意义如下:
-i、f、o分别代表三个门,即输入门(input gate)、遗忘门(forget gate)以及输出门(output gate),状态变量单元(Cell)对信息进行长时间记忆,g为单元的特征输入;
-实线代表上一帧的输出;
-每个门有一个权值矩阵,t时刻输入与t-1的输出经过门时的计算量较大;
-虚线代表peephole,peephole以及三个叉乘符号对应的操作均为向量与对角矩阵的乘法,计算量较小。
图5示出了在语音识别领域中使用的一种改进的LSTM网络模型。如图5所示,为了减小LSTM层的计算量,额外引入一个投影层用于降维。
图5对应的计算公式为:
it=σ(Wixxt+Wiryt-1+Wicct-1+bi)
ft=σ(Wfxxt+Wfryt-1+Wfcct-1+bf)
ct=ft⊙ct-1+it⊙g(Wcxxt+Wcryt-1+bc)
ot=σ(Woxxt+Woryt-1+Wocct+bo)
mt=ot⊙h(ct)
yt=Wymmt
其中,σ()表示sigmoid激活函数,而个g()与h()则表示tanh激活函数,Wic,Wcf,Woc为peephole,对应图5中的三条虚线。
在实际计算中,cell作为操作数的运算均为向量与对角矩阵的乘法,此时权值矩阵是对角矩阵。公式完整计算一遍,便可获得一帧的输出,其中t时刻的输入依赖t-1时刻的输出,计算当前帧的结果需要前一帧的计算结果。
需要说明的是,公式中的最后一步在LSTM模型中不是必须的,而是为了减小LSTM层的计算量引入的降维矩阵,对应于图5中的投影层。
通过以上公式,可以得到LSTM网络一层的所有参数,即与输入做运算的四个权值矩阵Wix、Wfx、Wcx、Wox,与上一帧输出结果做运算的四个权值矩阵Wir、Wfr、Wcr、Wor,与cell做运算的三个peephole,负责降维的矩阵Wym以及四个偏置向量bi、bf、bc、bo。
在衡量一个LSTM网络的大小时,一般用输入维度×cell维度×输出维度的规则表示。其中输入维度即为输入向量x的维度,输出维度为y的维度,cell维度则是指中间运算过程中产生结果的维度大小,亦为权重矩阵的行数。
人工神经网络的训练和重训
对神经网络的训练/重训实际上是对某个损失函数进行优化的过程。损失函数就是在给定输入下,神经网络模型的预测结果与真实结果之间的差别。希望损失函数的值尽可能小。
训练的本质是寻找最优解。重训则是指在已有的一个可能离最优解很近的次优解的情况下搜索最优解,即,在一定的基础上继续训练。例如,针对已有LSTM深度神经网络(认为其为最优解),在压缩操作后,在保留下来的权值的基础上继续训练以寻找最优解,这便是一个重训过程。
通常,在训练/重训过程中通过梯度下降法来更新神经网络的权值。梯度下降法基于这样的观察:
如果实值函数F(x)在点a处可微且有定义,那么函数F(x)在a点沿着梯度相反的方向-▽F(a)下降最快。因而,如果:
b=a-γ▽F(a)
对于γ>0为一个够小数值时成立,那么F(a)≥F(b),其中a是向量。
考虑到这一点,我们可以从函数F的局部极小值的初始估计x0出发,并考虑如下序列x0,x1,x2,…使得:
xn+1=xn-γn▽F(xn),n≥0。
因此可得到:
F(x0)≥F(x1)≥F(x2)≥···,
如果顺利的话,序列(xn)收敛到期望的极值。注意每次迭代步长γ可以改变。
这里,将F(x)理解为损失函数,就可以理解梯度下降法使得模型预测损失减小的原理。
例如,参考论文DSD:Regularizing Deep Neural Networks with Dense-Sparse-Dense Training Flow in NIPS 2016,对LSTM深度神经网络的训练方法如下:
这里,W是权值矩阵,η代表学习率,也就是随机梯度下降法的步长,f是损失函数,▽F是对损失函数求梯度,x是训练数据,t+1代表更新权值。
上式的含义是:用权值矩阵减去学习率与损失函数梯度的乘积,来更新权值矩阵。
图6示出了利用梯度下降法对神经网络进行训练/重训的示意图。
如图6所示,首先,使训练数据经过原始神经网络进行前向计算,将计算结果与标准值进行比较以获得损失值;然后,根据该损失值通过反向计算获得梯度矩阵;最后,使用该梯度矩阵和学习率更新原始神经网络。
在实际中,考虑到计算效率,会将多条训练数据拼接在一起以进行一次前向计算和一次反向计算,从而更新一次网络权重参数。该过程被称为一个训练周期(epoch)内的一次迭代。
由于训练集中可能有成千上万条数据,所以要进行多次迭代。每用完一次训练集,就称之为一个训练周期(epoch)。在下一个训练周期中,将重新从该训练集中取数据,再次执行前向计算-->反向计算-->更新神经网络的训练过程,直至神经网络达到期望精度。
浮点数的定点
如上文所述,深度神经网络的压缩分为网络稀疏化和低比特量化两部分。稀疏化即为剪枝压缩,低比特即为浮点数的定点(或量化)。
在GPU/CPU上,一般用32bit的浮点数来表示数据以及执行计算。如上文所述,为了节省资源、提高速度,硬件平台希望采用较低比特、比如16bit定点数来表示数据并且执行计算。
定点计算指的是确定位宽并指定小数点的位置进而表示数据的过程。图7示出了对浮点数进行定点的简化示意图。
更具体地定点计算包括:1)确定位宽,例如8bit、16bit等;和2)指定小数点的位置,即,根据需求选取小数点位置,所述需求例如是保证整数部分不溢出。
对于神经网络而言,定点的对象可以是网络本身,对网络定点化的时间代价较小,一次定点即可完成。定点的对象还可以是神经网络的前向计算过程,对前向计算过程定点化的时间代价较大,需要进行多次定点。
然而,由于使用近似值表示浮点数,定点计算往往会造成网络预测结果精确度的下降,从而影响网络的性能。但是,可以通过选取适当的定点参数,并通过定点化训练(Fixed fine-tuning),使网络在训练过程中适应定点方式下的运算,从而有效地弥补定点带来的精度损失。
因此,本申请的目的在于提供一种定点训练的方法,通过该方法可以弥补定点计算导致的精度损失,从而在保证所需精度的情况下加快神经网络的处理速度。
发明内容
本申请提出一种基于静态定点参数的定点训练方法及装置。更具体地,本申请针对LSTM神经网络的计算结构,提出一种相应的定点训练方法,通过在神经网络的重训过程中,使用定点的方式进行前向计算,在若干训练周期之内,将网络精度恢复到浮点计算的水平。
具体地,根据本申请的一方面,提供一种浮点神经网络的定点训练方法,其包括:定点参数确定步骤,用于确定用于所述浮点神经网络的前向计算过程的定点参数;神经网络定点步骤,用于对浮点神经网络进行定点,以获得相应的定点神经网络;定点前向计算步骤,用于使训练数据集通过所述定点神经网络,并根据所述定点参数进行定点前向计算;以及神经网络更新步骤,用于根据所述定点前向计算的计算结果来更新浮点神经网络的权重。
根据本申请的另一方面,提供一种浮点神经网络的定点训练方法,其包括:初始训练步骤,用于对浮点神经网络进行初始训练,以获得具有期望精度的中间神经网络;定点参数确定步骤,用于使验证集通过所述中间神经网络并进行浮点前向计算,从而确定用于所述中间神经网络的前向计算过程的定点参数;神经网络定点步骤,用于对所述中间神经网络进行定点,以获得相应的定点神经网络;定点前向计算步骤,用于使训练数据集通过所述定点神经网络并根据所述定点参数进行定点前向计算;以及中间神经网络更新步骤,根据所述定点前向计算的计算结果更新所述中间神经网络。
根据本申请的另一方面,提出一种浮点神经网络的定点训练装置,其包括:定点参数确定模块,用于确定所述浮点神经网络的前向计算过程的定点参数;神经网络定点模块,用于对浮点神经网络进行定点,以获得相应的定点神经网络;定点前向计算模块,用于使训练数据集通过所述定点神经网络,并根据所述定点参数进行定点前向计算;以及神经网络更新模块,用于根据所述定点前向计算模块的计算结果来更新浮点神经网络的权重。
为使本申请的上述目的、特征和优点更清楚易懂,在下文中结合附图例举若干实施例,对本申请进行更详细的说明。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中使用的附图作简要介绍。应理解,仅以示例的方式示出以下附图,并且以下附图不应认为是对本申请范围的限定。附图中:
图1示出了深度神经网络的简化示意图;
图2示出了一种使用神经网络的语音识别引擎的示意图;
图3a和图3b示出了应用于语音识别引擎的深度学习模型;
图4示出了应用于语音识别领域的一种LSTM神经网络模型;
图5示出了应用于语音识别领域的一种改进的LSTM神经网络模型;
图6示出了利用梯度下降法对神经网络进行训练/重训的示意图;
图7示出了对浮点数进行定点的简化示意图;
图8示出了根据本申请的定点参数文件的示例;
图9示出了根据本申请的一种定点训练方法的具体步骤;
图10示出了根据本申请的基于静态定点参数的定点训练方法的示意图;
图11示出了图10所示的定点训练方法的具体步骤。
具体实施方式
下面将结合附图,对本申请的技术方案进行清楚、完整的描述。
如上文所述,深度神经网络的硬件平台希望采用较低比特的定点数来表示数据并且执行计算。首先,对数值的定点方法进行说明。
在本申请中,数值定点的流程包括:确定整数位数、确定小数位数、数值定点。
对于LSTM网络,需要进行定点的数据具体包括:网络中LSTM层的权重参数、网络的输入数据、以及在前向传播计算过程中产生的数据流。其中,由于需要依据网络权重进行前向计算,因此权重参数的定点工作在前向传播开始前进行,其余数据的定点则在模拟硬件前向传播计算的过程中完成。
针对不同的待定点数据,存在不同的定点方法,其具体包括:对单一数值的定点、对计算过程的定点、以及对激活函数的定点。
下面,对上述三种不同的定点方法进行具体说明。
单一数值定点
对单一数值进行定点包括确定整数位数、确定小数位数和数值定点。以将浮点数0.7326定点成16bit的定点数为例,其定点过程如下:
首先,确定符号位、整数位、小数位的位长。
由于,浮点数0.7326属于区间[-20,20-20-15],因此,其对应的定点数的整数位取0bit,小数位取15-0=15bit,符号位取1bit。
其次,对浮点数0.7326以上述位长进行定点。
对于浮点数a,其对应的定点数a’为:
其中floor(x)是指对数值进行向下取整。
因此,对于浮点数0.7326,其对应的定点数为:
由此可见,对浮点数的定点化存在精度损失。
在本实施例中,单一数值的定点方法应用于神经网络的权重定点环节。换言之,将训练得到的浮点神经网络中的浮点权重通过此种方法用相近的定点数表示,从而获得可供硬件平台使用的定点网络。
对神经网络的权重进行定点的具体过程如下:
首先,确定神经网络中权重矩阵的取值范围,从而在保证不溢出的情况下确定定点数的小数位长。小数位长的最大值可以由位宽限制和待定点参数的取值范围共同决定。
假设定点参数为W,定点数的位宽限制为L,则小数位长n应保证:
2L-1-n>max(|W|)
理论上,n越大,定点造成的精度损失越小。
然后,对需要定点的浮点数x以小数位长n bit、整数位长(L-1-n)bit、符号位长1bit进行定点。具体地,将浮点数x先乘以2n并取整,然后将所获得的结果除以2n,以得到定点后的近似结果。
由于神经网络的每一层中含有多个参数矩阵(向量)(例如,LSTM层中含有多个矩阵),并且各个矩阵的取值范围一般差异较大。因此,获得每个矩阵的取值范围从而分别确定各矩阵的小数位长可以显著降低定点导致的精度损失。
计算过程的定点
对计算过程进行定点例如包括对浮点数的加法计算、乘法计算的定点。以浮点数的相乘计算为例,其具体定点过程如下:
首先,利用对单一数值的定点方法,确定浮点数a、b的小数位长(经计算,分别为x、y),然后对a、b分别定点,得到a’、b’:
a'=floor(a·2x)
b'=floor(b·2y)
然后,计算定点数相乘的结果:c=a’·b’;
最后,对该结果c进行定点。假设c的小数位长确定为z,则有:
定点数
对于本申请,定点计算用于模拟硬件加速平台的计算过程,因此需要使用上述定点方法对计算过程中产生的数据定点。
应注意,模拟硬件加速平台的计算过程并不意味着需要将计算过程涉及的每个数值重复地放大或缩小,这是因为硬件平台上每一次运算都是整数运算,因此只需要更新小数点的位置。
在本实施例中,为了方便计算,对于同一LSTM层的小数位置是统一的,而对不同的LSTM层,由于中间计算结果动态范围差异较大,因此小数位置不同。神经网络的计算过程定点的具体过程如下:
首先,参照对单一数值的定点方法,对神经网络的参数矩阵进行定点,然后乘以2n进行放大(其中n为小数位长),得到整数;
然后,对于输入矩阵,同样参照对单一数值的定点方法,根据动态范围确定相应小数位长并放大取整。至此,所有参与前向计算的数据均为定点放大后的整数;
最后,对计算过程进行定点。具体地:
对于两个放大后的整数的相乘计算,假设两个整数对应的定点的小数位长分别为x和y,那么相乘后得到的整数结果包含(x+y)位小数。然而,由于小数位长在位宽限制下只能保留n位,因此将该结果需要除以2(x+y-n)并取整,即舍弃n位之后的小数进行近似;
对于两个放大后的整数的相加计算,由于同一LSTM层的小数位长相同,因此直接将两个整数相加即可。
重复上述步骤可以得到神经网络前向计算的全部结果。
应注意,对神经网络的权重参数的定点不依赖于数据集,只依赖网络;而对中间计算结果的定点则依赖于数据集,即采用不同的数据集对相同的神经网络做前向计算可能得出不同的定点参数。
激活函数的定点
对于LSTM网络前向计算中涉及的激活函数sigmoid和tanh,采用查表的方法进行定点。
根据激活函数的特性,在输入过小与过大时,计算所得的函数值趋近于最小值与最大值。因此,只需要在函数变化较快的一段区间内保证结果的精度。
激活函数查表定点的具体过程如下:
首先,对一定的输入区间内进行等距离分割,并计算出相应的输出建立查找表;
然后,将每个输入在经过激活函数之前对应到相应区间并取左值,从而查表得到对应输出。
在本实施例中,由于sigmoid在x=8时取值0.9997,tanh在x=4时取值0.9993,因此,激活函数sigmoid的查找表的输入区间为[-8,8],激活函数tanh的查找表输入区间为[-4,4]。然后将输入区间等距离分成2048份,并计算出相应的输出值,从而构建查找表。对于区间外的输入,取输入区间的最大值和最小值。
根据上述三种定点方法,对于每个LSTM神经网络,可以确定相应的定点参数。
在一个示例中,可以以粗粒度确定定点参数,即以Wix、Wfx、Wcx、Wox四个为一组进行存储和定点,以Wir、Wfr、Wcr、Wor四个为另一组进行存储和定点。
在另一个示例中,可以以细粒度确定定点参数,即对Wix、Wfx、Wcx、Wox、Wir、Wfr、Wcr、Wor分别定点。
图8示出了根据本申请的定点参数文件的示例。图8所示的策略文件既可以用于表示粗粒度定点参数,又可以用于表示细粒度定点参数。
在图8的定点参数文件中:
-第一行为定点参数名称。
-第二行<Model>表示定点参数开始。
-<BitNumParam>表示神经网络中权重参数的位宽限制,其中<Component>表示神经网络的层。在图8中,<Component>0、<Component>1、<Component>2分别表示三层LSTM的权重矩阵/向量的定点位宽,其中每层包括13个参数,依次为:Wgx、Wix、Wfx、Wox、Wgr、Wir、Wfr、Wor、偏置(bias)、Wic、Wfc、Woc、Wrm;<Component>3表示仿射变化的权重矩阵/向量的定点位宽,其包括2个参数,依次为W、Bias。
-<BitNumBlob>表示计算过程中的中间数据的位宽限制,其中<Layer>表示输入层、LSTM层和仿射变换层。在图8中,<Layer>0表示神经网络的输入向量的位宽;<Layer>1、<Layer>2、<Layer>3分别表示三层LSTM的中间计算结果的定点位宽,其中每层包括3个参数,依次为yt、mt、blob(包括it、ft、ct、ot、ht等一系列中间计算结果);此外,每层yt等同于下一层的输入xt,因此设置<Layer>4表示仿射变换层的输出yt的定点结果。
-<FragPosParam>表示神经网络中权重参数的小数位长,其具体描述可以参照上述关于位宽的描述,位置一一对应。;
-<FragPosBlob>计算过程中的中间数据的小数位长;
-xrange、npoints、expo分别存储两个激活函数sigmoid和tanh的查找表的输入区间的绝对值、分割份数以及定点的小数位数。
如上文所述,定点计算将导致精度损失。然而,仅通过调整定点参数,无法达到所需的网络精度。因此,在本申请中,尝试针对定点计算环境对深度神经网络进行训练或重训,从而弥补定点计算带来的损失。
图9示出了根据本申请的一种定点训练方法的具体步骤。
如图9所示,在步骤910中,以上文所述的单一数值定点方法对训练好的深度神经网络(例如,LSTM网络)的权重进行定点,从而获得定点网络。
在步骤920中,使训练数据集通过定点网络进行定点前向计算,并将计算结果与标准值(Groundtruth)进行比较,从而得到损失值。这里,标准值是指针对训练数据集的对应参考标准,其用于计算损失值。
在步骤930中,根据损失值和原始浮点网络通过反向传播计算浮点梯度,并基于该浮点梯度和学习率更新当前浮点神经网络的权值矩阵。
迭代执行上述步骤910至930,直到浮点神经网络达到期望精度。
在该方法中,通过步骤920的定点前向计算,使得在训练过程中,前向计算的过程等同于实际应用时的定点计算。因此,计算得到的偏差即为定点计算结果与实际结果的偏差。这样,对神经网络的调整可以更接近定点计算的方式。另一方面,通过浮点反向计算,则确保神经网络的更新值为浮点数,使得神经网络的更新更为精确。
以该方法,可以使前向计算过程更接近硬件加速平台的定点计算过程,从而通过定点化训练网络,使得网络在定点计算的环境下取得更高的精度。
实施例2
在本实施例中,提出一种基于静态定点参数的定点训练方法。图10示出了基于静态定点参数的定点训练方法的示意图。
如图10所示,在该方法中定点参数一经确定不再更改。
具体地,首先,用验证集(即,图10所示的dev集)确定神经网络前向计算过程的定点参数。
然后,使用该定点参数指导训练数据集经过定点神经网络进行定点前向计算,进而计算浮点梯度以更新当前的浮点神经网络。
上述过程可以迭代进行,直到当前的浮点神经网络达到预定的精度。
图11示出了基于静态定点参数的定点训练方法的具体步骤。
如图11所示,在步骤1110中,确定神经网络前向计算过程的静态定点参数。
具体地,使验证集通过已经训练好的浮点神经网络并进行浮点前向计算,以确定神经网络前向计算过程产生的中间数据的数值范围。这里,验证集是来自原始数据库的原始数据,不对其设定特定应用领域,以便确保较强的泛化能力。
然后,根据该数值范围确定不会导致溢出的定点参数,以作为定点重训过程的恒定的定点参数。这里,所谓“溢出”是指在计算过程中出现较大的数值,超出了定点参数中整数位长所能表示的极限范围。
在步骤1120中,对浮点神经网络进行定点,从而得到定点网络。在该实例中,采用上述单一数值定点方法对浮点神经网络的权重和偏置进行定点。
在步骤1130中,使训练数据集通过步骤1120中获得的定点网络并进行定点前向计算。具体地,根据步骤1110中获得的定点参数指导定点训练集中的数据与前向计算的中间计算结果,即根据定点参数确定训练数据和中间计算结果的定点小数位长。
然后,将定点计算结果与标准值进行比较,从而得到损失值。
在步骤1140中,根据步骤1130中获得的损失值通过反向传播计算浮点梯度,并基于该浮点梯度和学习率更新当前的浮点神经网络。
迭代执行上述步骤1110至1140,直到神经网络达到期望精度。
本发明的有益效果
根据本实施例的方法,当神经网络收敛到一定程度时(即,训练神经网络到所需精度时),可以假设每次训练对于网络本身改动不大,因此可以确定较为稳定的定点策略用于重训。此外,将此策略作为之后硬件加速平台的定点策略,可以达到重训过程中前向计算过程完全等同于硬件加速平台的计算过程的效果。
因此,利用本实施例的方法,经过一定的训练周期,可以得到适合定点计算的神经网络,从而提高神经网络定点计算的预测精度。
应理解,以上实施例以LSTM神经网络作为说明该实施例的示例。然而,本申请可以不限于LSTM神经网络,而是可以应用到其他各种神经网络。
还应理解,上文示例仅为本申请的具体实施方式,而不旨在限制本申请的保护范围,本申请的保护范围应以权利要求的保护范围为准。