

深度学习三:卷积神经网络
source link: http://www.cnblogs.com/jyroy/p/13762902.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN)又叫 卷积网络(Convolutional Network) ,是一种专门用来处理具有类似网格结构的数据的神经网络。卷积神经网络一词中的卷积是一种特殊的线性运算。卷积网络是指那些至少在网络的一层中使用卷积运算来代替一般的矩阵乘法的神经网络。
卷积神经网络的出现,极大的缓解了全连接神经网络中存在的一个典型的问题:数据的波形被忽视了!众所周知,全连接神经网络在进行数据输入的时候,需要将一个二维或者三维的数据展平为一维的数据。而我们知道在计算机中图形是一个三维的数据,因为需要存储一些类似 RGB 各个通道之间关联性的空间信息,所以三维形状中可能隐藏有值得提取的本质模式。而全连接展平会导致形状的忽视。因此需要利用卷积神经网络来保持形状的不变。
典型应用场景:图像识别、语音识别等。
典型结构如下图所示:
神经网络中的各层
- 输入层(Input Layer) :主要是对原始的图像数据进行预处理
- 卷积层(Convolution Layers) :从前一层提取移位不变特征。即当输入数据是图像的时候,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以(有可能)正确理解图像等具有形状的数据。注:卷积层的输入和输出数据通常又被称为特征图(Feature Map)。卷积层的输入数据称为输入特征图(Input Feature Map),输出数据称为输出特征图(Output Feature Map)。
- 池化层(Pooling Layers) :将前一层的多个单元的激活组合为一个单元。池化是缩小高、长方向上的空间的运算,通常减小一半。
- 全连接层(Fully Connected Layers) :收集空间扩散信息
- 输出层(Output Layer) :选择类
卷积操作
卷积运算相当于图像处理中的“滤波器运算”。卷积运算会对输入数据应用 滤波器(Filter) 。
假设,一个初始的图像大小为 \(J*K\) , 同时有 \(L\) 个管道,如下图所示:
我们应用一个 \(M*N\) 大小的滤波器。图中绿色的格子就是一个 3*3 的滤波器。卷积运算的整个操作为:将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和(整个操作也被称为乘积累加运算),然后,将这个结果保存到输出的对应位置。
将计算过程公式化,公式如下:
\[Z_{j,k} = b + \sum_{m=0}^{M-1}\sum_{n=0}^{N-1}K_{m,n}V_{j+m,k+n} \]
其中 \(K_{m,n}\) 表示滤波器的 \(m,n\) 位置的数据, \(V_{j+m,k+n}\) 表示图像的 \(j+m,k+n\) 位置的数据, \(b\) 是偏置项。
将计算过程图像化,如下图所示:
其中,滤波器的 参数 就是 权重(Weights) ,同时还有有个 偏置项(Bias) ,这个偏置项会被加到滤波器最后的输出上。
权重共享
我们可以根据上图看到,对一层中的每一个 \(M×N\) 块输入应用相同的权值,计算卷积层中的下一个隐藏单元,这就是个 权重共享(Weight Sharing) 的概念。
填充
填充(Padding):在进行卷积操作之前,有时候要向周围填入固定的数据,比如用数值 0 进行填充,也叫 零填充(Zero Padding) 。
应用填充之后,卷积层的输出大小将会和卷积之前的层一样,如图所示,其中粉色的 6 * 7 的格子是原始的图像尺寸,我们在周围加上一圈数值为 0 的格子,用白色表示:
以步幅 1 进行卷积,如下图所示:
最终我们得到了一个大小为 6 * 7 的蓝色的卷积层,和原始图像的尺寸相同,如下图所示:
这主要也是为了避免卷积过程中过一个典型的问题:如果每次惊醒卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变成 1,导致无法再应用卷积运算。为了避免这个情况的出现,就需要使用填充。
步幅
步幅(Stribe):应用滤波器间隔的位置称为步幅。在上面的例子中,采用的步幅为 1。
我们可以将步幅改为 2,那么卷积过程就会变成下图所示的:
可以看到应用滤波器的窗口的间隔变成了 2 个元素,如下图所示:
最终,新的一层的尺寸变为一个 3 * 4 的层。用公式表示为(设步长为 \(s\) ):
\[(1+\frac{(J-M)}{s}), (1+\frac{(K-N)}{s}) \]
3 维数据的卷积运算
在一开始,虽然我们假设了一个初始的图像大小为 \(J*K\) , 同时有 \(L\) 个管道。但是我们讨论的卷积操作一直只在单层上进行的,下面我们就讨论一下在 3 维情况下的卷积运算。
当在通道方向上有多个特征图的时候,会按照通道进行输入数据滤波器的卷积运算,并将结果相加,从而得到输出。计算步骤如下图所示:
至此,我们的公式可以总结为:
\[Z^i_{j,k} = b^i + \sum_l\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}K^i_{m,n}V^l_{j+m,k+n} \]
其中 \(K^i_{m,n}\) 表示第 \(i\) 个滤波器的 \(m,n\) 位置的数据, \(V^l_{j+m,k+n}\) 表示图像第 \(l\) 层通道的 \(j+m,k+n\) 位置的数据, \(b^i\) 是第 \(i\) 个偏置项。根据之前的权重共享的概念,我们可以知道,每一层通道是共用一个滤波器的相同权重的,同样也共用相同的偏置。
池化
池化(Pooling)是缩小高、长方向上的空间的运算。
最典型的池化过程叫做 最大池化(Max Pooling) ,如下图所示,这是一个单层的池化:
图中所示的步骤是,我们划定一个 \(2 * 2\) 的窗口,找出这个窗口中最大的那个值,作为下一层的数据,这个窗口以步幅 2 进行移动。一般来说,池化的窗口大小会和步幅设定成相同的值。
除了 Max Pooling 之外,还有 Average Pooling/Mean Pooling ,即 平均池化 ,是计算目标区域的平均值。在图像识别领域中,主要使用 Max Pooling。
重叠池化
重叠池化(Overlapping Pooling)是 AlexNet 中的一个概念。Overlapping Pooling 的概念和 No-Overlapping Pooling的概念相对。
- Overlapping Pooling:当步幅大于窗口宽度,会使池化窗口产生重叠区域。可以提升预测精度、缓解过拟合。
- No-Overlapping Pooling:步幅和窗口宽度相同,池化窗口没有重叠区域。如上图的展示。又叫一般池化,General Pooling
池化层的特征
- 没有要学习的参数:池化层和卷积层不同,没有要学习的参数。池化层只是从目标区域中取最大值或平均值。
- 通道数不发生变化:经过池化运算,输入数据和输出数据的通道数不会发生变化。即计算是按照通道独立进行的。
- 对微小的位置变化具有鲁棒性(健壮):输入数据发生微小偏差时,池化仍会返回相同的结果。
典型的CNN
LeNet
LeNet 是在 1998 年提出的进行手写数字识别的网络。具有连续的卷积层和池化层(准确的讲是只抽取元素的子采样层),最后经全连接层输出结果。基本结构如下:
- C1:第一个卷积层的 5×5 的窗口从原始的 32×32 的图像中提取出 28×28 的特征数组。
- S2:然后再进行子抽样,将其大小减半为14×14。
- C3:第二个卷积层使用另一个 5×5 的窗口提取一个 10×10 的特征数组。
- S4:第二个子采样层将其简化为 5×5。
- C5、F6:这些激活然后通过两个全连接层进入对应数字 ‘0’ 到 ‘9’ 的10个输出单元。
和现在的 CNN 相比,LeNet 有几个 不同点 :
- 激活函数:LeNet中使用 Sigmoid 函数,而现在的 CNN 中主要使用 ReLU 函数。
- 池化/子采样:LeNet 中使用子采样缩小中间数据的大小,而现在的 CNN 中 Max Pooling 是主流。
AlexNet
AlexNet 是一个引发深度学习热潮的导火索。基本结构如下:
AlexNet 叠有多个卷积层和池化层,最后经由全连接层输出:
- 5 个卷积层和 3 个全连接层
- 利用重叠步幅的最大池化层
- 1000 个类的 Softmax
- 两个只在特定层进行交互的 GPU。上图中就是利用了两个 GPU,在第二个 Max Pooling 层进行交互,一直到最后进行输出两个 GPU 一直是在并行运算。
AlexNet 虽然在结构上和 LeNet 没有很大的不同,但是也有一些细节上的 差异 :
- AlexNet 的激活函数使用的是 ReLU
- 使用进行局部正规化的 LRN(Local Response Normalization)层
- 使用 Dropout
面试常见问题
-
神经网络中的权重共享是什么?
-
\(1 * 1\) 卷积的作用
-
卷积层和池化层有什么区别
-
LeNet-5 结构
-
AlexNet 结构
Recommend
-
149
-
82
选自neurdiness 机器之心编译 参与:Panda ...
-
36
点击 我爱计算机视觉 标星,更快获取CVML新技术 本文为52CV群友王广胜对上个月更新的CNN综述文章 A Survey of the Recent Architectures of Deep Convolutional Neural Network...
-
81
点击上方“蓝字”关注“AI开发者” 本文来自 @BBuf
-
12
原文来源于魏秀参博士的《解析深度学习:卷积神经网络原理与视觉实践》,本书由周志华老师作序推荐:“市面上深度学习书籍已不少,但专门针对卷积神经网络展开,侧重实践有不失论释者尚不多见。本书基本覆盖了卷积神经网络实践所有涉及环节,作者交...
-
10
深度学习-卷积神经网络-目标检测之YOLOV3模型-代码运行图片检测实践2_firemonkeycs的专栏-CSDN博客 深度学习-卷积神经网...
-
6
深度卷积神经网络CNNs的多GPU并行框架及其应用
-
11
一、前期工作 本文将实现灵笼中人物角色的识别。较上一篇文章,这次我采用了VGG-19结构,并增加了预测与保存and加载模型两个部分。 我的环境: 语言环境:Python3.6.5编译器:jupyt...
-
8
各个知识点详解 LeNet-5网络 LetNet网络的的讲解主要参考1998年计算机科学家Yann LeCun发布的一篇论文《Gradient based...
-
6
个人认为深度学习的第一层基础知识是基本的神经网络知识,学习参数的方法(寻优,如梯度下降法,注意一下,BP算法是求偏导数的一种办法,属于梯度下降迭代中的一个步骤)。 个人认为深度学习的第二层基础是卷积神经网络,也就是CNN。CNN是一种网络结构,由多...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK