目录
1、卷积网络与传统网络的区别
2、整体架构
3、卷积操作
4、卷积涉及的参数
5、卷积计算公式:
6、卷积参数中的重要特点
7、池化层作用
8、整体网络架构
9、特征图变化
10、感受野
1、卷积网络与传统网络的区别
上图中左边是NN传统网络,右边是CNN卷积网络。
传统网络输入比如784表示784个像素点,这只是一列特征;
在CNN当中输入的不是784个像素点,而是原始的一张图像28x28x1是个三维的,当使用卷积网络做事情的时候,我们得把思想再抬高一个维度,现在的数据他就不是一列,不是一个向量,不是一个特征,而是一个长方体矩阵,它是一个三维的,所以接下来我们处理的矩阵都是三维的,HxWxC的我不会先把数据拉成一个向量,而是直接对这个样本,图像数据进行一个特征提取。PS:注意这里的输入是一个HxWxC的;这里还涉及一个depth信息;
2、整体架构
简单的理解:卷积是提取特征,池化是压缩特征。
3、卷积操作
右边绿色的叫做一个特征图,表示当前得到的一个结果。最后把三个通道的值相加。
首先把图像分成一个个小区域,目的是对于不同的区域我得到的特征他是不一样的,然后接下来我要选择一种计算的方法,对于每一个小区域的计算他应该的特征值是等于多少的,这个是卷积他做的一件事。
三通道计算:
PS:必须保证你的输入的第三个维度即通道数C,必须和Filter当中第三个维度他俩必须是一样的。使用了几个Filter进行计算,最后就会得到多少个特征图。
内积和计算3=0+2+0+b(小b=1是一个偏置项),最后别忘记加上一个偏置项。
4、卷积涉及的参数
(1)步长
步长为1:表示在滑动的过程中移动一个单元格。
步长为2:表示在滑动的过程中移动两个单元格。
步长越小得到的特征图越大,得到的特征比较丰富,计算效率越慢。
(2)卷积核尺寸
卷积核越小,越细粒度进行提取。
(3)边缘填充(一般使用zero padding)
在进行卷积计算的时候,中间的点参与运算的次数较多,边界的点较少;为了公平一些,让边界点也参与运算的次数多一些。所以进行边缘填充,加上一圈数(比如0,添加0是为了避免在对结果进行计算的时候对结果产生影响,0乘任何数都等于0,所以最外层只是扩充,不会对结果产生任何影响),原来是边界的点,他就不是边界了,它能被利用的次数就会变多,代表了我一定程度上弥补了一些边界信息缺失的问题,边界提取特征利用不充分的问题,让网络能够更公平的对待一下边界特征。
添加的圈数自己控制,一般一圈。
(4)卷积核个数
卷积核个数说白了就是我最后要得到多少个特征图,如果要得到10个特征图,那么卷积核个数就是10。PS:每个卷积核里边的数字是不一样的,一开始进行随机初始化要分别进行各自的参数更新。
5、卷积计算公式:
6、卷积参数中的重要特点
卷积参数共享
比如说现在有一个卷积核,那么他要对图像中的每一个区域做卷积;
Q1:对于不同的区域,我是不是应该选择卷积核里边的区域也应该不同呢?这样效果会更好。
A1:其实理论上应该是这样的;但是如果你对每一个区域都选择不同的filter核去做,那总共参数的个数会需要很多;之前说过传统神经网络的缺点是参数太多,缺点是不容易训练,效率较慢,过拟合现象比较大,卷积神经网络就是要解决这样的问题,他提出的一点就是参数共享,比如当前我有一个卷积核,我用这个卷积核对每一个区域进行特征提取的时候,它里边的每一个值都是一样的,也就是说用同样一个卷积核对图像中每一个小区域进行特征提取,在对图像中每一个小区域进行特征提取的时候,核里边的每一个值都是不变的。
上图中的参数一共是760个,要比之前全连接时候的参数少的多了。
7、池化层作用
池化层是做压缩的,或者说叫做下采样。在你原始得到特征的基础上进行一个筛选。只能去做一个缩减,但是不能修改我的特征图的个数(即最后的通道数)。池化层没有涉及任何的矩阵计算,他只是一个特征的筛选,只是一个压缩过滤的东西。
最大池化:
8、整体网络架构
最后得到的特征图它是一个立体的,在这个立体中我怎么样对他进行一个分类任务,如何把这个立体转化成5个概率的分类值呢?PS:前边的卷积和池化只是做特征提取的,最后当你想得到一个结果还得靠全连接(FC)层;
全连接层的矩阵大小,比如最后是5分类的,那么就是[ n, 5],前边的n是连接前边提取出来的特征,但是对于全连接层他不能连接三维的东西,所以我们需要把之前提取出来的三维特征图(比如32x32x10)你得给我拉成一个特征向量,非常非常长的特征向量,特征向量就是里边每一个他都是一个值,特征向量长度是32x32x10=10240,所以最后全连接层得到的结果n=10240,即[10240,5]相当于得到全连接层的结果,相当于把这个10240个特征转化成我预测的5个类别的概率值,所以在最后的pooling层和FC之间还存在一个拉长的操作(就是把一个图拉成一个特征向量,把之前所有的结果都总结在一起了,通过全连接层得到我们最终的一个分类结果了);
几层神经网络中的层是指:带参数计算的才能叫做一层。
卷积层带参数计算:要乘权重内积再加偏置的。
Relu层不带参数计算:没有权重参数,没有偏置,也不用更新什么;所以激活层统统不带,因为他不用去更新什么东西。
池化层不带参数计算:没有w和b,不需要更新。
全连接层带参数计算:有权重矩阵。
只有带参数的东西才能称作神经网络的一层,不带参数的统统不叫做层。
9、特征图变化
转换就是拉伸(把长方体特征转化成一条向量特征) ,向量才能连接全连接层,最终得到分类的结果。
10、感受野
首先理解感受这个词,下图是一个5x5的原始输入当中,在这个区域中比如说我现在拿到一个小区域3x3(就是绿色部分)要对他进行卷积,卷积之后得到一个值5,这个5这个值对应的原始就是前边的值是多大呢?就是前边绿色3x3的区域,因为这个值它是由前边的3x3的区域得到的,说白了就是我当前这个值就是卷积结果5这个值,能看到能感受到前边的输入是3x3的。
第二次卷积得到结果1,是对前边的输入进行卷积,他能感受到前一层是3x3的,前边这个3x3他能感受到前边一层(原始输入数据)的5x5的,比如就做两次,那么我就说最后一次的卷积结果是1,他当前的感受野是5x5的;说白了就是当前最后得到的值他能看到前边的是多少,或者说最后这个值他是由前边原始输入数据中多少个值参与计算得到的。
一般情况下希望感受野越大越好(我目前得到的值既与前景有关也与背景有关)。
上边所需参数的计算参见图:
2个3x3x3的Filter。