一种用于执行batchnormalization运算的装置和方法与流程

文档序号:12906538阅读:311来源:国知局
一种用于执行batch normalization运算的装置和方法与流程

本发明涉及人工神经网络技术,具体地涉及一种用于执行人工神经网络中batchnormalization正向和反向运算的装置和方法。



背景技术:

多层人工神经网络被广泛应用于模式识别,图像处理,函数逼近和优化计算等领域,多层人工神经网络在近年来由于其较高的识别准确度和较好的可并行性,受到学术界和工业界越来越广泛的关注,而多层人工神经网络中的batchnormalization运算因为其可以加速神经网络训练速度,提高识别精度的特性,被越来越多的运用到了多层神经网络中。

一种支持batchnormalization运算的已知方法是使用通用处理器。该方法通过使用通用寄存器堆和通用功能部件执行通用指令来支持上述算法。该方法的缺点之一是单个通用处理器的运算性能较低,无法满足通常的多层人工神经网络运算的性能需求。而多个通用处理器并行执行时,通用处理器之间相互通信又成为了性能瓶颈。另外,通用处理器需要把多层人工神经网络正向运算译码成一长列运算及访存指令序列,处理器前端译码带来了较大的功耗开销。

另一种支持batchnormalization的已知方法是使用图形处理器(gpu)。该方法通过使用通用寄存器堆和通用流处理单元执行通用simd指令来支持上述算法。由于gpu是专门用来执行图形图像运算以及科学计算的设备,没有对多层人工神经网络batchnormalization运算的专门支持,仍然需要大量的前端译码工作才能执行多层人工神经网络运算,带来了大量的额外开销。另外gpu只有较小的片上缓存,多层人工神经网络batchnormalization的模型数据需要反复从片外搬运,片外带宽成为了主要性能瓶颈。并且batchnormalization运算有大量的例如求和的归一化运算,gpu的并行架构并不适合做这种大量归一化的运算。



技术实现要素:

本发明的一个方面提供了一种用于执行人工神经网络batchnormalization运算的装置,包括指令存储单元、控制器单元、数据访问单元、运算模块,其中:指令存储单元用于通过数据访问单元读入指令并缓存读入的指令;控制器单元用于从指令存储单元读取指令,并将该指令译码成控制运算模块的微指令;数据访问单元用于从外部地址空间向运算模块的相应数据缓存单元中写数据或从所述数据缓存单元向外部地址空间读数据;运算模块用于对数据的具体计算。

本发明的另一个方面提供了一种使用上述装置执行batchnormalization正向运算的方法。在使用过程中,假设x是每一个输入神经元元素,y是输出元素。学习参数alpha、beta、极小常数eps、均值e[x]、方差var[x]均为训练过程中得到的常数,该装置并行的完成batchnormalization正向y=f(x)=alpha*(x-e[x])/sqrt(var(x)+eps)+beta计算过程得到输出神经元。在训练过程中,正向运算需要动态的计算均值e[x]、方差var[x]。通过本装置的运算模块完成均值、方差计算过程中的累加和(归一化)运算,从而计算训练过程中每一次迭代的均值和方差。

本发明的另一方面提供了一种使用上述装置执行batchnormalization反向运算的方法。假设一个像素点传入的梯度为dl/dy,正向过程输出为y,则经过batchnormalization反向传播出的梯度dl/dx=(alpha/sqrt(var(x)+eps))*(dl/dy-mean(dl/dy)-mean(dl/dy*y)*y)学习参数的alpha的梯度:dl/dalpha=(∑dl/dy)*y,学习参数beta的梯度:dl/dbeta=∑dl/dy。batchnormalization的反向过程通过运算单元并行的完成神经元的归一化运算例如取均值、方差等。

本发明可以应用于以下(包括但不限于)场景中:数据处理、机器人、电脑、打印机、扫描仪、电话、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备等各类电子产品;飞机、轮船、车辆等各类交通工具;电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、 燃气灶、油烟机等各类家用电器;以及包括核磁共振仪、b超、心电图仪等各类医疗设备。

本发明通过采用用于执行batchnormalization运算的装置和指令集,解决了cpu和gpu运算性能不足,前端译码开销大的问题。有效提高了对batchnormalization正反向运算的支持。

本发明通过采用针对batchnormalization运算的专用片上缓存,充分挖掘了输入神经元和中间数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络正向运算性能瓶颈的问题。

本发明通过采用针对batchnormalization运算的专用运算单元较好的平衡了并行和串行之间的关系。避免了cpu架构只是串行运算,数据规模较大时速度较慢,gpu架构只是并行运算,处理不好归一化运算的弱点。本发明中数据存储单元和运算单元相配合可以较好的平衡归一化串行运算和并行运算。

附图说明

为了更完整地理解本发明及其优势,现在将参考结合附图的以下描述,其中:

图1示出了根据本发明实施例的用于执行batchnormalization运算的装置的整体结构的示例框图。

