卷积神经网络计算的方法和装置与流程

专利2022-06-29  84


本申请涉及人工智能领域,并且更具体地,涉及一种卷积神经网络计算的方法和装置。



背景技术:

人工智能(artificialintelligence,ai)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式作出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。人工智能领域的研究包括机器人,自然语言处理,计算机视觉,决策与推理,人机交互,推荐与搜索,ai基础理论等。

在卷积神经网络中的计算中,winograd是一种有效的加速算法,它的优势是可以减少乘法运算的数量,同时增加的额外运算(例如,加、减、移位)代价很小,因此,可明显提升计算性能。但是利用winograd算法,计算引擎的输入数据和权重带宽需求较大,造成硬件资源开销较大,计算的效率较低。



技术实现要素:

本申请提供一种卷积神经网络计算的方法和装置,有效的降低了计算引擎的输入数据和权重带宽的大小,降低了计算引擎单次计算时所需的资源和计算量,从而提高计算速率。

第一方面,提供了一种卷积神经网络计算的方法,卷积神经网络的第i层卷积层包括k个卷积核,每个卷积核有m个权值通道,每一个权值通道对应一个卷积核矩阵(权重矩阵),m个权值通道对应m个输入数据矩阵,m个输入数据矩阵的数据变换矩阵的每一行有x个非零元素,该方法包括将第j个输入数据矩阵的卷积数据框中的x行数据进行winograd变换,j为小于或者等于m的正整数,x小于该第j个输入数据矩阵的卷积数据框的行数。将经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到第j个输入数据矩阵的卷积数据框的中间结果;将m个权值通道对应的该中间结果进行累加,得到累加结果;将累加结果进行winograd反变换,得到该第j个输入数据矩阵的卷积数据框的卷积结果;分别获按照行向维度和列向维度获取第j个输入数据矩阵的下一个卷积数据框,直到待第j个输入数据矩阵全部计算完毕。

本申请提供的卷积神经网络计算的方法,由于每次只需要获取两行数据进行winograd变换,每次计算时将winograd变换后的两行数据与一行winograd变换后的权重进行计算,可以降低每次计算时数据的输入量和计算量,降低计算单元的输入带宽和计算带宽,提高了计算而得速率。并且,由于每次计算时只将两行数据进行winograd变换,得到变换后的数据并存储起来,每次只需获取一行winograd变换后的权重存储起来,降低了卷积神经网络每次计算时的数据存储量,降低了存储的功耗。

在第一方面一种可能的实现方式中,x等于2,该将第j个输入数据矩阵的卷积数据框中的两行数据进行winograd变换,包括:将该第j个输入数据矩阵的卷积数据框中的第一行和第三行数据进行winograd变换,得到第一变换结果;将该第j个输入数据矩阵的卷积数据框中的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;将该第j个输入数据矩阵的卷积数据框中的第二行和第四行数据进行winograd变换,得到第四变换结果。

在第一方面一种可能的实现方式中,该将经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的矩阵的一行数据进行点乘运算,包括:将该第一变换结果与经过winograd变换后的该第j个卷积核矩阵中的第一行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第一计算结果;将该第二变换结果与经过winograd变换后的该第j个卷积核矩阵中的第二行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第二计算结果;将该第三变换结果与经过winograd变换后的该第j个卷积核矩阵中的第三行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第三计算结果;将该第四变换结果与经过winograd变换后的该第j个卷积核矩阵中的第四行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第四计算结果。

在第一方面一种可能的实现方式中,该将该m个权值通道对应的该中间结果进行累加,得到累加结果,包括:将该m个权值通道中每个权值通道对应的该第一计算结果相加,得到第一累加结果;将该m个权值通道中每个权值通道对应的该第二计算结果相加,得到第二累加结果;将该m个权值通道中每个权值通道阵对应的该第三计算结果相加,得到第三累加结果;将该m个权值通道中每个权值通道对应的该第四计算结果相加,得到第四累加结果。

在第一方面一种可能的实现方式中,该将该累加结果进行winograd反变换,得到该第j个输入数据矩阵的卷积数据框的卷积结果,包括:分别将该第一累加结果、该第二累加结果、该第三累加结果、该第四累加结果与反变换矩阵的转置矩阵相乘,分别得到第一反变换结果、第二反变换结果、第三反变换结果和第四反变换结果;将该第一反变换结果、该第二反变换结果、该第三反变换结果和该第四反变换结果进行累加,得到该第j个数据矩阵的卷积数据框的卷积结果。

在第一方面一种可能的实现方式中,该第j个输入数据矩阵的卷积数据框的大小为4×4的数据矩阵,该卷积核矩阵为3×3的矩阵。

第二方面,提供了一种卷积神经网络计算的装置,该卷积神经网络的第i层卷积层包括k个卷积核,每个卷积核有m个权值通道,该m个权值通道对应m个输入数据矩阵,该m个输入数据矩阵的数据变换矩阵中每一行有x个非零元素,该装置包括:

数据存储器,用于存储第j个输入数据矩阵的卷积数据框;

向量计算单元:用于对该第j个输入数据矩阵的卷积数据框中的x行数据进行winograd变换,j为小于或者等于m的正整数,x小于该第j个输入数据矩阵的卷积数据框的行数;

权重存储器,用于存储已经进行winograd变换后的该第j个卷积核矩阵;

运算电路,用于对经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的中间结果;该运算电路还用于:对该m个权值通道对应的该中间结果进行累加,得到累加结果;该向量计算单元还用于:对该累加结果进行winograd反变换,得到该第j个输入数据矩阵的卷积数据框的卷积结果。

在第二方面一种可能的实现方式中,该向量计算单元包括winograd变换单元,该winograd变换单元用于:对该第j个输入数据矩阵的卷积数据框中的第一行和第三行数据进行winograd变换,得到第一变换结果;对该第j个输入数据矩阵的卷积数据框中的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;对该第j个输入数据矩阵的卷积数据框中的第二行和第四行数据进行winograd变换,得到第四变换结果。

在第二方面一种可能的实现方式中,该运算电路具体用于:对该第一变换结果与经过winograd变换后的该第j个卷积核矩阵中的第一行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第一计算结果;对该第二变换结果与经过winograd变换后的该第j个卷积核矩阵中的第二行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第二计算结果;对该第三变换结果与经过winograd变换后的该第j个卷积核矩阵中的第三行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第三计算结果;对该第四变换结果与经过winograd变换后的该第j个卷积核矩阵中的第四行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第四计算结果。

在第二方面一种可能的实现方式中,该运算电路具体用于:该m个权值通道中每个权值通道对应的该第一计算结果相加,得到第一累加结果;将该m个权值通道中每个权值通道对应的该第二计算结果相加,得到第二累加结果;将该m个权值通道中每个权值通道阵对应的该第三计算结果相加,得到第三累加结果;将该m个权值通道中每个权值通道对应的该第四计算结果相加,得到第四累加结果。

在第二方面一种可能的实现方式中,该向量计算单元还包括winograd反变换单元,该winograd反变换单元用于:将该第一累加结果、该第二累加结果、该第三累加结果、该第四累加结果与反变换矩阵的转置矩阵相乘,分别得到第一反变换结果、第二反变换结果、第三反变换结果和第四反变换结果;将该第一反变换结果、该第二反变换结果、该第三反变换结果和该第四反变换结果进行累加,得到该第j个数据矩阵的卷积数据框的卷积结果。

在第二方面一种可能的实现方式中,该第j个输入数据矩阵的卷积数据框的大小为4×4的数据矩阵,该卷积核矩阵为3×3的矩阵。

第三方面,提供了一种卷积神经网络计算的装置,该卷积神经网络的第i层卷积层包括k个卷积核,每个卷积核有m个权值通道,该m个权值通道对应m个输入数据矩阵,该m个输入数据矩阵的数据变换矩阵中每一行有x个非零元素其特征在于,该装置包括:变换单元,用于对第j个输入数据矩阵的卷积数据框中的x行数据进行winograd变换,j为小于或者等于m的正整数,x小于该第j个输入数据矩阵的卷积数据框的行数计算单元,用于对经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的中间结果;该计算单元还用于对该m个权值通道对应的该中间结果进行累加,得到累加结果;反变换单元,用于对该累加结果进行winograd反变换,得到该第j个输入数据矩阵的卷积数据框的卷积结果。

在第三方面一种可能的实现方式中,x等于2,该变换单元具体用于:对该第j个输入数据矩阵的卷积数据框中的第一行和第三行数据进行winograd变换,得到第一变换结果;对该第j个输入数据矩阵的卷积数据框中的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;对该第j个输入数据矩阵的卷积数据框中的第二行和第四行数据进行winograd变换,得到第四变换结果。

在第三方面一种可能的实现方式中,该计算单元具体用于:对该第一变换结果与经过winograd变换后的该第j个卷积核矩阵中的第一行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第一计算结果;对该第二变换结果与经过winograd变换后的该第j个卷积核矩阵中的第二行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第二计算结果;对该第三变换结果与经过winograd变换后的该第j个卷积核矩阵中的第三行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第三计算结果;对该第四变换结果与经过winograd变换后的该第j个卷积核矩阵中的第四行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第四计算结果。

在第三方面一种可能的实现方式中,该计算单元具体用于:该m个权值通道中每个权值通道对应的该第一计算结果相加,得到第一累加结果;将该m个权值通道中每个权值通道对应的该第二计算结果相加,得到第二累加结果;将该m个权值通道中每个权值通道阵对应的该第三计算结果相加,得到第三累加结果;将该m个权值通道中每个权值通道对应的该第四计算结果相加,得到第四累加结果。

在第三方面一种可能的实现方式中,该反变换单元具体用于:分别将该第一累加结果、该第二累加结果、该第三累加结果、该第四累加结果与反变换矩阵的转置矩阵相乘,分别得到第一反变换结果、第二反变换结果、第三反变换结果和第四反变换结果;将该第一反变换结果、该第二反变换结果、该第三反变换结果和该第四反变换结果进行累加,得到该第j个数据矩阵的卷积数据框的卷积结果。

在第三方面一种可能的实现方式中,该第j个输入数据矩阵的卷积数据框的大小为4×4的数据矩阵,该卷积核矩阵为3×3的矩阵。

第四方面,提供了一种服务器,服务器的结构中包括处理器。该处理器被配置为支持通信设备执行上述第一方面及第一方面的任意可能的实现方式中的功能,在一个可能的设计中,该服务器还可以包括收发器,用于支服务器接收或发送信息。

在一个可能的设计中,该服务器还可以包括存储器,该存储器用于与处理器耦合,保存通信设备中必要的程序指令和数据。

或者说,该服务器包括存储器和处理器,该存储器用于存储计算机程序,该处理器用于从存储器中调用并运行该计算机程序,使得服务器执行上述第一方面及第一方面的任意可能的实现方式中的任一种神经网络参数初始化的方法。

第五方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序(也可以称为代码,或指令),当所述计算机程序被运行时,使得计算机执行上述第一方面及第一方面的任意可能的实现方式中的任一种卷积神经网络计算的方法。

第六方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有程序,所述程序使得计算机中的服务器执行上述第一方面及第一方面的任意可能的实现方式中的任一种卷积神经网络计算的方法。

或者说,该计算机可读存储介质用于储存为上述服务器所用的计算机软件指令,其包含用于执行上述第一方面及第一方面的任意可能的实现方式中的任一种卷积神经网络计算的方法所设计的程序。

第七方面,提供了一种芯片系统,该芯片系统包括处理器,用于支持计算机中的服务器实现上述第一方面及第一方面的任意可能的实现方式中所涉及的功能。

附图说明

图1是卷积神经网络的一种示意性结构图。

图2是卷积神经网络的另一种示意性结构图。

图3是本申请的一个实施例卷积神经网络计算的方法的示意性流程图。

图4是本申请的另一个实施例卷积神经网络计算的方法的示意性流程图。

图5是本申请的又一个实施例卷积神经网络计算的方法的示意性流程图。

图6是本申请实施例提供的卷积神经网络计算的装置的示意性框图。

图7是本申请实施例提供的卷积神经网络计算的装置的示意性框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

卷积神经网络(convolutionalneuralnetwork,cnn)是一种带有卷积结构的深度神经网络,是一种深度学习(deeplearning)架构,深度学习架构是指通过机器学习的算法,在不同的抽象层级上进行多个层次的学习。作为一种深度学习架构,cnn是一种前馈(feed-forward)人工神经网络,该前馈人工神经网络中的各个神经元对输入其中的图像中的重叠区域作出响应。

图1是卷积神经网络的示意性结构图,如图1所示,卷积神经网络100可以包括输入层110,卷积层/池化层120,其中池化层为可选的,以及神经网络层130。

卷积层:

如图1所示卷积层/池化层120可以包括如示例121-126层,在一种实现中,121层为卷积层,122层为池化层,123层为卷积层,124层为池化层,125为卷积层,126为池化层;在另一种实现方式中,121、122为卷积层,123为池化层,124、125为卷积层,126为池化层。即卷积层的输出可以作为随后的池化层的输入,也可以作为另一个卷积层的输入以继续进行卷积操作。

以卷积层121为例,卷积层121可以包括很多个卷积算子,卷积算子也称为卷积核,其在图像处理中的作用相当于一个从输入图像矩阵中提取特定信息的过滤器,卷积算子本质上可以是一个权重矩阵(或者也可以称为卷积核矩阵),这个权重矩阵通常被预先定义,在对图像进行卷积操作的过程中,权重矩阵通常在输入图像上沿着水平方向一个像素接着一个像素(或两个像素接着两个像素……这取决于步长(stride)的取值)的进行处理,从而完成从图像中提取特定特征的工作。该权重矩阵的大小应该与图像的大小相关,需要注意的是,权重矩阵的纵深维度(depthdimension)和输入图像的纵深维度是相同的,在进行卷积运算的过程中,权重矩阵会延伸到输入图像的整个深度。因此,和一个单一的权重矩阵进行卷积会产生一个单一纵深维度的卷积化输出,但是大多数情况下不使用单一权重矩阵,而是应用维度相同的多个权重矩阵。每个权重矩阵的输出被堆叠起来形成卷积图像的纵深维度。不同的权重矩阵可以用来提取图像中不同的特征,例如一个权重矩阵用来提取图像边缘信息,另一个权重矩阵用来提取图像的特定颜色,又一个权重矩阵用来对图像中不需要的噪点进行模糊化……该多个权重矩阵维度相同,经过该多个维度相同的权重矩阵提取后的特征图维度也相同,再将提取到的多个维度相同的特征图合并形成卷积运算的输出。

这些权重矩阵中的权重值在实际应用中需要经过大量的训练得到,通过训练得到的权重值形成的各个权重矩阵可以从输入图像中提取信息,从而帮助卷积神经网络100进行正确的预测。

当卷积神经网络100有多个卷积层的时候,初始的卷积层(例如卷积层121)往往提取较多的一般特征,该一般特征也可以称之为低级别的特征;随着卷积神经网络100深度的加深,越往后的卷积层(例如126)提取到的特征越来越复杂,比如高级别的语义之类的特征,语义越高的特征越适用于待解决的问题。

池化层:

由于常常需要减少训练参数的数量,因此卷积层之后常常需要周期性的引入池化层,即如图1中所示例的121-126各层,可以是一层卷积层后面跟一层池化层,也可以是多层卷积层后面接一层或多层池化层。在图像处理过程中,池化层的唯一目的就是减少图像的空间大小。池化层可以包括平均池化算子和/或最大池化算子,以用于对输入图像进行采样得到较小尺寸的图像。平均池化算子可以在特定范围内对图像中的像素值进行计算产生平均值。最大池化算子可以在特定范围内取该范围内值最大的像素作为最大池化的结果。另外,就像卷积层中用权重矩阵的大小应该与图像大小相关一样,池化层中的运算符也应该与图像的大小相关。通过池化层处理后输出的图像尺寸可以小于输入池化层的图像的尺寸,池化层输出的图像中每个像素点表示输入池化层的图像的对应子区域的平均值或最大值。

神经网络层130:

在经过卷积层/池化层120的处理后,卷积神经网络100还不足以输出所需要的输出信息。因为如前所述,卷积层/池化层120只会提取特征,并减少输入图像带来的参数。然而为了生成最终的输出信息(所需要的类信息或别的相关信息),卷积神经网络100需要利用神经网络层130来生成一个或者一组所需要的类的数量的输出。因此,在神经网络层130中可以包括多层隐含层(如图1所示的131、132至13n)以及输出层140,该多层隐含层中所包含的参数可以根据具体的任务类型的相关训练数据进行预先训练得到,例如该任务类型可以包括图像识别,图像分类,图像超分辨率重建等等。

在神经网络层130中的多层隐含层之后,也就是整个卷积神经网络100的最后层为输出层140,该输出层140具有类似分类交叉熵的损失函数,具体用于计算预测误差,一旦整个卷积神经网络100的前向传播(如图1由110至140的传播为前向传播)完成,反向传播(如图1由140至110的传播为反向传播)就会开始更新前面提到的各层的权重值以及偏差,以减少卷积神经网络100的损失及卷积神经网络100通过输出层输出的结果和理想结果之间的误差。

需要说明的是,如图1所示的卷积神经网络100仅作为一种卷积神经网络的示例,在具体的应用中,卷积神经网络还可以以其他网络模型的形式存在,例如,如图2所示的多个卷积层/池化层并行,将分别提取的特征均输入给全神经网络层130进行处理。

示例性地,本申请提供的卷积神经网络计算的方法能够应用于图1和图2所示的深度神经网络。

示例性地,本申请提供的卷积神经网络计算的方法还能够应用于非全连接的神经网络等。

应理解,本申请中,所涉及的卷积神经网络的具体概念是:一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activationfunction)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。本申请中对神经网络的具体形式并不限制,可以是现有技术中的任意一种神经网络。

在一些应用中,卷积神经网络被用于执行机器学习任务,接收各种数据输入并且基于输入生成各种分数、分类或回归输出等。

例如,如果卷积神经网络的输入是从图像中提取的图像或特征,则神经网络针对给定图像生成的输出可以是针对对象类别的集合中的每一个对象类别的分数,其中,每个分数表示该图像包含属于该类别的对象的图像的概率或可能性。

又例如,如果卷积对神经网络的输入是互联网资源(例如,web页面)、文档或文档的部分或从互联网资源、文档或文档的部分提取的特征,则由神经网络对于给定互联网资源、文档或文档的部分生成的输出可以是针对主题集合中的每一个主题的分数,其中,每个分数表示互联网资源、文档或文档的部分与该主题相关的概率或可能性。

作为另一个示例,如果对卷积神经网络的输入是特定交互内容(例如,包含到其他内容的超链接的内容)的上下文的特征,则由神经网络生成的输出可以是代表该特定内容将被点击或与之交互的概率或可能性的分数。

作为另一个示例,如果对卷积神经网络的输入是对于用户的个性化推荐的特征,例如表征用于推荐的上下文的特征,或者表征由用户采取的先前动作的特征等,那么由神经网络生成的输出可以是内容项集合中的每一个的分数,其中,每个分数表示用户将响应于被推荐内容项的可能性。

作为另一个示例,如果对卷积神经网络的输入是一种语言a的文本,则由神经网络生成的输出可以是另一种语言b的片段文本集合中的每一个片段的分数,其中,每个分数表示另一种语言b的一段文本是该输入文本向另一种语言b的正确翻译的概率或可能性。

作为另一个示例,如果对卷积神经网络的输入是说出的话语、说出的话语的序列或从两者中的一个中导出的特征,那么由神经网络生成的输出可以是针对片段文本集合的每个的分数,每个分数表示该段文本是话语或话语序列的正确记录的概率或可能性。

应理解,本申请中对于卷积神经网络执行的具体任务并不限制,可以现有技术中神经网络能够执行的任意任务。

目前,卷积神经网络在图像分类、目标检测、语音识别等领域获得了优秀的效果,但是以极大的计算复杂度作为代价的,计算性能较低,于是cnn的卷积核出现了小型化的趋势,一方面计算量会大幅降低,另一方面多个小卷积核的组合可能获得比一个大卷积核更优的效果。

在典型的卷积神经网络中,维度为3*3的卷积核矩阵是比较常见的,如alexnet网络的五个卷积层中后三层卷积的卷积核尺寸都是3*3,视觉几何组(visualgeometrygroup,vgg)网络的所有卷积核尺寸都是3*3的,残差网络(resnet)系列中也大量使用了3*3的卷积核。对于3*3的卷积运算,winograd是一种有效的加速算法,它的优势是可以减少乘法运算的数量,同时增加的额外运算(加、减、移位)代价很小,因此,可明显提升计算性能。

具体的,winograd运算的计算过程是:数据矩阵和卷积核权重矩阵分别做winograd变换→对变换结果做基于元素的点乘→对点乘结果做winograd反变换。对于f(2*2,3*3),f(2*2,3*3)表示:卷积数据框的维度为4*4,卷积核权重矩阵的维度为3*3,输出结果矩阵的维度为2*2。winograd变换和反变换只涉及到开销很小的加、减、移位运算,只有点乘运算需要16次乘法,而普通卷积运算输出2*2的结果需要36次乘法,由此可见,winograd算法可以显著减少乘法的数量,从而提高计算的性能。

下面将以输入数据矩阵的每次计算的卷积数据框的维度为4*4,卷积核权重矩阵的维度为3*3为例,具体说明winograd运算的计算过程。卷积数据框可以理解为每次计算的数据矩阵的大小,每次计算的数据矩阵为输入数据矩阵的一部分,例如,输入数据矩阵的维度为8*8,卷积数据框的维度可以为4*4或者5*5等。输入数据矩阵和数据矩阵是两个不同矩阵,术语“数据矩阵”可以和术语“卷积数据框”相互替换。

卷积核权重矩阵(或者也可以称为“权重矩阵”)为g:

卷积数据框矩阵(下文称为“数据矩阵”)为d:

对于winograd运算,winograd变换矩阵包括数据winograd变换矩阵(下文简称为“数据变换矩阵”)和权重winograd变换矩阵(下文简称为“权重变换矩阵”)。数据变换矩阵与数据矩阵(或者也可以称为“卷积数据框”)和权重矩阵的维数相关。权重变换矩阵与数据矩阵(或者也可以称为“卷积数据框”)和权重矩阵的维数相关。例如,数据矩阵和权重矩阵的维数确定后,数据变换矩阵就确定了,权重变换矩阵也就确定了。对于数据矩阵的维度为4*4,卷积核权重矩阵的维度为3*3,winograd反变换矩阵(下文简称为“反变换矩阵”)也是固定的。其中,反变换矩阵由数据矩阵和权重矩阵的维度确定。

权重变换矩阵为g:

数据变换矩阵为ct,ct为矩阵c的转置矩阵。

反变换矩阵为at,at为矩阵a的转置矩阵。

卷积结果可以按照如下公式(1)进行计算:

s=at×[(g×g×gt)*(ct×d×c)]×a(1)

在公式(1)中,ct×d×c为数据矩阵d的winograd变换公式,g×g×gt为权重矩阵g的winograd变换公式。gt为矩阵g的转置矩阵。

在本申请中,如果没有特殊说明,“×”表示两个矩阵相乘,“*”表示两个矩阵的点乘。

其中:数据矩阵d的winograd变换公式(2)为:

ct×d×c(2)

其中:权重矩阵g的winograd变换公式(3)为:

g×g×gt(3)

将数据矩阵和权重矩阵分别进行winograd变换后,将变换后的结果进行矩阵的点乘运算,然后将点乘运算的结果进行winograd反变换。假设点乘运算的结果为h:

winograd反变换的计算公式可以按照公式(4)进行计算:

at×h×a(4)

反变换计算的结果为即为数据矩阵进行卷积计算的结果。

上述的计算过程为卷积神经网络一个通道的4*4卷积数据框的计算的过程。如果卷积神经网络具有多个通道,每个通道的数据矩阵都可以按照上述的公式进行计算,即对每个通道反变换之前的点乘结果进行通道间的累加,然后对得到的累加结果进行winograd反变换,得到最终的所有通道的卷积数据框的卷积结果。

由上述的计算过程可知,利用winograd算法进行卷积运算的过程中,在计算之前需要获取到完整的卷积数据框大小的输入数据矩阵(即上述的数据矩阵)和完整卷积核权重矩阵,并且利用完整的数据矩阵和卷积核权重矩阵进行计算的。例如,利用上述的矩阵g和d进行计算,需要将整个数据矩阵进行winograd变换,利用winograd变换后的整个数据矩阵和winograd变换后的整个卷积核权重矩阵进行点乘运算,因此,计算引擎的输入数据和权重带宽需求较大。而且,卷积核权重矩阵的winograd变换和数据矩阵的winograd变换都是以在线的方式来计算,需要消耗和占用计算引擎的计算资源。计算过程中的winograd变换、基于元素的矩阵乘法(elementwisematrixmultiplication,ewmm)和winograd反变换全部是基于完整的矩阵数据来完成运算的,计算引擎需要较多的运算单元来支持完整数据的并行计算。另外,winograd反变换单元的输入是单个通道的乘积结果,单个通道的winograd反变换需要加法24次,如果并行处理n个输入通道的数据,则需要n个winograd反变换单元进行并行处理,一共需要加法24*n次,硬件资源开销较大。

