本发明涉及人工神经网络,更具体涉及深度神经网络数据处理方法和装置。
背景技术:
人工神经网络(artificialneuralnetworks,ann),也简称神经网络(nns),是一种模仿动物神经网络的行为特征,进行分布式并行信息处理的数学计算模型。近年来,神经网络发展很快,被广泛应用于诸多领域,如图像识别、语音识别、自然语言处理、天气预报、基因表达、内容推送等等。
神经网络中,有大量彼此连接的节点(也称“神经元”),并且具备两个特性:1)每个神经元,通过某种特定的输出函数(也叫激活函数,activationfunction),计算处理来自其它相邻神经元的加权输入值;2)神经元之间的信息传递强度,用所谓权值来定义,算法会不断自我学习,调整这个加权值。
早期的神经网络只有输入和输出层两层,无法处理复杂的逻辑,限制了其实用性。而深度神经网络(deepneuralnetwork,dnn)通过在输入和输出层之间添加隐藏的中间层,革命性地改变了这一点。图1示出了一种深度神经网络的模型。
语音识别(speechrecognition),是将语音的模拟信号顺序映射到一个具体的单词集合上。近年来,人工神经网络的方法在语音识别领域取得的效果已经远远超出了所有传统方法,正在成为全行业的主流。其中,深度神经网络有着极为广泛的应用。
循环神经网络(recurrentneuralnetworks,rnn)是一种常用的深度神经网络模型,不同于传统前向神经网络(feed-forwardneuralnetwork)的是,循环神经网络引入了定向循环,能够处理那些输入之间前后关联的问题。在语音识别中,信号的前后关联很强,例如识别句子中的单词,和该单词前面的单词序列关系十分紧密。因此,循环神经网络在语音识别领域有着非常广泛的应用。
为了解决对长期信息的记忆问题,hochreiter和schmidhuber于1997年提出了长短时记忆(longshort-termmemory,lstm)模型。lstm神经网络是rnn的一种,将普通rnn当中简单的重复神经网络模块改变为复杂的连接交互关系。lstm神经网络在语音识别中也取得了非常好的应用效果。
图2示出了一种应用于语音识别领域的lstm网络模型。
近年来一些语音识别的模型(例如deepspeech系列)采用卷积层操作和rnn链接的方式进行语音识别。卷积层对语音数据进行卷积的实质是对语谱图提取特征图,对内核(kernel)尺寸的合理设置可以获取语谱图中有用且部分时间关联的信息。这种利用cnn提取特征的方式取代了传统技术中使用的hmm模型,多音素对齐等过程。这一技术大大减少了语音识别整个过程的时间消耗,并将原来繁琐复杂的语音识别过程变为多数计算为神经网络计算的过程,极大地提高了语音识别的速度并降低了语音识别相关算法的复杂度。
rnn及其相关变种由于有时序依赖的特性,计算过程的加速一直都是一个不好解决的问题。时序依赖的特点限制了rnn计算过程中的并行度,硬件资源无法得到充分利用,所以算力存在着很大的浪费。相关研究大部分集中在改变rnn的计算结构,尽量减少时序依赖的计算部分占的比重,或者将时序依赖部分变为消耗资源较少的计算方式。以此来充分利用硬件资源提高计算速度。这些提速方式在精度不变的前提下取得了一些速度上的提升,但是也存在其缺点:需要重建模型进行训练,也意味着需要训练用的数据集,对于缺乏数据集的模型处理过程这种改变模型结构的方式并不适用。
技术实现要素:
本发明实施例提供一种深度神经网络数据处理方法和装置,用以解决现有技术中神经网络的计算并行度不高、硬件资源无法得到充分利用的问题,实现网络模型的拆分计算,从而达到将计算过程分布化并且充分利用多个计算资源同时进行神经网络计算的效果。
为了实现本发明的目的,根据本发明的第一方面,提供一种深度神经网络数据处理方法。该方法可以包括:将输入数据分解为多通道的输入数据;将神经网络参数拆分为与多通道的输入数据分别相对应的多通道的神经网络参数;将多通道的输入数据与各自对应的多通道的神经网络参数分别进行计算,以分别得到多通道的输出数据;将多通道的输出数据进行融合,生成最终的输出数据。
优选地,所述的将输入数据分解为多通道的输入数据的步骤可以进一步包括:将输入数据根据其所包含的多方面的信息而分解为多通道的输入数据,其中,分解后的每一通道的输入数据用于表示原输入数据的多方面信息中的一个方面的信息。
进一步,所述的将输入数据根据其所包含的多方面的信息而分解为多通道的输入数据的步骤可以包括:将输入数据通过深度学习的方法分解为表示输入数据的各个方面信息的多通道的输入数据。
再进一步,所述的将输入数据通过深度学习的方法分解为表示各个方面信息的多通道的输入数据的步骤可以包括:将输入数据通过全连接或者卷积层操作之后分解为多通道的输入数据。
优选地,所述的将神经网络参数拆分为与多通道的输入数据分别相对应的多通道的神经网络参数的步骤可以进一步包括:将神经网络参数根据其所对应处理的输入数据的多方面的信息而拆分为多通道的神经网络参数,其中,拆分后的每一通道的神经网络参数用于相应地处理原输入数据的多方面信息中的一个方面的信息。
进一步,所述的将神经网络参数根据其所对应处理的输入数据的多方面的信息而拆分为多通道的神经网络参数的步骤可以包括:将神经网络参数通过深度学习的方法拆分为处理对应于输入数据的各个方面信息的多通道的神经网络参数。
再进一步,所述的将神经网络参数通过深度学习的方法拆分为处理对应于输入数据的各个方面信息的多通道的神经网络参数的步骤可以包括:采用原有参数作为常量,用机器学习的方法学习产生变换参数矩阵的变换矩阵;将网络参数矩阵与所述变换矩阵相乘得到变换参数矩阵;将变换参数矩阵拆分为与多通道的输入数据分别相对应的多个神经网络参数子矩阵。
所述的将多通道的输出数据进行融合,生成最终的输出数据的步骤可以进一步包括:采用堆垛、求和、求平均三种方式中的任何一种来将多通道的输出数据进行融合,并生成最终的输出数据。
然而,考虑到各通道输出信息的意义不同,在结果中表现的重要性也不应该相同,结果的综合应该可以表现各通道信息的不同重要程度。
优选地,所述的将多通道的输出数据进行融合,生成最终的输出数据的步骤可以进一步包括:采用注意力机制对多通道的输出数据进行综合以得到最终的输出数据。
为了实现本发明的目的,根据本发明的第二方面,提供一种深度神经网络数据处理装置。该装置可以包括:输入数据分解单元,用于将输入数据分解为多通道的输入数据;网络参数拆分单元,用于将神经网络参数拆分为与多通道的输入数据分别相对应的多通道的神经网络参数;多通道计算单元,用于将多通道的输入数据与各自对应的多通道的神经网络参数分别进行计算,以分别得到多通道的输出数据;多通道输出融合单元,用于将多通道的输出数据进行融合,生成最终的输出数据。
优选地,所述输入数据分解单元可以进一步用于将输入数据根据其所包含的多方面的信息而分解为多通道的输入数据,其中,分解后的每一通道的输入数据用于表示原输入数据的多方面信息中的一个方面的信息。
进一步,所述输入数据分解单元可以用于将输入数据通过深度学习的方法分解为表示输入数据的各个方面信息的多通道的输入数据。
再进一步,所述输入数据分解单元可以用于将输入数据通过全连接或者卷积层操作之后分解为多通道的输入数据。
优选地,所述网络参数拆分单元可以进一步用于将神经网络参数根据其所对应处理的输入数据的多方面的信息而拆分为多通道的神经网络参数,其中,拆分后的每一通道的神经网络参数用于相应地处理原输入数据的多方面信息中的一个方面的信息。
进一步,所述网络参数拆分单元可以用于将神经网络参数通过深度学习的方法拆分为处理对应于输入数据的各个方面信息的多通道的神经网络参数。
再进一步,所述网络参数拆分单元可以包括:变换矩阵生成子单元,用于采用原有参数作为常量,用机器学习的方法学习产生变换参数矩阵的变换矩阵;变换参数矩阵生成子单元,用于将网络参数矩阵与所述变换矩阵相乘得到变换参数矩阵;变换参数矩阵拆分子单元,用于将变换参数矩阵拆分为与多通道的输入数据分别相对应的多个神经网络参数子矩阵。
所述多通道输出融合单元可以进一步用于采用堆垛、求和、求平均三种方式中的任何一种来将多通道的输出数据进行融合,并生成最终的输出数据。
然而,优选地,所述多通道输出融合单元可以进一步包括注意力机制子单元,用于采用注意力机制对多通道的输出数据进行综合以得到最终的输出数据。
为了实现本发明的目的,根据本发明的第三方面,提供一种计算机可读介质,用于记录可由处理器执行的指令,所述指令在被处理器执行时,使得处理器执行深度神经网络数据处理方法,包括如下操作:将输入数据分解为多通道的输入数据;将神经网络参数拆分为与多通道的输入数据分别相对应的多通道的神经网络参数;将多通道的输入数据与各自对应的多通道的神经网络参数分别进行计算,以分别得到多通道的输出数据;将多通道的输出数据进行融合,生成最终的输出数据。
模型拆分的作用是提高并行度,以及将计算过程分布化,可以充分利用一个硬件平台上的多个计算资源进行神经网络的计算。这种拆分技术可以提高rnn模型的计算速度,也可以解决超长时序数据的计算问题。
附图说明
下面参考附图结合实施例说明本发明。
图1示出了一种深度神经网络的模型。
图2示出了一种应用于语音识别领域的lstm网络模型。
图3示出了原有的lstm计算流程。
图4示出了根据本发明的多通道lstm计算流程。
图5示出了原始参数拆分到多通道参数的过程。
图6是根据本发明的深度神经网络数据处理方法的流程图。
图7是根据本发明的深度神经网络数据处理装置的示意框图。
具体实施方式
附图仅用于示例说明,不能理解为对本发明的限制。下面结合附图和实施例对本发明的技术方案做进一步的说明。
下文中,通过lstm神经网络中参数模型拆分的示例来作为本发明的一个优选实施例,用于具体地描述根据本发明的深度神经网络数据处理方法。
lstm神经网络中,前向计算主要是一系列矩阵与向量乘法的组合,如下公式所示:
公式中给出了两种lstm:右边是最简单的lstm结构;左边是lstmp结构,其主要特点是在简单lstm的基础上添加了窥视(peephole)和投影(projection)操作。无论是lstm还是lstmp结构,其中都主要包括c(单元cell)、i(输入门inputgate)、f(遗忘门forgetgate)、o(输出门outputgate)四种矩阵,即wcx、wix、wfx、wox、wcr(h)、wir(h)、wfr(h)、wor(h)。
上面公式中涉及到yt-1或ct-1的计算都对时序有依赖,在运算进行到这些步骤时需要等待上一帧的相关数据计算完,这会造成硬件资源的长时间等待,也是lstm计算效率不高的原因。改变这种硬件资源利用率低的方法是提高并行度。
本发明提出的模型分拆技术就将原有的输入数据和lstm层的参数拆成多通道,这样lstm层包含多个通道,每个通道中有一个子模型,并且仅处理这一通道中的输入数据。得到的结构再使用注意力机制进行融合,从而得到与原有模型维度相同的输出。
图3示出了原有的lstm计算流程。图4示出了根据本发明的多通道lstm计算流程。
在根据本发明的多通道lstm计算流程中,与图3的原有的lstm计算流程不同的是,输入数据(input)通过卷积或者全连接层(conv/fc)操作之后变成多通道的数据(input1、input2、……inputn)。但是,对于deepspeech这类通过cnn层进行特征提取的网络来说,输入数据本身就是多通道拼接起来得到的单通道数据,所以可以不加入图4中所示的的conv/fc层,而是直接在数据拼接之前提取数据作为多通道lstm的输入数据。换句话说,输入数据分解的工作已经在之前的操作中完成了。
输入数据需要具备多通道属性才能分解。这里的输入数据分解操作的物理意义就在于,把原来在一个通道里面用多个数据表示的信息分解到多个通道中,每个通道用较少信息描述只属于本通道的信息。
例如,如果用一个通道表示声音数据,那么这个通道里面需要各个方面的信息(声音大小、强弱、波长、频率等等)。在输入数据满足这种条件的情况下,可以进行分解。分解后的每个通道包含一方面的信息。也就是说,有的通道专门处理声音的波长,有的通道专门处理声音频率等等。卷积或者全连接层操作就是为了达成这个目的,让原来一个通道里面的信息通过深度学习逐渐分配到不同通道中去。
lstm的参数经过处理之后拆分到各个通道中(lstm1、lstm2、……lstmn),各通道的计算过程和lstm过程相同,只是数据量变小。得到的结果也分布在各通道中(out1、out2、……outn),需要通过注意力机制(attention)进行融合从而得到最终的输出(output)。
综上所述,为了进行模型拆分,需要确定图中所示的attention层参数以及lstm拆分过程中的参数,以及conv/fc层的参数(可选)。
图5示出了原始参数拆分到多通道参数的过程。
原始的lstm层拆分之前需要经过变化。对于lstm层中每个参数(矩阵或向量形式表示),拆分过程都需要变化+拆分两步,拆分即沿某一维度拆分成多个子矩阵(或子向量),没有需要学习的参数,所以变化过程需要对拆分过程造成的精度损失进行弥补,弥补的方式就是添加一个变换矩阵,变换矩阵的参数通过学习获得。为了学习变换矩阵的参数,训过程中需要变换lstm计算的结构,添加变换矩阵的计算过程,并且将原有参数作为非学习参数(不改变数值,作为常量)进行学习。如图5中所示,原始的参数矩阵维度为cell_dim*input_dim,变换矩阵的维度为input_dim*[channel*new_input_dim],也就是说,变换矩阵将原始参数矩阵变换为适于输入数据分解为多个channel之后的维度。即,变换后的参数矩阵的维度为cell_dim*[channel*new_input_dim],由此可以将参数矩阵拆分为n个子矩阵,即channel1、channel2、……channeln。从而,使得多通道输入数据可以分别与对应通道的参数子矩阵进行运算,得到多通道的输出结果。
参数的拆分与输入数据的分解相对应。原来所有的参数分布在一个通道中,那么这个通道中的参数可以理解为负责处理所有信息。例如对应于输入数据,如果单通道的输入数据中包含了声音的大小、强弱、波长等等,那么相应参数中也有专门处理大小、强弱、波长的部分,只不过都是融合在一起的。把这些部分拆分到多通道中的话,每个通道中的参数可以理解为“各司其职”,只处理大小、或强弱、或波长,而不管其他通道中的信息。这个拆分步骤的意义也是通过深度学习,让不同意义的参数分配到相对应的位置上,然后再拆分到各自属于的通道中去。
最后每个通道会有一个输出,而原始模型只有一个通道的输出,所以拆分模型的各个通道输出结果需要再进行综合。简单堆垛、求和或者求平均可以作为一种综合多通道结果的方式。但是,考虑到各通道输出信息的意义不同,在结果中表现的重要性也不应该相同,结果的综合应该可以表现各通道信息的不同重要程度。鉴于此,采用注意力(attention)机制对多通道的输出结果进行综合,这一步骤可以参照序列循环神经网络(sequentialrnn)的结果综合过程。有关序列循环神经网络,例如,可参见论文youalil,cgreenberg,msingh,dklakow,sequentialrecurrentneuralnetworksforlanguagemodeling,interspeech2016,september8–12,2016,sanfrancisco,usa(arxiv:1703.08068v1[cs.cl]23mar2017)。
综上所示,模型拆分的核心部分就是确定所需的变换矩阵,变换矩阵的参数通过学习获得,所以得到变换矩阵的过程本质上是训练网络的过程。考虑到模型拆分是对模型的加工处理,可能无法获得原模型的全部训练数据,所以训练过程可以采用类似蒸馏法的方式,用原始模型对拆分的模型进行蒸馏,这样可以充分利用原始模型中包含的信息在小数据量情况下习得拆分模型过程中需要的变换矩阵。
模型拆分的作用是提高并行度,以及将计算过程分布化,可以充分利用一个硬件平台上多个硬件平台上的资源进行神经网络的计算。这种拆分技术可以提高rnn模型的计算速度,也可以解决超长时序数据的计算问题。
尽管在优选实施例中,神经网络被具体化为lstm神经网络,但本领域技术人员应该理解,本发明的思想同样适用于更一般的人工神经网络、深度神经网络或循环神经网络(rnn)。
下面将根据本发明,给出更一般的方法与装置的实施例。
图6是根据本发明的深度神经网络数据处理方法的流程图。
如图6所示,根据本发明的深度神经网络数据处理方法600开始于步骤s610,将输入数据分解为多通道的输入数据。
具体地说,将输入数据根据其所包含的多方面的信息而分解为多通道的输入数据,其中,分解后的每一通道的输入数据用于表示原输入数据的多方面信息中的一个方面的信息。
更具体地说,将输入数据通过深度学习的方法分解为表示输入数据的各个方面信息的多通道的输入数据。
举例来说,如前所述,在步骤s610,可以通过使输入数据通过全连接或者卷积层操作之后而分解为多通道的输入数据。对于deepspeech这类通过cnn层进行特征提取的网络来说,输入数据的分解不必通过全连接或者卷积层操作来完成,而是在之前已经进行了分解。
在步骤s620,将神经网络参数拆分为与多通道的输入数据分别相对应的多通道的神经网络参数。
具体来说,将神经网络参数根据其所对应处理的输入数据的多方面的信息而拆分为多通道的神经网络参数,其中,拆分后的每一通道的神经网络参数用于相应地处理原输入数据的多方面信息中的一个方面的信息。
更具体地,将神经网络参数通过深度学习的方法拆分为处理对应于输入数据的各个方面信息的多通道的神经网络参数。
举例来说,如前所述,根据本发明的优选实施例,在步骤s620,首先采用原有参数作为常量,用机器学习的方法进行学习产生变换矩阵。然后将网络参数矩阵与所述变换矩阵相乘得到变换参数矩阵。再将变换参数矩阵拆分为与多通道的输入数据分别相对应的多个神经网络参数子矩阵。
这里的变换矩阵是为了弥补弥补参数矩阵拆分造成的精度损失,因此适合采用机器学习的方式来构造以便进行精度补偿。
在步骤s630,将多通道的输入数据与各自对应的多通道的神经网络参数分别进行计算,以分别得到多通道的输出数据。
在步骤s640步骤,将多通道的输出数据融合成为最终的输出数据。
可以采用简单的堆垛、求和、求平均三种方式中的任何一种来将多通道的输出数据进行融合,生成最终的输出数据。
而优选地,根据本发明的实施例的方法可以采用注意力机制对多通道的输出数据进行综合以得到最终的输出数据。在此过程中,可以参照序列循环神经网络(sequentialrnn)的结果进行综合。
根据之前的解释与描述,所述神经网络可以是循环神经网络(rnn),更具体而言,可以是长短时记忆(lstm)神经网络。
图7是根据本发明的深度神经网络数据处理装置的示意框图。
如图7中所示,根据本发明的深度神经网络数据处理装置700至少包括输入数据分解单元710,用于将输入数据分解为多通道的输入数据。输入数据分解单元710与图6中的输入数据分解步骤s610相对应。
具体来说,所述输入数据分解单元710可以用于将输入数据根据其所包含的多方面的信息而分解为多通道的输入数据,其中,分解后的每一通道的输入数据用于表示原输入数据的多方面信息中的一个方面的信息。
更具体地,所述输入数据分解单元710可以进一步用于将输入数据通过深度学习的方法分解为表示输入数据的各个方面信息的多通道的输入数据。
与方法相对应,举例来说,所述输入数据分解单元710可以进一步用于将输入数据通过全连接或者卷积层操作之后分解为多通道的输入数据。
装置700还包括网络参数拆分单元720,用于将神经网络参数拆分为与多通道的输入数据分别相对应的多通道的神经网络参数。网络参数拆分单元720与图6中的网络参数拆分步骤s620相对应。
具体来说,所述网络参数拆分单元720可以进一步用于将神经网络参数根据其所对应处理的输入数据的多方面的信息而拆分为多通道的神经网络参数,其中,拆分后的每一通道的神经网络参数用于相应地处理原输入数据的多方面信息中的一个方面的信息。
更具体地,所述网络参数拆分单元720可以进一步用于将神经网络参数通过深度学习的方法拆分为处理对应于输入数据的各个方面信息的多通道的神经网络参数。
实践中,所述网络参数拆分单元720可以进一步包括(均未示出):变换矩阵生成子单元,用于采用原有参数作为常量,用机器学习的方法学习产生变换参数矩阵的变换矩阵;变换参数矩阵生成子单元,用于将网络参数矩阵与所述变换矩阵相乘得到变换参数矩阵;变换参数矩阵拆分子单元,用于将变换参数矩阵拆分为与多通道的输入数据分别相对应的多个神经网络参数子矩阵。
装置700进一步包括多通道计算单元730,用于将多通道的输入数据与各自对应的多通道的神经网络参数分别进行计算,以分别得到多通道的输出数据。多通道计算单元730与图6中的多通道计算步骤s630相对应。
装置700还包括多通道输出融合单元740,用于将多通道的输出数据融合成为最终的输出数据。多通道输出融合单元740与图6中的多通道输出融合步骤s640相对应。
具体而言,所述多通道输出融合单元740可以进一步用于采用堆垛、求和、求平均三种方式中的任何一种来将多通道的输出数据进行融合,并生成最终的输出数据。
然而,优选地,所述多通道输出融合单元740可以进一步包括注意力机制子单元(参见图4中的“attention”模块),用于采用注意力机制对多通道的输出数据进行综合以得到最终的输出数据。
本领域普通技术人员应该认识到,本发明的方法可以实现为计算机程序。如上结合图6和7所述,根据上述实施例的方法可以执行一个或多个程序,包括指令来使得计算机或处理器执行结合附图所述的算法。这些程序可以使用各种类型的非瞬时计算机可读介质存储并提供给计算机或处理器。非瞬时计算机可读介质包括各种类型的有形存贮介质。非瞬时计算机可读介质的示例包括磁性记录介质(诸如软盘、磁带和硬盘驱动器)、磁光记录介质(诸如磁光盘)、cd-rom(紧凑盘只读存储器)、cd-r、cd-r/w以及半导体存储器(诸如rom、prom(可编程rom)、eprom(可擦写prom)、闪存rom和ram(随机存取存储器))。进一步,这些程序可以通过使用各种类型的瞬时计算机可读介质而提供给计算机。瞬时计算机可读介质的示例包括电信号、光信号和电磁波。瞬时计算机可读介质可以用于通过诸如电线和光纤的有线通信路径或无线通信路径提供程序给计算机。
因此,根据本发明,还可以提议一种计算机程序或一种计算机可读介质,用于记录可由处理器执行的指令,所述指令在被处理器执行时,使得处理器执行深度神经网络数据处理方法,包括如下操作:将输入数据分解为多通道的输入数据;将神经网络参数拆分为与多通道的输入数据分别相对应的多通道的神经网络参数;将多通道的输入数据与各自对应的多通道的神经网络参数分别进行计算,以分别得到多通道的输出数据;将多通道的输出数据进行融合,生成最终的输出数据。
上面已经描述了本发明的各种实施例和实施情形。但是,本发明的精神和范围不限于此。本领域技术人员将能够根据本发明的教导而做出更多的应用,而这些应用都在本发明的范围之内。
也就是说,本发明的上述实施例仅仅是为清楚说明本发明所做的举例,而非对本发明实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其他不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、替换或改进等,均应包含在本发明权利要求的保护范围之内。