深度学习——卷积神经网络原理解析

深度学习——卷积神经网络原理解析

前言

卷积神经网络可有效的运用在计算机视觉的经典任务中,例如目标检测、人脸识别等,所以,在进行这些任务时,多半都要运用到这些知识,例如卷积层是如何操作的,池化的方式有哪些,全连接层又是什么等等等等。所以今天在此总结了下CNN的相关知识,以便今后复习。

一、卷积?神经网络?

  • 卷积:你可以把卷积想象成一种混合信息的手段。想象一下装满信息的两个桶,我们把它们倒入一个桶中并且通过某种规则搅拌搅拌。也就是说卷积是一种混合两种信息的流程。你可以将它理解,它就是一种数学运算,跟减加乘除没有本质的区别。
  • 神经网络:

二、卷积神经网络?

卷积神经网络的英文名为Convolutional Neural Network,在论文通常简写为CNN。CNN可以应用在场景分类,图像分类,现在还可以应用到自然语言处理(NLP)方面的很多问题,比如句子分类等。卷积神经网络是一种带有卷积结构的深度神经网络,是一种专门用来处理类似网格结构的数据的神经网络,比如图像数据。首先要明白一个很基础的概念,一张图片肉眼看就是一张图片,但对于计算机来说,他看到的就是矩阵,就是一大堆数字,比如一张彩色的图片,对于计算机来说,就是具有三个通道(RGB)的矩阵。图像是像素值的矩阵。

三、卷积神经网络的组成层

  • 输入层
  • 卷积层
  • 激活函数层
  • 池化层
  • 全连接层

输入层主要包含对原始图像进行预处理,包括白化、归一化、去均值等等。详细讲解数据预处理可参考我的这篇博客

卷积运算层主要使用滤波器(卷积核),通过设定步长、深度等参数,对输入进行不同层次的特征提取。滤波器中的参数可以通过反向传播算法进行学习。

激活函数层主要是将卷积层的输出做一个非线性映射。常见的激活函数包括sigmoid,tanh,Relu等。详细讲解常用的激活函数可参考我的这篇博客

池化层主要是用于参数量压缩。可以减轻过拟合情况。常见的有平均池化和最大值池化,不包含需要学习的参数。

全连接层主要是指两层网络,所有神经元之间都有权重连接。常见用于网络的最后一层,用于计算类别得分。

接下来主要讲解卷积层、池化层、全连接层,其余两层在上面均有相应的博客链接。大家可以自行阅读。

四、卷积层

卷积层进行的运算就叫做卷积运算,在这一部分内容中,我们主要是理解卷积是如何计算的,怎样一步一步的由原始的输入到卷积运算后的输出。当然,为了后面更好理解,先得把几个涉及到的概念讲清楚,不然后面都不知道这是干嘛的:

  • 滤波器==卷积核(Kernel Size),尺寸通常为3×3×c,也有1×1×c,7×7×c等,注意,这里的c和这层的输出的通道是一样的,比如224×224×3的图像,用3×3×c的卷积,那么这里的c就是3

  • 步长(stride),卷积核运算后,滑几步到下一次,一般设置为1,2,3……若 步长 stride=1,就往右平移一个像素。

  • 边缘填充(padding),用于填充输入图像的边界,就是在矩阵最外围"再裹一层",如下图所示:
    在这里插入图片描述

那么卷积层到底是怎么计算的呢?简而言之就是四个字:相乘相加。在卷积层中,计算输入图像的区域和滤波器的权重矩阵之间的点积,并将其结果作为该层的输出。滤波器将滑过整个图像,重复相同的点积运算。如下图所示:

左图为输入,中间图为卷积核,右图为卷积运算输出。可以明显的看出就是一个相乘相加的操作。举个带数字的例子,可以动手算一算,如下图所示:

就拿这个有数字的在详细看下,在这里,输入图像的大小5×5,卷积核的大小为3×3,输出的特征图大小为3×3,步长为1,padding为0。

上面所讲述的两张动图都只是二维卷积,但实际上很多网络的输入是一张RGB三通道的彩色图像,所以如果卷积核是二维的话,就没办法进行卷积运算了,也就是说,输入图像多了一个通道,所以我们的卷积核也要多一个维度,比如下面这幅图:

上面这幅图中,输入为8×8×3,卷积核为3×3×3,用了四个,得到的输出为6×6×4的特征图。

那么难道每次我得到输入,得到卷积核,要画图才能算出最后的输出么?不必担心,计算最后的输出有个公式如下:

