掌桥专利:专业的专利平台
掌桥专利
首页

多样本多通道卷积反向传播向量化实现方法

文献发布时间:2023-06-19 19:30:30


多样本多通道卷积反向传播向量化实现方法

技术领域

本发明涉及向量处理器技术领域,尤其涉及一种多样本多通道卷积反向传播向量化实现方法。

背景技术

以深度卷积神经网络为代表的深度学习技术在图像识别和分类、自然语言处理以及金融、自动驾驶和推荐算法等各领域均有广泛的应用,其中在设计卷积神经网络结构时通常都是设定三维的输入数据,即图片的通道数、高度和宽度。

为了得到性能优异的卷积神经网络模型,需要对卷积神经网络进行训练,即对参数初始化,然后求出损失函数关于参数的梯度,再根据梯度更新参数的值,通过不断迭代,求出使得损失函数最小化时对应的参数,从而完成对网络的训练。训练过程中最为关键的步骤即是求出损失函数关于参数的梯度,可以采用反向传播算法实现。

现有技术中采用卷积反向传播计算输入特征图的梯度时,通常是在误差梯度数据图的行列之间插入0元素,再在其外围填充0元素,然后对卷积核的各个通道做顺时针旋转180度的变换,以新的卷积核对损失数据做卷积运算。但是该类方法会存在以下问题:

(1)0元素的存储位置不连续,导致补0元素的操作开销大;

(2)矩阵旋转和复制误差梯度数据占用时间开销大。

向量处理器是一种新颖的体系结构,能够在保持较低功耗的同时,具有强大的计算能力,尤其适合加速大型卷积神经网络计算。如图1所示,向量处理器通常包括标量处理部件(Scalar Processing Unit,SPU)和向量处理部件(Vector Processing Unit,VPU),SPU负责标量任务计算和流控,VPU负责向量计算,提供主要的计算能力,包括若干向量处理单元(Vector Processing Element,VPE),每个VPE包含MAC、ALU等多个运算功能部件。SPU和VPU之间提供数据传输和交换机制,实现标、向量数据的共享和通信。向量数据访问单元支持向量数据的Load/Store,提供大容量的专用向量阵列存储器(Array Memory,AM)以及标、向量共享的片外存储器。

现有技术中尚无法基于向量处理器实现卷积反向传播向量化,若按照传统方式直接在向量处理器的基础上进行卷积反向传播向量化,不仅计算效率低,不能有效共享权重数据而浪费存储带宽,无法充分发挥向量处理器计算性能,且还需要补0操作,导致会存在过多的数据搬迁,增加了大量的额外开销。

发明内容

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现简单、计算效率高、开销小、存储带宽需求低的多样本多通道卷积反向传播向量化实现方法,能够充分发挥向量处理器的计算性能,降低存储带宽需求以及硬件开销,提高计算效率,高效实现多样本多通道卷积反向传播的向量化计算。

为解决上述技术问题,本发明提出的技术方案为:

一种多样本多通道卷积反向传播向量化实现方法,步骤包括:

S01.将卷积神经网络前向计算的输入特征数据和反向传播的输入误差梯度按照样本维优先的方式存储为二维矩阵,得到输入特征数据以及输入误差梯度矩阵;

S02.向量处理器从步骤S01得到的所述输入误差梯度矩阵中按行抽取V行数据组成第一子矩阵并传输到各个核的向量阵列存储器AM中,以及将卷积核矩阵传输到各个核的标量存储器SM中,其中0

S03.向量处理器各个核对输入误差梯度矩阵的所述第一子矩阵以及所述卷积核矩阵执行向量化矩阵乘法,计算得到输出误差梯度矩阵并传输到向量处理器的片外存储器;重复步骤S02、步骤S03直至完成全部输出误差梯度矩阵的计算;

S04.向量处理器从步骤S01得到的所述输入误差梯度矩阵中按行抽取dS行数据组成第二子矩阵并传输到各个核的向量阵列存储器AM中,其中dS=nH*nW,nH为输出特征图的高度,nW为输出特征图的宽度;对所述第二子矩阵执行向量化矩阵求和计算,得到卷积层偏置参数的梯度并传输到向量处理器的片外存储器中;重复步骤S04直至完成全部卷积层偏置参数梯度的计算后,根据学习率更新卷积层偏置参数;

S05.向量处理器将步骤S01得到的所述输入误差梯度矩阵传输到各个核的标量存储器SM中,并从步骤S01得到的所述输入特征数据矩阵中抽取(N*nnH*nnW)*C阶子矩阵传输到各个核的向量阵列存储器AM中,其中N为训练样本的数目,C为输入特征图的通道数,nnH和nnW分别表示对输出特征图在行列间补(S-1)个0之后的逻辑高度和宽度,S为卷积核的步长;

S06.向量处理器对步骤S05中所述输入误差梯度矩阵和输入特征数据的子矩阵执行向量化矩阵乘法计算,计算得到卷积层权重参数的梯度并传输到向量处理器的片外存储器中,重复步骤S05、步骤S06直至完成全部卷积层权重参数梯度的计算后,根据学习率更新卷积层权重参数。

进一步的,所述步骤S01中将卷积神经网络前向计算的输入特征数据和反向传播的输入误差梯度进行存储时,每一列存储一个样本数据,每列的存储顺序为:首先为图像宽度W方向优先,接着是图像高度H方向优先,最后是图像通道C方向优先;卷积核数据存储为二维卷积核矩阵,其中矩阵的每一行表示一个卷积核,每行的存储顺序首先为卷积核宽度kW方向优先,接着是图像卷积核kH方向优先,最后是卷积核通道O方向优先;卷积核数据具体按照O*KC阶的矩阵连续存储在向量处理器的片外存储器,其中KC=kH*kW*C为单个卷积核的像素数据数目。

