cs231n-有关CNN的介绍、细节

一、卷积神经网络介绍:


卷积神经网络是一种多层神经网络,擅长处理图像特别是大图像的相关机器学习问题。

卷积网络通过一系列方法,成功将数据量庞大的图像识别问题不断降维,最终使其能够被训练。CNN最早由Yann LeCun提出并应用在手写字体识别上(MINST)。LeCun提出的网络称为LeNet,其网络结构如下:


cs231n-有关CNN的介绍、细节

这是一个最典型的卷积网络,由卷积层(conv)、池化层(pooling)、全连接层(FC)组成。其中卷积层与池化层配合,组成多个卷积组,逐层提取特征,最终通过若干个全连接层完成分类。

卷积层完成的操作,可以认为是受局部感知的启发,而池化层,主要是为了降低数据维度。

综合起来说,CNN通过卷积来模拟特征区分,并且通过卷积的权值共享及池化,来降低网络参数的数量级,最后通过传统神经网络完成分类等任务。


二、卷积神经网络细节:

1.Filter的产生及作用

 假设输入的图片格式是32*32*3,过滤器(Filter)的大小为5*5*3,需要注意原始输入数据和过滤器的深度一般是一样的。

注:过滤器(Filter)和卷积核(Kernel)基本同义

cs231n-有关CNN的介绍、细节

2.Filter的一些特性

令这个5*5*3的过滤器(Filter)“扫过”输入32*32*3的输入数据,具体过程就是两个5*5*3的向量做点乘运算,可以得到一个28*28*1的**图像(Activation Map),需要注意的是,通常情况下过滤器(Filter)的数量不止一个,而过滤器的数量就决定了**图像(Activation Map)的层数。

cs231n-有关CNN的介绍、细节

3.输入层与Filter、填充层(Padding)、步长(Stride)、和输出层的关系

 有时候我们并不想每一列都进行过滤器的“滑动(slide)”,于是我们有了步长(stride)这个参数,其值等于两个相邻Filter划过位置的坐标差。

 并且从上图可以看到,数据会因为卷积操作而变得越来越小(32*32->28*28),这样会导致数据特征太过粗糙而无法分析,所以我们想到可以在数据周围填充0,这样经过处理后,图像的大小并不会变。至于填充0的原因,我认为的解释是不想对点乘的结果产生不必要的影响,也有人认为应该填充边界近似的值,但事实证明填充0的效果已经非常优秀。

这样我们就有了几个参数:

1).Filter的个数K

2).Filter的大小F(上例中使用了5*5,一般都使用奇数大小的过滤器)

3).步长(Stride)S

4).0填充层(zero padding)的层数P

下图是来自cs231n的一张幻灯片,写明了这些参数之间的关系:

cs231n-有关CNN的介绍、细节

其中W1、H1、D1为原始数据大小,W2、H2、D2为经过卷积后的数据大小

总参数个数由Filter定义及Filter个数决定,公式为:The number of parameters = (FxFxD + 1) * K

4.Pooling(池化)过程

cs231n-有关CNN的介绍、细节

通过上图可以发现,卷积神经网络中除了不断的卷积(conv)以及**(默认用relu函数)之外,还有池化(pooling)操作。

 Pooling层一般用于降维,将一个k*k的区域内取平均(average pooling)或取最大值(max pooling),作为这一个小区域内的特征,传递到下一层。这样可以使数据的特征更加明显,提取特征变得更加容易且高效。

下图是对池化过程的解释以及一些参数的关系:

cs231n-有关CNN的介绍、细节

5.所有的操作完毕后,网络会经过若干个全连接层(FC-Fully Connected)

 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和**函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为h*w的全局卷积,h和w分别为前层卷积结果的高和宽。
 我们可以将全连接层简单的认为是一种用于最后分类的线性变换,但是最近的研究中,全连接层因为参数过多会导致计算复杂、过拟合(overfitting)等很多问题,全连接层的使用慢慢的变成了历史,目前有很多可以代替全连接层的方法效果也都非常优秀。