本发明涉及深度学习算法的技术领域,具体涉及一种混合精度深度学习算法。
背景技术:
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像、声音和文本,其概念由Hinton等人于2006年提出。基于深度置信网络(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外,Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。深度神经网络是一种具备至少一个隐层的神经网络,图1为神经元的示意图,图2为神经网络结构的示意图。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。深度学习是一种典型的计算密集型问题,计算量非常大。目前而言,有双精度的深度学习,也有单精度的深度学习,虽然结果都是收敛的,但是精度不一样。对于这种计算密集型的应用,一个较好的选择就是使用众核加速,比如使用GPU(图形处理器)进行加速计算。对于这类加速部件而言,单精度的减速速度往往是双精度的两倍,因此,利用单精度计算来达到双精度的结果是一个值得研究的课题。
在现代体系结构上,32位浮点运算通常至少要比64位浮点运算快两倍。人们很早就发现在求解线性方程组时可以采用低精度计算获得计算加速,而只用少量的高精度计算达到与全部用高精度的一致的计算结果。1948年,威尔金森在设计、制造图灵计算机时,提出求解线性方程组的迭代改进(iterative refinement)。求解线性方程组Ax=b的迭代改进思想可以描述为:
x(0)=0
d(s)=b-Ax(s)compute residual in high precision
Ac(s)=d(s)solve equation system in low precision
x(s+1)=x(s)+c(s)accumulate solution in high precision
威尔金森和他的合作者们证明:如果矩阵A不是高度病态,连续对x用混合精度求解,会收敛到全部用高精度计算的结果。对于线性方程组求解,90%以上的浮点计算可以通过低精度来完成,并且不会影响解的精度。混合精度计算的主要思想是通过对计算密集部分采用低精度,对少量关键步骤采用高精度,从而达到计算加速的一种策略。
混合精度计算的有效性在于必须保证最终的计算精度没有损失。Langou等(2006年)在Cell及主流CPU上应用于稠密矩阵求解对混合精度算法的有效性进行了全面测试。Goddeke等(2008年)在大规模矩阵的多重网格求解进行了测试。这些测试证实了混合精度计算结果与全部用高精度计算结果的精度完全一致。
技术实现要素:
针对相关技术中存在的不足,本发明所要解决的技术问题在于:提供一种既保证了计算精度不变,又提高了计算效率的混合精度深度学习算法。
为解决上述技术问题,本发明采用的技术方案为:混合精度深度学习算法,包括以下步骤:S101、利用单精度众核处理器进行前向传播计算,对每一网络层计算出每一个神经元的值;S102、利用单精度众核处理器进行后向传播计算,对每一网络层计算出误差残量值;S103、利用单精度众核处理器计算权值的增量;S104、将单精度众核处理器计算出的增量权值更新到高精度众核处理器计算出的增量权值上,完成一次迭代计算。
优选地,所述混合精度深度学习算法发生于深度学习的迭代后期。
优选地,步骤102中,所述进行后向传播计算,对每一网络层计算出误差残量值,具体包括:将上一层的残差乘以当前层的权值,并与当前层的梯度做乘法,得出所有层的误差残量值。
优选地,步骤103中,所述计算权值的增量,具体包括:利用后向传播中计算出来的每一网络层的残差值,通过梯度等计算出权值变化量。
本发明的有益技术效果在于:本发明中的混合精度深度学习算法,先利用单精度进行前向传播计算、后向传播计算以及权值增量的计算,对每一网络层计算出每一个神经元的值、误差残量值和权值的增量,再将上述步骤计算出的单精度增量权值更新到高精度权值上,完成一次迭代计算;不同于某些优化算法在提高效率的同时也需要改变精度的特征,本发明对计算密集部分采用低精度、对少量关键步骤采用高精度的计算加速方法,其得出的结果,和全部采用高精度计算得出的结果的精度完全一致;本发明中的深度学习采用了众核处理器来进行加速,而对众核处理器而言,单精度往往要比双精度快一倍,因此混合精度计算能极大的提高计算速度;此外,由于算法中大量利用单精度,因此相应的通信量也降低了一倍,在深度学习中,各层之间的连接关系往往为全连接,因此,减小通信量能够极大的提高算法的可扩展能力。
附图说明
图1是深度学习算法中神经元的示意图;
图2为深度学习算法中神经网络结构的示意图;
图3是本发明实施例一提供的混合精度深度学习算法的流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例;基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图3是本发明实施例一提供的混合精度深度学习算法的流程示意图,如图3所示,混合精度深度学习算法,包括以下步骤:
S101、利用单精度众核处理器进行前向传播计算,对每一网络层计算出每一个神经元的值。
S102、利用单精度众核处理器进行后向传播计算,对每一网络层计算出误差残量值。
S103、利用单精度众核处理器计算权值的增量。
S104、将单精度众核处理器计算出的增量权值更新到高精度众核处理器计算出的增量权值上,完成一次迭代计算。
深度学习算法在实现上主要分为以下三个阶段:前向传播,后向传播,参数更新。前向传播可以简单理解为根据给定的输入计算输出。通过组合每一个layer层的计算,(可以理解为f(x)=h(g(x))这种复合函数的形式),传播方式是自底向上(bottom to top,所以我们称作前向传播)。如图2所示。其主要计算流程为:
后向传播算法的主要思路为:给定一个样例(x,y),首先进行“前向传导”运算,计算出网络中所有的激活值,包括h{W,b}(x)的输出值。之后,针对第l层的每一个节点i,计算出其“残差”δil,该残差表明了该节点对最终输出值的残差产生了多少影响。对于最终的输出节点,可以直接算出网络产生的激活值与实际值之间的差距,将这个差距定义为δin(第n层表示输出层)。对于隐藏单元如何处理呢?将基于节点(第l+1层节点)残差的加权平均值计算δil,这些节点以ail作为输入。通过与权值以及当前层的导数做计算,可逐层得出每一层的残差。
概括地说,后向传播计算就是利用上一层的残差乘以当前层的权值,并与当前层的梯度做乘法,这样得出所有层的残差值。
最后一步就是权值参数的更新,就是利用反向传播中计算出来的每一层的残差值,通过梯度等计算出权值变化量,然后进行权值更新。
具体地,所述混合精度深度学习算法发生于深度学习的迭代后期。
这种利用混合精度进行计算的方法,之所以能够保证精度不损失,其实是有一个前提条件的,即每次更新的增量值在绝对值上都远小于全量值,从而增量只要有少数几位的有效数字即可满足精度要求。但是,深度学习在开始阶段迭代的时候,增量值和全量值,大小差异并不大,只是到了迭代后期,迭代值比较接近真值时,二者才满足这个前提条件。因此,目前这种混合精度的计算方案只能用在迭代后期。这往往也是非常重要的,因为迭代的大部分时间,大概百分之八十左右是花在后期的迭代中的。
具体地,步骤102中,所述进行后向传播计算,对每一网络层计算出误差残量值,具体包括:
将上一层的残差乘以当前层的权值,并与当前层的梯度做乘法,得出所有层的误差残量值。
具体地,步骤103中,所述计算权值的增量,具体包括:
利用后向传播中计算出来的每一网络层的残差值,通过梯度等计算出权值变化量。
与现有技术相比,本发明具有以下优点:1、保证了计算精度不变;不同于某些优化算法,在提高效率的同时也改变了精度,这样在某些对精度要求较高的地方,是难以让人接受的。2、提高了计算效率,当前深度学习广泛采用了众核处理器进行加速,而对众核处理器而言,单精度往往要比双精度快一倍,因此混合精度计算能极大的提高计算速度。3、可扩展能力强,由于算法中大量利用单精度,因此相应的通信量也降低了一倍;在深度学习中,各层之间的连接关系往往为全连接,因此,减小通信量能够极大的提高算法的可扩展能力。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。