1、CNN的引入
传统的神经网络一般属于全连接神经网络,也就是说相邻的两层间中每一层的神经元都与另一层的神经元间有链接。这样的网络显然可以完整的保持输入数据的信息。但假设输入数据的维度较高(假设输入时图片,维度是200X200X3),相邻隐含层中隐含单元的个数为10个那么第一层的权重中,参数的个数为200X200X3X10 = 1200000个,这还仅仅是考虑了单隐含层的情况。这么多的参数当然可以很好的拟合输入与输出,但同时也很容易造成过拟合的发生。CNN在传统神经网络的基础上加入了卷积层和池化层,以简化网络参数。从整体上讲,CNN包含3种不同的层卷积层、池化层以及和传统神经网络类似的全连接层。即使是非常复杂的CNN网络也只是这3层的叠加。
2、卷积层
既然在1中提到了模型参数过多的情况,那么一个解决方案是权值共享(weight sharing)。即对于不同的输入数据来使用相同的权重来到达缩减参数的目的。其基本思路如下图:
在卷积的过程中有3大参数,卷积的宽度、卷积的步长以及补0的行数。
- 卷积的宽度:一般指过滤器(filter)的宽度
- 卷积的步长(stride):即每次卷积移动的步长
- 补零的行数:通常情况下为了控制通过卷积层后数据的大小(一般情况下作用是保持和输入数据相同的大小)
假设卷积的