文章目录
- 1. 卷积神经网络结构
- 2. 卷积神经网络计算
- 2.1. 卷积层计算
- 2.2. 池化层计算
- 2.3. 全连接层计算
- 3. 典型卷积神经网络
- 3.1. AlexNet
- 3.2. VGGnet
卷积神经网络(Convolutional Neural Network,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Network),是深度学习的代表算法之一。
卷积神经网络具有表征学习(Representation Learning)能力,能够按其阶层结构对输入信息进行平移不变分类
(Shift-invariant Classification),因此也被称为平移不变人工神经网络(Shift-Invariant Artificial Neural Network,SIANN)。
卷积神经网络仿照生物的视知觉(Visual Perception)机制构建
,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性
使得卷积神经网络能够以较小的计算量对格点化 (Grid-like Topology)特征(如像素和声频)进行学习
。有稳定的效果且对数据没有额外的特征工程(Feature Engineering)要求。
1. 卷积神经网络结构
典型的卷积神经网络结构主要分为输入层、卷积层、池化层、全连接层、分类层
等,如下图:
分类 | 描述 |
---|---|
输入层(Input Layer) | 1. 输入层是整个神经网络的输入, 在处理图像 的卷积神经网络中,它一般代表了一张图片的像素矩阵 。 其中三维矩阵的长和宽代表了图像的大小,深度代表了图像的色彩通道(Channel) 。例如黑白图的深度为1,而在RGB色彩模式下,图像的 深度为3。2. 从输入层开始,卷积神经网络通过不同的神经网络架构将上一层的三维矩阵转换为下一层的三维矩阵,直到最后的全连接层。 |
卷积层(Convolution Layer) | 1. 是卷积神经网络结构中最重要的部分,使用一组可学习的过滤器(卷积层)来提取输入数据的空间特征。 2. 通过卷积能获得抽象度更高的特征,一般来说经过卷积层处理的节点会变得更深。 3. 卷积具有权重共享的特性,可以减低参数数量,防止由于参数过多而造成过拟合。 |
池化层(Pooling Layer) | 1. 又称欠采样或下采样,对特征图进行下采样,减低特征维度,减少参数防止过拟合; 2.池化层神经网络不会改变三维矩阵的深度,但是它可以`缩小矩阵的长宽,从而进一步减小全连接层节点的个数,进而减小整个神经网络参数。 |
全连接层(Full Connection Layer) | 1. 经过几轮卷积和池化之后,可以认定图像中的信息已经被抽象成信息含量更高的特征 ,完成了特征提取,最后一般会有1到2个全连接层完成分类问题。2. 全连接层将前一层输出展平后连接到每个神经元,用于学习非空间特征,将特征映射到输出。 3. 我们可以将卷积层和池化层看作自动图像特征提取的过程,在特征提取之后,仍要用全连接层来完成分类问题。 |
Softmax层 | Softmax层主要用于分类,通过Softmax层可以得到当前输出属于不同种类的概率分布情况。该层主要采用 Softmax函数,又称归一化指数函数,如下公式 |
2. 卷积神经网络计算
2.1. 卷积层计算
卷积层神经网络结构中最重要的部分就是过滤器(Filter)或者 叫作内核(Kernel),如下图显示了这一结构。过滤器可以将当前神经网络的一个子节点矩阵
转化为下一层神经网络的一个单位节点矩阵
。单位节点矩阵就是长和宽都是1,但深度不限
的节点矩阵。
- 在一个卷积层中,过滤器所处理的节点矩阵的长和宽都是人为设定的,这个节点矩阵的尺寸也被称为过滤器的尺寸。
- 因为过滤器处理的矩阵深度和当前神经网络节点矩阵的深度是相同的,所以尽管过滤器的节点矩阵是三维的,但是只需给出二维矩阵即可。
- 另外一个需要人为设定的是过滤器的深度,也即输出单位节点矩阵的深度。如上图,左侧小矩阵的尺寸为过滤器的尺寸,而右侧单位矩阵的深度为
滤波器
的深度。
(1)重要参数介绍
卷积层有一些重要的超参数需要配置,下面进行一一介绍。
参数 | 说明 |
---|---|
卷积核大小(kernal_size) | 卷积核一般宽和高都比较小,如果输入是图片,宽高一般相同,比如3x3、5x5等,但是深度必须与输入维度一致。如输入图像是28 x 28 x 3的彩色图片,卷积核可以是3 x 3 x 3,这算作一个卷积核。 |
卷积核数量(out_channels) | 1. 卷积核数量即卷积产生的通道数,不同卷积核在输入数据中寻找不同特征 。2. 一般卷积核数量大于输入通道数,并且随着卷积的进行卷积核数量越来越多,从而提取的特征越来越多,如VGGNet-16卷积核数量经历了从64-128-256-512的过程。 |
步长(stride) | 1. 在滑动卷积核时,必须指定步长。 2. 步长为1,卷积核每次移动1个像素;步长为2每次移动2个像素,当然步长也可以是不常用的3,或者更大的数字,但这些在实际中很少使用)。一般这个操作会让输出数据体在空间上变小。 |
零填充(padding) | 有时候将输入数据用0在边缘处 进行填充是很方便的。这个零填充(zero-padding)的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,使得输入和输出的宽高都相等 )。 |
(2)参数量及特征图计算
假设输入数据维度为 W × H × C ∈ W \times H \times C _ { \in } W×H×C∈,卷积核尺寸 K × K K \times K K×K,步长S,卷积核数量 C o u t C _ { o u t } Cout,零填充数(量为P,则特征图的 宽 W 高 H 2 深 D 2 宽W高H _ { 2 }深D _ { 2 } 宽W高H2深D2计算公式分别为
W 2 = H 2 = ( W − K + 2 P ) / S + 1 W _ { 2 } = H _ { 2 } = ( W - K + 2 P ) / S + 1 W2=H2=(W−K+2P)/S+1
D 2 = C o u t D _ { 2 } = C _ { o u t } D2=Cout
参数量计算公式: C o u t × ( K × K × C i n + 1 ) C _ { o u t } \times ( K \times K \times C _ { in } + 1 ) Cout×(K×K×Cin+1)
其中1表示每个卷积核都需要加上一个偏置。
特征图上每一个点的计算采用下列方式,假设输入图像维度是 5 × 5 × 3 5 \times 5 \times 3 5×5×3,卷积核维度是 3 × 3 × 3 3 \times 3 \times 3 3×3×3,卷积核数量为2,步长2,Padding1,经过计算可知
W 2 = H 2 = ( W − K + 2 P ) / S + 1 = ( 5 − 3 + 2 ) / 2 + 1 = 3 , D 2 = 2 W _ { 2 } = H _ { 2 } = ( W - K + 2 P ) / S + 1 = ( 5 - 3 + 2 ) / 2 + 1 = 3 , D _ { 2 } = 2 W2=H2=(W−K+2P)/S+1=(5−3+2)/2+1=3,D2=2,即特征图尺寸为 3 × 3 × 2 3 \times 3 \times 2 3×3×2 特征图,具体计算方式如下图。
以上就是卷积层卷积的计算,体现了卷积神经网络的局部连接和权值共享特性
,通过卷积操作,参数的数量大幅降低
。
2.2. 池化层计算
池化层可以有效地缩小矩阵的尺寸,从而减少最后全连接层的数量
,加快计算速度的同时防止过拟合问题。
池化的方式很多,最常用的池化方式是
最大池化(Max Pooling) 和平均池化(Average Pooling)
与卷积层的过滤器类似,池化层的 过滤器也需要设置尺寸,唯一不同的是池化层的过滤器只影响一个深 度上的节点,即主要减小矩阵的长和宽,不减少矩阵的深度,虽然池化层可以减少矩阵的深度,但是在实际应用中不会这样使用。
如下展示了一个最大池化计算过程的例子。注意池化层只减小了矩阵的长和宽,并未 减少矩阵的深度。
2.3. 全连接层计算
全连接层不保存分类信息,在整个卷积神经网络中起到分类器的作用,下面举例介绍下全连接层的计算过程,设 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3为全连接层的输入, a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3为输出,则有:
假设全连接层的输入维度是800,输出维度是500,则:
- Loss对全连接的输入求导
- Loss对权重系数求导
- 对偏执系数求导 ing
3. 典型卷积神经网络
3.1. AlexNet
该网络2012年由Hinton学生Alex提出,是Lenet加宽版,包含65万神经元,5个卷积层,3个池化层,3个全连接,如图 5-21所示。Alex首次采用GPU硬件加速;成功使用ReLU作为CNN的激活函数
,并验证其效果在较深的网络超过了 Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题
。
训练逻辑
- 训练时
使用Dropout随机忽略一部分神经元
,以避免模型过拟合;使用最大池化
,避免平均池化的模糊化效果;- 让步长比池化核的尺寸小·,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性;
3.2. VGGnet
VGGNet由牛津大学的视觉几何组和 Google DeepMind公司的研究员一起研发的深度卷积神经网络,在 ILSVRC 2014上取得了第二名的成绩,将Top-5错误率降到7.3%。
它主要的贡献是展示出网络的深度(depth)是算法优良性能的关键部分。
VGGnet-16各层处理过程如下:
计算过程