神经网络模型设计

深度设计

经典网络AlexNet

AlexNet是由Alex Krizhevsky等人在2012年提出的卷积神经网络模型,它在ImageNet图像分类挑战赛中取得了突破性的成果。以下是AlexNet的网络结构和各个层的作用:

  • 输入层(Input Layer):接收输入图像数据。

  • 卷积层1(Convolutional Layer 1):使用96个11x11的卷积核(2份48个11x11区块),步长为4,进行特征提取。应用ReLU激活函数。

    输出特征图像大小:(227-11)/4+1 = 55,特征图大小5555,数量96个,即 5555*96

  • 池化层1(Pooling Layer 1):使用3x3的最大池化操作,步长为2,进行下采样。

    输出特征图像大小:(55-3)/2+1 = 27,特征图大小2727,数量96个,即 2727*96

  • 卷积层2(Convolutional Layer 2):使用256个5x5的卷积核,步长为1,进行特征提取。应用ReLU激活函数。

    扩展 4 个像素:27 + 4 = 31

    输出特征图像大小:(31-5)/1+1=27,即 2727256

  • 池化层2(Pooling Layer 2):使用3x3的最大池化操作,步长为2,进行下采样。

    输出特征图像大小:(27-3)/2+1=13,即 1313256

    卷积+池化模式 --> 卷积+卷积+卷积+池化模式:

  • 卷积层3(Convolutional Layer 3):使用384个3x3的卷积核,步长为1,进行特征提取。应用ReLU激活函数。

    扩展 2 个像素:13 + 2 = 15

    输出特征图像大小:(15-3)/1+1=13,即 1313384

  • 卷积层4(Convolutional Layer 4):使用384个3x3的卷积核,步长为1,进行特征提取。应用ReLU激活函数。

    扩展 2 个像素:13 + 2 = 15

    输出特征图像大小:(15-3)/1+1=13,即 1313384

  • 卷积层5(Convolutional Layer 5):使用256个3x3的卷积核,步长为1,进行特征提取。应用ReLU激活函数。

    扩展 2 个像素:13 + 2 = 15

    输出特征图像大小:(15-3)/1+1=13,即 1313384

  • 池化层3(Pooling Layer 3):使用3x3的最大池化操作,步长为2,进行下采样。

    输出特征图像大小:(13-3)/2+1=6,即 66256

  • 全连接层1(Fully Connected Layer 1):包含4096个神经元,对提取的特征进行分类。

  • Dropout层1:在全连接层1之后应用Dropout操作,以减少过拟合。

  • 全连接层2(Fully Connected Layer 2):包含4096个神经元,进一步对特征进行分类。

  • Dropout层2:在全连接层2之后应用Dropout操作。

  • 输出层(Output Layer):根据分类任务的类别数,使用softmax函数将特征映射到相应的概率分布。

AlexNet通过多个卷积层和池化层进行特征提取,然后通过全连接层进行分类。它采用了ReLU激活函数和Dropout操作,提高了模型的非线性表达能力和泛化能力。

卷积神经网络是在普通神经网络上的改进,改进思路是模仿人找东西的思路。

普通神经网络去找人脸,会把所有像素放一起找。

人在找东西的时候,潜意识通常会浮现人脸的特征、样子,再一个一个局部的去找(看的是一片一片的像素群,不是单个像素点或者整张图)。

引入几个特征提取层。

第一层把图像分成 n 个区块(避免结构被区块拆散,相邻区块要有很大的重叠),一个区块一个区块的找,从像素点中识别各种方向的线条/斑点/颜色变化的小结构

第二层在前一层基础上识别出更大更复杂的结构,如圆形、椭圆形等各种图形结构

第三层在前一层基础上识别出更大更复杂的结构,如眼、嘴等局部器官

第四层在前一层基础上识别出更大更复杂的结构,如人、车等

实现方式:卷积

大多数卷积神经网络会随着深度增加而减小卷积核的尺寸随着网络的深度增加,逐渐减小卷积核的尺寸。这是因为较小的卷积核可以更好地捕捉局部细节和局部特征,并通过参数共享减少模型的参数数量。

在一些特定的应用和网络结构中,也可以使用较大的卷积核来提取特征。例如,对于一些高分辨率图像或需要较大感受野的任务,较大的卷积核可能更适合提取多特征、全局、更宏观的特征、长程依赖关系。

在一些特殊的网络架构中,可能会使用不同尺寸的卷积核来同时捕捉不同尺度的特征。例如,Inception模块中的卷积层采用了不同大小的卷积核,并将它们的输出进行拼接,以获取多尺度的特征表示。

池化层(Pooling Layer)是卷积神经网络中的一种常见层,其作用是对特征图进行下采样,减少特征图的空间尺寸,并保留重要的特征信息。池化层通常紧跟在卷积层之后,可以用于多种计算机视觉任务。

池化层的主要作用包括:

降维和减少计算量:池化层通过将特征图的空间尺寸缩小,减少了后续层的参数数量和计算量。

特征不变性:池化操作具有一定的平移不变性,即不论目标在图像中的位置如何,经过池化后仍能保留重要的特征信息。

特征提取和压缩:池化层可以通过选择最显著的特征来提取图像的主要信息,丢弃次要的细节和噪声。

平移不变性:池化层的下采样操作使得特征图的尺寸减小,而对于输入图像的平移、旋转和缩放等变换操作,池化层通常保持不变。

常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。

最大池化从每个池化窗口中选择最大的值作为输出,用于提取主要特征。平均池化计算每个池化窗口中的平均值,用于获取特征的整体信息。

全局层对特征图进行降维,从而得到整体特征的表示。

全局层的主要作用是在保留重要特征的同时减少参数量和计算量。它通过对整个特征图进行全局的汇聚,捕捉到图像中的全局信息,并得到一个通道数不变的特征向量。这种操作有助于提取图像的整体特征,并减少后续全连接层的参数数量。

全局层常用于卷积神经网络中,用于将特征图进行全局的汇聚和降维。GoogleNet/InceptionNet、ResNet和DenseNet等模型都采用了全局层来提取图像的整体特征。

全连接层(Fully Connected Layer)也被称为普通神经网络层。

全连接层用于将特征映射到最终的输出结果。

Dropout层,以一定的概率(通常为0.5)随机将部分神经元的输出设置为0,意味着它们在该层的前向传播和反向传播过程中被丢弃。

通过随机丢弃神经元,Dropout层迫使网络在训练过程中学习到多个互不相同的子模型,避免对单个神经元的依赖。

VGG 模型

通过不断增加卷积层和池化层的重复次数来增加网络的深度。

加深网络层数,可以提升性能。

VGG模型的一个典型实现是VGG16,其中16表示网络的层数(包括卷积层和全连接层)。

VGG16模型共包含13个卷积层和3个全连接层,其中卷积层都使用3x3的卷积核(卷积核变小),池化层使用2x2的最大池化操作(变小且偶数)。

通过小卷积核代替大卷积核,减少运算量。

通过使用两个3x3的卷积核来代替一个5x5的卷积核,可以带来以下优势:

增加网络的非线性能力:两个3x3的卷积核可以引入更多的非线性变换,从而增加网络的表达能力。每个3x3的卷积核在进行卷积操作时,可以通过激活函数引入非线性变换,增加模型对输入数据的拟合能力。

减少参数数量:两个3x3的卷积核的参数数量要少于一个5x5的卷积核。对于一个具有C个输入通道和K个输出通道的卷积层,两个3x3的卷积核总共需要2CK个参数,而一个5x5的卷积核需要C*K个参数。通过减少参数数量,可以减少模型的计算和存储开销。

增加感受野的非线性响应:两个3x3的卷积核可以增加网络的感受野(receptive field)大小。通过堆叠多个3x3的卷积层,可以逐步增加卷积核对输入图像的感受野,从而提高对输入图像更大范围的特征提取能力。

