机器学习笔记(五):初探卷积神经网络
一、前言
卷积神经网络主要由两部分组成:
- 一部分是特征提取(卷积、激活函数、池化)
- 另一部分是分类识别(全连接)
卷积神经网络应用非常广泛:
图像分类:场景分类,目标分类
图像检测:显著性检测,物体检测,语义检测等等
图像识别:人脸识别,字符识别,车牌识别,行为识别,步态识别等等
图像分割:前景分割,语义分割
但是,CNN真正能做的,只是起到一个图像特征提取器的作用!
二、CNN是什么
2.1 卷积神经网络(CNN)是一种带有卷积结构的深度神经网络
卷积结构可以减少深层网络占用的内存量。
卷积结构有三个关键的操作
- 其一是局部感受野,
- 其二是权值共享,
- 其三是池化层pooling。
作用:可以有效的减少网络的参数个数,缓解模型的过拟合问题。
2.2 卷积神经网络(CNN)与普通神经网络非常相似
相同点:
它们都由具有“可学习的权重W”和“偏置常量b”的神经元组成。
每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。
不同之处在哪?
CNN具有三维体积的神经元(3D volumes of neurons)
卷积神经网络,利用输入是图片的特点,把神经元设计成三个维度:depth、height、width
(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。
比如,输入的图片大小是 3× 32 × 32 (rgb),那么输入神经元就也具有 3× 32 × 32 的维度。
传统神经网络:
卷积神经网络:一个CNN由很多层组成,它们的输入是三维的,输出也是三维的
2.3 卷积神经网络(CNN)的结构
1)卷积层(Convolutional layer)
卷积神经网路中,每层卷积层由若干卷积核组成,每个卷积核的参数都是通过反向传播算法优化得到的。
卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
2)线性整流层(Rectified Linear Units layer, ReLU layer)
这一层神经的激活函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)。
3)池化层(Pooling layer)
通常在卷积层之后,会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
4)全连接层( Fully-Connected layer)
把所有局部特征,结合变成全局特征,用来计算最后每一类的得分。
2.4 一个卷积神经网络各层应用实例
上图中,CNN要做的事情是:给定一张图片,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:这是什么?
左边是:
- 数据输入层,对数据做一些处理。
中间是:
- CONV:卷积计算层,线性乘积、求和。
- RELU:激励层,ReLU是激活函数的一种。
- POOL:池化层,简言之,即取区域平均或最大。
右边是:
- FC:全连接层,所有局部特征,结合变成全局特征,分类评分
其中,卷积计算层是CNN的核心!
三、为什么使用CNN
在图像领域,用传统的神经网络并不合适。
我们知道,图像是由一个个像素点构成,每个像素点有三个通道,分别代表RGB颜色。如果一个图像的尺寸是(28,28,1),即代表这个图像的是一个长宽均为28,channel为1的图像(channel也叫depth,此处1代表灰色图像)。
使用全连接的网络结构,即,网络中的神经与与相邻层上的每个神经元均连接,那就意味着我们的网络输入层有28 * 28 =784个神经元,再假设隐藏层采用了15个神经元,输出层采用了10个神经元。那么简单计算一下,我们需要的参数个数(w和b)就有:784*15*10+15+10=117625个。这个参数太多了,随便进行一次反向传播计算量都是巨大的,从计算资源和调参的角度都不建议用传统的神经网络。
使用卷积神经网络,就可以比较好的解决这个问题。卷积层可以很好的利用图像本身具有的二维空间特征,比全连接网络仅仅考虑单个像素点的效果会更好,同时使用卷积核后图片的尺寸变小,方便后续计算;而池化层通过降采样的方式,在不影响图像质量的情况下,压缩图片,减少参数,这样计算量也会比全连接网络小很多。