进一步的,所述步骤S02中,按行抽取V行数据组成所述第一子矩阵的总次数为H*W,完成全部输出误差梯度矩阵计算,其中:

nH=(H+2pH-kH)/S+1,nW=(W+2pW-kW)/S+1,nnH=nH+(nH-1)*(S-1),

nnW=nW+(nW-1)*(S-1),H’=H+2pH,W’=W+2pW

M=nH*nW*O

其中,H、W分别为当前卷积层前向计算输入特征图的图像高度、图像宽度,pH、pW分别为高和宽方向填充的0元素个数,H’,W’分别表示对输入特征图进行补0后的逻辑高度和逻辑宽度,M表示单张输出特征图的像素点数目。

进一步的,所述步骤S02中,按行抽取V行数据组成所述第一子矩阵的具体步骤为:

步骤S201:令valid=0,h=0,w=0,h的取值范围为{0,...,H’-1},w的取值范围为{0,…,W’-1},判断是否满足h=(pH+H)或者满足w=(pW+W),若是则转步骤S202,否则转S204;

步骤S202:w增1,并判断是否满足w>pW-1,若不是转步骤S201,若为是则转步骤S2.3;

步骤S203:h增1、w=0,并判断是否满足h>pH-1,若是则结束,若不是则转步骤S201;

步骤S204:构建一个长度为K的向量flag,令o=0,m=0,n=0,o的取值范围为{0,…,O-1},m的取值范围为{0,…,kH-1},n的取值范围为{0,…,kW-1};

步骤S205:判断(h+m>=(kH-1)&&(w+n)>=(kW-1)&&(h+m)<=(kH+nnH-2)&&(w+n)<=(kW+nnW-2))是否为真值,若为否则转至步骤S206;若为是继续判断(h+m-kH+1)%S==0&&(w+n-kW+1)%S==0是否为真值,其中%为取余操作,若为否将向量flag的第o*kH*kW+m*kW+n个元素记为0,若为真则按下式定义t:

t=(h+m-kH+1)/s*nW+(w+n-kW+1)/S+o*nH*nW,

以及将向量flag的第o*kH*kW+m*kW+n个元素记为1,并提取所述输入误差梯度矩阵第t行,valid加1;

步骤S206:n增1,并判断是否满足n>=kW的值,若为否转步骤S205,若为是转步骤S207;

步骤S207:m增1,n=0,并判断是否满足m>=kH的值,若为否转步骤S205,若为是转步骤S208;

步骤S208:o增1,m=0,n=0,判断是否满足o>=O的值,若为否转步骤S205,若为是转步骤S03。

进一步的,所述步骤S03中,向量处理器各个核对输入误差梯度矩阵的所述第一子矩阵以及所述卷积核矩阵执行向量化矩阵乘法的具体步骤包括:

步骤S301:向量处理器将抽取的所述输入误差梯度矩阵的第一子矩阵分别传输到向量处理器的各个核的向量阵列存储器AM中预设的输入缓冲区中,每个核传入的输入误差梯度矩阵的第一子矩阵的规模为(valid*kH*kW)*p阶,p为每个核的向量处理单元VPE个数;

步骤S302:向量处理器将所述卷积核数据矩阵分别传输到向量处理器各个核的标量存储器SM中预设的卷积核数据缓冲区中,每个核传入的卷积核数据矩阵规模为O*KC阶,令i=0,j=0,invalid=0;

步骤S303:令indx=i*O*kH*kW+j,o=indx/(O*kH*kW),u=indx%(kH*kW),c=indx/(kH*kW)-o*O,向量处理器的各个核的标量处理部件SPU依次从所述卷积核数据缓冲区读取第c行第kH*kW-u-1+o*kH*kW列元素到一个标量寄存器,判断读取的所述卷积核数据对应的输入误差梯度矩阵行是否为0,若是invalid增1,继续读取下一个元素;若不是则通过标量广播指令广播到一个向量寄存器;

步骤S304:向量处理器的各个核的向量处理单元VPU依次从输入误差梯度缓冲区读取第(j-invalid)行输入误差梯度数据到一个向量寄存器,将该向量寄存器与所述步骤S303得到的向量寄存器进行乘累加计算,j增1;

步骤S305:判断j是否大于等于O*kH*kW,若不是跳转步骤S303,且所述步骤S304中读取位置移到下一行,若是则跳转步骤S306;

步骤S306:判断i是否大于等于C,若不是,则令j=0,跳转步骤S303,且所述步骤S304中读取位置回到输入误差梯度数据缓冲区起始地址,若是则向量处理器完成C*N阶的输出误差梯度数据的计算。

进一步的,步骤S03中,将输出误差梯度矩阵的计算结果存储在向量处理器的片外存储器中的具体步骤为:

向量处理器将得到的输出误差梯度矩阵矩阵分别传输到向量处理器的各个核预设的输出缓冲区中,每个核负责输出的矩阵规模为C*p阶,p为每个核的向量处理单元VPE个数,将矩阵中的第i行传输到输出缓冲区的(h-pH)*W+(w-pW)+i*H*W行。

进一步的,所述步骤S04中,对所述第二子矩阵执行向量化矩阵求和计算的具体步骤包括:

步骤S401:向量处理器将所述输入误差梯度矩阵的第二子矩阵分别传输到向量处理器的各个核的向量阵列存储器AM中预设的输入缓冲区中,每个核传入的输入误差梯度矩阵规模为(nH*nW)*p阶,p为每个核的向量处理单元VPE个数;

