卷积神经网络的框架解读(上)

本文详细介绍了卷积神经网络的基本组成部分,包括图像表示法、卷积运算、ReLU非线性处理、池化步骤、全连接层及前向传播与反向传播的过程。通过实例讲解,帮助读者理解卷积神经网络如何提取图像特征并进行分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:图像表示法

1、图像是像素值的矩阵

计算机中如何表示一副图像,首先我们将一副图像按X,Y轴的方向分隔为若干个小格子,如图,

 那么每个小隔子我们称之为像素(pixel),像素颜色的深浅我们就0-255来表示,比如0表示纯白色,255表示纯黑线,由0-255颜色依次变黑,当然你也可以返过来,0表示纯黑,255表示纯白。这样一副图片就可以表示为一组由0-255组成的一组二维数组形成的矩阵。

2、什么是通道

一副黑白图(也叫灰度图),由一个像素值从0到255的二维(2d)矩阵来表示,我们称之为一个通道。

我们现在所说的彩色图片,是由标准数码相机拍摄的图片,具有三个通道:红色、绿色、蓝色,也称为RGB显示方式,每一个通道的像素值都在0到255之间,这三个通道叠加在一起形成一个彩色的二维图片。

二:卷积(ConvNets)

卷积的主要目的是从输入图像中提取特征,卷积通过使用使用卷积核来学习图像的特征,从而保留像素之间的空间关系。这里我们不会讨论卷积的数学细节,我们这里仅仅是理解他是如何在图像上工作的。卷积主要利用卷积核在图像像素上进行卷积运算,从而得到图像某些特征。

1、什么是卷积核呢?卷积核也称为过滤器、卷积算子,是一个小于输入图像的一级二维矩阵。卷积核充当原始输入图像的特征检测器。

这是输入的一张图片(如上图)

这是我们定义的一个卷积核(如上图)。

那么卷积的运算是这样的,如下图:

2、步幅:卷积核在输入图像上的滑动1个像素,我们称之为步幅,步幅为1就是一次移动一个像素点的公交车,步幅为2就是一次移动两个像素点的位置。

3、特征图:是由卷积核与输入图像中的像素进行卷积运算后,得到的新的一组矩阵,我们称之为特征地图,也叫卷积特征。

比如这样一副图像,经过不同的卷积核进行卷积运算后,得到的特征图如下表:

不同的卷积核,经过运算后,得到的特征图如下表:

我们再看另一个例子:

 

 (1)卷积核(带有红色轮廓)在输入图像上滑动(卷积操作)以生成特征图。另一个卷积核(带有绿色轮廓)在同一图像上的卷积给出了不同的特征图,如图所示。重要的是要注意卷积操作捕获原始图像中的局部依赖关系。还要注意这两个不同的卷积核如何从相同的原始图像生成不同的特征图。

(2)在实践中,CNN在训练过程中自行学习这些卷积核(过滤器)的值(尽管在训练过程之前我们仍然需要指定卷积核(过滤器)数量、大小、网络架构等参数)。我们拥有的卷积核数量越多,提取的图像特征就越多,我们的网络在识别看不见的图像中的模式方面就越好。

(3)卷积核的值最后我们是怎么得到这些经验值的呢,这就是下面我们讲的反向传播,我们把现在的卷积运算称为前向传播,这个运算到最后,我们找到我们要找的东西,这样我们就可以得到一个误差值,然后我们用这个误差值,重新修正之前的卷积核的值,那么反回来再运算一次,就是反向传播。这个我们下面会讲到,这里我们提前提一句。

4、获取特征图的三个参数:

1、深度:深度对应于我们用于卷积操作的卷积核数量。我们使用三个不同的卷积核对原始图像进行卷积,从而产生三个不同的特征图。您可以将这三个特征图视为堆叠的 2d 矩阵,因此,特征图的深度将是三个。

注意深度与通道数是不同的,一个通道可以有N个深度值。

2、步幅:幅是我们在输入矩阵上滑动滤波器矩阵的像素数。当步幅为 1 时,我们将卷积核一次移动一个像素。当步幅为 2 时,卷积核在我们滑动时一次跳跃 2 个像素。更大的步幅将产生更小的特征图。

3、零填充:有时,在边界周围用零填充输入矩阵很方便,这样我们就可以将卷积核应用于输入图像矩阵的边界元素。零填充的一个很好的特性是它允许我们控制特征图的大小。添加零填充也称为宽卷积,不使用零填充将是窄卷积。

三:非线性(ReLU)

每个卷积操作之后,都使用了一个称为 ReLU 的附加操作 。ReLU 代表 Rectified Linear Unit,是一种非线性运算。其输出由下式给出:

ReLU 是一种非线性的函数,函数公式大家可以自行查找,我说过这里不做数学方面的解释,也可以使用其他非线性函数,例如 tanh或 sigmoid来代替 ReLU,但已发现 ReLU 在大多数情况下表现更好。

那么卷积运算完了为什么非要再进行非线性运算呢,因为我们的世界本身就是非线性的,而卷积运算本身就是线性运算,所以引入ReLU这种非线性函数就是让数据更贴近真实一的世界。那在在图像显示上就如下图

