精华内容
下载资源
问答
  • 卷积神经网络的训练过程

    万次阅读 多人点赞 2018-09-28 14:51:05
    卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传播训练的阶段,即反向传播...

     

    卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传播训练的阶段,即反向传播阶段。训练过程如图4-1所示。训练过程为:

    1、网络进行权值的初始化;

    2、输入数据经过卷积层、下采样层、全连接层的向前传播得到输出值;

    3、求出网络的输出值与目标值之间的误差;

    4、当误差大于我们的期望值时,将误差传回网络中,依次求得全连接层,下采样层,卷积层的误差。各层的误差可以理解为对于网络的总误差,网络应承担多少;当误差等于或小于我们的期望值时,结束训练。

    5、根据求得误差进行权值更新。然后在进入到第二步。

    技术分享图片

    图4-1卷积神经网络的训练过程

    1.1卷积神经网络的前向传播过程

    在前向传播过程中,输入的图形数据经过多层卷积层的卷积和池化处理,提出特征向量,将特征向量传入全连接层中,得出分类识别的结果。当输出的结果与我们的期望值相符时,输出结果。

    1.1.1卷积层的向前传播过程

    卷积层的向前传播过程是,通过卷积核对输入数据进行卷积操作得到卷积操作。数据在实际的网络中的计算过程,我们以图3-4为例,介绍卷积层的向前传播过程。其中一个输入为15个神经元的图片,卷积核为2×2×1的网络,即卷积核的权值为W1,W2,W3,W4。那么卷积核对于输入数据的卷积过程,如下图4-2所示。卷积核采用步长为1的卷积方式,卷积整个输入图片,形成了局部感受野,然后与其进行卷积算法,即权值矩阵与图片的特征值进行加权和(再加上一个偏置量),然后通过激活函数得到输出。

    技术分享图片

     

     图4-2图片深度为1,卷积层的向前传播过程

    而在图3-4中,图片深度为2时,卷积层的向前传播过程如图4-3所示。输入的图片的深度为4×4×2,卷积核为2×2×2,向前传播过程为,求得第一层的数据与卷积核的第一层的权值的加权和,然后再求得第二层的数据与卷积核的第二层的权值的加权和,两层的加权和相加得到网络的输出。

    技术分享图片

    图4-3图片深度为2,卷积层的向前传播过程

    1.1.2下采样层的向前传播过程

    上一层(卷积层)提取的特征作为输入传到下采样层,通过下采样层的池化操作,降低数据的维度,可以避免过拟合。如图4-4中为常见的池化方式示意。最大池化方法也就是选取特征图中的最大值。均值池化则是求出特征图的平均值。随机池化方法则是先求出所有的特征值出现在该特征图中的概率,然后在来随机选取其中的一个概率作为该特征图的特征值,其中概率越大的选择的几率越大。

    技术分享图片

     

    图4-4池化操作示意图

    1.1.3全连接层的向前传播过程

    特征图进过卷积层和下采样层的特征提取之后,将提取出来的特征传到全连接层中,通过全连接层,进行分类,获得分类模型,得到最后的结果。图4-5为一个三层的全连接层。假设卷积神经网络中,传入全连接层的特征为x1,x2。则其在全连接层中的向前传播过程如图4-5所示。第一层全连接层有3个神经元y1,y2,y3。这三个节点的权值矩阵为W,其中b1,b2,b3分别为节点y1,y2,y3的偏置量。可以看出,在全连接层中,参数的个数=全连接层中节点的个数×输入的特征的个数+节点的个数(偏置量)。其向前传递过程具体如图所示,得到输出矩阵后,经过激励函数f(y)的激活,传入下一层。

    技术分享图片

     

    图4-5全连接层的向前传播过程

    1.2卷积神经网络的反向传播过程

    当卷积神经网络输出的结果与我们的期望值不相符时,则进行反向传播过程。求出结果与期望值的误差,再将误差一层一层的返回,计算出每一层的误差,然后进行权值更新。该过程的主要目的是通过训练样本和期望值来调整网络权值。误差的传递过程可以这样来理解,首先,数据从输入层到输出层,期间经过了卷积层,下采样层,全连接层,而数据在各层之间传递的过程中难免会造成数据的损失,则也就导致了误差的产生。而每一层造成的误差值是不一样的,所以当我们求出网络的总误差之后,需要将误差传入网络中,求得该各层对于总的误差应该承担多少比重。

    反向传播的训练过程的第一步为计算出网络总的误差:求出输出层n的输出a(n)与目标值y之间为误差。计算公式为:

                 技术分享图片其中,为激励函数的导函数的值。

    1.2.1全连接层之间的误差传递

    求出网络的总差之后,进行反向传播过程,将误差传入输出层的上一层全连接层,求出在该层中,产生了多少误差。而网络的误差又是由组成该网络的神经元所造成的,所以我们要求出每个神经元在网络中的误差。求上一层的误差,需要找出上一层中哪些节点与该输出层连接,然后用误差乘以节点的权值,求得每个节点的误差,具体如图所示:

    技术分享图片

     

    图4-6 全连接层中误差的传递过程

    1.2.2当前层为下采样层,求上一层的误差

    在下采样层中,根据采用的池化方法,把误差传入到上一层。下采样层如果采用的是最大池化(max-pooling)的方法,则直接把误差传到上一层连接的节点中。果采用的是均值池化(mean pooling)的方法,误差则是均匀的分布到上一层的网络中。另外在下采样层中,是不需要进行权值更新的,只需要正确的传递所有的误差到上一层。

    1.2.3当前层为卷积层,求上一层的误差

    卷积层中采用的是局部连接的方式,和全连接层的误差传递方式不同,在卷积层中,误差的传递也是依靠卷积核进行传递的。在误差传递的过程,我们需要通过卷积核找到卷积层和上一层的连接节点。求卷积层的上一层的误差的过程为:先对卷积层误差进行一层全零填充,然后将卷积层进行一百八十度旋转,再用旋转后的卷积核卷积填充过程的误差矩阵,并得到了上一层的误差。如图4-7为卷积层的误差传递过程。图右上方为卷积层的向前卷积过程,而右下方为卷积层的误差传递过程。从图中可以看出,误差的卷积过程正好是沿着向前传播的过程,将误差传到了上一层。

    技术分享图片

     

    图4-7卷积层的误差传递过程

    1.3卷积神经网络的权值更新

    1.3.1卷积层的权值更新

    卷积层的误差更新过程为:将误差矩阵当做卷积核,卷积输入的特征图,并得到了权值的偏差矩阵,然后与原先的卷积核的权值相加,并得到了更新后的卷积核。如图4-8,图中可以看出,该卷积方式的权值连接正好和向前传播中权值的连接是一致的。

    技术分享图片

     

    图4-8卷积核的权值更新过程

    1.3.2全连接层的权值更新过程

    全连接层中的权值更新过程为:

    1、求出权值的偏导数值:学习速率乘以激励函数的倒数乘以输入值;

    2、原先的权值加上偏导值,得到新的权值矩阵。具体的过程如图4-9所示(图中的激活函数为Sigmoid函数)。

    技术分享图片

    图4-9全连接层的权值更新过程

    展开全文
  • 卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传播训练的阶段,即反向传播...

     

    卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传播训练的阶段,即反向传播阶段。训练过程如图4-1所示。训练过程为:

    1、网络进行权值的初始化;

    2、输入数据经过卷积层、下采样层、全连接层的向前传播得到输出值;

    3、求出网络的输出值与目标值之间的误差;

    4、当误差大于我们的期望值时,将误差传回网络中,依次求得全连接层,下采样层,卷积层的误差。各层的误差可以理解为对于网络的总误差,网络应承担多少;当误差等于或小于我们的期望值时,结束训练。

    5、根据求得误差进行权值更新。然后在进入到第二步。

    技术分享图片

    图4-1卷积神经网络的训练过程

    1.1卷积神经网络的前向传播过程

    在前向传播过程中,输入的图形数据经过多层卷积层的卷积和池化处理,提出特征向量,将特征向量传入全连接层中,得出分类识别的结果。当输出的结果与我们的期望值相符时,输出结果。

    1.1.1卷积层的向前传播过程

    卷积层的向前传播过程是,通过卷积核对输入数据进行卷积操作得到卷积操作。数据在实际的网络中的计算过程,我们以图3-4为例,介绍卷积层的向前传播过程。其中一个输入为15个神经元的图片,卷积核为2×2×1的网络,即卷积核的权值为W1,W2,W3,W4。那么卷积核对于输入数据的卷积过程,如下图4-2所示。卷积核采用步长为1的卷积方式,卷积整个输入图片,形成了局部感受野,然后与其进行卷积算法,即权值矩阵与图片的特征值进行加权和(再加上一个偏置量),然后通过激活函数得到输出。

    技术分享图片

     

     图4-2图片深度为1,卷积层的向前传播过程

    而在图3-4中,图片深度为2时,卷积层的向前传播过程如图4-3所示。输入的图片的深度为4×4×2,卷积核为2×2×2,向前传播过程为,求得第一层的数据与卷积核的第一层的权值的加权和,然后再求得第二层的数据与卷积核的第二层的权值的加权和,两层的加权和相加得到网络的输出。

    技术分享图片

    图4-3图片深度为2,卷积层的向前传播过程

    1.1.2下采样层的向前传播过程

    上一层(卷积层)提取的特征作为输入传到下采样层,通过下采样层的池化操作,降低数据的维度,可以避免过拟合。如图4-4中为常见的池化方式示意。最大池化方法也就是选取特征图中的最大值。均值池化则是求出特征图的平均值。随机池化方法则是先求出所有的特征值出现在该特征图中的概率,然后在来随机选取其中的一个概率作为该特征图的特征值,其中概率越大的选择的几率越大。

    技术分享图片

     

    图4-4池化操作示意图

    1.1.3全连接层的向前传播过程

    特征图进过卷积层和下采样层的特征提取之后,将提取出来的特征传到全连接层中,通过全连接层,进行分类,获得分类模型,得到最后的结果。图4-5为一个三层的全连接层。假设卷积神经网络中,传入全连接层的特征为x1,x2。则其在全连接层中的向前传播过程如图4-5所示。第一层全连接层有3个神经元y1,y2,y3。这三个节点的权值矩阵为W,其中b1,b2,b3分别为节点y1,y2,y3的偏置量。可以看出,在全连接层中,参数的个数=全连接层中节点的个数×输入的特征的个数+节点的个数(偏置量)。其向前传递过程具体如图所示,得到输出矩阵后,经过激励函数f(y)的激活,传入下一层。

    技术分享图片

     

    图4-5全连接层的向前传播过程

    1.2卷积神经网络的反向传播过程

    当卷积神经网络输出的结果与我们的期望值不相符时,则进行反向传播过程。求出结果与期望值的误差,再将误差一层一层的返回,计算出每一层的误差,然后进行权值更新。该过程的主要目的是通过训练样本和期望值来调整网络权值。误差的传递过程可以这样来理解,首先,数据从输入层到输出层,期间经过了卷积层,下采样层,全连接层,而数据在各层之间传递的过程中难免会造成数据的损失,则也就导致了误差的产生。而每一层造成的误差值是不一样的,所以当我们求出网络的总误差之后,需要将误差传入网络中,求得该各层对于总的误差应该承担多少比重。

    反向传播的训练过程的第一步为计算出网络总的误差:求出输出层n的输出a(n)与目标值y之间为误差。计算公式为:

                 技术分享图片其中,为激励函数的导函数的值。

    1.2.1全连接层之间的误差传递

    求出网络的总差之后,进行反向传播过程,将误差传入输出层的上一层全连接层,求出在该层中,产生了多少误差。而网络的误差又是由组成该网络的神经元所造成的,所以我们要求出每个神经元在网络中的误差。求上一层的误差,需要找出上一层中哪些节点与该输出层连接,然后用误差乘以节点的权值,求得每个节点的误差,具体如图所示:

    技术分享图片

     

    图4-6 全连接层中误差的传递过程

    1.2.2当前层为下采样层,求上一层的误差

    在下采样层中,根据采用的池化方法,把误差传入到上一层。下采样层如果采用的是最大池化(max-pooling)的方法,则直接把误差传到上一层连接的节点中。果采用的是均值池化(mean pooling)的方法,误差则是均匀的分布到上一层的网络中。另外在下采样层中,是不需要进行权值更新的,只需要正确的传递所有的误差到上一层。

    1.2.3当前层为卷积层,求上一层的误差

    卷积层中采用的是局部连接的方式,和全连接层的误差传递方式不同,在卷积层中,误差的传递也是依靠卷积核进行传递的。在误差传递的过程,我们需要通过卷积核找到卷积层和上一层的连接节点。求卷积层的上一层的误差的过程为:先对卷积层误差进行一层全零填充,然后将卷积层进行一百八十度旋转,再用旋转后的卷积核卷积填充过程的误差矩阵,并得到了上一层的误差。如图4-7为卷积层的误差传递过程。图右上方为卷积层的向前卷积过程,而右下方为卷积层的误差传递过程。从图中可以看出,误差的卷积过程正好是沿着向前传播的过程,将误差传到了上一层。

    技术分享图片

     

    图4-7卷积层的误差传递过程

    1.3卷积神经网络的权值更新

    1.3.1卷积层的权值更新

    卷积层的误差更新过程为:将误差矩阵当做卷积核,卷积输入的特征图,并得到了权值的偏差矩阵,然后与原先的卷积核的权值相加,并得到了更新后的卷积核。如图4-8,图中可以看出,该卷积方式的权值连接正好和向前传播中权值的连接是一致的。

    技术分享图片

     

    图4-8卷积核的权值更新过程

    1.3.2全连接层的权值更新过程

    全连接层中的权值更新过程为:

    1、求出权值的偏导数值:学习速率乘以激励函数的倒数乘以输入值;

    2、原先的权值加上偏导值,得到新的权值矩阵。具体的过程如图4-9所示(图中的激活函数为Sigmoid函数)。

    技术分享图片

    图4-9全连接层的权值更新过程

    展开全文
  • 卷积神经网络(CNN)的训练过程

    千次阅读 2018-05-09 11:46:00
    卷积神经网络的训练过程 卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行...

    卷积神经网络的训练过程

    卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传播训练的阶段,即反向传播阶段。训练过程如图4-1所示。训练过程为:

    1、网络进行权值的初始化;

    2、输入数据经过卷积层、下采样层、全连接层的向前传播得到输出值;

    3、求出网络的输出值与目标值之间的误差;

    4、当误差大于我们的期望值时,将误差传回网络中,依次求得全连接层,下采样层,卷积层的误差。各层的误差可以理解为对于网络的总误差,网络应承担多少;当误差等于或小于我们的期望值时,结束训练。

    5、根据求得误差进行权值更新。然后在进入到第二步。

    图4-1卷积神经网络的训练过程

    1.1卷积神经网络的前向传播过程

    在前向传播过程中,输入的图形数据经过多层卷积层的卷积和池化处理,提出特征向量,将特征向量传入全连接层中,得出分类识别的结果。当输出的结果与我们的期望值相符时,输出结果。

    1.1.1卷积层的向前传播过程

    卷积层的向前传播过程是,通过卷积核对输入数据进行卷积操作得到卷积操作。数据在实际的网络中的计算过程,我们以图3-4为例,介绍卷积层的向前传播过程。其中一个输入为15个神经元的图片,卷积核为2×2×1的网络,即卷积核的权值为W1,W2,W3,W4。那么卷积核对于输入数据的卷积过程,如下图4-2所示。卷积核采用步长为1的卷积方式,卷积整个输入图片,形成了局部感受野,然后与其进行卷积算法,即权值矩阵与图片的特征值进行加权和(再加上一个偏置量),然后通过激活函数得到输出。

     

     图4-2图片深度为1,卷积层的向前传播过程

    而在图3-4中,图片深度为2时,卷积层的向前传播过程如图4-3所示。输入的图片的深度为4×4×2,卷积核为2×2×2,向前传播过程为,求得第一层的数据与卷积核的第一层的权值的加权和,然后再求得第二层的数据与卷积核的第二层的权值的加权和,两层的加权和相加得到网络的输出。

    图4-3图片深度为2,卷积层的向前传播过程

    1.1.2下采样层的向前传播过程

    上一层(卷积层)提取的特征作为输入传到下采样层,通过下采样层的池化操作,降低数据的维度,可以避免过拟合。如图4-4中为常见的池化方式示意。最大池化方法也就是选取特征图中的最大值。均值池化则是求出特征图的平均值。随机池化方法则是先求出所有的特征值出现在该特征图中的概率,然后在来随机选取其中的一个概率作为该特征图的特征值,其中概率越大的选择的几率越大。

     

    图4-4池化操作示意图

    1.1.3全连接层的向前传播过程

    特征图进过卷积层和下采样层的特征提取之后,将提取出来的特征传到全连接层中,通过全连接层,进行分类,获得分类模型,得到最后的结果。图4-5为一个三层的全连接层。假设卷积神经网络中,传入全连接层的特征为x1,x2。则其在全连接层中的向前传播过程如图4-5所示。第一层全连接层有3个神经元y1,y2,y3。这三个节点的权值矩阵为W,其中b1,b2,b3分别为节点y1,y2,y3的偏置量。可以看出,在全连接层中,参数的个数=全连接层中节点的个数×输入的特征的个数+节点的个数(偏置量)。其向前传递过程具体如图所示,得到输出矩阵后,经过激励函数f(y)的激活,传入下一层。

     

    图4-5全连接层的向前传播过程

    1.2卷积神经网络的反向传播过程

    当卷积神经网络输出的结果与我们的期望值不相符时,则进行反向传播过程。求出结果与期望值的误差,再将误差一层一层的返回,计算出每一层的误差,然后进行权值更新。该过程的主要目的是通过训练样本和期望值来调整网络权值。误差的传递过程可以这样来理解,首先,数据从输入层到输出层,期间经过了卷积层,下采样层,全连接层,而数据在各层之间传递的过程中难免会造成数据的损失,则也就导致了误差的产生。而每一层造成的误差值是不一样的,所以当我们求出网络的总误差之后,需要将误差传入网络中,求得该各层对于总的误差应该承担多少比重。

    反向传播的训练过程的第一步为计算出网络总的误差:求出输出层n的输出a(n)与目标值y之间为误差。计算公式为:

                 其中,为激励函数的导函数的值。

    1.2.1全连接层之间的误差传递

    求出网络的总差之后,进行反向传播过程,将误差传入输出层的上一层全连接层,求出在该层中,产生了多少误差。而网络的误差又是由组成该网络的神经元所造成的,所以我们要求出每个神经元在网络中的误差。求上一层的误差,需要找出上一层中哪些节点与该输出层连接,然后用误差乘以节点的权值,求得每个节点的误差,具体如图所示:

     

    图4-6 全连接层中误差的传递过程

    1.2.2当前层为下采样层,求上一层的误差

    在下采样层中,根据采用的池化方法,把误差传入到上一层。下采样层如果采用的是最大池化(max-pooling)的方法,则直接把误差传到上一层连接的节点中。果采用的是均值池化(mean pooling)的方法,误差则是均匀的分布到上一层的网络中。另外在下采样层中,是不需要进行权值更新的,只需要正确的传递所有的误差到上一层。

    1.2.3当前层为卷积层,求上一层的误差

    卷积层中采用的是局部连接的方式,和全连接层的误差传递方式不同,在卷积层中,误差的传递也是依靠卷积核进行传递的。在误差传递的过程,我们需要通过卷积核找到卷积层和上一层的连接节点。求卷积层的上一层的误差的过程为:先对卷积层误差进行一层全零填充,然后将卷积层进行一百八十度旋转,再用旋转后的卷积核卷积填充过程的误差矩阵,并得到了上一层的误差。如图4-7为卷积层的误差传递过程。图右上方为卷积层的向前卷积过程,而右下方为卷积层的误差传递过程。从图中可以看出,误差的卷积过程正好是沿着向前传播的过程,将误差传到了上一层。

     

    图4-7卷积层的误差传递过程

    1.3卷积神经网络的权值更新

    1.3.1卷积层的权值更新

    卷积层的误差更新过程为:将误差矩阵当做卷积核,卷积输入的特征图,并得到了权值的偏差矩阵,然后与原先的卷积核的权值相加,并得到了更新后的卷积核。如图4-8,图中可以看出,该卷积方式的权值连接正好和向前传播中权值的连接是一致的。

     

    图4-8卷积核的权值更新过程

    1.3.2全连接层的权值更新过程

    全连接层中的权值更新过程为:

    1、求出权值的偏导数值:学习速率乘以激励函数的倒数乘以输入值;

    2、原先的权值加上偏导值,得到新的权值矩阵。具体的过程如图4-9所示(图中的激活函数为Sigmoid函数)。

    图4-9全连接层的权值更新过程

     

     

     

     

     

     

    转载于:https://www.cnblogs.com/hesi/p/9013328.html

    展开全文
  • 导读在CVPR 2020上,商汤研究院链接与编译团队、高性能计算团队和北航刘祥龙老师团队合作提出了用于加速卷积神经网络训练过程的INT8训练技术。该工作通过将网络的输入、权重和梯度量化到8比特来加速网络的前向传播和...

    在CVPR 2020上,商汤研究院链接与编译团队、高性能计算团队和北航刘祥龙老师团队合作提出了用于加速卷积神经网络训练过程的INT8训练技术。该工作通过将网络的输入、权重和梯度量化到8比特来加速网络的前向传播和反向传播过程,缩短卷积神经网络训练时间。论文观察到梯度的独特分布给量化训练带来了极大挑战,为了解决梯度量化带来的精度损失和不稳定问题,该论文进行了量化训练收敛稳定性的理论分析并基于此提出了误差敏感的学习率调节和基于方向自适应的梯度截断方法。同时为了保证更高的加速比,该论文还提出使用周期更新、量化卷积融合等技术来减少量化操作带来的时间开销。应用了上述方法之后,INT8训练在图像分类任务和检测任务上都仅仅损失微小的精度,且训练过程相比浮点训练加速了22%。

    Part.1

    动机与背景

    卷积神经网络被广泛应用在多种计算机视觉任务中并且取得了优异的精度。由于拥有庞大的参数量,训练和部署卷积神经网络需要耗费大量计算资源和漫长的训练时间,如何用更少资源训练卷积神经网络一直是一个学术研究热点,也是工业界关心的话题。

    神经网络量化技术是一种使用定点计算代替浮点的加速技术,目前被广泛地应用在神经网络部署中,可以极大地提升部署速度,并降低内存资源占用。现有很多工作均表明将网络前向过程的浮点计算替换成INT8计算,不会带来明显的精度下降[1][2]

    下图展示了现代神经网络加速芯片对于不同精度计算的理论计算峰值对比,可以看到,INT8算力相比于FP32和FP/INT16均能有超过2倍峰值性能提升。

    4832ffee777474595b55fb8a55dc6cd7.png

    当考虑将神经网络量化技术应用在卷积神经网络训练中时,为了加速卷积的反向梯度传播过程,不得不对梯度进行量化操作。在将浮点的梯度量化到INT8数值范围内之后,训练过程变得极其不稳定,并且收敛到非常差的精度。如何解决量化梯度给训练带来的收敛稳定性问题,是十分重要的问题。与此同时,在提升训练精度的同时,也不应当进入过多额外的计算,否则加速效果将会大打折扣。

    一方面是高效的计算峰值保障,一方面是困难重重的算法设计,这是INT8训练技术的机遇与挑战。

    Part.2

    何为INT8训练

    标准的线性量化操作指的是,将一个浮点张量(tensor)进行线性映射,变换到整数空间中[3]。这个整数空间的大小由于量化比特数来决定,比如常见的8bit量化数,就有256个取值,本文中使用的是对称量化,因此量化数的取值是从-128到127。具体公式如下,其中x是被量化的数据,q是量化后的数据,s是量化系数,clip是截断函数:

    e97b6751bbf94e215d0ae748f4be14b0.png

    在8bit的场景里,截断函数和量化系数的计算公式如下:

    435948dae841a0bbfc78ecf3d73817c7.png

    为了降低量化带来的误差,一个常见做法是对取整过程进行随机化,使得取整函数从期望上更接近原始的数,具体随机取整的公式如下:

    1f2416cf70b16f5af92b72eaeb087096.png

    相反的,将8bit量化数变换回浮点的过程称之为反量化。反量化公式如下所示,其中q为量化计算结果,s为量化系数,x为反量化后的结果。

    6efbdf251603fed876c628563378622e.pngf27b789c13a6907e4ebdfd01d2ac11a7.png

    上图的上半部分展示了标准的卷积神经网络量化计算前向过程,该过程被广泛应用在INT8部署加速中。在卷积计算之前,量化器会对输入和权重进行量化操作,将浮点数量化到8bit数值上,通过INT8卷积计算核心,即可完成一次INT8前向计算,最终将求和得到的32bit数进行反量化操作回算到浮点数域中,以供给下一层计算使用。

    INT8训练的一个核心的加速点在于卷积计算的反向过程,上图展示了INT8训练中卷积计算在反向传播过程中的计算细节。在卷积的反向梯度传播过程,同样的将梯度进行浮点量化操作,不过为了降低量化的误差,针对梯度的量化采用了随机取整操作。通过INT8的反向卷积计算核心,可以得到下一层所需的回传梯度,以及当前层的权重所需的梯度。由于INT8反向卷积输出的是32bit数,与前传类似,需要引入一次反量化操作,将32bit数反算回到浮点数域中。

    Part.3

    梯度为何难以量化

    为什么对梯度进行量化会给网络训练带来如此大的影响?我们可以观察训练过程中的梯度分布情况来进一步的分析。

    253268662307f5b0fd58b14f1e144f0d.png

    通过图(a)中对比梯度和输入、权重的分布,可以发现:梯度分布相比输入和权重分布更加尖锐,同时范围更大。相比于输入和权重,梯度有更多的值集中在0附近,但同时梯度还有许多较大值,让梯度的分布范围变得相当广,这些特征都会导致梯度量化的量化误差比输入和权重更大。

    dd309c96d704226ba212071918a70a2c.png

    图(b)展示的是layers16随着训练,其梯度从epoch 0到epoch 300的变化情况。从中可以看出,随着训练的进行,梯度分布越变得更加尖锐,同时仍然保持着较广的分布范围,这意味着梯度量化的误差会随着训练的进行变得越来越大。

    302221ecf1d41a3172c79d41c38928a4.png

    梯度的分布随网络深度变化情况从图(c)中可以看出。很容易发现,卷积层的深度越浅,梯度分布越尖锐,这也会导致梯度量化的误差更大。

    e632cbc503066a3f7b8178cd2529aac1.png

    从图(d)中可以看出卷积的结构也会影响梯度分布,对于MobileNetV2来说,conv2为depthwise卷积其相比conv1和conv3具有更加尖锐的分布。

    由于卷积神经网络的梯度具有如上四个特点,所以当我们直接在训练中对梯度进行量化时,训练精度非常容易出现突发的崩溃情况。下图展示了在CIFAR-10数据集上进行实验的精度和损失函数变化曲线,以MobileNetv2在CIFAR-10数据集上训练为例,其训练的精度曲线和loss曲线如下图,从图中可以发现INT8训练的loss在训练初期正常下降,但随后迅速上升,对应的精度也不断下降。

    0ab0f8e8d9723516de3ed1a7d6f55027.png

    Part.4

    是什么影响了收敛稳定性

    根据以上的观察和初步启发,我们希望通过理论的分析和推导,对量化训练的收敛稳定性进行建模。根据Adam等相关论文的经验和优化理论中的Regret analysis,不失一般性地定义R(T)为:

    3a936ead22845c61c042d47f5cdfc497.pngf98c91d04de508a27839838f2616a297.png

    基于以下两个朴素的假设:

    4783c80a28efdcf0266bad88d19eda24.png

    通过推导证明可以得到:

    c79ce7ff71a600b6379d28c6c12c5b0c.pnge37fe54d76683158f2adbb382866b3ed.png

    为了确保网络能够稳定收敛,R(T)/T在T变大时需要能够达到足够小。通过上式可以发现,在T趋于无穷大时,第(1)项可以忽略不计,主要考虑减小第(2)项和第(3)项。

    我们发现,第(2)项与量化误差正相关,第(3)项与学习率以及量化后的梯度大小有关。

    因此我们不难得到两个直观的提升训练收敛稳定性的策略:

    • 通过调节量化函数中的截断减小量化误差;

    • 通过适当调低学习率来提高量化训练精度。

    Part.5

    主要方法

    依据以上分析,我们针对量化误差和学习率提出了基于方向自适应的梯度截断误差敏感的学习率调节两个方法来解决量化训练带来的精度损失问题。同时,为了减少量化操作带来的额外开销,本文还提出了周期更新量化卷积融合的方法。

    0cece6384454c24da56af42221d2cbcb.png

    1、基于方向自适应的梯度截断:调整截断值,让梯度方向保持正确。

    为了最小化量化误差,之前有很多研究提出优化截断值的方法,其中就有研究提出通过假设数据分布直接求解最优截断值。但是已有的研究都针对于权重量化的截断值进行优化。就如本文观察所显示,梯度的分布特征与权重区别较大,无法直接使用。本文通过KS检验发现梯度的分布并不符合常见的高斯分布、拉普拉斯分布和学生t分布,因此很难通过假设梯度分布来直接求解最优的截断值。

    16388c83238639486ea5718ca57c08dd.png

    基于以上的分析,本文采用梯度下降的方法来自适应地学习最优截断值,常见的目标函数有均方误差函数,但是由于梯度的分布特征,均方误差的大小会受到梯度的影响,影响优化过程;同时对于梯度来说,均方误差并不能很好地体现梯度的量化误差对于优化过程的影响,因此本文提出使用能够体现梯度方向的余弦距离来衡量梯度的量化误差,并以余弦距离为目标函数来优化求解最优截断值。余弦距离定义如下:

    99ab2b60b30324263e0136ed69eee856.png

    2286815069b6533eb2ea200f7b80d01d.png

    2、误差敏感的学习率调节:在错误的方向上尽量少更新。

    根据上述的理论分析,降低学习率能够有助于模型量化训练的收敛。针对学习率的调整,本文提出误差敏感的学习率调节方法,使用学习率系数对原学习率进行调整,学习率系数与余弦距离负相关,学习率系数定义如下:

    36a42d247b61159b0ed6f31a158fffd6.png

    729e057b5af26b78b6378e2a46d53e67.png

    3、周期更新:降低由于统计而带来的额外计算耗时

    由于量化操作需要的统计数据范围和计算截断值等操作十分耗时,为了减少这些操作的时间开销,本文采用周期更新的方式,周期性地统计数据范围和计算截断值。通过周期更新的方法能够有效地提高减少因量化引入的额外时间开销。下表为ResNet50在ImageNet数据集上不同周期的单次训练时间统计表。

    7acfe0985a03df57d19c5e96431cc0e2.png

    4、量化卷积融合:减少访存次数、节省cuda kernel launch次数

    通过将量化和反量化操作融合入卷积计算的CUDA核函数里,可以减少一次数据的访存,有效地减少量化和反量化操作的时间开销。

    4c89ee453e0975fdcec3d81a41ab109f.png

    Part.6

    实验结果

    图像分类任务:本文在CIFAR10和ImageNet等图像分类数据集进行INT8训练实验。从下表结果中可以看出,在大多数网络结构中均取得了比现有最好方法更优的精度,并且首次在MobileNet、Inception等网络上进行量化训练实验,精度损失也在1.5%以内。

    d4a6f3b8fce3b98063e692b6013e3aca.pnge820b9521f16d87c18b2c479467dfbc1.png

    目标检测任务:同时,本文也首次尝试在PASCAL和COCO等目标检测数据集上进行INT8训练实验,精度损失也在2%以内。

    66c31b816dd31fd76ec40baea2b8239c.png

    已有的少量探究梯度量化的论文[4]均未报告算法在实际训练任务中的真实加速性能,为了最大限度将方法实用化,本文在GeForce GTX1080TI显卡上编写并优化了用于支持INT8训练的卷积前向和后向计算核心。实测结果表明,使用INT8卷积计算的前向和后向过程相比于浮点计算有明显的加速,其中前向过程平均加速1.63倍,后向过程平均加速1.94倍。如下图所示:

    af3dad685ac8c17f88c4f37e2c08d49b.png

    同时,本文在实际训练过程中进行了完整的端到端测试,可以看到,INT8训练可以将ResNet50的一轮训练过程从0.360秒降低到0.293秒,整体训练过程提速了22%。

    70a3b73e368bb4debbec50c46d840587.png284d969f507f45fc51604a00c43a469d.gif

    论文地址:

    https://arxiv.org/pdf/1912.12607.pdf 

    论文讲解近期将有线上直播的论文讲解及专题交流课程,欢迎点击下方“商汤泰坦公开课”课程专题链接进行报名

    报名链接:https://jinshuju.net/f/RKOLf9

    6be29102ef76096de95333d382dbe06c.gif

    商汤研究院-链接与编译团队致力于通过System+AI技术打造顶尖的深度学习核心引擎。开发的模型训练和模型部署工具链已服务于公司多个核心业务。团队在量化模型的在线/离线生产、部署对齐、加速训练等方向有着明确的技术规划。

    团队目前正在招聘模型量化方向的系统算法研究员/实习生,欢迎感兴趣的小伙伴投递简历到yufengwei@sensetime.com。

    Reference

    [1]Ruihao Gong, Xianglong Liu, Shenghu Jiang, Tianxiang Li,Peng Hu, Jiazhen Lin, Fengwei Yu, and Junjie Yan. Differen-tiable soft quantization: Bridging full-precision and low-bitneural networks. In ICCV, October 2019.

    [2]Rundong Li, Yan Wang, Feng Liang, Hongwei Qin, Junjie Yan, and Rui Fan. Fully quantized network for object detection. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2019.

    [3]Benoit Jacob, Skirmantas Kligys, Bo Chen, Menglong Zhu, Matthew Tang, Andrew Howard, Hartwig Adam, and Dmitry Kalenichenko. Quantization and training of neural networks for efficient integer-arithmetic-only inference. 2018 IEEE Conference on Computer Vision and Pattern Recognition(CVPR), June 2018.

    [4]Yukuan Yang, Shuang Wu, Lei Deng, Tianyi Yan, Yuan Xie, and Guoqi Li. Training high-performance and large-scale deep neural networks with full 8-bit integers, 2019.

    5bfd941c4a6d9ff5f9753bf1e64a9d44.png

    94d7fc44e08901dd6c36fa7bf4746715.gif

    点击阅读原文即可留下你的评论

    展开全文
  • 执行环境,可能出现 AttributeError: module 'tensorflow.python.ops.image_ops' has no attribute 'per_image_...需要将cifar10_input.py 182行改为per_image_whitening 改为 per_image_standardization ...
  • 神经网络的训练过程,就是通过已有的样本,求取使代价函数最小化时所对应的参数。代价函数测量的是模型对样本的预测值与其真实值之间的误差,最小化的求解一般使用梯度下降法(Gradient Decent)或其他与梯度有关的...
  • 卷积神经网络超详细介绍

    万次阅读 多人点赞 2018-09-19 10:16:59
    1、卷积神经网络的概念 2、 发展过程 3、如何利用CNN实现图像识别的任务 4、CNN的特征 5、CNN的求解 6、卷积神经网络注意事项 7、CNN发展综合介绍 8、LeNet-5结构分析 9、AlexNet 10、ZFNet 10.1 意义 ...
  • 在初学卷积神经网络的过程中,有时会遇到loss在训练过程中出现NaN的情况,本文列出了几个可能原因及症状并提供了一些方法解决,希望对初学者有所帮助。
  • 卷积神经网络训练

    2021-01-13 21:42:01
    卷积神经网络输出结果与我们期望值不相符时,则进行反向传播过程。 求出结果与期望值误差,再将误差一层一层返回,计算出每一层误差,然后进行权值更新。该过程的主要目的是通过训练样本和期望值来调整...
  • 神经网络的训练过程中,正常情况下整体的过程是一个Loss不断下降的过程,然而在训练过程中往往存在一些batch_size输入时,前向传播得到的Loss突然变大的情景。 在训练神经网络过程中,经过softmax函数输出概率后...
  • 因此卷积神经网络就又活了起来,再开始前,我们需要明确的是网上讲的卷积神经网络的相关教程一般指的是神经网络的前向传导过程,反向传播都是用梯度下降法进行训练。一、理论阶段讲解这个算法...
  • 我试图用lfw配对数据集训练深度卷积神经网络(2200对人脸,1100对属于同一个人,1100个不属于同一个人)。问题是,虽然在训练过程中损失在减少,但与第一个历元相比,训练数据精确度保持不变,甚至越来越差。我...
  • 卷积神经网络算法是n年前就有的...在开始前,我们需要明确的是网上讲的卷积神经网络的相关教程一般指的是神经网络的前向传导过程,反向传播都是用梯度下降法进行训练,大部分深度学习库,都已经把反向求导的功能给...
  • 最近在利用DCNN模型训练自己数据集,利用SS数据集进行测试,做二分类,结果刚开始训练模型准确率就为1,后面也是这样,主要原因还是数据集打乱还不够,不能只靠tensorflowshuffle操作来打乱,最好先打乱顺序...
  • 针对深层卷积神经网络在有限标记样本下训练时存在过拟合和梯度弥散问题,提出一种从源模型中迁移知识训练一个深层目标模型策略.迁移知识包括样本类别分布和源模型低层特征,类别分布提供了样本类间相关...
  • 作者 |Aymeric Damien编辑|奇予纪出品 |磐创AI团队原项目 |https://github.com/aymericdamien/TensorFlow-Examples/AI学习路线之TensorFlow篇神经...这个例子使用低级方法来更好地理解构建神经网络训练过程背后...
  • 卷积神经网络(二)

    2020-02-27 22:04:36
    卷积神经网络的训练过程 卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行...
  • 四、卷积神经网络LeNet-5结构分析CNN是一种带有卷积结构深度神经网络,通常至少有两个非线性可训练的卷积层,两个非线性固定卷积层(又叫Pooling Layer或降采样层)和一个全连接层,一共至少5个隐含层。CNN结构...
  • 卷积神经网络特征应用

    千人学习 2018-06-01 17:02:26
    卷积神经网络特征、模型视频入门教程,该课程内容包含神经网络的起源、发展、计算和训练,卷积神经网络基础,生成对抗网络、卷积神经网络的实战应用、GAN实例、人工智能案例分享及行业趋势分析。通过本次课程的学习...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,047
精华内容 418
关键字:

卷积神经网络的训练过程