通俗易懂的卷积神经网络教程-第六讲

  第四讲,第五讲已经把反向传播给讲完了,但是我们反向传播是要干啥还记得吧?是要将卷积神经网络的所有权值都给改变了,也就是说调整权值使得输出变量Y与标签接近。

       那么怎么进行权值呢?在调节权值之前,我们先把正向和反向传播的过程用图片的形式复习一下:

 

  我们最开始的正向传播,随机生成了6个滤波器,每个滤波器中有5*5=25个权值和一个偏置量。第二次我们随机生成了12个滤波器,每个滤波器中有6*5*5=150个权值和一个偏置量。第三次,我们随机生成了1920个权值和10个偏置量。这些正向传播的东西都是随机生成的,它们结合起来产生的最终结果是不准确的,所以嘛,我们需要一个准确的值,那么我们就需要调节这些东西。

    我们调节的顺序就按照正向传播的顺序来调节吧:

(1)首先我们计算一下第二层(卷积层1)的权值梯度。计算的方法很简单,当初第二讲中,我们说过,我们导入了28*28的图片,我们首先把这张图片水平翻转,为什么要翻转呢,因为我们第四讲中我们把6个滤波器中的权值给旋转了180度。这样到调节权值系数的时候就相互抵消了(我并不知道为啥要这样做)。然后我们用这个图片与624*24的矩阵,也就是我们第五讲中求出的矩阵FF1~FF6做卷积,这次卷积和最初我们第二讲讲的用图片与5*5的滤波器做卷积是一样的,我们这样就得出了65*5的卷积矩阵。同理,我们因为一组batchsize50张图片,于是我们就能够求出506*5*5的矩阵,我们挑选出第一个矩阵,把50组的值一一对应加和,然后除以50得到一个平均值,同理第二~第六个矩阵也可以得到一个平均值。这样我们就得出了65*5的平均值矩阵,我们称为dk1~dk6

(2)接下来我们计算一下第二层(卷积层1)的偏置量梯度。我们把第五讲中求出的矩阵FF1中的所有值(共24*24个)给全部加和。因为有50组的数据,所以我们做50次加和。最后再把这50次加和的数据再相加。然后我们除以50。求出24*24的矩阵所有元素加和的平均值,并作为偏置量b1的梯度。同理我们把FF2~FF6的数据求出所有元素加和的平均值,作为b2~b6的梯度。我们称为db1~db6

(3)我们按照同理的方式,求第四层(卷积层2)的权值及其偏置量梯度dkk1~dkk12dbb1~dbb12。这样我们卷积层的梯度就都求完了。

(4)最后我们要求的梯度是BP全连接的权值和偏置量的梯度。这个的求法和BP神经网络是一样的。最早的时候我们求出了sigmoid函数的导数:

  也就是我们把图片通过正向传播最后得到的输出变量结果Y带入进上面的公式里。这样我们就得出了10个导数值,我们称为f’1~f’10,我们用导数与我们的全连接层输入变量x1(也就是黄色小球)相乘:f’1*x1f’2*x1...f’10*x1。我们得到了10个值如果有50组的话,那么就是5010个值,我们把50组中的f’1x1全部相加,再除以一个50,这样就得到一个平均值。同理,把f’2*x1~f’10*x1的值按照同理,得到平均值,这样我们就得到了10个值。同理我们用fx2~x192相乘,最终我们会得到192*10=1920个值,我们把这些值作为BP网络的权值梯度,称dkkk1~dkkk192

(5)BP网络偏置量的梯度是最好求的了,我们求得了10个导数值f’1~f’10对吧,而我们一共50组数据,也就是有5010个值,我们分别把50f’150f’2...f’10相加除以50求平均值,然后我们就得出了10个导数平均值,我们把这个导数平均值作为偏置量梯度,称为dbbb1~dbbb10

  我们现在把所有的权值都求完了,我们接下来要做的是更新权值和偏置量。更新的方法如下:

(1)对于卷积层1的权值:我们首先设定一个值α,叫做学习速率,这个具体的值是多少需要你们大家自己调节,它没有一个确定的值,是实际情况实际而定的。然后我们把65*5的滤波器的权值wij减去α*dk。这个是怎么一回事儿呢,我详细的说一下,我们取第一个滤波器中的第一个值w1_11,然后我们把这个值减去上面我们求出的65*5矩阵dk1~dk6中第一个矩阵中的第一个值,也就是dk1_11。写成公式是:w1_11=w1_11-α*dk1_11。接下来我们令第二个值w1_12=w1_12-α*dk1_12。直到加入最后一个w1_55=w1_55-α*dk1_55。这样我们第一个滤波器就已经更新完毕了。然后同理更新第二个到第5个,我们就把卷积层的滤波器新的权值给求出来了。

(2)对于卷积层1的偏置量:我们当初求出了偏置量的梯度是db1~db6。我们用之前的偏置量减去α*db。比如第一个偏置量b1=b1-α*db1。接着我们按照桶里的方法更新b2~b5,这样我们就把卷积层滤波器新的偏置量给求出来了。

(3)对于卷积层2的权值:首先我们确定一个学习速率α2。我们因为是126*5*5的滤波器,所以我们就先把某个滤波器中的权值和我们的dkk中的值一一对应做更新:wl_k_ij=wl_k_ij-α2*dkkl_k_ij。其中l指的是第几个滤波器(或dkk矩阵)、k指的是第l个滤波器中的第k个矩阵(或dkk矩阵中的第k个子矩阵)。ijk矩阵中的第i行第j列元素。我们通过公式我们就把新的12个滤波器的权值求出来了。

(4)对于卷积层2的偏执量同(2):我们当初求出了偏置量的梯度是dbb1~dbb12。我们用之前的偏置量减去α*db。偏置量bi=bi-α*dbbi。接着我们按照桶里的方法更新b2~b12,这样我们就把卷积层滤波器新的偏置量给求出来了。

(5)对于BP全连接层的权值:首先我们生成一个学习速率α3。我们用的公式是wij=wij-α3*dkkkij。其中i表示黄球(全连接层第i个输入变量),j表示橙色球(第j个输出变量),wij为连接输入变量i和输出变量j之间的权值。我们通过公式就可以把1920个权值都计算出来。

(6)对于BP全连接层的偏置量:我们用公式bj=bj-α3*dbbbj。其中j指的是第j个输出变量。

  我们通过以上六步,卷积神经网络中的所有权值和偏置量就更新完毕了。

  更新完毕之后,大家不要忘记了,我们这是batchsize=50的一组数据,我们一共有60000张图片,每次随机选取了50组呀。我们不可能就进行一组数据的计算,我们要计算的组数一般规定为60000/50=1200组,在我们正向反向算完一组数据,并更新权值、偏置量之后,我们首先记录下我们的MSE值,然后用新的权值和偏置量计算第二组随机选取的50组图片,然后再更新权值、偏置量,记录MSE,直到进行1200组为止。这样我们就完成了一次大迭代。

  我们完成之后,用什么东西判定模型训练的程度牛不牛逼呢?我们使用平均MSE来计算。还有就是我们难道只进行这一次的大迭代吗?我们计算完毕怎么判定这个模型的准确度呢?这都是问题,至于怎么解答,那么我们在下一讲中进行分解。

下一讲:加权MSE、大大迭代、模型测试

————————————————

如果对我的课程感兴趣的话,欢迎关注小木希望学园-微信公众号: 

mutianwei521

也可以扫描二维码哦!


猜你喜欢

转载自blog.csdn.net/u013631121/article/details/80331140