System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种提升GRU反向传播速度的方法技术_技高网

一种提升GRU反向传播速度的方法技术

技术编号:43576147 阅读:2 留言:0更新日期:2024-12-06 17:43
本发明专利技术提供一种提高GRU反向传播速度的方法,包括:S0,设置一个反向遍历的index,起始位置为seq_length‑1,终止索引值为0,步长为1;S1,得到gate_i和gate_h的梯度和old_h的梯度;S2,得到权重梯度;S3,得到bias梯度;S4,得到输入的梯度。现有GRU反向传播过程中会通过切片操作,每次训练遍历一个序列长度,而且每次都要进行一次推理计算,而且当双向GRU计算流程是串行的,本方法将在推理时保存反向传播计算要的数据,不再进行重复计算,同时不再使用切片存取数据,而是直接通过核函数索引坐标对数据进行操作,也修改双向GRU计算流程为并行,从而提高了GRU推理速度。

【技术实现步骤摘要】

本专利技术属于循环神经网络的算子推理流程领域,特别涉及一种提升gru反向传播速度的方法。


技术介绍

1、现有技术中,gru全称是gate recurrent unit(门循环单元),它是循环神经网络(recurrent neural network,rnn)的一种。是为了解决长期记忆和反向传播中的梯度等问题而提出来的。rnn是一种用于处理序列数据的神经网络。反向传播是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。现有训练量化gru流程中,存在训练速度较慢的缺陷,在深度学习训练模型中,模型的训练需要通过正向传播推理和反向传播更新权重的过程。在北京君正集成电路股份有限公司(简称:君正)的产品中,君正magik是一个为端侧ai应用场景打造的集模型训练、优化转换、部署推理于一体的全栈式深度学习开放平台,提升平台训练量化的算子支持广度与效率,循环神经网络是必须要支持的重要一部分,循环神经网络对处理音频与文字识别具有重要位置,gru算子属于训练神经网络的一种。而提升君正magik平台gru算子的推理速度与训练速度,目前存在的问题是现有gru算子量化训练速度要比官方(cudnn)的速度慢很多,必须提高其训练速度节省训练时间。


技术实现思路

1、为了解决上述问题,本申请的目的在于:为提升gru算子反向传播速度提出解决方法。

2、具体地,本专利技术提供一种提高gru反向传播速度的方法。从而提高gru算子量化训练的速度。其中,所述方法包括:

3、s0,设置一个反向遍历的index,起始位置为seq_length-1,终止索引值为0,步长为1;

4、使用cuda核函数完成具体实现,所述核函数是指在gpu端运行的代码,就是规定gpu的各个线程访问哪个数据并执行什么计算;

5、cuda从逻辑上将gpu线程分成了三个层次:线程格grid、线程块block和线程thread;s1.得到gate_i和gate_h的梯度和old_h的梯度;

6、核函数实现:

7、historys为默认保存的gru正向推理时的历史数据,用于计算梯度使用。historys_gate_h保存的是gru正向推理的gate_h的历史数据,用于梯度计算

8、设置grid_y如果是双向grid_y=2否则=1

9、设置block=512

10、循环index从seq_lenght-1到0:

11、gru_backward_kernel核函数<<<grid_y,block>>>传入index和所需要的参数

12、gru_backward_kernel核函数主要计算gate_i和gate_h的梯度具体流程试下如下:

13、设置seq_step=batch_size*hidden_size*3

14、设置his_step=batch_size*hidden_size*4

15、设置offset=blockidx.x*hidden_size*3

16、设置history_offset=blockidx.x*hidden_size*4

17、设置i=threadidx.xf_h为此时正向推理的历史状态值用于梯度计算

18、如果blockidx.y=0则执行

19、如果i<hidden_size则执行:

20、history_s_offset=index*history_step,

21、rg=historys[history_s_offset+history_offset+i],

22、zg=historys[history_s_offset+history_offset+i+hidden_size],

23、ng=historys[history_s_offset+history_offset+i+hidden_size*2],

24、grad_h_data=输出梯度[i*batch_size*hidden_size+blockidx.x*

25、hidden_size+]+状态值的梯度[blockidx.x*hidden_size+i],

26、d_n=grad_h_data*(1-zg)*(1-ng*ng),

27、d_r=d_n*historys_gate_h[seq_offset_+i+hidden_size*2]*(1-r_t)*r_t,

28、d_z=grad_h_data*(f_h[index*batch_size*hidden_size+blockidx.x*hidden_size+i]-ng)*(1-zg)*zg,

29、d_h_old=grad_h_data*zg,

30、d_gate_i[blockidx.x*hidden_size*3+i]=d_r,

31、d_gate_i[blockidx.x*hidden_size*3+i+hidden_size]=d_z,

32、d_gate_i[blockidx.x*hidden_size*3+i+2*hidden_size]=d_n,

33、d_gate_h[blockidx.x*hidden_size*3+i]=d_r,

34、d_gate_h[blockidx.x*hidden_size*3+i+hidden_size]=d_z,

35、d_gate_h[blockidx.x*hidden_size*3+i+2*hidden_size]=d_n*rg;

36、如果blockidx.y=1则为双向gru逆向梯度计算。同正向梯度计算流程一样,此处略;

37、gate_i和gate_h的梯度分别记作d_gate_i,d_gate_h,维度为(batch,hidden_size*3);old_h的梯度记作d_h_old;

38、s2.得到权重梯度;

39、正向推理中的w_ir,w_iz,w_in的维度都为(input,hidden_size),所以是将w_ir,w_iz,w_in放在一起同时处理的,这里统称为w_i,w_i的维度为(3×hidden_size,input_size);

40、同样的w_hr,w_hz,w_hn也是放在一起的,这里统称为w_h,维度为(3×hidden_size,hidden_size);

41、核函数实现:

42、将线程块设置成(batch_size,direction)direction值表示单向或双向gru取值范围为[1,2];thread线程设置成512;

43、设置指针的偏移:

44、w_ih_offset=本文档来自技高网...

【技术保护点】

1.一种提高GRU反向传播速度的方法,其特征在于,所述方法包括:S0,设置一个反向遍历的index,起始位置为seq_length-1,终止索引值为0,步长为1;

2.根据权利要求1所述的一种提高GRU反向传播速度的方法,其特征在于,所述步骤S0中seq_lenght为5,index的值变换为4,3,2,1,0。

3.根据权利要求1所述的一种提高GRU反向传播速度的方法,其特征在于,所述

4.根据权利要求3所述的一种提高GRU反向传播速度的方法,其特征在于,所述步骤S1中的梯度,是将梯度所用数据套入如下反向传播即链式求导获得:

5.根据权利要求4所述的一种提高GRU反向传播速度的方法,其特征在于,所述步骤S2中,权重梯度的计算公式为:

【技术特征摘要】

1.一种提高gru反向传播速度的方法,其特征在于,所述方法包括:s0,设置一个反向遍历的index,起始位置为seq_length-1,终止索引值为0,步长为1;

2.根据权利要求1所述的一种提高gru反向传播速度的方法,其特征在于,所述步骤s0中seq_lenght为5,index的值变换为4,3,2,1,0。

3.根...

【专利技术属性】
技术研发人员:闫少甫
申请(专利权)人:北京君正集成电路股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1