步骤S402:向量处理器的每个核的向量处理部件VPU遍历所述输入误差梯度矩阵的第二子矩阵,并依次从输入误差梯度矩阵的第二子矩阵中读取一行到一个向量寄存器,执行向量求和计算,将结果写到一个标量寄存器中;每个核的标量处理部件SPU将该标量寄存器的值统一存放到其中一个核的标量寄存器中,并进行累加计算;遍历完(nH*nW)行后,向量处理器完成卷积层偏置参数梯度中的对应分量的计算;

所述步骤S04中,根据学习率更新卷积层偏置参数包括:向量处理器遍历所述卷积层偏置参数,并按照下式进行更新:卷积层偏置参数-(卷积层偏置参数梯度*学习率)。

进一步的,所述步骤S05中,从步骤S01得到的所述输入特征数据矩阵中抽取(N*nnH*nnW)*C阶子矩阵传输到各个核的向量阵列存储器AM中包括:

步骤S501:令h=0,w=0,其中h的取值范围为{0,...,kH-1},w的取值范围为{0,…,kW-1},以及令c=0,m=0,n=0,c的取值范围为{0,…,N-1},m的取值范围为{0,…,nnH-1},n的取值范围为{0,…,nnW-1},创建一个大小为(N*nnH*nnW)的向量flag;

步骤S502:判断是否满足h+m>pH-1&&h+mpW-1且w+n<(pW+W),若是则转S503,否则转S507;

步骤S503:构建长度为C的向量temp,令i=0,i的取值范围为{0,…,C-1},t=(h+m-pH)*W+(w+n-pW);

步骤S504:判断i是否大于C-1,若是,则转10.6,若不是,则将输入数据矩阵中第i*H*W+t行第c列的像素点提取至temp中的第i个位置,转步骤10.5。

步骤S505:i增1,转步骤S504;

步骤S506:传输temp向量到子矩阵中;

步骤S507:n增1,判断n是否大于nnW-1,若是则转S508,若不是转步骤S502;

步骤S508:m增1,n=0判断m是否大于nnH-1,若是则转S509,若不是转步骤S502。

步骤S509:c增1,m=0,n=0判断c是否大于N-1,若是则转步骤S511,若不是转步骤S502;

步骤S510:w增1,c=0,m=0,n=0,判断w是否大于kW-1,若是则转S511,若不是转步骤S502;

步骤S511:h增1,w=0,c=0,m=0,n=0,判断h是否大于kH-1,若是当前流程中止,若不是转步骤S502。

进一步的,所述步骤S06中,向量处理器对步骤S05中所述输入误差梯度矩阵和输入特征数据的子矩阵执行向量化矩阵乘法计算的具体步骤包括:

步骤S601:向量处理器将所述输入数据分别传输到向量处理器的向量阵列存储器AM中预设的输入数据缓冲区中,输入数据矩阵规模为(N*nnH*nnW)*C阶;

步骤S602:向量处理器将所述输入误差梯度矩阵分别传输到向量处理器的标量存储器SM中预设的数据缓冲区中,输入误差梯度矩阵规模为(O*nnH*nnW)*N阶,令i=0,j=0;步骤S603:令x=i*N*nnH*nnW+j,o=x/(nnH*nnW*N),c=x/(nnH*nnW)-o*N,s=x/nnW-o*N*nnH-c*nnH,r=x%nnW,st=o*nnH*nnW+(s/S)*nnW+(r/S),如果s%S不等于0或者r%S不等于0,跳转步骤S605,反之令:yc=j/(nnH*nnW),ym=j/nnW–yc*

nnH,yn=j%nnW,若h+ym大于pH–1且h+ym小于pH+H且w+yn大于pW-1且w+yn小于pW+W,则向量处理器的向量处理单元VPU将所述输入特征数据矩阵的第j行数据读取到一个向量寄存器;

步骤S604:向量处理器的标量处理部件SPU从所述输入误差梯度矩阵读取第st行第c列元素到一个标量寄存器,将该标量寄存器与所述步骤S603得到的标量寄存器进行乘累加计算;

步骤S605:j自增1,判断j是否大于等于N*nnH*nnW,若为是,跳转步骤S606,若为否,跳转步骤S603;

步骤S606:i自增1,判断i是否大于等于O,若为是,结束当前流程;若为否,j=0跳转步骤S603。

进一步的,所述步骤S06中,传输卷积层权重参数的梯度的具体步骤包括:向量处理器将当前执行向量化矩阵乘法计算得到的二维矩阵的第m行第n列元素提取到卷积层权重梯度矩阵的第m行第n*kH*kW+h*kW+w列,其中m的取值范围是{0,…O-1},n的取值范围是{0,…,C-1};所述根据学习率更新卷积层权重参数的具体步骤包括:向量处理器将卷积核矩阵和卷积层权重参数梯度分别传输到向量处理器的各个核的标量阵列存储器SM中预设的输入数据缓冲区中,向量加速器逐行读取卷积核矩阵和卷积层权重参数梯度矩阵,并按照下式进行更新:当前卷积核矩阵行-(当前卷积层偏置参数梯度矩阵行*学习率),重复O次后完成对卷积层权重参数的更新。

与现有技术相比,本发明的优点在于:

1、本发明充分利用向量处理器的向量化和并行化计算的特性,基于向量处理器依次执行输出误差梯度矩阵以及卷积层偏置参数梯度、卷积层权重参数梯度的计算,以将复杂的多重循环的卷积反向传播计算转化为高效率的向量化和并行化矩阵乘法计算,能够充分发挥向量处理器的计算性能高效实现卷积反向传播向量化,不仅能够有效降低存储带宽需求以及硬件开销,还能够大大提高计算效率。

2、本发明基于向量处理器实现卷积反向传播计算的过程中,通过将每个卷积核数据扩展成向量数据,与全部的输入数据同时进行向量乘累加计算,能够充分发挥向量处理器的SIMD和核间并行性,大幅度提升卷积神经网络的计算效率,同时通过将同一样本的所有输入误差梯度数据存储在一个列上,使得卷积核数据与输入误差梯度数据的全部乘累加计算都是在同一个VPE处理单元上操作,从而能够避免多个处理单元之间的规约求和,提高向量处理器的整体计算效率。