图2示出了根据本发明实施例的用于执行batchnormalization运算的装置中运算模块结构的示例框图。

图3示出了根据本发明实施例的batchnormalization运算过程的示例框图。

图4示出了根据本发明实施例的batchnormalization运算的流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。

batchnormalization运算包括正向和反向两部分。在人工神经网络训练过程中batchnormalization运算的正向和反向都需要运用,而在人工神经网络使用过程中仅执行batchnormalization运算的正向过程。在人工神经网络使用过程中使用了训练过程得到的参数,例如batchnormalization运算中的均值、方差等数据不必再重复计算。

图1示出了根据本发明用于执行人工神经网络batchnormalization运算的装置的整体结构图。如图1所示,该装置包括指令存储单元1、控制器单元2、数据访问单元3和运算模块4。指令存储单元1、控制器单元2、数据访问单元3、运算模块4均可以通过硬件电路(例如包括但不限于fpga、cgra、专用集成电路asic、模拟电路和忆阻器等)实现。

指令存储单元1通过数据访问单元3读入指令并缓存读入的指令。指令存储单元可以通过各种不同存储器件(sram、edram、dram、忆阻器、3d-dram或非易失存储等)实现。

控制器单元2从指令存储单元1中读取指令,将指令译码成控制其他单元或模块行为的微指令,然后将各自的微指令分发至各个单元或模块,所述其他单元或模块例如数据访问单元3、运算模块4等。

数据访问单元3能够访问外部地址空间,直接向装置内部的各个缓存单元读写数据,完成数据的加载和存储。

图2示出了根据本发明实施例的用于执行人工神经网络batchnormalization运算的装置中运算模块4的结构的示例框图。如图2所示,运算模块4包括运算单元41、数据依赖关系判定单元42、神经元缓存单元43和中间值缓存单元44。

运算单元41接收控制器单元2发出的微指令并进行算数逻辑运算。

数据依赖关系判断单元42负责计算过程中对神经元缓存单元的读写操作。数据依赖关系判断单元42执行读写操作之前会首先保证指令之间所用的数据不存在读写一致性冲突。例如,所有发往数据依赖关系单元42的微指令都会被存入数据依赖关系单元42内部的指令队列里,在该队列中,读指令的读取数据的范围如果与队列位置靠前的写指令写数据的范围发生冲突,则该指令必须等到所依赖的写指令被执行后才能够执行。

神经元缓存单元43缓存该运算模块4的输入神经元向量数据和输出神经元值数据。

中间值缓存单元44缓存该运算模块4在计算过程中需要的中间值数据。例如运算过程中计算的部分和、部分平方和等数据。对于每一个运算模块4,中间值缓存单元44会存储batchnormalization运算过程的中间值数据。例如正向的batchnormalization操作,在人工神经网络的使用过程中。假设x是每一个输入神经元数据,y是输出神经元数据。学习参数alpha、beta,这两个参数在反向训练过程中不断更新,用于之后计算输出神经元数据y的公式中。极小常数eps,代表一个极小量数据,通常可以用10的-5次方代表,实际使用中也可以设为0。均值e[x]代表输入数据的神经元数据x以batch大小为一个总量所求出的均值,var[x]表示相应的输入神经元数据x以batch大小为一个总量所求出的方差。在人工神经网络算法中,输入神经元数据通常有四个维度:输入的批量即batch(也有叫number)大小、输入的频道数目即channel、输入的高height、输入的宽width,这四个维度决定了输入数据x的总数目,e[x]、var[x]就是以batch为总数目计算另外三个维度上数据的均值、方差。运算单元41可以并行的完成y=f(x)=alpha*(x-e[x])/sqrt(var(x)+eps)+beta计算过程,sqrt代表开方操作,该过程的常数数据可以存储在中间值缓存单元中,得到的结果返回到数据访问单元得到输出神经元。在人工神经网络算法中,输入神经元数据通常有四个维度:输入的批量为batch大小、输入的频道数目为channel、输入的为高height、输入的宽为width,这四个维度决定了输入数据x的总数目,e[x]、var[x]就是以batch为总数目计算另外三个维度上数据的均值、方差。并且,由于该装置的数据存储方式是按照channel、height、weight三个维度存储的,该装置在读取输入神经元数据x时可以依序读入完成之后的求和、求均值、求方差操作。

对于batchnormalization的正向运算过程,在batchnormalization运算过程中的均值和方差可以使用已经计算好的均值方差e(x)、var(x),将该参数作为常数存储和运算使用,完成之后的计算过程在batchnormalization运算过程中的均值和方差也可以在正向过程中根据输入数据计算。运算单元要计算每一次的均值与方差数据。在每一次训练迭代过程中,输入神经 元经由运算单元计算均值和方差,将该部分数据放于中间值缓存单元44中,用于该次迭代过程的f(x)后续计算。

本发明还提供在前述装置上执行人工神经网络batchnormalization运算的指令集。指令集中包括config指令、compute指令、io指令、nop指令、jump指令和move指令,其中:

config指令在batchnormalization计算开始前配置当前层计算需要的各种常数;

compute指令完成batchnormalization过程的算术逻辑计算;

io指令实现从外部地址空间读入计算需要的输入数据以及在计算完成后将数据存回至外部空间;

nop指令负责清空当前装置内部所有微指令存储队列中的微指令,保证nop指令之前的所有指令全部执行完毕。nop指令本身不包含任何操作;

jump指令负责控制将要从指令存储单元读取的下一条指令地址的跳转,用来实现控制流的跳转;

move指令负责将装置内部地址空间某一地址的数据搬运至装置内部地址空间的另一地址,该过程独立于运算单元,在执行过程中不占用运算单元的资源。

图3示出了根据本发明实施例的人工神经网络batchnormalization正向和反向运算的示例框图。对于公式out=(in-middle)/middle,in是输入神经元数据,out是输出神经元数据。middle是运算过程中的中间值,该中间值是均值、方差等需要做归一化运算的中间结果,通过运算模块4并行的计算归一化过程中的部分中间值[middlel,...,middlen],存储到中间值缓存单元44。之后运算模块4对每一个输入神经元数据in用中间值middle并行的计算出输出神经元数据out,得到最后的输出向量。

图4示出根据一个实施例的训练过程中的batchnormalization正向运算流程图。该流程图描述利用本发明的装置和指令集实现图3所示的batchnormalization运算的正向运算的过程。

在步骤s1,在指令存储单元1的首地址处预先存入一条io指令。

在步骤s2,运算开始,控制器单元2从指令存储单元1的首地址读取该条io指令,根据译出的微指令,数据访问单元3从外部地址空间读取相应的所有batchnormalization正向运算指令,并将其缓存在指令存储单元1中。

在步骤s3,控制器单元2接着从指令存储单元读入下一条io指令,根据译出的微指令,数据访问单元3从外部地址空间读取运算模块4需要的所有数据(例如,包括输入神经元向量、batch大小、学习参数alpha、beta、极小值eps、均值、方差等)至运算模块4的神经元缓存单元43。

在步骤s4,控制器单元2接着从指令存储单元读入下一条config指令,根据译出的微指令,装置配置batchnormalization运算。例如,本次正向运算过程是使用计算好的均值方差,还是根据输入计算均值方差。

在步骤s5,控制器单元2接着从指令存储单元读入下一条compute指令,根据译出的微指令,运算模块4从神经元缓存单元读取输入神经元向量,计算输入神经元的均值和方差存入中间值缓存单元中。

在步骤s6,运算模块4根据compute指令译出的微指令将输入神经元缓存单元和中间值缓存单元中的数据完成减去均值后除以方差与极小量eps和的平方根操作,将结果存回中间值缓存单元。

在步骤s7,运算模块4根据compute指令译出的微指令,从神经元缓存单元43读取学习参数alpha,与中间值相乘后加上学习参数beta返回至神经元缓存。

在步骤s8,控制器单元接着从指令存储单元读入下一条io指令,根据译出的微指令,数据访问单元3将神经元缓存单元43中的输出神经元向量存至外部地址空间指定地址,运算结束。

对于使用过程中的batchnormalizaiton运算的正向过程与训练过程中的batchnormalization运算的正向过程区别在于步骤s4中配置使用常数均值和方差,不需要每次动态计算,也就是去掉了步骤s5。其他与图4相同。

对于batchnormalization运算的反向过程与上述的正向过程类似。区别在于操作的数据不同。假设一个像素点传入的梯度为dl/dy,反向传出的梯度是dl/dx,正向过程输出为y,其余参数表示含义与正向过程相同,则经过batchnormalization反向传播出的梯度 dl/dx=(alpha/sqrt(var(x)+eps))*(dl/dy-mean(dl/dy)-mean(dl/dy*y)*y),其中mean是取均值操作。学习参数的alpha的梯度:dl/dalpha=(∑dl/dy)*y,学习参数beta的梯度:dl/dbeta=∑dl/dy,通过这两个梯度更新学习参数的数值。batchnormalization的反向过程通过运算单元归一化运算梯度数据例如取均值、方差等。之后运算单元并行的完成公式中其余操作。

通过采用用于执行batchnormalization运算的装置和指令集,解决了cpu和gpu运算性能不足,前端译码开销大的问题。有效提高了对batchnormalization正反向运算的支持。

通过采用针对batchnormalization运算的专用片上缓存,充分挖掘了输入神经元和中间数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络正向运算性能瓶颈的问题。

通过采用针对batchnormalization运算的专用运算单元较好的平衡了并行和串行之间的关系。避免了cpu架构只是串行运算,数据规模较大时速度较慢,gpu架构只是并行运算,处理不好归一化运算的弱点。本发明中数据存储单元和运算单元相配合可以较好的平衡归一化串行运算和并行运算。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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