N: 输入的维度、F:卷积核大小、stride: 步长、pad: 扩充边缘
o u t p u t = ( N + 2 × p a d − F ) s t r i d e + 1 当 o u t p u t 不 是 一 个 整 数 时 就 向 下 取 整 output=\frac{(N+2×pad-F)}{stride}+1\\ 当output不是一个整数时就向下取整 output=strideN+2×padF+1output
那么,卷积为什么有效呢?

简单来说,训练CNN在相当意义上是在训练每一个卷积层的滤波器。让这些滤波器对特定的模式有高的激活,以达到CNN网络的分类或检测等目的。
卷积神经网络的第一个卷积层的滤波器用来检测低阶特征,比如边、角、曲线等。随着卷积层的增加,对应滤波器检测的特征就更加复杂。比如第二个卷积层的输入实际上是第一层的输出,这一层的滤波器是用来接触低阶特征的组合等情况(半圆、四边形)等,如此累积,以检测越来越复杂的特征。
所以,在某种意义上,构建卷积神经网络的任务在于构建这些滤波器。也就是,将这些滤波器变成这样(改变滤波器矩阵的值,也就是Weight)---- 能识别特定的特征。这个过程叫做训练。

其次,卷积核里面的值是如何定义的呢?

在训练开始之时,卷积层的滤波器完全是随机的,也就是进行随机初始化,他们不会有任何特征激活。把一个空白的滤波器,通过反向传播修改其权重(weights)使他能检测特定的模式,整个过程就像工程的反馈机制。

五、池化层

**池化主要分为平均池化(mean pooling)和最大池化(max pooling)。**池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像,减小图像的分辨率。具体如下:

  1. 特征不变性。池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

  2. 特征降维。我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。

  3. 在一定程度上防止过拟合,更方便优化。

举个例子:

输入为4×4的矩阵,用到的池化类型是最大池化(max pooling),输出结果是一个2×2的矩阵:

来看执行过程:把4×4的矩阵分成不同的区域,如图中的四种颜色区域,对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。如下图所示。我们可以把这4×4的区域看成是某些特征的集合。

还有一种池化叫平均池化,选取的不是过滤器的最大值,而是平均值:

超级参数的常用值:f=2;s=2效果相当于高度和宽度缩减一半。最大池化时,往往很少用到padding。

六、全连接层

在卷积神经网络的最后,往往会出现一两层全连接层,之前的卷积层、池化层和激活函数层等作用是将原始数据映射到隐层特征空间中,而全连接层的目的是将网络学习到的特征映射到样本的标记空间中。全连接层会把卷积输出的二维特征图(feature Map)转化成一个一维的向量。全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。由于其全相连的特性,一般全连接层的参数也是最多的。这一过程具体实现如下所述:

最后的两列小圆球就是两个全连接层,在最后一层卷积结束后,进行了最后一次池化,输出了20个12×12的图像,然后通过了一个全连接层变成了100×1的向量。是怎么变的呢?具体过程可以这么理解:对于这个20个12×12的图像,我们给他100个12×12×20的卷积核进行卷积,那么每个卷积核卷积的输出结果就是一个数字了,那么总共有100个这样的数字,所以最后的输出结果就是100×1的向量。

全连接层的特征数特别多,计算量比较大。上述例子中卷积层包含参数个数12×12×20×100个。总之,卷积池化就是在不断的提取特征,而全连接的作用就是分类。

七、卷积神经网络的经验参数设置

对于卷积神经网络的参数设置,没有很明确的指导原则,详细内容可以看我的这篇博客

  1. learning-rate 学习率:学习率越小,模型收敛花费的时间就越长,但是可以逐步稳健的提高模型精确度。一般初始设置为0.1,然后每次除以0.2或者0.5来改进,得到最终值;
  2. batch_size 样本批次容量:影响模型的优化程度和收敛速度,需要参考你的数据集大小来设置,具体问题具体分析,一般使用32或64,在计算资源允许的情况下,可以使用大batch进行训练。有论文提出,大batch可以加速训练速度,并取得更鲁棒的结果;
  3. weight-decay 权重衰减:用来在反向传播中更新权重和偏置,一般设置为0.005或0.001;
  4. epoch 训练次数:包括所有训练样本的一个正向传递和一个反向传递,训练至模型收敛即可;(注:和迭代次数iteration不一样)
    总之,不是训练的次数越多,测试精度就会越高。会有各种原因导致过拟合,比如一种可能是预训练的模型太复杂,而使用的数据集样本数量太少,种类太单一。

八、References

  • 30
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值