3、本实施例通过将输入特征数据和输入误差梯度按照样本维优先的方式存储,每个核的卷积核数据通过标量存储器传输,并广播到向量处理单元计算,可以实现卷积核数据的共享,大幅度减少计算数据的传输量,能够显著降低卷积核数据的带宽需求,同时降低卷积核数据的传输时间,且不需要复制原图像数据操作,通过将复杂的多重循环的卷积反向传播计算操作转化为H*W次高效率的向量化和并行化矩阵乘法计算,能够充分利用向量处理器对于矩阵乘法计算的高效性以及向量处理器非常适合于向量化和并行化计算的特性,并且不需要0元素的实际存储,因而不需要额外的内存开销,减少了数据迁移次数和计算次数

4、可以从M*N阶的输入误差梯度矩阵中按行抽取V=valid行数据,组成的V*N阶的输入误差梯度矩阵的子矩阵,其中补0元素通过在计算过程中实现,不需要0元素的实际存储,因而不需要额外的内存开销,减少了0元素对应的计算

附图说明

图1是向量处理器的一般结构示意图。

图2是本实施例多样本多通道卷积反向传播向量化实现方法的详细流程示意图。

图3是本发明在具体应用实施例中对输入误差梯度数据重排序的原理示意图。

图4是本发明具体应用实施例中步骤S02中抽取子矩阵操作的详细流程示意图。

图5是本实施例中步骤S03中执行向量化计算的详细流程示意图。

图6是本发明具体应用实施例中对子矩阵执行向量化矩阵求和计算的原理示意图。

图7是本发明具体应用实施例中更新卷积层偏置参数的原理示意图。

具体实施方式

以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。

如图2所示,本实施例多样本多通道卷积反向传播向量化实现方法的步骤包括:

S01.将卷积神经网络前向计算的输入特征数据和反向传播的输入误差梯度按照样本维优先的方式存储为二维矩阵,得到输入特征数据以及输入误差梯度矩阵;

S02.向量处理器从步骤S01得到的输入误差梯度矩阵中按行抽取V行数据组成第一子矩阵并传输到各个核的向量阵列存储器AM中,以及将卷积核矩阵传输到各个核的标量存储器SM中,其中0

S03.向量处理器各个核对输入误差梯度矩阵的第一子矩阵以及卷积核矩阵执行向量化矩阵乘法,计算得到输出误差梯度矩阵并传输到向量处理器的片外存储器;重复步骤S02、步骤S03直至完成全部输出误差梯度矩阵的计算;

S04.向量处理器从步骤S01得到的所述输入误差梯度矩阵中按行抽取dS行数据组成第二子矩阵并传输到各个核的向量阵列存储器AM中,其中dS=nH*nW,nH为输出特征图的高度,nW为输出特征图的宽度;对所述第二子矩阵执行向量化矩阵求和计算,得到卷积层偏置参数的梯度并传输到向量处理器的片外存储器中;重复步骤S04直至完成全部卷积层偏置参数梯度的计算后,根据学习率更新卷积层偏置参数;

S05.向量处理器将步骤S01得到的输入误差梯度矩阵传输到各个核的标量存储器SM中,并从步骤S01得到的输入特征数据矩阵中抽取(N*nnH*nnW)*C阶子矩阵传输到各个核的向量阵列存储器AM中,其中N为训练样本的数目,C为输入特征图的通道数,nnH和nnW分别表示对输出特征图在行列间补(S-1)个0之后的逻辑高度和宽度,S为卷积核的步长;

S06.向量处理器对步骤S05中输入误差梯度矩阵和输入特征数据的子矩阵执行向量化矩阵乘法计算,计算得到卷积层权重参数的梯度并传输到向量处理器的片外存储器中,重复步骤S05、步骤S06直至完成全部卷积层权重参数梯度的计算后,根据学习率更新卷积层权重参数。

卷积反向传播计算即为给定一个随机的权重参数,按照正向算法计算结果,根据计算结果与正确结果的误差反向更新权重参数,一直到误差满足要求,得到所需要的权重参数。本实施例通过上述步骤,通过将复杂的多重循环的卷积反向传播计算转化为高效率的向量化和并行化矩阵乘法计算,依次完成输出误差梯度矩阵以及卷积层偏置参数梯度、卷积层权重参数梯度的计算,能够充分利用向量处理器对于矩阵乘法计算的高效性以及向量处理器非常适合于向量化和并行化计算的特性,充分发挥向量处理器的计算性能高效实现卷积反向传播向量化,有效降低存储带宽需求以及硬件开销,同时大大提高计算效率。

本实施例步骤S01中将卷积神经网络前向计算的输入特征数据和反向传播的输入误差梯度进行存储时,具体每一列存储一个样本数据,每列的存储顺序为:首先为图像宽度W方向优先,接着是图像高度H方向优先,最后是图像通道C方向优先;卷积核数据存储为二维卷积核矩阵,其中矩阵的每一行表示一个卷积核,每行的存储顺序首先为卷积核宽度kW方向优先,接着是图像卷积核kH方向优先,最后是卷积核通道O方向优先;卷积核数据具体按照O*KC阶的矩阵连续存储在向量处理器的片外存储器,其中KC=kH*kW*C为单个卷积核的像素数据数目。设当前卷积层反向传播计算的输入误差梯度矩阵大小为M*N阶二维矩阵,其中N为训练样本数目,nH为前向计算输出特征图的高度,nW为前向计算输出特征图的宽度,M=O*nH*nW。

