AI实战之卷积神经网络

AI实战之卷积神经网络

分享嘉宾:白浩杰

文章整理:马立辉

内容来源:百度云智学院

导读:

卷积神经网络(Convolutional Neural Network,CNN)在图像和视频处理、自然语言处理等领域发挥着重要的作用,本篇文章将介绍卷积神经网络的基本概念和组成。

本篇文章主要内容包括:

1.全连接网络的缺陷

2.卷积神经网络的组成

1.全连接网络的缺陷

回顾一下神经元的基本结构,如下图1所示。单个神经元,分别包括输入(p1、p2、p3……)、权重(w1、w2、w3……)、偏置(b),经过线性变换、非线性变换最后得到一个输出值。

图1单个神经元

众多的神经元经过组合,就可以得到一个全连接网络(FC)。全连接网络主要由三部分组成,分别是输入层、隐藏层、输出层,其基本结构如下图2所示:

图2 全连接网络

在使用全连接网络时我们可以根据具体的需要设置隐藏层神经元的数量以及网络的深度,具体问题具体分析,以此来解决不同的问题。

那么,全连接网络可不可以完成图像分类任务呢?

理论上是可以的,但实际应用中却是不可行的。

理论上,我们可以设计不同的全连接网络结构,来直接执行图像分类任务。但在实际工程中,直接使用全连接网络进行计算,计算量会非常大,我们的软硬件(主要是硬件)无法接受这样庞大的计算量,会产生所谓的维度灾难

举个例子:

假如要把一张大小为200×200像素的图片输入到全连接神经网络,首先需要把这张二维图像拉平,变成一维向量,那么此时的输入就有40000维。随着输入维度的增多,隐藏层神经元的个数也会相应的增加,参数(权重w和偏置b)也会增加,假如此时有400000个神经元,则产生的参数数量已达亿级以上。随之而来的便是计算量的增加,可以看到,随着维数的增加,计算量呈指数倍增长,

此时,对计算机内存以及算力的要求非常高,一般的硬件难以支撑。这就是我们通常说的维度灾难。

这还只是一张200×200像素大小的图片,实际生活中我们拍摄的照片质量往往非常高,而且还是彩色图片,这些图片的大小远不止200×200像素。如果用这些照片作为全连接网络的输入,则产生的参数数量可想而知,训练时就会有相当数量的参数待优化,使训练会变得非常困难,甚至还会导致训练结果的过拟合。

所以用全连接网络来解决图像分类问题,在实际工程上是不可行的。

那么,有没有更好的网络结构来解决图像分类等问题呢?答案是肯定的,那就是卷积神经网络(CNN)。

2.卷积神经网络的组成

卷积神经网络的基本结构主要包括输入层、卷积层、激活函数、池化层以及全连接层。由于输入的图片具有长、宽、通道数三个维度,所以往往把卷积神经网络画成立体图(如下图3所示)。

图3 卷积神经网络结构图

以图像分类问题为例,卷积神经网络的工作过程可用下面一张图展示:

图4 卷积网络整体结构及工作过程

向卷积神经网络输入一张图片(比如car),经过多次的卷积层、激活函数层、池化层,抽取到图片的特征,再把特征图送入最后的全连接层进行最终分类,经计算得到这张图片属于Car的概率最大,以此判断出这个图片的最终类别。

卷积神经网络的前部主要有卷积-激活-池化构成负责图像特征的抽取;最后的全连接层负责图像的分类任务。

2.1卷积层

卷积层是卷积神经网络的核心层,也占据了网络中大部分的计算。

卷积层的基本作用是执行卷积操作提取底层到高层的特征,同时发掘出输入数据(图片)的局部关联性质和空间不变性质。卷积层由一系列参数可学习的滤波器集合构成。

什么是卷积?

卷积是一种数学运算。在卷积神经网络中,卷积操作是让图片或特征图与3×3或5×5的滤波器(卷积核)作内积,逐个对应位置的元素相乘再相加。这个过程就是卷积运算,也是卷积神经网络的名字来源。当然卷积核的大小也可以取其他值,而不限于3×3或5×5。

如下图5所示,左侧输入一个5×5的矩阵,该矩阵称之为输入特征图,中间是一个3×3的卷积核(kernel,也叫滤波器Filter)。卷积核滑过输入特征图,滑动到每一个位置时,卷积核中的每个元素与输入特征图相重合的部分做卷积运算,得到当前位置的输出数据(对应下图右侧绿色的数字),当卷积核依次在输入特征图滑动完成后,就得到了下图右侧的输出特征图。

图5 卷积运算-1

再从另一角度来看卷积操作。如下图6所示,假如输入特征图为32×32×3,这里的3指的是三通道,如果用滤波器(卷积核)来与其做卷积操作,则滤波器的通道数也需是3,比如此处滤波器使用的便是5×5×3。但是滤波器的个数却可以取不同值,如果使用两个滤波器,则输出特征图通道数便是2;如果使用六个滤波器,则输出特征图通道数便是6.

图6 卷积运算-2

2.2池化层

一般情况下,在连续的卷积层之间会周期性地插入一个池化层(也称汇聚层)。池化层主要采用不同的池化方法对输入数据进行降维,逐渐降低数据体的空间尺寸,从而减少网络中参数的数量以及耗费的计算资源,同时也能有效控制过拟合。

池化方法一般有两种,最大池化(Max Pooling)、均值池化(Average Pooling),在工业界使用最多的是最大池化(Max Pooling)。

  • 最大池化Max Pooling):依次将输入特征图划分为若干个矩形区域,对每个区域输出最大值。例如把4×4大小的原特征图,依次分割成4个2×2大小的区域,分别输出每个2×2大小区域的最大值,再把求得的值组成新的特征图(过程如下图7所示)。
  • 均值池化(Average Pooling):依次将输入特征图划分为若干个矩形区域,对每个区域求平均值。例如把4×4大小的原特征图,依次分割成4个2×2大小的区域,分别对每个2×2大小的区域取平均数,再把求得的值组成新的特征图(过程如下图7所示)。

图7 池化操作

举个例子:

我们以224×224×64大小的原特征图为例,取出其中的一个通道,该通道应该是224×224大小的二维矩阵,然后对其进行池化操作,池化后该通道变成112×112大小,然后再把它放回原来的位置。同样的,我们再对原特征图其他的通道进行池化操作,所有通道的池化操作完成后,原来224×224×64大小的特征图会变成112×112×64大小,即每个通道的长宽变成原来的一半,但是通道数不变。该过程如下图8所示。

图8 池化操作例子

我们用一张图片直观感受一下池化操作后的效果。如图9所示,池化后的图片变得模糊了,且其大小也发生了变化。

图9 池化效果展示

总结:

本篇文章主要介绍了卷积神经网络的基本概念及组成。当我们对这些知识熟悉之后,便可以利用卷积神经网络来解决实际问题,下一篇文章我们会一起探讨其实际应用。