卷积神经网络基础1

最近又将卷积神经网络回顾了一遍,现将部分基础知识记录在此,首先看下图:
卷积神经网络基础1
第一张图是64*64*3,所以第一张图的维度是12288,但是对于第二张图片是1000*1000*3,所以特征向量维度就达到了3million,这对于计算机来说计算压力很大。假设第一层隐藏层有1000个神经元,则经过计算权重矩阵的维度是(1000,3million),需要训练的参数很多,从而为了防止过拟合你就需要采用更多的数据训练,卷积网络可以减少参数的数量,主要从两方面考虑,一个是参数共享,另一个是稀疏连接,如下图:
卷积神经网络基础1

如果采用普通的神经网络,假设输入图片的维度是32*32*3,输出图片的维度是28*28*6,则其中的权重个数是3072*4704,权重个数过多,训练参数过多;如果采用卷积神经网络,从32*32*3转成28*28*6中间的过滤器是f=5,个数是6个,则总共的参数个数是(5*5*3+1)*6=456个参数,输入图片的每一块均用了相同的滤波器参数,参数个数大大减小,可以大大减少训练集的数量,减缓了训练压力,另外一个参数减少的思想是稀疏连接,输出矩阵的某一个像素只与输入矩阵的某一块区域像素有关,因为是这一块像素与滤波器卷积生成了一个像素。如下图:
卷积神经网络基础1
图中绿色的输出像素只与输入矩阵的绿色部分相关,与矩阵其他部分无关。

  • 卷积的基本计算方式:

卷积神经网络基础1

滤波器与输入图像矩阵进行卷积运算,假设输入是n*n的矩阵,经过和滤波器f*f卷积之后生成的新的矩阵是(n-f+1)*(n-f+1),
在这里n = 6,f = 3,因此最后得到的矩阵的大小是(6-3)+1*(6-3)+1 = 4*4。卷积运算是用滤波器去扫描图片,如图中绿色的框框对应右边输出的绿色的小框的值,计算为10*1+10*0+10*(-1)+10*1+10*0+10*(-1)+10*1+10*0+10*(-1)=0,简单来说就是滤波器扫描到的3*3的矩阵与滤波器中的每一位数字对应相乘就是进行了卷积运算,卷积神经网络是将图片与过滤器进行卷积操作以提取特征。

  • 卷积神经网络的超参数:

    • padding
      padding参数的意思是补全像素的个数,从上图可以看出,图像经过滤波器卷积之后由6*6降到了4*4,为了使得图片不降维,需要使用padding参数,padding参数主要有两种情况:一是valid(不补全,意味着padding = 0,卷积之后图片降维);二是same(意味着padding需要设定一个数值使得卷积之后的图像不会缩小,计算公式如下n+2p-f+1 = n,从而推出p = (f-1)/2,所以按照上面那副图,应该在原图外面补全(3-1)/2=1个像素 )

    • stride
      stride这个超参数的意思是滤波器每次在原图上卷积运算完成后越过几个stride进行下一次卷积,如下图:
      卷积神经网络基础1

      一张7*7的图片经过3*3的滤波器变成了3*3的输出,这其中stride设为2,跳过两个像素进行下一次卷积运算,图中p表示padding的取值,s代表stride的取值。
      卷积神经网络基础1
      因此假设有一张n*n的图片,f*f的滤波器,padding为p,stride为s,最后输出图片的大小为(n+2p-f)/s+1*(n+2p-f)/s+1。

  • 三通道图像的卷积运算:
    对于三通道的图片,用滤波器进行卷积时滤波器必须也要三通道,分别与RGB图片的每一个通道进行卷积操作,最后把每个通道的卷积后的数值加起来合成一个数值作为输出图片的的像素值,如下图:
    卷积神经网络基础1
    一张6*6*3的图片经过3*3*3的滤波器滤波之后得到了4*4的输出图片,如果是一个滤波器则输出图片是二维的1个信道。

    如果存在多个滤波器,则输出图片的信道等于滤波器的个数,通过采用多个不同的滤波器从而可以多方位提取图像的特征:
    卷积神经网络基础1

  • 池化层和全连接层

    一般卷积网络不仅包括卷积层还有池化层和全连接层。
    对于池化层一般分为最大池化和平均池化,其作用是在保证特征尽可能不丢失的情况下尽可能降低模型维度,池化层的超参数只有两个,一个是步幅,一个是滤波器大小,池化层在网络中属于静态层,其没有需要被训练的权重参数,如下图:
    最大池化:
    假设滤波器是2*2,则滤波器扫描图像矩阵,求被滤波器覆盖的那一块区域的最大值。
    卷积神经网络基础1

    平均池化:
    假设滤波器是2*2,则滤波器扫描图像矩阵,求被滤波器覆盖的那一块区域的平均值。
    卷积神经网络基础1

    全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。经过前面几个卷积层和池化层提取特征且缩小特征维度后,由全连接层经过**函数(sigmoid、relu、tanh)输出最后的分类结果。