一种适用于移动终端的二值神经网络前向传播框架的制作方法

文档序号:20756875发布日期:2020-05-15 17:29阅读:172来源:国知局
一种适用于移动终端的二值神经网络前向传播框架的制作方法

本发明涉及神经网络框架领域,更具体地,涉及一种适用于移动终端的二值神经网络前向传播框架。



背景技术:

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

在应用一个人工神经网络时,一般来说都分为4个步骤:1.根据需求训练相应神经网络;2.对训练好的神经网络进行调整和优化,得到合适部署的模型;3.在目标设备上加载模型进行前向传播,得到神经网络的计算结果;4.神经网络计算结果结合部分算法,得到整体最终结果。在传统人工神经网络中,通常使用全精度(32bit)的浮点数保存权重和进行计算,虽然可以保证较高精度,但是在手机等性能和功率有限的移动设备上。

现有的人工神经网络前向传播框架有tensorflow、caffe和mxnet。但是这些框架不支持在移动终端使用gpu进行人工神经网络的前向推理,只支持传统的电脑和服务器通过gpu进行人工网络的前向推理,而在移动终端上使用cpu进行传统的浮点人工神经网络前向传播的计算效率低、能耗大、速度慢。



技术实现要素:

本发明为克服上述现有技术中移动终端只使用cpu进行人工神经网络前向推理导致计算效率低、能耗大和速度慢的问题,提供一种适用于移动终端的二值神经网络前向传播框架,该框架在移动终端的gpu中运行并通过计算优化,提高计算效率、降低能耗和增加速度。

为解决上述技术问题,本发明采用的技术方案是:一种适用于移动终端的二值神经网络前向传播框架,包括模型转换模块和前向传播模块;所述模型转换模块用于将训练好的二值神经网络转换为本框架专用的模型,在转化过程中进行数据的处理和预计算;所述前向传播用于对转换后的二值神经网络模型进行前向传播计算;

所述前向传播模型包括数据储存单元、运算单元和优化单元;

所述数据储存单元使用个数、高、宽、通道数的数据布局方式存储数据并对数据进行压缩;节约大量的存储空间。

所述运算单元为gpu的计算单元,将二值化神经网络的操作层进行合并;节省数据i/o时间;

所述优化单元在运算单元中平衡线程读写数据量与计算量。

优选的,转换后的二值神经网络模型按照由粗到细的粒度表示成:网络,层,张量;在框架中,网络被分为一个一个的层结构,每一个层中拥有相应的参数,框架中的数据都被存储在张量中。网络框架使用自己的gpu内存管理与回收系统,在第一次前向传播时分配每一步所需要的内存资源,并在层的层面使用指针进行管理和分配,在第二次及以后的前向传播过程中重复使用无需分配。

由于本框架使用nhwc(个数、高、宽、通道数)的数据布局方式存储数据,用表示一个张量,其中h,w,c分别表示张量的高,宽,通道,并且有h,w,c使得h∈[0,h),w∈[0,w),c∈[0,c)。张量的数据块被存储在受框架管理的块内存中,并且按照行优先进行数据存储,也就是说,访问th,w,c可以使用公式(h×w+w)×c+c进行寻址访问。

优选的,对数据进行通道打包,通道数少于16,用0补全数据到16,通道数少于32,用0补全数据到32,不能被64整除的情况,将数据补齐到64的倍数的,将通道维度作为最后一个维度,为了在通道压缩之后,相邻像素的访问依然保持着连续,在进行卷积操作以及后续算法处理时,都不需要额外的数据存储布局的变换。

同时,由于使用的通道压缩的技术,image-to-column操作(即将卷积区域展开成为矩阵中一行的操作)内存访问字节数仅仅是压缩之前的字节访问数的16/32/64分之一。在运算单元进行运算的过程中,将原本的32-bit单精度浮点乘法运算替换成为1-bit逻辑计算,尽管使用了大量比特运算的乘法函数内核,但仍然具有4~20倍的性能提升。

优选的,所述运算单元在二值神经网络模型的运算中,将权值与数据都量化为{+1,-1},设向量向量为b二值数据映射到硬件编码的表示