大家可以看到,图像经过非线性操作后,图像显得更加的柔和,更贴近事物的原本的特征。

四:池化步骤

池化也称为子采样,或下采样,是从空间角度降低每个特征图的维数,但保留了最重要的信息。空间池化有三种类型,最大池化(Max),平均池化(Average),总和池化(Sum)。

如何进行池化呢,像卷积核一个,我们同样定义一个二维矩阵(如2X2)窗口,注意是窗口,里面没有数值。你可以理解为一个空间区域。如下图

(1)最大池化:在空个空间窗口我们进行池化运算,比如在这个窗口内的像素值我们取最大值就称为最大(Max)池化,

(2)平均池化:在这个空间窗口,把所有的像素值加起来,再除以空间窗口的像素数,也就是取平均值,我们称为平均池化。

(3)总和池化:同样在这个窗口内,我们把卷起来的这个空间像素,所有的像素值加起来,我们叫总和(Sum)池化。

池化的目的就是遂步减小图像的大小(像素)。

  1. 使输入表示(特征维度)更小更易于管理
  2. 减少了网络中的参数和计算的数量,控制过拟合。
  3. 使网络对输入图像中的小变换、失真和平移保持不变。
  4. 帮助我们获得图像的特征尺度不变的图像,虽然图像变小了,但特征依旧存在这幅更小的图片上。你也可以称为“等变的”。

那么整个卷积运算我们可以用下图表示:

五:全连接层

全连接层是传统的多层感知器,在输出层使用 softmax 激活函数(也可以使用 SVM 等其他分类器,但在本文中使用 softmax)。“完全连接”意味着前一层的每个神经元都连接到下一层的每个神经元。

卷积层和池化层的输出代表输入图像的高级特征。全连接层的目的是利用这些特征根据训练数据集将输入图像分类为各种类别。例如,我们开始执行的图像分类任务有四个可能的输出,如下图

卷积+池化层充当输入图像的特征提取器,而全连接层充当分类器。

六:前向传播和反向传播

卷积网络的整体训练过程可以总结如下:

第一步:我们用随机的值初始化所有卷积核和其他相关参数(权重)

第二步:网络将训练图像输入,通过前向传播(卷积、ReLU、池化、全连接)找到每个类别的输出概率。

第三步:计算输出层的总误差(Total Error

第四步:用这个总误差重新计算先前网络中所使用的权重梯度,并使用梯度下降更新所有卷积核的值/权重/参数,以最小化误差,这一步就是反向传播。

1)权重根据它们对总误差的贡献进行调整。

2)当再次输入相同的图像时,输出概率现在可能为 [0.1, 0.1, 0.7, 0.1],更接近目标向量 [0, 0, 1, 0]

3)这意味着网络已经学会通过调整其权重/卷积核来正确分类该特定图像,从而减少输出误差。

4)卷积核数量、过滤器大小、网络架构等参数在第 1 步之前都已固定,并且在训练过程中不会改变,只有过滤器矩阵和连接权重的值会更新。

第五步:对训练中的所有图像重新按修正后的卷积核/权重,重新再执行2-4的操作。

这实质上意味着 ConvNet 的所有权重和参数现在都已经过优化,可以正确分类训练集中的图像。

看下图:由于输入图像是一艘船,因此Boat类的目标概率为1,其他三个类的目标概率为0,即

输入图像 = 船

目标向量 = [0, 0, 1, 0]

当一个新的(未见过的)图像输入到 ConvNet 中时,网络将通过前向传播步骤并输出每个类别的概率(对于新图像,输出概率是使用已优化的权重计算以正确分类之前的所有训练示例)。如果我们的训练集足够大,网络将(希望)很好地泛化到新图像并将它们分类为正确的类别。

注意:在上面的示例中,我们使用了两组交替的卷积层和池化层。但是请注意,这些操作可以在单个 ConvNet 中重复任意次数。事实上,当今一些性能最好的 ConvNets 有数十个卷积和池化层!此外,不必在每个卷积层之后都有一个池化层。如下图所示,在进行池化操作之前,我们可以连续进行多个 Convolution + ReLU 操作。还要注意下图 中如何可视化 ConvNet 的每一层。

以后我们即使遇到再大再宽的网络结构,他也离不开这些最基本的结构,希望这篇文章能让你触类旁通,更加轻松的理解卷积神经网络。《卷积神经网络的框架解读(下)》将为大家介绍神经元的传播特点、感知机和多层感知机的工作原理,同时下一期将以手写体识别为案例继续为大家解读卷积神经网络的框架结构。

这篇文章是参考了 ujjwalkarn 的《An Intuitive Explanation of Convolutional Neural Networks》的部分翻译稿,其中增加了自己对这些概念的理解,有些概念如不准确,请参照专业文献,该文并不是完全翻译的原搞,本人根据概念的理解调整了顺序和部分解读,可能更适合中文读者理解。有需要看英文版的可以点上面的链结。本文中使用的所有图像和动画均属于其各自的作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值