在具体应用实施例中对输入误差梯度数据重排序如图3所示,其中元素索引均从0开始,图3中的R,G分别代表输入误差梯度数据的两个通道。R(x,y)代表第x幅输入图像在第0通道上的第y个位置处的值。G(x,y)代表第x幅输入图像在第1通道上的第y个位置处的值。原始的输入数据是先顺序排列第0幅图像第0通道上的所有梯度值,再顺序排列第0幅图像第1通道上的所有梯度值,然后顺序排列第0幅图像在第2通道上的所有梯度值,接下来是第1幅图像第0通道上的所有梯度值,依次类推。经过重排列后,输入误差梯度数据转换为(O*nH*nW)行N列的二维矩阵。二维矩阵的每一列表示一幅图像的输入梯度值,依次是第0幅图像,第1幅图像,…,直到第N-1幅图像。矩阵共有(O*nH*nW)行,以第0列为例,首先按照顺序存放R通道(第0通道)上的所有梯度值,然后是G通道(第1通道)上的所有梯度值。

本实施例通过将输入特征数据和输入误差梯度按照样本维优先的方式存储,每个核的卷积核数据通过标量存储器传输,并广播到向量处理单元计算,可以实现卷积核数据的共享,大幅度减少计算数据的传输量,能够显著降低卷积核数据的带宽需求,同时降低卷积核数据的传输时间,且不需要复制原图像数据操作,通过将复杂的多重循环的卷积反向传播计算操作转化为H*W次高效率的向量化和并行化矩阵乘法计算,能够充分利用向量处理器对于矩阵乘法计算的高效性以及向量处理器非常适合于向量化和并行化计算的特性,并且不需要0元素的实际存储,因而不需要额外的内存开销,减少了数据迁移次数和计算次数。

本实施例步骤S02中,按行抽取V行数据组成第一子矩阵的总次数为H*W,完成全部输出误差梯度矩阵计算,其中:

nH=(H+2pH-kH)/S+1,nW=(W+2pW-kW)/S+1,nnH=nH+(nH-1)*(S-1),

nnW=nW+(nW-1)*(S-1),H’=H+2pH,W’=W+2pW

M=nH*nW*O

其中,H、W分别为当前卷积层前向计算输入特征图的图像高度、图像宽度,pH、pW分别为高和宽方向填充的0元素个数,H’,W’分别表示对输入特征图进行补0后的逻辑高度和逻辑宽度,M表示单张输出特征图的像素点数目。

如图4所示,本实施例步骤S02中按行抽取V行数据组成第一子矩阵的具体步骤为:

步骤S201:令valid=0,h=0,w=0,h的取值范围为{0,...,H’-1},w的取值范围为{0,…,W’-1},判断是否满足h=(pH+H)或者满足w=(pW+W),若是则转步骤S202,否则转S204;

步骤S202:w增1,并判断是否满足w>pW-1,若不是转步骤S201,若为是则转步骤S2.3;

步骤S203:h增1、w=0,并判断是否满足h>pH-1,若是则结束,若不是则转步骤S201;

步骤S204:构建一个长度为K的向量flag,令o=0,m=0,n=0,o的取值范围为{0,…,O-1},m的取值范围为{0,…,kH-1},n的取值范围为{0,…,kW-1};

步骤S205:判断(h+m>=(kH-1)&&(w+n)>=(kW-1)&&(h+m)<=(kH+nnH-2)&&(w+n)<=(kW+nnW-2))是否为真值,若为否则转至步骤S206;若为是继续判断(h+m-kH+1)%S==0&&(w+n-kW+1)%S==0是否为真值,其中%为取余操作,若为否将向量flag的第o*kH*kW+m*kW+n个元素记为0,若为真则按下式定义t:

t=(h+m-kH+1)/s*nW+(w+n-kW+1)/S+o*nH*nW,

以及将向量flag的第o*kH*kW+m*kW+n个元素记为1,并提取所述输入误差梯度矩阵第t行,valid加1;

步骤S206:n增1,并判断是否满足n>=kW的值,若为否转步骤S205,若为是转步骤S207;

步骤S207:m增1,n=0,并判断是否满足m>=kH的值,若为否转步骤S205,若为是转步骤S208;

步骤S208:o增1,m=0,n=0,判断是否满足o>=O的值,若为否转步骤S205,若为是转步骤S03。

通过上述步骤,可以从M*N阶的输入误差梯度矩阵中按行抽取V=valid行数据,组成的V*N阶的输入误差梯度矩阵的子矩阵,其中补0元素通过在计算过程中实现,不需要0元素的实际存储,因而不需要额外的内存开销,减少了0元素对应的计算。

本实施例步骤S03中,将O*KC=2*12阶的卷积核数据矩阵与V*N=valid*64阶的输入误差梯度子矩阵,执行向量化矩阵乘法计算和各个核的并行化矩阵乘法计算,如图5所示,执行向量化矩阵乘法的具体步骤包括:

步骤S301:向量处理器将抽取的所述输入误差梯度矩阵的第一子矩阵分别传输到向量处理器的各个核的向量阵列存储器AM中预设的输入缓冲区中,每个核传入的输入误差梯度矩阵的第一子矩阵的规模为(valid*kH*kW)*p阶,p为每个核的向量处理单元VPE个数;

步骤S302:向量处理器将所述卷积核数据矩阵分别传输到向量处理器各个核的标量存储器SM中预设的卷积核数据缓冲区中,每个核传入的卷积核数据矩阵规模为O*KC阶,令i=0,j=0,invalid=0;

步骤S303:令indx=i*O*kH*kW+j,o=indx/(O*kH*kW),u=indx%(kH*kW),c=indx/(kH*kW)-o*O,向量处理器的各个核的标量处理部件SPU依次从所述卷积核数据缓冲区读取第c行第kH*kW-u-1+o*kH*kW列元素到一个标量寄存器,判断读取的所述卷积核数据对应的输入误差梯度矩阵行是否为0,若是invalid增1,继续读取下一个元素;若不是则通过标量广播指令广播到一个向量寄存器;

步骤S304:向量处理器的各个核的向量处理单元VPU依次从输入误差梯度缓冲区读取第(j-invalid)行输入误差梯度数据到一个向量寄存器,将该向量寄存器与所述步骤S303得到的向量寄存器进行乘累加计算,j增1;

步骤S305:判断j是否大于等于O*kH*kW,若不是跳转步骤S303,且所述步骤S304中读取位置移到下一行,若是则跳转步骤S306;

步骤S306:判断i是否大于等于C,若不是,则令j=0,跳转步骤S303,且所述步骤S304中读取位置回到输入误差梯度数据缓冲区起始地址,若是则向量处理器完成C*N阶的输出误差梯度数据的计算。

本实施例上述步骤S301和步骤S302中的数据缓冲区具体可以设置两个,当对其中一个数据缓冲区执行计算的同时,对另一个数据缓冲区进行数据传输,使得数据传输与计算时间重叠,可以进一步提升计算效率。

本实施例上述步骤S303中判断该卷积核数据对应的输入误差梯度矩阵行是为否为0元素行具体依据向量flag来实现,具体步骤为:根据上述向量flag的元素值进行判断,设w为读取卷积核数据在该列的位置,判断若flag[w]=0,则对应的输入误差梯度矩阵行为0元素行,若flag[w]=1,则对应的输入误差梯度矩阵行不为0元素行。

本实施例步骤S03中,将输出误差梯度矩阵的计算结果存储在向量处理器的片外存储器中的具体步骤为:向量处理器将得到的输出误差梯度矩阵矩阵分别传输到向量处理器的各个核预设的输出缓冲区中,每个核负责输出的矩阵规模为C*p阶,p为每个核的向量处理单元VPE个数,将矩阵中的第i行传输到输出缓冲区的(h-pH)*W+(w-pW)+i*H*W行。

本实施例步骤S04中,向量处理器从步骤S01中的输入误差梯度矩阵中按行抽取dS=nH*nW行数据组成第二子矩阵传输到各个核的向量阵列存储器AM中,并对该子矩阵执行向量化矩阵求和计算,得到卷积层偏置参数的梯度。其中对该第二子矩阵执行向量化矩阵求和计算的具体步骤包括:

步骤S401:向量处理器将所述输入误差梯度矩阵的第二子矩阵分别传输到向量处理器的各个核的向量阵列存储器AM中预设的输入缓冲区中,每个核传入的输入误差梯度矩阵规模为(nH*nW)*p阶,p为每个核的向量处理单元VPE个数;

步骤S402:向量处理器的每个核的向量处理部件VPU遍历所述输入误差梯度矩阵的第二子矩阵,并依次从输入误差梯度矩阵的第二子矩阵中读取一行到一个向量寄存器,执行向量求和计算,将结果写到一个标量寄存器中;每个核的标量处理部件SPU将该标量寄存器的值统一存放到其中一个核的标量寄存器中,并进行累加计算;遍历完(nH*nW)行后,向量处理器完成卷积层偏置参数梯度中的对应分量的计算;

本实施例步骤S04中,根据学习率更新卷积层偏置参数包括:向量处理器遍历卷积层偏置参数,并按照下式进行更新:卷积层偏置参数-(卷积层偏置参数梯度*学习率)。例如令学习率为lr=0.1,偏置参数梯度记为db,则bias[k]=bias[k]–0.1*db[k]。

本实施例具体从输入梯度误差矩阵中按行抽取dS行数据组成的子矩阵的次数为O次,其中dS=nH*nW,O为卷积层前向计算输出数据的通道数。

本实施例步骤S05中,从步骤S01得到的输入特征数据矩阵中抽取(N*nnH*nnW)*C阶子矩阵(抽取子矩阵的总次数具体为kH*kW)传输到各个核的向量阵列存储器AM中具体步骤包括:

步骤S501:令h=0,w=0,其中h的取值范围为{0,...,kH-1},w的取值范围为{0,…,kW-1},以及令c=0,m=0,n=0,c的取值范围为{0,…,N-1},m的取值范围为{0,…,nnH-1},n的取值范围为{0,…,nnW-1},创建一个大小为(N*nnH*nnW)的向量flag;

步骤S502:判断是否满足h+m>pH-1&&h+mpW-1且w+n<(pW+W),若是则转S503,否则转S507;

步骤S503:构建长度为C的向量temp,令i=0,i的取值范围为{0,…,C-1},t=(h+m-pH)*W+(w+n-pW);

步骤S504:判断i是否大于C-1,若是,则转10.6,若不是,则将输入数据矩阵中第i*H*W+t行第c列的像素点提取至temp中的第i个位置,转步骤10.5。

步骤S505:i增1,转步骤S504;

步骤S506:传输temp向量到子矩阵中;

步骤S507:n增1,判断n是否大于nnW-1,若是则转S508,若不是转步骤S502;

步骤S508:m增1,n=0判断m是否大于nnH-1,若是则转S509,若不是转步骤S502。

步骤S509:c增1,m=0,n=0判断c是否大于N-1,若是则转步骤S511,若不是转步骤S502;

步骤S510:w增1,c=0,m=0,n=0,判断w是否大于kW-1,若是则转S511,若不是转步骤S502;

步骤S511:h增1,w=0,c=0,m=0,n=0,判断h是否大于kH-1,若是当前流程中止,若不是转步骤S502。

本实施例步骤S06中,向量处理器对步骤S05中所述输入误差梯度矩阵和输入特征数据的子矩阵执行向量化矩阵乘法计算的具体步骤包括:

步骤S601:向量处理器将所述输入数据分别传输到向量处理器的向量阵列存储器AM中预设的输入数据缓冲区中,输入数据矩阵规模为(N*nnH*nnW)*C阶;

步骤S602:向量处理器将所述输入误差梯度矩阵分别传输到向量处理器的标量存储器SM中预设的数据缓冲区中,输入误差梯度矩阵规模为(O*nnH*nnW)*N阶,令i=0,j=0;步骤S603:令x=i*N*nnH*nnW+j,o=x/(nnH*nnW*N),c=x/(nnH*nnW)-o*N,s=x/nnW-o*N*nnH-c*nnH,r=x%nnW,st=o*nnH*nnW+(s/S)*nnW+(r/S),如果s%S不等于0或者r%S不等于0,跳转步骤S605,反之令:yc=j/(nnH*nnW),ym=j/nnW–yc*

nnH,yn=j%nnW,若h+ym大于pH–1且h+ym小于pH+H且w+yn大于pW-1且w+yn小于pW+W,则向量处理器的向量处理单元VPU将输入特征数据矩阵的第j行数据读取到一个向量寄存器;

步骤S604:向量处理器的标量处理部件SPU从输入误差梯度矩阵读取第st行第c列元素到一个标量寄存器,将该标量寄存器与步骤S603得到的标量寄存器进行乘累加计算;步骤S605:j自增1,判断j是否大于等于N*nnH*nnW,若为是,跳转步骤S606,若为否,跳转步骤S603;

步骤S606:i自增1,判断i是否大于等于O,若为是,结束当前流程;若为否,j=0跳转步骤S603。

本实施例步骤S06中,传输卷积层权重参数的梯度的具体步骤包括:向量处理器将当前执行向量化矩阵乘法计算得到的二维矩阵的第m行第n列元素提取到卷积层权重梯度矩阵的第m行第n*kH*kW+h*kW+w列,其中m的取值范围是{0,…O-1},n的取值范围是{0,…,C-1};所述根据学习率更新卷积层权重参数的具体步骤包括:向量处理器将卷积核矩阵和卷积层权重参数梯度分别传输到向量处理器的各个核的标量阵列存储器SM中预设的输入数据缓冲区中,向量加速器逐行读取卷积核矩阵和卷积层权重参数梯度矩阵,并按照下式进行更新:当前卷积核矩阵行-(当前卷积层偏置参数梯度矩阵行*学习率),例如令学习率为lr=0.1,权重参数梯度记为dw,卷积核矩阵记为Weight,则Weight[i][j]=Weight[i][j]–0.1*dw[i][j]。重复O次后完成对卷积层权重参数的更新。

本发明通过将每个卷积核数据扩展成向量数据,与全部的输入数据同时进行向量乘累加计算,能够充分发挥向量处理器的SIMD和核间并行性,大幅度提升卷积神经网络的计算效率,同时通过将同一样本的所有输入误差梯度数据存储在一个列上,卷积核数据与输入误差梯度数据的全部乘累加计算都是在同一个VPE处理单元上操作,能够避免多个处理单元之间的规约求和,提高向量处理器的整体计算效率。本发明多样本多通道卷积反向传播向量化实现方法,不仅计算效率高,且还能提高计算准确度,能够兼顾效率和准确度,可适用于卷积反向传播计算的批量化处理,且可以支持方便灵活设置批处理大小。

以下以在具体应用实施例中采用本发明上述方法实现卷积反向传播向量化为例,对本发明进行进一步说明。

本实施例中目标向量处理器的核数具体为q=4,每个核的向量处理单元VPE个数为p=16,训练样本数目为N,其中N=q*p=64,当前卷积层的卷积神经网络的输入特征图高度H和宽度W均为2,通道数C为3,卷积核大小KC为12,且kH和kW均为2,卷积核的数量O为2,K=8,卷积计算的步长S为1。设高和宽方向填充的0元素个数均为1,则原图像扩大为4*4。由nH=H+2pH–kH+1,nW=W+2pW–kW+1可知,输出图像大小为3*3。本实施例多样本多通道卷积反向传播向量化实现方法的详细步骤为:

步骤1.卷积神经网络前向计算的输入特征数据和反向传播的输入误差梯度按照样本维优先的方式存储为二维矩阵。令卷积神经网络当前层的输入误差梯度为M*N阶矩阵,上述M*N阶矩阵的每一列存储单个样本的输入误差梯度数据,且在该列的存储顺序为图像宽度nW方向优先,接着是图像高度nH方向优先,最后是图像通道O方向优先。输入误差梯度矩阵的元素具体表示为y[i][m],其中列坐标m表示第m+1个样本,取值范围为{0,1,2,...,N-1};行坐标i表示该样本的第i+1个输入特征值,取值范围为{0,1,2,...,O*nH*nW-1}。

将卷积核的数据按照卷积核的数量维优先的方式存储具体包括:将卷积核的数据按照O*KC=2*12阶的矩阵连续存储在向量处理器的片外存储器,其中O为卷积核的数量,KC=kH*kW*C=12为单个卷积核的像素数据数目,C为输入图片的通道数。

上述O*K阶矩阵的每一行存储单个卷积核的像素数据,且在该行的存储顺序为卷积核高度kW方向优先,接着是卷积核高度kH方向优先,最后是通道C方向优先。卷积核数据矩阵的元素具体表示为w[j][c],其中行坐标j表示第j+1个卷积核,取值范围为{0,1,2,...,O-1},列坐标c表示该卷积核的第c+1个像素数据值,取值范围为{0,1,2,...,C*kH*kW-1}。偏置数据列向量的元素表示为bias[j],其中坐标j对应第j+1个卷积核,取值范围为{0,1,2,...,O-1},每个卷积核对应一个偏置数据值。

