全连接神经网络存在以下三个问题:
鉴于以上的问题,我们介绍卷积神经网络(CNN)。先介绍CNN中的池化层和卷积层。我们根据下图来讲解:
池化层和卷积层都会有过滤器,过滤器会有个窗口(如上图中,黄色的框框),它会把上一层的数据过滤到一下层(如上图中,将左边的矩阵过滤生成右边的矩阵。)此外,过滤器能设置一下层的深度。(后续会讲解)
为了让image长宽不变,我们可以在边缘添加值为0的一些行与列,从而使得过滤后的行与列不变。 若不填充,那么
下层的长度=CEILING((上层长度−窗口长方向步长+1)/2)\large \color{blue}{ 下层的长度 = CEILING((上层长度-窗口长方向步长+1)/2)}下层的长度=CEILING((上层长度−窗口长方向步长+1)/2) 下层的宽度=CEILING((上层宽度−窗口宽方向步长+1)/2)\large \color{blue}{ 下层的宽度 = CEILING((上层宽度-窗口宽方向步长+1)/2)}下层的宽度=CEILING((上层宽度−窗口宽方向步长+1)/2)
上次其实就是卷积层中某一个深度上的过滤。我们设想数据是一张5*5*3
的RGB图片,该卷积层的过滤器,窗口为3*3,深度为10。设WjiW^i_jWji为将上一层中深度iii的image过滤到一下层中深度jjj上的image的参数矩阵,假设(如上图黄色框框的红色数字):
W00=101010101\large \color{blue}{ W^0_0 = \begin{array}{ccc} 1 & 0 & 1\\ 0& 1 & 0\\ 1 & 0 & 1 \end{array}}W00=101010101
右边矩阵得到的第一个值=1∗1+1∗0+1∗1+0∗0+1∗1+1∗0+0∗1+0∗0+1∗1=4\large \color{blue}{ 右边矩阵得到的第一个值 = 1*1 + 1*0 + 1*1 + 0*0 + 1*1 + 1*0 +0*1 + 0*0 + 1*1 = 4}右边矩阵得到的第一个值=1∗1+1∗0+1∗1+0∗0+1∗1+1∗0+0∗1+0∗0+1∗1=4
后面的类似计算。我们得到右边的矩阵R00R^0_0R00。通用的,我们可以利用W01W^1_0W01和W02W^2_0W02,计算出R01R^1_0R01和R02R^2_0R02。
而下一层深度0上的Image的就是:
Image0=R00+R01+R02+B0\large \color{blue}{ Image_0 = R^0_0 + R^1_0 + R^2_0 + B_0}Image0=R00+R01+R02+B0
上式中B0B_0B0是下一层深度0上偏置矩阵,要注意的是该矩阵的值都是相同的。所以,偏置参数的个数为下一层的深度数。
理解的卷积层,池化层就很容易理解了。池化层有两点不同。
卷积神经网络的架构为:
输入层−>(卷积层Conv+−>池化层Pool?)+−>全连接层FC+\large \color{blue}{ 输入层 -> (卷积层Conv+ -> 池化层Pool?)+ -> 全连接层FC+}输入层−>(卷积层Conv+−>池化层Pool?)+−>全连接层FC+
+
表示1~n
,?
表示0~n