并不是所有情况下都适合使用两个3x3的卷积核代替一个5x5的卷积核。这种技巧主要适用于卷积层之间的连续堆叠,以增加非线性能力和感受野的响应。在具体的网络设计中,需要根据任务需求和性能要求来确定是否使用这种技巧。

VGG结构:

  • 输入层(Input Layer):接收输入图像数据。
  • 卷积层(Convolutional Layer):由多个卷积层组成,每个卷积层都使用3x3的卷积核,并进行特征提取。通常使用ReLU激活函数。
  • 池化层(Pooling Layer):使用2x2的最大池化操作,进行下采样。
  • 全连接层(Fully Connected Layer):将特征映射转换为最终的分类结果。通常包含多个全连接层和ReLU激活函数。
  • 输出层(Output Layer):根据分类任务的类别数,使用softmax函数将特征映射到相应的概率分布。

ResNet

虽然加深网络层数能提高模型性能,但模型变深,错误率也会增长。

这不是过拟合引起的,而是梯度爆炸和梯度消失,导致越深的神经网络越难训练。

梯度爆炸:层数越多,激活值可能越大,最终无穷大。

梯度消失:层数越多,激活值可能越小,最终都是0。

一般的神经网络 激活值 a3 > a2 > a1,就有可能造成梯度爆炸,反之梯度消失。

为防止这种情况,我们让 a3 == a1,使得 a1 的值跳过2层,直接给a3。

ResNet的思路是,将前面的激活值跳过中间的网络层而直接传递到更后面的网络层,新增一条跳跃连接的路,不用计算直达后2层。

如果输入和输出特征非常相似,那么它们的差异就会很小,残差就接近于零。

这意味着网络只需学习到一个非常小的残差,而不是学习整个输入特征。

能很大程度上减缓梯度爆炸、消失,从原来19层提升到152层,都不会影响性能,且层数越多性能越好。

池化层减少矩阵的宽、高,1*1卷积减少矩阵的深度。

ResNet结构:

  • 输入层(Input Layer):接收输入图像数据。
  • 卷积层(Convolutional Layer):一系列堆叠的卷积层用于特征提取。通常使用3x3的卷积核,可以设置不同的输出通道数。
  • 残差块(Residual Block):每个残差块由两个或更多卷积层组成,其中包含跳跃连接(Skip Connection)。跳跃连接是将输入特征直接添加到块内的输出特征中。
  • 全局平均池化层(Global Average Pooling Layer):将最后一个残差块的输出特征进行全局平均池化,将特征图的空间尺寸降为1x1。
  • 全连接层(Fully Connected Layer):对全局平均池化层的输出进行分类或回归预测。
  • 输出层(Output Layer):根据任务的类别数,使用softmax函数将特征映射到相应的概率分布。

ResNet的关键特点是残差连接,这种连接方式允许梯度更快地在网络中传播,避免梯度消失和梯度爆炸的问题。通过残差连接,ResNet可以训练非常深的神经网络,获得更好的特征表示和更高的性能。

在实践中,ResNet的主要变种有ResNet-18、ResNet-34、ResNet-50、ResNet-101和ResNet-152等,它们的网络深度和参数数量不同,适用于不同规模和复杂度的任务。

项目:ResNet 垃圾分类

宽度设计

通道数量调整

模型通道数随深度增加而增加

多分支网络结构

通道补偿技术

多通道网络 Inception-v1

拓宽残差网络 ResNeXt

项目:InceptionNet花卉分类

注意力机制

STN

Dynamic Capacity Networks

SENet

SKNet

ResNeSt

CBAM

BAM

Residual Attention

Dual Attention Network

项目:SENet 人种分类

轻量级模型设计

Xception

MobileNet V1

MobileNet V2

shufflenetv1

shufflenetv2

squeezenet

猜你喜欢

转载自blog.csdn.net/qq_41739364/article/details/131667757