深度学习之卷积神经网络

一、使用卷积神经网络的原因

 我们知道,图像是由一个个像素点构成,每个像素点有三个通道,分别代表RGB颜色,那么,如果一个图像的尺寸是(28,28,1),即代表这个图像的是一个长宽均为28,channel为1的图像(channel也叫depth,此处1代表灰色图像)。如果使用全连接的网络结构,即,网络中的神经与与相邻层上的每个神经元均连接,那就意味着我们的网络有28 * 28 =784个神经元,hidden层采用了15个神经元,那么简单计算一下,我们需要的参数个数(w和b)就有:784*15*10+15+10=117625个,由于参数太多,因此随便进行一次反向传播计算量都是巨大的,卷积神经网络很好的改善了这一问题

二、卷积神经网络原理

卷积神经网络大致可分为三层:卷积层、池化层和全连接层。下面是一个神经网络的示意图:

如下,是LeNet结构图: 

 

1、卷积层

卷积层是卷积核在上一级输入层上通过逐一滑动窗口计算而得,卷积核中的每一个参数都相当于传统神经网络中的权值参数,与对应的局部像素相连接,将卷积核的各个参数与对应的局部像素值相乘之和,(通常还要再加上一个偏置参数),得到卷积层上的结果。如下图所示。

2、池化层

通过卷积层获得了图像的特征之后,理论上我们可以直接使用这些特征训练分类器(如softmax),但是这样做将面临巨大的计算量的挑战,而且容易产生过拟合的现象。为了进一步降低网络训练参数及模型的过拟合程度,我们对卷积层进行池化/采样(Pooling)处理。池化/采样的方式通常有以下两种:

  • Max-Pooling: 选择Pooling窗口中的最大值作为采样值;
  • Mean-Pooling: 将Pooling窗口中的所有值相加取平均,以平均值作为采样值;

如下图所示。

3、全连接层

 “完全连接”这个术语意味着前一层中的每个神经元都连接到下一层的每个神经元。卷积层和池化层的输出代表了输入图像的高级特征。完全连接层的目的是利用这些基于训练数据集得到的特征,将输入图像分为不同的类。例如,我们要执行的图像分类任务有四个可能的输出,如所示(请注意,图中没有展示出完全连接层中节点之间的连接)

除分类之外,添加完全连接层也是一个(通常来说)比较简单的学习这些特征非线性组合的方式。卷积层和池化层得到的大部分特征对分类的效果可能也不错,但这些特征的组合可能会更好。完全连接层的输出概率之和为1。这是因为我们在完全连接层的输出层使用了 softmax 激活函数。Softmax 函数取任意实数向量作为输入,并将其压缩到数值在0到1之间,总和为1的向量。

4、训练

 反向传播可分为四部分,分别是前向传导、损失函数、后向传导,以及权重更新。

 三、卷积神经网络中的部分问题

1、步幅和填充

步幅控制着过滤器围绕输入内容进行卷积计算的方式,过滤器移动的距离就是步幅。如下例子所示步幅为1:

当步幅增加到2的时候: 

计算任意给定卷积层的输出的大小的公式是

其中 O 是输出尺寸,K 是过滤器尺寸,P 是填充,S 是步幅。

 2、卷积层尺寸计算

输入矩阵格式:四个维度依次为:样本数、图像高度、图像宽度、图像通道数

输出矩阵格式:与输入矩阵的维度顺序和含义相同,但后三个维度(图像高度、图像宽度、图像通道数)的尺寸发生变化。

权重矩阵(卷积核)格式:同样是四个维度,但维度的含义与上面两者都不同,为:卷积核高度、卷积核宽度、输入通道数、输出通道数(卷积核个数)

输入矩阵、权重矩阵、输出矩阵这三者之间的相互决定关系

卷积核的输入通道数由输入矩阵的通道数所决定

输出矩阵矩阵的通道数由卷积核的输出通道数所决定

输出矩阵的高度和宽度这两个维度的尺寸由输入矩阵、卷积核、扫描方式所共同决定。公式如下:

例如下图所示:

 

 

 

标准卷积计算举例

以AlexNet模型的第一个卷积层为例,输入图片的尺寸统一为227x227x3(高度x宽度x颜色通道数),本层一共具有96个卷积核,每个卷积核的尺寸都是11x11x3,已知stride=4,padding=0,假设batch_size=256,则输出矩阵的高度/宽度为(227-11)/4+1=55

1x1卷积计算举例

GoogLeNetResNet 等经典模型中普遍使用一个像素大小的卷积核作为降低参数复杂度的手段。从下面的运算可以看到,其实 1 x 1 卷积没有什么神秘的,其作用就是将输入矩阵的通道数量缩减后输出(512 降为 32),并保持它在宽度和高度维度上的尺寸(227 x 227)。

全连接层计算举例

实际上,全连接层也可以被视为是一种极端情况的卷积层,其卷积核尺寸就是输入矩阵尺寸,因此输出矩阵的高度和宽度尺寸都是1

总结下来,其实只需要认识到,虽然输入的每一张图像本身具有三个维度,但是对于卷积核来讲依然只是一个一维向量。卷积核做的,其实就是与感受野范围内的像素点进行点积(而不是矩阵乘法)。

输入 x[batch, height, width, in_channel]

权重 w[height, width, in_channel, out_channel]

输出 y[batch, height, width, out_channel]

3、激活函数

在每个卷积层之后,通常会立即应用一个非线性层(或激活层)。其目的是给一个在卷积层中刚经过线性计算操作(只是数组元素依次(element wise)相乘与求和)的系统引入非线性特征。过去,人们用的是像双曲正切和 S 型函数这样的非线性方程,但研究者发现 ReLU 层效果好得多,因为神经网络能够在准确度不发生明显改变的情况下把训练速度提高很多(由于计算效率增加)。它同样能帮助减轻梯度消失的问题——由于梯度以指数方式在层中消失,导致网络较底层的训练速度非常慢。ReLU 层对输入内容的所有值都应用了函数 f(x) = max(0, x)。用基本术语来说,这一层把所有的负激活(negative activation)都变为零。这一层会增加模型乃至整个神经网络的非线性特征,而且不会影响卷积层的感受野。

4、参数共享和局部连通性

参数共享:通过一张特定的特征图中所有神经元来共享权重

局部连通性:每个神经元值连接一个输入图像的自己(神经网络中的所有神经元都完全连接在一起)。

这帮助减少了整个系统中的参数数量,让计算变得更有效。

5、优缺点

优点
共享卷积核,对高维数据处理无压力
无需手动选取特征,训练好权重,即得特征分类效果好
缺点
需要调参,需要大样本量,训练最好要GPU
物理含义不明确(也就说,我们并不知道每个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的黑箱模型

参考:

http://www.jeyzhang.com/cnn-learning-notes-1.html

https://juejin.im/entry/5acc5ff551882555627d9ca8

 知乎:https://zhuanlan.zhihu.com/jiqizhixin机器之心专栏

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值