二值神经网络模型的第一层运算公式如下:

二值神经网络模型的非第一层运算公式如下:

a·b=-(2×popcnt(a^b)–vec_len)

其中,popcnt操作为数出结果中的二进制位1的个数,vec_len为原始通道数量。

本发明在通道压缩过程中总是将通道数压缩为16/32/64的整数倍,所以不足16/32/64的整数倍的通道部分将会使用0进行补齐,这也带来了补齐的0会额外带来-1的效果,因此需要对神经网络的第一层进行特殊计算。经过上述公式,传统的乘法计算被逻辑计算代替,能够显著提高了运算速度。

优选的,所述运算单元对卷积层与批标准化batchnormalization(batchnormalization,bn)层进行整合,整合为卷积-bn层,整合公式如下:

x2=x1+b

而二值化操作是根据符号将原始数据转变为0或者1,公式如下:

其中,x4是结果,因此,得到初步整合公式如下:

式中,γ,μ,σ,β为bn层的参数;b为卷积层中的偏置参数;x1为卷积计算结果;x2为卷积计算结果加上偏置b;x3为bn层输出结果;x4为层整合结果。

通过层整合公式计算,可将bn层各项参数与卷积层偏置参数进行预计算,减少运行时的计算量和方便运行时符号判断进行二值化。同时,卷积层和bn层的整合,减少了中间数据的在读写入内存时的时间损耗,获得了速度提升。

优选的,进一步推导整合公式,得到:

x4=(axorb)orc

式中,x4为层整合结果;a为x1<的真值;b为γ≥0的真值;c为x1=ξ的真值;xx为卷积计算结果。

对初步整合公式进行进一步的推导,更符合gpu中向量方式的逻辑计算,实现高效的符号判断。

优选的,所述运算单元卷积-bn层和二值化层进行整合,整合为卷积-bn-二值化层。进一步节省层之间的中间数据在读写入内存时的时间损耗,获得大幅度速度提升。

优选的,在所述优化单元中,令运算单元计算时,使用向量化方式读写、计算数据,一次读取和计算多个数据,大幅提升了访存和计算性能;以及相邻线程计算相邻内存数据,合并了整个工作组的访存,减少了访存次数;内核函数交替读写内存和计算语句,避免不同线程在运行时出现访存或计算的冲突,合理分配和充分利用了gpu的计算单元,尽可能使性能最大化。

与现有技术相比,本发明的有益效果是:相比于传统的神经网络框架,提供了在手机上进行前向传播的方案,减少了存储占用,提高了运算速度,利用gpu提高了二值神经网络在手机上运行的能耗比,可以在移动终端上高效运行二值神经网络。

附图说明

图1是本发明的一种适用于移动终端的二值神经网络前向传播框架的执行流程图;

图2是本发明的一种适用于移动终端的二值神经网络前向传播框架的卷积-bn-二值化三层整合的示意图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。附图中描述位置关系仅用于示例性说明,不能理解为对本专利的限制。

下面通过具体实施例,并结合附图,对本发明的技术方案作进一步的具体描述:

实施例1

如图1-2所示为一种适用于移动终端的二值神经网络前向传播框架的实施例,包括模型转换模块和前向传播模块;模型转换模块用于将训练好的二值神经网络转换为本框架专用的模型,在转化过程中进行数据的处理和预计算;前向传播用于对转换后的二值神经网络模型进行前向传播计算;

其中,转换后的二值神经网络模型按照由粗到细的粒度表示成:网络,层,张量;在框架中,网络被分为一个一个的层结构,每一个层中拥有相应的参数,框架中的数据都被存储在张量中。网络框架使用自己的gpu内存管理与回收系统,在第一次前向传播时分配每一步所需要的内存资源,并在层的层面使用指针进行管理和分配,在第二次及以后的前向传播过程中重复使用无需分配。

前向传播模型包括数据储存单元、运算单元和优化单元;

