卷积神经网络的卷积层大概工作原理如下:
1. 滤波器大概是各种小“组件”,如曲线、颜色;
2. 由滤波器响应得到的激活图就是各组件在区域位置的响应;
3. 将激活图作为下一卷积层的输入,相当于组合各组件;
4. 再经过全连接层的作用,得到最后的分类系统。
为什么使用零填充,而不使用其他有意义的数字?
卷积层的卷积是作用在点乘的基础上对信息作‘保留’作用,用0作为填充,可以对输出没有影响。再者,一般卷积层之后都会有个Pooling,经过这个池的作用(如Max Pooling),0填充对应的点乘效果就消除了。
参数共享
过滤器是一种参数共享的形式。相对于传统的神经网络,我们需要把图片平展开来(变成一列的向量),再进行全连接(即每个变量一个参数)。这种卷积过滤器的方式,可以想象为空间上的‘摊开’,用卷积代替全连接,从而得到参数共享的概念,从而避免过拟合。
卷积过程:
就是卷积的特征图的每个位置,都是经过过滤器的加权及偏置后,再经过非线性函数得到的。
几个常见的卷积网络
LeNet-5:1994年出现,是最早的卷积神经网络之一。其出现是相对于传统的多层神经网络,阐述图像具有强烈的空间相关性。
AlexNet:2012年的ImageNet竞赛冠军框架。其贡献在于:
1. 使用了Relu作为非线性函数
2. 使用Dropout=0.5避免过拟合
3. 运用了数据(集)增强的想法(其目的是扩大数据集:平移、偏转、区域取块)
其第一个过滤器的大小为11*11, 步长为4,最后一特征图为6*6*256。
ZFNet:2013年ImageNet竞赛冠军框架。是基于AlexNet的优化,其优化在于:
1. 对于第一个卷积核,改善了11*11,步距为4的过滤器(平移太多,信息容易忽略),改为7*7,步距为2
2. 对于第3,4,5层的卷积核,其过滤器的数量由384,384,256分别改为512,1024,512
VGGNET:相比于以前疯狂寻找卷积核、池化的合适大小,VGGNET将卷积核大小固定为3*3,步长为1,以获得更大的接收野;将最大池大小固定为2*2,步长为2。该网络的关键在于每一层卷积核的数量。
该网络的问题在于起最后一个特征图的大小为7*7*512,铺平后有7*7*512个神经节点,第一个全连接层的节点数有4096个,则这一个全连接的参数有(7*7*512+1)*4096个参数,这是非常多的,将耗费大量内存。
GoogLeNet:2014年ImageNet竞赛冠军框架,是基于卷积模块的网络。
由图可以看出,GoogLeNet用卷积网络的模块代替了传统的卷积层,并对最后一层卷积特征图做了均值池化操作(如7*7*512的卷积特征图,在均值池化后变为1*512。其得到的效果和之前差不多,甚至有一点点改善)。其模块当中有1*1的卷积层,该想法来自于NiN(Network-in-Network),是一种减少参数的操作(深度消失,变为1),是经过映射的(别认为是无效操作,如复制)。为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。
这种模块化的方式增加了计算量,但是大大减少了内存的占用,是计算量和内存的权衡。而使用1*1的卷积层代替3*3的卷积层是为了减少计算量。
ResNet:2015年ImageNet竞赛冠军框架,也是几乎所有重要比赛的第一名。其定义了一种跳跃性的卷积网络结构。【这个网络原理不是很懂,下面原理的假设都是基于一种“理解”,有机会再看。对于梯度的推导计算,权重的更新之类的,毫无概念。】
残差网络,其出现是为了解决plain net(前面的网络)层数大时,会出现过拟合现象的问题。残差网络通过这样跳跃的分流,实现一种”恒等映射的想法”(大概可以这么理解,对于我们的分类,我们的输入层表示的东西,应该和我们输出层表示的东西一样,这大概能解释为什么是x而不是2x, 1/2x这样的问题。如x为5,在经过映射之后 ,我们应该得到一个类似5.1的东西。如果把这样一个结构看做一个网络,那么H(x)=F(x)+x,此时H(x)=5.1,而x=5,则F(x)=0.1)。残差的思想是去掉相同的主体部分,从而突出微小变化对输出的影响,如5.1和5.2对应的F(x)=0.1和F(x)=0.2。通过这种思想,网络将更好训练。
各种卷积神经网络历史的理解,参考了该网址:http://www.dataguru.cn/article-9865-1.html,名字为《神经网络架构演进史:全面回顾从LeNet5到ENet十余种架构》