基于上述问题,本申请提供了一种卷积神经网络计算的方法,有效的降低了计算引擎的输入数据和权重带宽的大小,降低了计算引擎单次计算时所需的资源和计算量,从而提高计算速率。

图3是本申请的一个实施例卷积神经网络计算的方法的示意性流程图。卷积神经网络的第i层卷积层包括k个卷积核,每个卷积核有m个权值通道,每一个权值通道对应一个卷积核矩阵,m个权值通道对应m个输入数据矩阵,m个输入数据矩阵的数据变换矩阵的每一行有x个非零元素。如图3所示,该方法200包括:

s210,将第j个输入数据矩阵的卷积数据框中的x行数据进行winograd变换,j为小于或者等于m的正整数,x小于所述第j个输入数据矩阵的卷积数据框的行数。

s220,将经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到第j个输入数据矩阵的卷积数据框的中间结果;

s230,将m个权值通道对应的所述中间结果进行累加,得到累加结果;

s240,将累加结果进行winograd反变换,得到所述第j个输入数据矩阵的卷积数据框的卷积结果。

s250,分别获按照行向维度和列向维度获取第j个输入数据矩阵的下一个卷积数据框,直到待第j个输入数据矩阵全部计算完毕。

具体的,下文将以维度为3*3的卷积核矩阵和维度为4*4的卷积数据框,即以x等于2为例进行说明。

应理解,本申请实施例的方案还可以应用于其他的维度的卷积核矩阵和卷积数据框。其中,数据变换矩阵的每一行有x个非零元素,例如,x可以取3或4等。在s110,将第j个输入数据矩阵的卷积数据框中的两行数据进行winograd变换,j为小于或者等于m的正整数。例如,卷积核变换矩阵(权重变换矩阵)为上述的g,数据变换矩阵为上述的ct,反变换矩阵为at。第j个输入数据矩阵的卷积数据框为上述的数据矩阵d,第j个卷积核矩阵为上述的矩阵g。可以看出,第j个输入数据矩阵的卷积数据框的维度为4*4,数据变换矩阵的每一行只有两个非零元素,即x等于2,而第j个输入数据矩阵的卷积数据框的行数为4,即x小于第j个输入数据矩阵的卷积数据框的行数。

第j个输入数据矩阵的卷积数据框为第j个输入数据矩阵的一部分,例如,对于第j个输入数据矩阵的卷积数据框的维度为4*4,第j个输入数据矩阵的维度可以为8*8,或者为7*6,即第j个输入数据矩阵的卷积数据框的行数小于或者等于第j个输入数据矩阵的行数,即第j个输入数据矩阵的卷积数据框的列数小于或者等于第j个输入数据矩阵的列数。

由上述的数据矩阵d的winograd变换公式(2)和变换结果可知:变换结果与输入数据矩阵之间的映射关系存在这样一个规律:变换结果的第一行可由输入数据矩阵的第一行和第三行数据计算得到,变换结果的第二行和第三行可由输入数据框的第二行和第三行数据计算得到,变换结果的第四行可由输入数据框的第二行和第四行数据计算得到。根据以上的规律,每次只获取卷积数据矩阵中的两行数据进行变换可得到winograd域(即数据矩阵的winograd变换后的矩阵)的一行数据,然后在winograd域和进行winograd变换后的权重矩阵按行进行点乘运算。即数据矩阵的winograd变换是分时进行的,每次只进行两行数据的winograd变换,得到一行winograd域的数据。每次只利用这一行winograd域的数据与进行winograd变换后的权重矩阵的一行进行点乘运算。

具体的,对数据矩阵进行分时的winograd变换的过程包括:

将数据矩阵d的第一行和第三行数据进行winograd变换,得到第一变换结果;第一变换结果为一行四列的数据矩阵。

将数据矩阵d的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;第二变换结果为一行四列的数据矩阵。第三变换结果为一行四列的数据矩阵。

将数据矩阵d中的第二行和第四行数据进行winograd变换,得到第四变换结果。第四变换结果为一行四列的数据矩阵。

上述得到第一变换结果至第四变换结果的计算顺序可以是按照第一变换结果到第四变换结果从早到晚的顺序先后计算得到,或者也可以是按照其他的顺序先后计算得到。总之,每次只获取数据矩阵中的两行数据进行变换得到winograd变换后的矩阵的一行数据。

应理解,在本申请实施例中,如果x为其他值,例如,x为3,即数据变换矩阵中每一行有3个非零元素,如果第一行的3个非零元素分别在第一列、第三列、第五列,则上述进行winograd变换时,需要将卷积数据框中的第一行、第三行、第五行的数据进行winograd变换,得到变换结果。如果第二行的3个非零元素分别在第二列、第三列、第四列,则上述进行winograd变换时,需要将卷积数据框中的第二行、第三行、第四行的数据进行winograd变换,得到变换结果。即数据变换矩阵中每一行非零元素的个数和位置决定了需要将卷积数据框中进行winograd变换的行数和位置。

上述winograd变换可以利用上述的变换公式(2)在winograd变换单元中进行。

ct×d×c(2)

利用公式(2),可以得到数据矩阵winograd变换后的结果,即得到了winograd域的数据矩阵。

在s220,将经过winograd变换后的变换结果(一行数据)与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到第j个数据矩阵的中间结果。由于第j个卷积核矩阵(权重矩阵)也需要进行winograd变换,因此可以离线完成第j个卷积核矩阵的winograd变换,即卷积核矩阵的winograd变换是离线完成的。具体的,可以提前将卷积核矩阵的winograd变换的结果存储在存储器中,在需要进行点乘运算的时候直接从存储器中读取进行计算。

卷积核矩阵的winograd变换的具体变换公式可以利用上述的卷积核矩阵变换公式(3):

g×g×gt(3)

利用公式(3),可以计算得到卷积核矩阵winograd变换后的结果,即得到了winograd域的权重矩阵。卷积核矩阵winograd变换可以在winograd变换单元中离线完成。

在winograd域对数据和权重(即经过winograd变换后得到的数据矩阵和经过winograd变换后得到权重矩阵)按行进行点乘运算的过程中,由于对数据矩阵进行winograd变换是每次只进行两行数据的winograd变换得到一行变换后的数据,即将数据矩阵中的两行数据经过winograd变换后得到一行数据,因此,winograd域对数据和权重矩阵按行进行点乘运算时,可以每次只进行winograd变换后得到的数据矩阵中一行数据与winograd变换后得到权重矩阵中的一行权重进行点乘运算,得到中间结果。该中间结果为每次只进行winograd域的一行数据和一行权重的点乘运算的结果,即中间结果为一行四列的矩阵。该中间结果可以包括四行计算结果(四轮计算结果)。每行计算结果(每轮计算结果)对应winograd域的一行数据和一行权重的点乘运算的结果。中间结果包括的四行计算结果也是分时输出的。

对于上述的数据矩阵d,可以经过四轮winograd变换得到winograd变换后的数据矩阵。在winograd域对数据和权重矩阵按行进行点乘运算时,也可以分别经过四轮点乘运算得到整个winograd变换后的数据矩阵和权重矩阵的点乘结果。在winograd域对数据和权重矩阵按行进行点乘运算可在计算单元中实现,具体的,计算单元可以包括乘法器和加法器。在winograd域对数据和权重矩阵按行进行点乘运算可在乘法器中进行。

具体的,中间结果可以包括下述的第一计算结果至第四计算结果。

第一计算结果(第一行计算结果)为winograd域的第一行数据(即第一变换结果)和winograd域的第一行权重矩阵按行进行点乘运算的结果。

第二计算结果(第二行计算结果)为winograd域的第二行数据(即第二变换结果)和winograd域的第二行权重矩阵按行进行点乘运算的结果。

第三计算结果(第三行计算结果)为winograd域的第三行数据(即第三变换结果)和winograd域的第三行权重矩阵按行进行点乘运算的结果。

第四计算结果(第四行计算结果)为winograd域的对第四行数据(即第四变换结果)和winograd域的第四行权重矩阵按行进行点乘运算的结果。

上述的四个计算结果为分时输出的。例如,第一计算结果输出的时刻最早,第四计算结果输出的时刻最晚。上述的四个计算过程可以在乘加计算单元中进行计算。

在s230中,由于每个通道的输入数据的计算过程都是按照上述的步骤进行计算,上述的每一个计算结果仅为一个通道的一轮计算的结果。例如,第一计算结果仅为一个通道上的计算结果。由于第i层的卷积有m个通道,因此,需要将m个通道中每个通道对应的计算结果进行累加,得到累加结果。即将m个通道中每个通道对应的第一计算结果相加,得到第一累加结果。将m个通道中每个通道对应的第二计算结果相加,得到第二累加结果。将m个通道中每个通道对应的第三计算结果相加,得到第三累加结果。将m个通道中每个通道对应的第四计算结果相加,得到第四累加结果。最终得到四个累加结果(即四轮m维度的累加结果)。其中,公式(4)中矩阵h的第一行相当于第一累加结果,第二行相当于第二累加结果,第三行相当于第三累加结果,第四行相当于第四累加结果。将m个通道中每个通道对应的计算结果进行累加可以在加法器中进行。

在s240,将四轮m维度的累加结果进行winograd反变换,得到第j个输入数据矩阵的一个卷积数据框的卷积结果,即得到的是一个输出通道的部分卷积结果。反变换时,可以利用上述的公式(4)进行反变换。将四轮m维度的累加结果进行winograd反变可以在winograd反变换单元中进行。

在winograd反变换过程中,可以分为两个步骤进行:

第一步:分别将该第一累加结果、该第二累加结果、该第三累加结果、该第四累加结果与winograd反变换矩阵的转置矩阵相乘,分别得到第一反变换结果、第二反变换结果、第三反变换结果和第四反变换结果;

第二步:将第一反变换结果、该第二反变换结果、该第三反变换结果和该第四反变换结果进行累加,得到该第j个数据矩阵的卷积数据框的卷积结果。

在s250中,分别按照行向维度和列向维度获取下一个卷积数据框,即获取下一个数据矩阵,每个数据矩阵按照上述的步骤s210至s240的步骤进行计算。即在行向维度按预设的跨度(stride)向右移动获取下一个卷积数据框,对下一个卷积数据框利用相同的计算过程进行计算,重复步骤210至s240进行运算。行向维度遍历到底后,行向维度重新回到行首,在列向维度按预设的跨度向下移动,重新获取下一个卷积数据框,重复步骤210至s240进行运算,直至第j个输入数据矩阵部遍历完成,得到第j个输入数据矩阵的卷积结果,k个卷积核的全部计算完成之后便得到第i层卷积层的全部运算结果,每个卷积核的计算步骤是相同的。

至此,整个第i卷积层的计算完成,得到第i卷积层的计算结果。

本申请提供的卷积神经网络计算的方法,由于每次只需要获取两行数据进行winograd变换,每次计算时将winograd变换后的两行数据与一行winograd变换后的权重进行计算,可以降低每次计算时数据的输入量和计算量,降低计算单元的输入带宽和计算带宽,提高了计算的速率。并且,由于每次计算时只将两行数据进行winograd,得到变换后的数据,每次只需获取一行winograd变换后的权重存储起来,降低了卷积神经网络每次计算时的数据存储量,降低了存储的功耗。

下将以具体的例子来说明本申请提供的卷积神经网络计算的方法。下文将结合图4,以维度为3*3的卷积核矩阵和维度为4*4的数据矩阵(卷积数据框)为例进行说明。图4是本申请一个实施例的卷积计算的示意性流程图。图4所述的卷积神经网络具有m个权值通道,每次同时计算n个权值通道对应的数据矩阵,n的值小于或者等于m。

数据矩阵(卷积数据框)为d:

卷积核权重矩阵为g:

首先,将数据矩阵d的第一行和第三行数据进行winograd变换,得到第一变换结果。数据矩阵d的第一行和第三行数据即为图4中的所示第一轮数据。

应理解,第一轮数据可以为一个通道的数据。当同时计算n个权值通道对应的数据矩阵时,应该有n个第一轮数据。每个通道对应的第一行和第三行数据进行winograd变换是独立进行的,每个通道对应的第一变换结果也是不相同的。

将数据矩阵d的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;第二变换结果为一行四列的数据矩阵。第三变换结果也为一行四列的数据矩阵。数据矩阵d的第二行和第三行数据即为图4中的所示的第二轮数据和第三轮数据。同样的,当同时计算n个权值通道对应的数据矩阵时,应该有n个第二轮数据和n个第三轮数据。每个通道对应的第二行和第三行数据进行winograd变换是独立进行的,每个通道对应的第二变换结果也是不相同的。每个通道对应的第三变换结果也是不相同的。

将数据矩阵d中的第二行和第四行数据进行winograd变换,得到第四变换结果。第四变换结果为一行四列的数据矩阵。数据矩阵d中的第二行和第四行数据即为图4中的所示的第四轮数据。

数据矩阵d进行winograd变换可以利用上述的变换公式(2):

ct×d×c(2)

可知,第一变换结果为:

|d0,0-d2,0-(d0,2-d2,2)d0,1-d2,1 d0,2-d2,2d0,2-d2,2-(d0,1-d2,1)d0,1-d2,1-(d0,3-d2,3)|

第二变换结果为:

|d1,0 d2,0-(d1,2 d2,2)d1,1 d2,1 d1,2 d2,2d1,2 d2,2-(d1,1 d2,1)d1,1 d2,1-(d1,3 d2,3)|

第三变换结果为:

|d2,0-d1,0-(d2,2-d1,2)d2,1 d1,1 d2,2-d1,2d2,2-d2,1-(d2,1-d1,1)d2,1-d1,2-(d2,1-d1,1)|

第四变换结果为:

|d1,0-d3,0-(d1,2-d3,2)d1,1-d3,1 d1,2-d3,2d1,2-d3,2-(d1,1-d3,1)d1,1-d3,1-(d1,3-d3,3)|

权重矩阵利用上述的公式(3)进行winograd变换:

g×g×gt(3)

假设权重矩阵利用上述的公式(3)进行winograd变换后的矩阵用k表示:

然后,将上述的第一变换结果与进行winograd变换后的权重矩阵k的第一行进行点乘运算,得到第一计算结果,第一计算结果为一行四列的矩阵。

将上述的第二变换结果与进行winograd变换后的权重矩阵k的第二行进行点乘运算,得到第二计算结果,第二计算结果为一行四列的矩阵。

将上述的第三变换结果与进行winograd变换后的权重矩阵k的第三行进行点乘运算,得到第三计算结果,第三计算结果为一行四列的矩阵。

将上述的第四变换结果与进行winograd变换后的权重矩阵k的第四行进行点乘运算,得到第四计算结果,第四计算结果为一行四列的矩阵。

其中,上述的四个计算结果为分时输出的。例如,第一计算结果输出的时刻最早,第四计算结果输出的时刻最晚。上述的四个计算过程可以在乘加计算单元中进行计算。

第一计算结果对应图4中的ta,第二计算结果对应图4中的tb,第三计算结果对应图4中的tc,第一计算结果对应图4中的td。

如果第一轮数据为一个通道的数据第一计算结果,由于第i层的卷积有m个通道,因此,需要将m个通道中每个通道对应的计算结果进行累加,得到累加结果。即将m个通道中每个通道对应的第一计算结果相加,得到第一累加结果。每个通道对应的第二计算结果相加,得到第二累加结果。每个通道对应的第三计算结果相加,得到第三累加结果。每个通道对应的第四计算结果相加,得到第四累加结果。最终得到四个累加结果(即四轮m维度的累加结果)。

当同时计算n个权值通道对应的数据矩阵时,即第一轮数据为n个通道的数据第一计算结果,应该有n个第一轮数据,首先将n个通道对应的第一计算结果进行累加,然后在将剩余的通道对应的第一计算结果进行累加,即将m维度累加到底,得到第一累加结果,第一累加结果对应m个通道的第一计算结果的和。对于第二计算结果、第三计算结果和第四计算结果,也进行相同的处理过程。

假设:第一累加结果为:

|oa0ob0oc0od0|

第二累加结果为:

|oa1ob1oc1od1|

第三累加结果为:

|oa2ob2oc2od2|

第四累加结果为:

|oa3ob3oc3od3|

上述的四个累加结果为分时输出的,第一累加结果输出的时刻最早,第四累加结果输出的时刻最晚。四个累加结果对应图4中的oai,obi,oci,odi,其中,i=0,1,2,3。

在得到上述的四个累加结果后,需要将四个累加结果进行winograd反变换。winograd反变换的计算公式可以按照公式(4)进行计算:

at×h×a(4)

h为上述的四个累加结果组成的矩阵。

矩阵h的第一行相当于上述的第一累加结果,第二行相当于第二累加结果,第三行相当于第三累加结果,第四行相当于第四累加结果。

将矩阵h按照上述的公式(4)进行winograd反变换,在将矩阵h按照上述的公式(4)进行winograd反变换时,可以分为两个步骤进行:

第一步:先计算h×a的结果:

其中,ri,0=oai obi oci,i=0,1,2,3。

rj,1=obj-ocj-odj,j=0,1,2,3。

由于矩阵h中每一行是分时输出的,对于一个完整的数据矩阵,会输出四行累加结果,因此,对于h×a的计算过程,每一行累加结果都是按照相同的计算公式进行计算的,即计算过程的加法计算单元是可以复用的,可以减少计算单元中加法器的数量。

并且,r0,0和r0,1是最先输出的,r1,0和r1,1是第二个输出的,r2,0和r2,1是第三个输出的,r3,0和r3,1是最后输出的。第一步对应图4中的winograd反变换步骤一。

第二步:利用矩阵at与h×a的结果进行矩阵乘法:

其中:q0,0=r0,0 r1,0 r2,0

q1,0=r1,0-r2,0-r3,0

q0,1=r0,1 r1,1 r2,1

q1,1=r1,1-r2,1 r3,1

由于r0,0和r0,1是最先输出的,r1,0和r1,1是第二个输出的,r2,0和r2,1是第三个输出的,r3,0和r3,1是最后输出的。由反变换的第二步公式可知,q0,0、q0,1、q1,0、q1,1是上述的四轮运算完成后才输出的,因此,第二步可以利用累加的方式实现。第二步对应图4中的winograd反变换步骤二。即winograd反变换的第二步是将winograd反变换的第一步得到的结果进行累加。

在进行完上述的反变换的第一步和第二步后,一个数据矩阵(卷积数据框)的完整的计算过程完毕。在行向维度按预设的跨度(stride)向右移动获取下一个卷积数据框(数据矩阵),对下一个数据矩阵(卷积数据框)按照上述相同的方法进行计算,得到计算结果,行向维度遍历到底后,行向维度重新回到行首,在列向维度按预设的跨度向下移动,重新获取下一个数据矩阵(卷积数据框),对下一个数据矩(卷积数据框)阵按照上述相同的方法进行计算,得到计算结果。直至输入数据全部遍历完成,至此整个第i卷积层的计算完成,得到第i卷积层的计算结果。

在本申请的实施例中,如果一次处理同时计算m个输入通道的数据,winograd变换时需要同时处理m个通道的数据,在计算单元中做基于元素的点乘运算时需要对m个乘积做加法,由于输入数据的通道数m通常会比较大,那么winograd变换单元和计算单元中乘加单元所消耗的硬件资源会非常大。因此可以根据设计规格一次处理仅计算n个输入通道的数据,n为小于或者等于m的正整数。全部m个通道的数据分多次处理,计算单元中需要对每次计算的点乘结果做累加,当m维度累加到底后再进行winograd反变换。

图5是本申请另一个实施例的卷积计算的示意性流程图。

如图5所示,对于卷积核尺寸为3*3,跨度(stride)为1的卷积运算可对应于f(2*2,3*3)的二维winograd运算,其中2*2表示一次winograd运算的输出结果为两行各两个点,3*3表示卷积核的尺寸,那么对应的单通道卷积数据框的尺寸为4*4。如图5所示,第一次计算对应的卷积数据框包含数据a0~a3、b0~b3、c0~c3和d0~d3,输入通道数为m。可以先对尺寸为4*4*m的整个卷积数据框做winograd变换,变换时每个输入通道是独立变换的,变换时每次只将两行数据进行winograd变换,如图5所示的winograd域数据为winograd变换后的数据矩阵,其中,第一轮数据为将a0~a3、b0~b3这两行数据进行为winograd变换后得到的,第一轮数据为将a0~a3、b0~b3这两行数据进行为winograd变换后得到的,第二轮数据为将b0~b3、c0~c3这两行数据进行为winograd变换后得到的,第三轮数据为将b0~b3、c0~c3这两行数据进行为winograd变换后得到的,第四轮数据为将c0~c3和d0~d3这两行数据进行为winograd变换后得到的。第一轮数据至第四轮数据是分时输出的。变换后的winograd域数据框尺寸仍然为4*4*m,然后将winograd域的数据和已变换的权重做基于元素的点乘运算,得到4*4的中间结果。中间结果包括四行数据,其中,中间结果的第一行数据为第一轮数据和已进行winograd变换的权重的第一行数据进行点乘得到的,中间结果的第二行数据为第二轮数据和已进行winograd变换的权重的第二行数据进行点乘得到的,中间结果的第三行数据为第三轮数据和已进行winograd变换的权重的第三行数据进行点乘得到的,中间结果的第四行数据为第一轮数据和已进行winograd变换的权重的第四行数据进行点乘得到的。中间结果的这四行数据也是分时输出的。最后对中间结果做winograd反变换就可以得到第一次计算的卷积结果q00、q01、q10和q11。q00、q01、q10和q11即为数据a0~a3、b0~b3、c0~c3和d0~d3的卷积计算结果。

将数据框沿行向维度以跨度(stride)为2向右移动,得到第二次计算对应的卷积数据框,包含数据a2~a5、b2~b5、c2~c5和d2~d5,按照相同的计算流程可得到第二次计算的卷积结果q02、q03、q12和q13。将卷积数据框沿行向维度继续以跨度(stride)为2向右移动,当行向维度遍历完毕后,前两行的卷积结果就全部计算完成。接着将卷积数据框回到行首再沿列向维度以跨度(stride)2向下移动,对应的数据包含c0~c3、d0~d3、e0~e3和f0~f3,同样按照相同的计算流程可得到卷积结果q20、q21、q30和q31。之后数据框继续沿行向维度移动,当行向维度和列向维度全部遍历完毕时,就输出了完整的卷积结果。

如果一次处理同时计算m个输入通道的数据,winograd变换时需要同时处理m个通道的数据,在计算单元中做基于元素的点乘运算时需要对m个乘积做加法,由于输入数据的通道数m通常会比较大,那么winograd变换单元和计算单元所消耗的硬件资源会非常可观。因此,通常根据设计规格一次处理仅计算n个输入通道的数据,n小于m,全部m个通道的数据分多次处理,计算单元中需要对每次计算的点乘结果做累加,当m维度累加到底后再进行winograd反变换。

应理解,图4和图5只是示例性的,不应该对本申请的实施例造成任何限制。例如,该处理流程中还可以增加某些步骤,或者去掉某些不必须的步骤等。本申请实施例在此不作限制。

还应理解,上述只是为了帮助本领域技术人员更好地理解本申请实施例,而非要限制本申请实施例的范围。本领域技术人员根据所给出的上述示例,显然可以进行各种等价的修改或变化,例如,上述方法200和图4和图5中描述的某些步骤可以是不必须的,或者可以新加入某些步骤等。或者上述任意两种或者任意多种实施例的组合。这样的修改、变化或者组合后的方案也落入本申请实施例的范围内。

还应理解,上文对本申请实施例的描述着重于强调各个实施例之间的不同之处,未提到的相同或相似之处可以互相参考,为了简洁,这里不再赘述。

还应理解,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

上面结合图1至图5详细介绍了本申请实施例提供的卷积神经网络计算的方法。下面将结合图6和图7详细介绍了本申请实施例提供的卷积神经网络计算的装置。

图6为本申请实施例提供的卷积神经网络计算的装置的示意性框图,如图6所示,该装置300包括:变换单元310、计算单元320以及反变换单元330。该卷积神经网络的第i层卷积层包括k个卷积核,每个卷积核有m个权值通道,该m个权值通道对应m个输入数据矩阵,该m个输入数据矩阵的数据变换矩阵中每一行有x个非零元素。

变换单元310,用于对第j个输入数据矩阵的卷积数据框中的x行数据进行winograd变换,j为小于或者等于m的正整数,x小于该第j个输入数据矩阵的卷积数据框的行数;

计算单元320,用于对经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的中间结果;

该计算单元320还用于对该m个权值通道对应的该中间结果进行累加,得到累加结果;

反变换单元330,用于对该累加结果进行winograd反变换,得到该第j个输入数据矩阵的卷积数据框的卷积结果。

本申请提供的卷积神经网络计算的装置,由于每次只需要获取部分数据进行winograd变换,每次计算时将winograd变换后的部分数据与一行winograd变换后的权重进行计算,可以降低每次计算时数据的输入量和计算量,降低计算单元的输入带宽和计算带宽,提高了计算的速率。并且,由于每次计算时只将获取部分数据进行winograd,得到变换后的数据并存储起来,降低了卷积神经网络每次计算时的数据存储量,降低了存储的功耗。

可选的,作为一个实施例,x等于2,该变换单元310具体用于:

对该第j个输入数据矩阵的卷积数据框中的第一行和第三行数据进行winograd变换,得到第一变换结果;

对该第j个输入数据矩阵的卷积数据框中的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;

对该第j个输入数据矩阵的卷积数据框中的第二行和第四行数据进行winograd变换,得到第四变换结果。

可选的,作为一个实施例,该计算单元320具体用于:

对该第一变换结果与经过winograd变换后的该第j个卷积核矩阵中的第一行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第一计算结果;

对该第二变换结果与经过winograd变换后的该第j个卷积核矩阵中的第二行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第二计算结果;

对该第三变换结果与经过winograd变换后的该第j个卷积核矩阵中的第三行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第三计算结果;

对该第四变换结果与经过winograd变换后的该第j个卷积核矩阵中的第四行数据进行点乘运算,得到该第j个输入数据矩阵的卷积数据框的第四计算结果。

可选的,作为一个实施例,该计算单元320具体用于:

该m个权值通道中每个权值通道对应的该第一计算结果相加,得到第一累加结果;

将该m个权值通道中每个权值通道对应的该第二计算结果相加,得到第二累加结果;

将该m个权值通道中每个权值通道阵对应的该第三计算结果相加,得到第三累加结果;

将该m个权值通道中每个权值通道对应的该第四计算结果相加,得到第四累加结果。

可选的,作为一个实施例,该反变换单元330具体用于:

分别将该第一累加结果、该第二累加结果、该第三累加结果、该第四累加结果与反变换矩阵的转置矩阵相乘,分别得到第一反变换结果、第二反变换结果、第三反变换结果和第四反变换结果;

将该第一反变换结果、该第二反变换结果、该第三反变换结果和该第四反变换结果进行累加,得到该第j个数据矩阵的卷积数据框的卷积结果。

可选的,作为一个实施例,该第j个输入数据矩阵的卷积数据框的大小为4×4的数据矩阵,该卷积核矩阵为3×3的矩阵。

应理解,装置300各个实施例的具体的步骤的描述可以参考上述的卷积神经网络计算的方法实施例的相关描述。例如,计算单元和变换单元各个实施例的计算公式或者winograd变换公式、winograd反变换公式等可以利用上述的方法实施例中相应的公式等。为避免重复,这里不再赘述。

还应理解,上述只是为了帮助本领域技术人员更好地理解本申请实施例,而非要限制本申请实施例的范围。本领域技术人员根据所给出的上述示例,显然可以进行各种等价的修改或变化,或者可以新加入某些步骤等。或者上述任意两种或者任意多种实施例的组合。这样的修改、变化或者组合后的方案也落入本申请实施例的范围内。

图7是本申请提供的另一种卷积神经网络计算的装置400的示意性框图,该装置400包括:

外部存储器410和硬件加速器430。其中,硬件加速器430包括外部存储控制器420。外部存储器410可以是双倍数据速率(doubledatarate,ddr)存储器,或者可以是其他类型的储存器。外部存储器410用于存储原始输入数据、离线winograd变换后的权重矩阵以及卷积计算的结果等。外部存储控制器420用于控制外部存储器410存储的数据以及将外部存储器410存储的数据传输到硬件加速器430进行计算。下文以外部存储器410为ddr存储器411、以外部存储控制器420为ddr控制器421为例进行说明。

ddr存储器411用于存储输入到卷积神经网络的原始输入数据、已经离线进行winograd变换的卷积核权重矩阵以及最终整个卷积层的计算结果。ddr控制器421用于从ddr存储器(外部存储器)获取已经进行winograd变换的卷积核权重矩阵和原始输入数据。

硬件加速器430包括数据存储器431、权重存储器432、向量计算单元433和运算电路434。

向量计算单元433包括多个运算处理单元,一般用于处理非卷积运算。在需要的情况下,向量计算单元433对运算电路434的输出做进一步处理,如向量乘,向量加,指数运算,对数运算,大小比较等等。主要用于神经网络中非卷积/fc层网络计算。例如,池化,批量归一化,局部响应归一化(localresponsenormalization,lrn)等。在本申请实施例中,向量计算单元433包括winograd变换单元433a和winograd反变换单元433b,分别用于对向量进行winograd变换和winograd反变换。

运算电路434内部包括多个处理单元(processengine,pe)。在一些实现中,运算电路434可以是二维脉动阵列。运算电路434还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在一些实现中,运算电路434还可以是通用的矩阵处理器。运算电路434用于从权重存储器432中读取相应的数据,并缓存在运算电路中每一个pe上。运算电路434还用于从数据存储器431中读取经过winograd变换的数据与读取的权重矩阵中的数据进行矩阵运算,得到的矩阵的部分结果或最终结果。

数据存储器431用于存储需要进行卷积计算的数据,权重存储器432用于存储已经进行winograd变换后的卷积核矩阵。

具体的,ddr控制器420将获取的原始输入数据存储在数据存储器431中,将已经进行winograd变换的卷积核权重矩阵存储在权重存储器432中。每次计算时,从数据存储器431获取卷积数据框中的两行数据在winograd变换单元433a进行winograd变换,利用winograd变换的变换结果与从权重存储器432获取的一行已经进行winograd变换的权重在运算电路434中进行点乘运算。其中,计算过程分四轮进行,winograd变换单元433a每次只是两行数据的winograd变换,运算电路434每次只是将winograd变换后的变换结果与权重存储器432存储的一行数据进行点乘运算,并将点乘运算的结果进行权值通道维度的累加,分别得到四轮运算的结果。四轮运算完成后,将运算结果在winograd反变换单元433b中进行winograd反变换,得到了一个卷积数据框的计算结果。其中,winograd反变换单元433b进行反变换的过程可以按照上述方法实施例中的两步来进行,便得到一个卷积数据框的计算结果。在一个卷积数据框计算完成后,分别按照行向维度和列向维度获取下一个卷积数据框,每个卷积数据框按照相同的步骤进行计算。在即在行向维度按预设的跨度向右移动获取下一个卷积数据框,对下一个卷积数据框利用相同的计算过程进行计算。行向维度遍历到底后,行向维度重新回到行首,在列向维度按预设的跨度向下移动,重新获取下一个卷积数据框,利用相同的计算过程进行计算,直至原始输入数据矩阵部遍历完成,得到第原始输入数据矩阵的卷积结果。

上述的硬件加速器430可以采用现场可编程门阵列(fieldprogrammablegatearray,fpga)的硬件加速方案或者采用专用集成电路(applicationspecificintegratedcircuit,asic)的硬件加速方案。或者还可以采用其他类型的硬件加速方案,本申请在此不作限制。

上述的存储器可以是只读存储器(read-onlymemory,rom)或随机存取存储器(randomaccessmemory,ram)等,本申请在此不作限制。

上述的数据存储器431可以是数据缓存(buffer),权重存储器432可以是权重缓存(buffer)。

应理解,图7是示例性的,不应该对本申请提供的卷积神经网络计算的装置造成限制,例如,该装置还可以包括输出单元和/或输入单元等。本申请在此不作限制。

本申请实施例还提供了一种计算机可读介质,用于存储计算机程序代码,该计算机程序包括用于执行上述方法200中本申请实施例的卷积神经网络计算的方法的指令。该可读介质可以是只读存储器(read-onlymemory,rom)或随机存取存储器(randomaccessmemory,ram),本申请实施例对此不做限制。

本申请还提供了一种计算机程序产品,所述计算机程序产品包括指令,当所述指令被执行时,以使得装置执行对应于上述方法中的操作。

本申请还提供了一种计算机系统,该计算机系统包括用于执行本申请实施例的卷积神经网络计算的方法的芯片或者装置。该芯片或者该装置可以是上述本申请提供的卷积神经网络系统。

本申请实施例还提供了一种系统芯片,该系统芯片包括:处理单元和通信单元,该处理单元,例如可以是处理器,该通信单元例如可以是输入/输出接口、管脚或电路等。该处理单元可执行计算机指令,以使该通信装置内的芯片执行上述本申请实施例提供的任一种卷积神经网络计算的方法。

可选地,该计算机指令被存储在存储单元中。

可选地,该存储单元为该芯片内的存储单元,如寄存器、缓存等,该存储单元还可以是该终端内的位于该芯片外部的存储单元,如rom或可存储静态信息和指令的其他类型的静态存储设备,ram等。其中,上述任一处提到的处理器,可以是一个cpu,微处理器,asic,或一个或多个用于控制上述的卷积神经网络计算的方法的程序执行的集成电路。该处理单元和该存储单元可以解耦,分别设置在不同的物理设备上,通过有线或者无线的方式连接来实现该处理单元和该存储单元的各自的功能,以支持该系统芯片实现上述实施例中的各种功能。或者,该处理单元和该存储器也可以耦合在同一个设备上。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。


技术特征:

1.一种卷积神经网络计算的方法,其特征在于,所述卷积神经网络的第i层卷积层包括k个卷积核,每个卷积核有m个权值通道,所述m个权值通道对应m个输入数据矩阵,所述m个输入数据矩阵的数据变换矩阵中每一行有x个非零元素,所述方法包括:

将第j个输入数据矩阵的卷积数据框中的x行数据进行winograd变换,j为小于或者等于m的正整数,x小于所述第j个输入数据矩阵的卷积数据框的行数;

将经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的中间结果;

将所述m个权值通道对应的所述中间结果进行累加,得到累加结果;

将所述累加结果进行winograd反变换,得到所述第j个输入数据矩阵的卷积数据框的卷积结果。

2.根据权利要求1所述的方法,其特征在于,x等于2,所述将第j个输入数据矩阵的卷积数据框中的两行数据进行winograd变换,包括:

将所述第j个输入数据矩阵的卷积数据框中的第一行和第三行数据进行winograd变换,得到第一变换结果;

将所述第j个输入数据矩阵的卷积数据框中的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;

将所述第j个输入数据矩阵的卷积数据框中的第二行和第四行数据进行winograd变换,得到第四变换结果。

3.根据权利要求2所述的方法,其特征在于,所述将经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的矩阵的一行数据进行点乘运算,包括:

将所述第一变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第一行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第一计算结果;

将所述第二变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第二行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第二计算结果;

将所述第三变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第三行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第三计算结果;

将所述第四变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第四行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第四计算结果。

4.根据权利要求3所述的方法,其特征在于,所述将所述m个权值通道对应的所述中间结果进行累加,得到累加结果,包括:

将所述m个权值通道中每个权值通道对应的所述第一计算结果相加,得到第一累加结果;

将所述m个权值通道中每个权值通道对应的所述第二计算结果相加,得到第二累加结果;

将所述m个权值通道中每个权值通道阵对应的所述第三计算结果相加,得到第三累加结果;

将所述m个权值通道中每个权值通道对应的所述第四计算结果相加,得到第四累加结果。

5.根据权利要求4所述的方法,其特征在于,所述将所述累加结果进行winograd反变换,得到所述第j个输入数据矩阵的卷积数据框的卷积结果,包括:

分别将所述第一累加结果、所述第二累加结果、所述第三累加结果、所述第四累加结果与反变换矩阵的转置矩阵相乘,分别得到第一反变换结果、第二反变换结果、第三反变换结果和第四反变换结果;

将所述第一反变换结果、所述第二反变换结果、所述第三反变换结果和所述第四反变换结果进行累加,得到所述第j个数据矩阵的卷积数据框的卷积结果。

6.根据权利要求1至5中任一项所述的方法,其特征在于,所述第j个输入数据矩阵的卷积数据框的大小为4×4的数据矩阵,所述卷积核矩阵为3×3的矩阵。

7.一种卷积神经网络计算的装置,所述卷积神经网络的第i层卷积层包括k个卷积核,每个卷积核有m个权值通道,所述m个权值通道对应m个输入数据矩阵,所述m个输入数据矩阵的数据变换矩阵中每一行有x个非零元素,其特征在于,包括:

数据存储器,用于存储第j个输入数据矩阵的卷积数据框;

向量计算单元,用于对所述第j个输入数据矩阵的卷积数据框中的x行数据进行winograd变换,j为小于或者等于m的正整数,x小于所述第j个输入数据矩阵的卷积数据框的行数;

权重存储器,用于存储已经进行winograd变换后的所述第j个卷积核矩阵;

运算电路,用于对经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的中间结果;

所述运算电路还用于:对所述m个权值通道对应的所述中间结果进行累加,得到累加结果;

所述向量计算单元还用于:对所述累加结果进行winograd反变换,得到所述第j个输入数据矩阵的卷积数据框的卷积结果。

8.根据权利要求7所述的装置,其特征在于,x等于2,所述向量计算单元包括winograd变换单元,所述winograd变换单元用于:

对所述第j个输入数据矩阵的卷积数据框中的第一行和第三行数据进行winograd变换,得到第一变换结果;

对所述第j个输入数据矩阵的卷积数据框中的第二行和第三行数据进行winograd变换,得到第二变换结果和得到第三变换结果;

对所述第j个输入数据矩阵的卷积数据框中的第二行和第四行数据进行winograd变换,得到第四变换结果。

9.根据权利要求8所述的装置,其特征在于,所述运算电路具体用于:

对所述第一变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第一行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第一计算结果;

对所述第二变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第二行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第二计算结果;

对所述第三变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第三行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第三计算结果;

对所述第四变换结果与经过winograd变换后的所述第j个卷积核矩阵中的第四行数据进行点乘运算,得到所述第j个输入数据矩阵的卷积数据框的第四计算结果。

10.根据权利要求9所述的装置,其特征在于,所述运算电路具体用于:

所述m个权值通道中每个权值通道对应的所述第一计算结果相加,得到第一累加结果;

将所述m个权值通道中每个权值通道对应的所述第二计算结果相加,得到第二累加结果;

将所述m个权值通道中每个权值通道阵对应的所述第三计算结果相加,得到第三累加结果;

将所述m个权值通道中每个权值通道对应的所述第四计算结果相加,得到第四累加结果。

11.根据权利要求10所述的装置,其特征在于,所述向量计算单元还包括winograd反变换单元,所述winograd反变换单元用于:

将所述第一累加结果、所述第二累加结果、所述第三累加结果、所述第四累加结果与反变换矩阵的转置矩阵相乘,分别得到第一反变换结果、第二反变换结果、第三反变换结果和第四反变换结果;

将所述第一反变换结果、所述第二反变换结果、所述第三反变换结果和所述第四反变换结果进行累加,得到所述第j个数据矩阵的卷积数据框的卷积结果。

12.根据权利要求7至11中任一项所述的装置,其特征在于,所述第j个输入数据矩阵的卷积数据框的大小为4×4的数据矩阵,所述卷积核矩阵为3×3的矩阵。

技术总结
本申请提供一种卷积神经网络计算的方法和装置,卷积神经网络的第i层卷积层包括K个卷积核,每个卷积核有M个权值通道,M个输入数据矩阵的数据变换矩阵的每一行有X个非零元素,该方法包括:将第j个输入数据矩阵的卷积数据框中的X行数据进行winograd变换,X小于第j个输入数据矩阵的卷积数据框的行数;将经过winograd变换后的变换结果与经过winograd变换后的第j个卷积核矩阵中的一行权重进行点乘运算,得到中间结果;将M个权值通道对应的中间结果进行累加,得到累加结果;将累加结果进行winograd反变换,得到卷积数据框的计算结果,本申请提供的方法,降低了单次计算所需的资源和计算量,提高计算速率。

技术研发人员:王明书;何占盈;张佳
受保护的技术使用者:深圳市海思半导体有限公司
技术研发日:2018.11.30
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-16073.html

最新回复(0)