暑期学习 CNN 笔记

1. 传统NN 与 CNN

  • 同:它们都由具有权重和偏置的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的得分。普通NN里的一些计算技巧在CNN里依旧适用。


暑期学习 CNN 笔记


  • 异: CNN是具有三维体积的神经元(比NN多一个depth)。CNN利用输入是图片的特点把神经元设计成三个维度 : width、height、depth(注意这里的depth不是网络的深度,而是描述神经元的)。比如输入的图片大小是 24 × 24 × 3 (rgb),那么输入神经元就也具有 24×24×3 的维度。

    暑期学习 CNN 笔记

2. CNN组成部分

主要部分有:

  • [ 输入层 ]
  • [ 卷积层 ]
  • [ **函数 ]
  • [ 池化层 ]
  • [ 全连接层 ]

基本结构:

inputconvrelupoolfc

2.1 卷积层

【1】卷积的目的——提取特征

在15*15图像上提取特征,不是逐个像素点提取,而是一小块、一小块的进行提取。将图像分为许多小块进行提取,过程如下。下图假设图像的提取一小块为5*5。例如第一块里提取到的特征值为1(一块区域只映射为一个值),第二块里提取到的特征值为4,第三块里提取到的特征值为5……



暑期学习 CNN 笔记


注:在上文中的那一小块的单元格称为 filter 。或者叫滤波器。下图左是一张图像(3维矩阵),红色框标注的“数字3”代表3个通道。右为一个filter,是人为指定的 5*5 大小,红色框标注的“数字3”是根据左图的矩阵格式来的。

其实实际情况中的filter是有depth的。


暑期学习 CNN 笔记


注:卷积神经网络提取特征不可能这么少,所以可能有多个filter来提取,如filter1,filter2……等得到多个2维矩阵合并为3维矩阵。每个5*5*3的filter相当于一种不同的特征变换。下图中假设6个filter提取32*32*3的图像,每个filter提取得到一张特征图 feature map,六张特征图堆叠起来最终得到了28*28*6。(可以适当思考32、5和28之间的关系)


暑期学习 CNN 笔记


【2】卷积神经网络的流程——堆叠

CNN就是将一系列的卷积操作堆叠在一起,如下图。

原始输入为32*32*3,经过第一次卷积、relu操作后得到一个深度为6的特征图。神经网络中多个隐层(在这里是卷积层)进行多种特征提取,然后特征从低级语义到高级语义。



暑期学习 CNN 笔记


【3】卷积的计算流程——数字怎么得到的

  • 权重参数 w 就是 filter

在NN里面的参数都是初始化好的,filter也有初始值,然后训练的目的就是在迭代优化过程中不断调整filter的内容。

最左图是 7*7*3,3个通道分为左侧三张图描述【0】【1】【2】。 中间两列是两种 3*3*3 filter,内容也展开为3个平面矩阵描述。


暑期学习 CNN 笔记

在输入矩阵上滑动 filter 进行内积计算(对应方格数字相乘最后加和),再加上偏置 bias 。

如上图计算过程,第一通道内积为0;第二通道内积为2;第三通道内积为0;全部加和为 0+2+0,最后再加上bias=1,得2+1=3

注意:卷积运算的内积操作是分通道的,只能是在对应通道的输入和对应通道的 filter 运算。从上图可以看出 x[1] 只和 w0[1] 内积。


  • filter 每步滑动多远——步长

    • 如下图,步长stride为2,即往右移动2个单元格。

    • 再回到上图流程,这一次卷积用到了两个filter,所以output得到的是 3*3*2 的特征图。

    • 上图最右侧得到的两个绿色矩阵,output【0】针对w【0】;output【1】针对w【1】。


暑期学习 CNN 笔记


【4】卷积层的参数们

关于pad:边缘填充(补零)。原始数据如果直接滑动内积,则越靠近中间的像素点重要程度被变大,边缘像素点被减弱。补零是为了让边缘像素点利用率变高,让原始数据被利用的更丰富