数据储存单元使用个数、高、宽、通道数的数据布局方式存储数据并对数据进行压缩;对数据进行通道打包,通道数少于16,用0补全数据到16,通道数少于32,用0补全数据到32,不能被64整除的情况,将数据补齐到64的倍数的,将通道维度作为最后一个维度,为了在通道压缩之后,相邻像素的访问依然保持着连续,在进行卷积操作以及后续算法处理时,都不需要额外的数据存储布局的变换。

运算单元采用opencl计算内核函数(即由硬件指令集原生提供支持的高效计算函数),将二值化神经网络的操作层进行合并,节省数据i/o时间;进行操作层合并的过程如下:

运算单元对卷积层与batchnormalization(bn)层进行整合,整合为卷积-bn层,整合公式如下:

x2=x1+b

而二值化操作是根据符号将原始数据转变为0或者1,公式如下:

其中,x4是结果,因此,得到初步整合公式如下:

式中,γ,μ,σ,β为bn层的参数;b为卷积层中的偏置参数;x1为卷积计算结果;x2为卷积计算结果加上偏置b;x3为bn层输出结果;x4为层整合结果。

通过层整合公式计算,可将bn层各项参数与卷积层偏置参数进行预计算,减少运行时的计算量和方便运行时符号判断进行二值化。同时,卷积层和bn层的整合,减少了中间数据的在读写入内存时的时间损耗,获得了速度提升。

为了使得初步整合公式更符合gpu中向量方式的逻辑计算,实现高效的符号判断,进一步推导整合公式,得到:

x4=(axorb)orc

式中,x4为层整合结果;a为x1<的真值;b为γ≥0的真值;c为x1=ξ的真值;x1为卷积计算结果。

运算单元将一个线程一次计算8个卷积核,得到8个计算结果,并打包到一个字节(现代计算机和手机中最小存储单位)中,从而将二值化层进一步整合,将卷积-bn层和二值化层整合为卷积-bn-二值化层。进一步节省层之间的中间数据在读写入内存时的时间损耗,获得大幅度速度提升。

另外的,运算单元在二值神经网络模型的运算中,将权值与数据都量化为{+1,-1},设向量向量为b二值数据映射到硬件编码的表示

二值神经网络模型的第一层运算公式如下:

二值神经网络模型的非第一层运算公式如下:

a·b=-(2×popcnt(a^b)–vec_len)。

本发明在通道压缩过程中总是将通道数压缩为16/32/64的整数倍,所以不足16/32/64的整数倍的通道部分将会使用0进行补齐,这也带来了补齐的0会额外带来-1的效果,因此需要对神经网络的第一层进行特殊计算。经过上述公式,传统的乘法计算被逻辑计算代替,能够显著提高了运算速度。

同时,由于使用的通道压缩的技术,image-to-column操作内存访问字节数仅仅是压缩之前的字节访问数的16/32/64分之一。在运算单元进行运算的过程中,将原本的32-bit单精度浮点乘法运算替换成为1-bit逻辑计算,尽管使用了大量比特运算的乘法函数内核,但仍然具有4~20倍的性能提升。

优化单元在运算单元中平衡线程读写数据量与计算量。优化单元中,令运算单元计算时,使用向量化方式读写、计算数据,一次读取和计算多个数据,大幅提升了访存和计算性能;以及相邻线程计算相邻内存数据,合并了整个工作组的访存,减少了访存次数;内核函数交替读写内存和计算语句,避免不同线程在运行时出现访存或计算的冲突,合理分配和充分利用了gpu的计算单元,尽可能使性能最大化。

本实施例的有益效果:先通过深度学习框架学习所需模型,再利用这些学习到的模型来做规划,采用无监督学习方式,高效学习数据总的规律,能够解决现实问题中复杂问题进行建模困难,难以进行动作规划的问题。

使用opencl编程,调用移动终端中并行计算能力更强的gpu设备,应用了多种opencl编程技巧与共享数据结构设计,优化数据存储结构,提升了二值神经网络前向传播部分的计算速度,相比于目前常见框架在手机上采用的cpu+浮点神经网络的前向传播方案上百毫秒级别甚至秒级别的运算时间,本框架仅仅花费原本数分之一甚至数十分之一时间就可以完成前向传播计算。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

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