CNN知识回顾

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


摘要

因为机器学习课程的相关要求,本周的主要回顾了卷积神经网络相关知识,回顾卷积神经网络改进的结构残差网络以及密集连接网络。对于卷积神经网络,详细地了解其结构的构造,以及其各层的功能。对于残差网络和密集连接网络,则是了解了它们在卷积神经网络上改造内容,以及改进的思路。

Abstract

Due to the requirements of the machine learning course, this week’s review focused on convolutional neural networks, specifically reviewing the improved structures of residual networks and dense connections. For convolutional neural networks, a detailed understanding of their structure and the function of each layer was gained. For residual networks and dense connection networks, an understanding of the modifications made to convolutional neural networks and the improvement ideas were gained.


一、CNN知识点

1、什么是CNN

CNN的全称是"Convolutional Neural Network"(卷积神经网络)。其中神经网络是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的数学模型或计算模型。神经网络由大量的人工神经元组成,按不同的连接方式构建不同的网络。其中CNN则就是一种特定连接方式的神经网络模型,而且CNN卷积神经网络在处理图像上有得天独厚的优势,近年来最火的Alpha Go的围棋算法也是通过CNN来运行的,当然它也能运用在语音处理等应用上。

2、为什么要使用卷积

  • 参数太多
    如果输入图像大小为100x100(即图像高度为100,宽度为100,单颜色通道),那么第一个隐藏层的每个神经元到输入层都有100x100=10000个互相独立的连接,每个连接对应一个权重参数,随着隐藏层神经元数量的增多,参数的规模也会急剧增加,这会导致整个神经网络的训练效率非常低。
  • 不利于表达空间结构:
    图像具有重要的空间结构信息。相邻的像素在语义上通常更加相关。前馈神经网络在处理图像数据时,会将图像展开成一个向量,这就破坏了图像的空间结构。而CNN通过卷积操作能够更好地保留和利用这些空间信息。
  • 难以反映平移不变性:
    对于图像识别任务,对象出现在图像中的具体位置并不重要,只要能够识别出对象的特征就行。CNN由于权重共享,可以无论特征在何处出现都能被检测到,从而提供了一种平移不变性。
  • 难以表征抽象层级:
    CNN通过多个卷积层和池化层的叠加,可以从低级的边缘和纹理特征逐渐抽取出高级的语义特征。这个特性使得CNN非常适合于处理图像等需要多层抽象表示的数据。

3、CNN的结构

3.1、卷积层

卷积层用于提取输入的特征信息,由若干卷积单元组成,通过感受野 (Filter)对输入图片进行有规律地移动,并与所对应的区域做卷积运算提取特征。低层卷积只能提取到低级特征,如边缘、线条等;高层卷积可以提取更深层的特征。

3.1.1、卷积运算过程
  • 定义一个卷积核:卷积核是一个小的矩阵(例如3x3或5x5),包含一些数字。这个卷积核的作用是在图像中识别特定类型的特征,例如边缘、线条等,也可能是难以描述的抽象特征。
  • 卷积核滑过图像:卷积操作开始时,卷积核会被放置在图像的左上角。然后,它会按照一定的步长(stride)在图像上滑动,可以是从左到右,也可以是从上到下。步长定义了卷积核每次移动的距离。
  • 计算点积:在卷积核每个位置,都会计算卷积核和图像对应部分的点积。这就是将卷积核中的每个元素与图像中对应位置的像素值相乘,然后将所有乘积相加。
  • 生成新的特征图:每次计算的点积结果被用来构建一个新的图像,也称为特征图或卷积图。
    在这里插入图片描述
3.1.2、不同卷积核取值的影响

下图中使用了三种不同的卷积核,第一种卷积核所有元素值相同,所以它可以计算输入图像在卷积核覆盖区域内的平均灰度值。这种卷积核可以平滑图像,消除噪声,但会使图像变得模糊。第二种卷积核可以检测图像中的边缘,可以看到输入的8的边缘部分颜色更深一些,在更大的图片中这种边缘检测的效果会更明显。第三种卷积核的四个角的权重为0.25,这是随意赋的值,得到的结果像是几个窄窄的8重叠起来了。可以看出不同卷积核取值对图像特征提取的重点不一样,调整卷积核的值便能控制对提取图像特征的重点。
在这里插入图片描述

3.1.3、卷积运算重要参数之——步长

在卷积神经网络(CNN)中,步长是一个重要的概念。步长描述的是在进行卷积操作时,卷积核在输入数据上移动的距离。步长的选择会影响卷积操作的输出尺寸。更大的步长会产生更小的输出尺寸,步长的设置主要是考虑以下几点原因。

  • 低计算复杂性:当步长大于1时,卷积核在滑动过程中会"跳过"一些位置,这将减少输出的尺寸并降低后续层的计算负担。
  • 模型的可扩展性:增大步长可以有效地降低网络层次的尺寸,使得模型能处理更大尺寸的输入图片。
  • 控制过拟合:过拟合是指模型过于复杂,以至于开始"记住"训练数据,而不是"理解"数据中的模式。通过减少模型的复杂性,我们可以降低过拟合的风险。
  • 减少存储需求:更大的步长将产生更小的特征映射,因此需要更少的存储空间。
3.1.4、卷积运算重要参数之——零填充

由上述卷积操作可以知道,数据在进行卷积运算之后尺寸会缩小。众所周知,CNN是一种深度学习网络,包含很多个卷积层,随着层数的叠加,会让后续的数据尺寸减少到1x1,这是不允许的,为了不让数据持续地减少,无法扫描到过小的数据尺寸导致信息的丢失。大概的步骤就如下图所示,将过小的特征图外围使用数据0来补充,这样就能有效地解决过小特征图的数据缺失。
在这里插入图片描述

3.2、激活层

激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。类似于人类大脑中基于神经元的模型,激活函数最终决定了是否传递信号以及要发射给下一个神经元的内容。就比如网络需要模仿一个折线函数,就需要通过几个激活函数来对该函数进行模仿。

3.2.1、激活层的作用

卷积层和全连接一样,也是一种线性变换,无论进行多少次这样的操作,都只能获得输入数据的线性组合。。如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,在理论上也可以被一个单层的神经网络所表达,这极大地限制了网络的表达能力,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。

3.2.2、常见的激活函数 — Sigmoid函数

Sigmoid函数也叫Logistic函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。其表达式为如下所示。
在这里插入图片描述

  • 使用情况
    1、Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到1,因此它对每个神经元的输出进行了归一化;
    2、用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适;
    3、梯度平滑,避免「跳跃」的输出值;
    4、函数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率;
  • 缺点
    1、梯度消失:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。
    2、不以零为中心:Sigmoid 输出不以零为中心的,,输出恒大于0,非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。
    3、计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂,计算机运行起来速度较慢。
3.2.3、常见的激活函数 — Tanh/双曲正切函数

Tanh 激活函数又叫作双曲正切激活函数(hyperbolic tangent activation function)。与 Sigmoid 函数类似,Tanh 函数也使用真值,但 Tanh 函数将其压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。表达式如下所示。
在这里插入图片描述

  • 使用情况
    因为整体与Sigmoid函数类似,于是使用情况与Sigmoid的情况大致一样,只是相比SIgmoid多出来能表示负数的区间

  • 缺点
    与sigmoid类似,Tanh 函数也会有梯度消失的问题。

3.2.4、常见的激活函数 — ReLU函数

ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题,在目前的深度神经网络中被广泛使用。其表达式如下所示。
在这里插入图片描述

  • 使用情况(优点)
    1、当输入为正时,导数为1,一定程度上改善了梯度消失问题,加速梯度下降的收敛速度;
    2、计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快。
    3、被认为具有生物学合理性(Biological Plausibility),比如单侧抑制、宽兴奋边界(即兴奋程度可以非常高)
  • 缺点
    1、Dead ReLU 问题。当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,后续的Leaky ReLU则是解决该问题的升级版
    2、不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心,ReLU 函数的输出为 0 或正数,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。

3.3、池化层

  • 池化层作用
  • 特征不变性(feature invariant)
    汇合操作使模型更关注是否存在某些特征而不是特征具体的位置,可看作是一种很强的先验,使特征学习包含某种程度自由度,能容忍一些特征微小的位移
  • 特征降维
    由于汇合操作的降采样作用,汇合结果中的一个元素对应于原输入数据的一个子区域(sub-region),因此汇合相当于在空间范围内做了维度约减(spatially dimension reduction),从而使模型可以抽取更广范围的特征
    同时减小了下一层输入大小,进而减小计算量和参数个数
  • 在一定程度上能防止过拟合的发生
  • 池化层的工作方式
    池化层主要采用最大池化(Max Pooling)、平均池化(Average Pooling)等方式,对特征图进行操作。经过池化计算后的图像,基本就是原本特征图的“低像素版”结果。也就是说池化运算能够保留最强烈的特征,并大大降低数据体量。

3.4、输出层

在卷积神经网络中,最后一层(或者说最后一部分)通常被称为输出层。这个层的作用是将之前所有层的信息集合起来,产生最终的预测结果。对于CNN进行分类任务时,输出部分的网络结构通常是一个或多个全连接层,然后连接Softmax。当然,如果想要从卷积层过渡到全连接层,你需要对卷积层的输出进行“展平”处理,简而言之就是将二维数据逐行串起来,变成一维数据。由于此时数据经过多层卷积和池化操作,数据量已大大减少,所以全连接层设计的参数就不会有那么多了。

二、残差网络以及密集连接网络

1、需解决问题

在图像分类领域,深度卷积神经网络已经到来了一系列的突破。深度网络以端到端多层的方式自然地集成了低/中/高级别特征和分类器,并且特征的“级别”可以通过增加网络层的数量来丰富,近年来的实验表明,神经网络的深度是十分重要的。随着神经网络的层数不断叠加出现了网络退化的问题出现,当有关输入或梯度的信息经过许多层时,它可能会在到达网络末尾时消失并“冲洗掉”。残差网络以及密集网络的提出正式为了解决这个输入或梯度的信息在神经网络中消失的问题。

2、残差网络

残差网络的主要思路就是残差学习,残差学习就是一个重构函数的过程,将原来x需要变成H(x)函数的过程,转化为x变成残差函数F(x) + x的过程,其中F(x) = H(x) - x ,重构后的残差函数在优化速度、退化问题上都有着明显的提高。

2.1、残差网络解决问题的思路

ResNet解决深度神经网络中的梯度消失和梯度爆炸问题的思路是引入残差连接。在传统的深度神经网络中,由于存在多层堆叠的非线性变换,梯度很容易在反向传播中逐层缩小或者变得非常大,导致训练不稳定,难以收敛。而在ResNets中,每个基础块(Basic Block)中都有一个跨越层的快捷连接(shortcut connection),将输入信号与输出信号相加,即形成函数 H(x) = F(x) + x 。这使得模型可以通过直接学习从输入到输出的映射,而不是学习从输入到目标函数的映射,从而有效地减轻了梯度在反向传播中的消失和爆炸问题。

2.2、残差学习可以解决梯度消失和网络退化问题

因为梯度消失的情况是反向传播过程中,因为某个权值过小而导致整个梯度值趋近于0的情况。当H(x) 变成了F(x) + x,不论权值怎么小,对x的求导总是存在1来限制整体的梯度过小的情况出现。网络退化的原因主要是因为非线性的冗余层过多导致的,为了解决冗余层过多的情况,整体的思路是通过恒等映射来实现的。但是因为现有的网络层都是非线性结构的,难以实现恒等变化,于是通过公式转化H(x) = F(x) + x ,来调节F(x)中的权值便能实现H(x) = x 的恒等映射,从而有效地解决了网络退化的问题。

3、密集连接网络

密集连接网络是一种深度神经网络模型。其特点在于,整个网络中的每个层都与其后继层之间存在密集连接,使特征能有效地传递到各个层级中。

3.1、密集连接网络解决问题的思路

密集连接网络中的每个层都与其后继层之间存在密集连接,这种设计可以使得信息在网络中流动时,不会像传统网络那样逐渐减弱或爆炸,而是能够被更有效地传递和处理。其能有效缓解梯度消失问题,由于DenseNet的结构特点,梯度能够更有效地传递到每一层,从而避免了梯度消失的问题;密集连接网络结构的特征传递更加有效,由于DenseNet的密集连接设计,使得特征能够在整个网络中得到更有效的传递。密集连接网络的计算量更小,DenseNet由于其结构特点,可以使用更少的计算资源来完成训练和推理任务。密集连接网络的参数量更小,由于DenseNet的密集连接设计,使得网络可以具有更少的参数数量,从而减少了模型的复杂度和内存占用。


总结

因为机器学习课程即将结课,课堂上要讲相关的机器学习论文知识,而且自身对计算机视觉方向比较感兴趣,就打算讲相关方向的论文,所以这周就简单回顾了下卷积神经网络以及其改进结构的相关知识。希望在后期完成相关课程后能有更多的时间去研究相关的计算机视觉技术的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值