步骤2:向量处理器从步骤1中的输入误差梯度矩阵中按行抽取V行数据组成第一子矩阵传输到各个核的向量阵列存储器AM中,其中0

具体从M*N=18*64阶的输入误差梯度矩阵中按行抽取V行数据组成的V*N阶的子矩阵传输到各个核的向量阵列存储器AM中,每个核再通过标、向量协作的向量化矩阵乘法计算,得到C*N=3*64阶的输出误差梯度矩阵。按照如上述步骤S201~S208抽取第一子矩阵后,可以从M*N=18*64阶的输入误差梯度矩阵中按行抽取V=valid行数据,组成的V*N=valid*64阶的输入误差梯度矩阵的子矩阵,补0元素在计算过程中实现,不需要0元素的实际存储。从M*N阶的输入误差梯度矩阵中,按行抽取V行数据组成的V*N阶的输入误差梯度矩阵的子矩阵的总次数具体为H*W=2*2,其中:nH=H+2pH–kH+1,nW=W+2pW-kW+1,nnH=nH,nnW=nW,H’=H+2pH,W’=W+2pW。

步骤3.向量处理器将步骤S1中的卷积核矩阵传输到各个核的标量存储器SM中。

步骤4.向量处理器各个核对步骤S02的输入误差梯度子矩阵和卷积核矩阵执行向量化矩阵乘法,计算输出误差梯度矩阵。

具体将O*KC=2*12阶的卷积核数据矩阵与V*N=valid*64阶的输入误差梯度子矩阵,执行向量化矩阵乘法计算和各个核的并行化矩阵乘法计算,具体实施步骤如上述步骤S301~S306所述。

步骤5.将步骤4中输出误差梯度矩阵的计算结果传输到向量处理器的片外存储器。

步骤6.重复步骤2至步骤5,直到完成全部输入误差梯度矩阵计算。

步骤7:向量处理器从步骤S01中的输入误差梯度矩阵中按行抽取dS=3*3=9行数据组成的子矩阵传输到各个核的向量阵列存储器AM中,并对该子矩阵执行向量化矩阵求和计算,得到卷积层偏置参数的梯度,如图6所示,元素索引均从0开始,R(x,y)代表第x幅输入图像在第0通道上的第y个位置处的值。G(x,y)代表第x幅输入图像在第1通道上的第y个位置处的值。其中db[0]表示向量bias在第0个位置处的梯度值,该值为所有输入样本在第0个通道处的梯度值的和。db[1]表示向量bias在第1个位置处的梯度值,该值为所有输入样本在第1个通道处的梯度值的和。在图6中,db[0]的值为输入误差梯度矩阵的第0行到第8行所有元素值的和,db[1]的值为输入误差梯度矩阵的第0行到第8行所有元素值的和。

对子矩阵执行向量化矩阵求和计算具体如上述步骤S401~S402所述,其中每个核传入的输入误差梯度矩阵规模为(nH*nW)*p=9*16阶,向量处理器的每个核的向量处理部件VPU遍历输入误差梯度矩阵nH*nW=9行后,向量处理器完成卷积层偏置参数梯度中的某一分量的计算。

步骤8.将卷积层偏置参数梯度计算结果传输到向量处理器的片外存储器中。

步骤9.重复执行步骤7、步骤8直至完成全部卷积层偏置参数梯度的计算,并根据学习率更新卷积层偏置参数,具体令学习率为lr=0.1,偏置参数梯度记为db,则bias[k]=bias[k]–0.1*db[k],如图7所示。

步骤10:向量处理器将步骤1中的输入误差梯度矩阵传输到各个核的标量存储器SM中,从步骤1中的输入特征数据矩阵中抽取(N*nnH*nnW)*C=576*3阶子矩阵传输到各个核的向量阵列存储器AM中,其中N为训练样本的数目。抽取子矩阵具体如上述步骤S501~S511所述。

步骤11:向量处理器每个核对步骤10中的输入误差梯度矩阵和输入特征数据子矩阵执行向量化矩阵乘法计算,具体步骤如上述步骤S601~S606所述,计算得到卷积层权重参数的梯度。

步骤12:将步骤11卷积层权重参数梯度的计算结果传输到向量处理器的片外存储器中。具体向量处理器将步骤11得到的二维矩阵的第m行第n列元素提取到卷积层权重梯度矩阵的第m行第n*kH*kW+h*kW+w列。

步骤13:重复步骤10至12,直至完成全部卷积层权重参数梯度的更新,并根据学习率更新卷积层权重参数。重复2次后,完成对卷积层权重参数的更新,并令学习率为lr=0.1,权重参数梯度记为dw,卷积核矩阵记为Weight,则Weight[i][j]=Weight[i][j]–0.1*dw[i][j]。

上述通过执行上述步骤2~6后,得到的输出误差梯度矩阵规模为P*N阶矩阵,其中N为训练样本数目;P=H*W*C为单个样本的输入特征数目。P*N阶的输出误差梯度矩阵是按照样本维优先的方式连续存储到向量处理器的片外存储器,即P*N阶矩阵的每一列存储单个样本的输出误差梯度,并且在该列的存储顺序为图像宽度W方向优先,然后是图像高度H方向优先,最后是通道C方向优先。输出误差梯度矩阵的元素具体表示为为a[j][m],其中列坐标m表示第m+1个样本,取值范围为{0,1,2,...,N-1},行坐标j表示该样本的第j+1个输出特征值,取值范围为{0,1,2,...,H*W*C-1}。

上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

相关技术
  • 多样本多通道卷积神经网络Same卷积向量化实现方法
  • 多样本多通道卷积神经网络池化的向量化实现方法
技术分类

06120115931972