暑期学习 CNN 笔记


结论

  • 输入W1H1D1
  • filter:大小 F,(即 FF);个数 K
  • pad:填充圈(层数) P
  • strideS
  • outputW2H2D2
    • W2=W1F+2P/S+1
    • H2=H1F+2P/S+1
    • D2=K


暑期学习 CNN 笔记


1、 例子:W1=32;H1=32;D1=3;F=5;K=10;P=2;S=1;则
W2 = (W1-F+2P)/ S+1=(32-5+4)/1+1=32
H2 = (H1-F+2P)/ S+1 = W2 = 32
D2 = K=10
:这里32*32*3 映射到了 32*32*10
参数数量 =(F * F * D+1)* K=760;【1指的是bias】


2、划分多个不同小区域的所用filter参数是一样的,这叫做权值参数共享,参数量比普通NN减少很多数量级。实际并没有规定输入和filter为方阵,但基本上都采用方阵。

2.2 池化层

池化层不需要计算,相对来说比较简单。因此也只有在这 pooling 层,才不涉及wb 等参数。

  • 卷积后得到的特征图如果相当庞大时,需要进行压缩。池化层的意义:一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩(下采样down sampling的目的,参数多的时候保证实时性),提取主要特征。


  • 注意:压缩以后,此时只有 wh 发生了变化,特征图的 depth 不变


暑期学习 CNN 笔记


  • 如何压缩?
    • max pooling
    • Avy Pooling

  • max pooling方法

    暑期学习 CNN 笔记

  • 如上图采用一个2*2的filter,则根据stride=2划分了四块区域,max pooling是在每一个区域中寻找最大值最终压缩到1/2*1/2。

  • Avy pooling 基本上现在灭绝了(其实就是平均池化层),方法是对每一个2*2的区域元素求和再除以4求均值,得到主要特征)。

  • 注意:这里的pooling操作是特征图缩小,有可能影响网络的准确度,因此可以通过增加特征图的深度来弥补(这里的深度变为原来的2倍)。

3. CNN 的整体架构

3.1 架构的特点

  • [ conv → relu → conv → relu → pool ] 为一个循环块,最后连上 FC(全连接层)。如下图,注意循环为什么可以相连,因为在 pooling 完以后,特征图的个数 K 不发生变化。

3.2 全连接层

  • 全连接层:连接所有的特征,将输出值送给分类器(如softmax分类器)。在整个卷积神经网络中起到 分类器 的作用。


暑期学习 CNN 笔记


  • 如下图,假设后面卷积得到的特征图是:772,最后将该立体的特征图数据拉直成一条列向量 981。将该列向量映射到高维如10241。最后接上softmax分类器输出各个类别的概率值

    暑期学习 CNN 笔记

4. 经典网络

4.1 ALEXNET

  • FC层:分类为1000类的概率。
  • conv1:filter 尺度太大,提取效果不太恰当。
  • 8层的网络结构:什么才能称为一层?带参数的层(一般指卷积层、全连接层;pooling不含参数)


暑期学习 CNN 笔记


4.2 VGGNET

  • 具有代表性,效果也还可以。

    暑期学习 CNN 笔记

  • 框架的参数信息如下。可知,filter和stride都非常小,利用原始数据信息更充分即利用更多的特征
  • F=3;P=1;S=1;可得输出的map的H2 or W2=(H1-3+2*1)/1+1=H1,大小不发生变化。
  • map虽然每次池化完后变小了,但每次池化后map的个数K翻倍了,这是效果好的原因。【64-pool-128-pool-256-pool-512】


暑期学习 CNN 笔记


结语

这节内容干货较多,重点是理解工作原理和参数的作用。经典模型的话不用GPU显卡估计玩不开(迭代太慢,batchsize受限)了。N卡支持深度学习框架,推荐泰坦X(12G),1080(8G),1060(6G)。

相关文章: