深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet

深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet

  • 常见模型
    • Alexnet
      • LRN详解
      • ReLU比sigmoid好在哪
    • VGG
    • Resnet
      • Residual unit 详解

  学习机器学习和深度学习已经一年多了,之前一直都是用笔做记录,最近面临即将到来的春招和秋招,回过头复习之前的东西,发现很多在本子上记得不是很清晰,为了以后复习起来方便,同时全面的整理之前的东西,打算开始在博客上记录。

常见模型

首先,还是简单的介绍一下卷积神经网络的思想。人的大脑在识别图像的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部的感知,然后更高层次对局部综合操作,从而得到全部信息。在图像中,其空间联系也是局部的像素点联系较为紧密,而距离较远的像素相关性则比较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部信息综合起来就得到了全局的信息。这是卷积神经网络具有局部感受野的特点,另一个特点是权值的共享,在整张图片中,所有的局部感受野中的权重是共享的,这大大减少了模型的规模。既然卷积核的权重共享,那么卷积核在一张图的所有局部感受野中只能提取一种特征。解决这个问题的方法是多个卷积核。我们通常用多个不同权重的卷积核对图片进行特征的提取。

Alexnet

Alexnet提出与2012年,是现代卷积网络的奠基之作,使卷积神经网络重新走入了人们的视野,Alexnet的主要创新点有:

  • 首先用ReLU取代了sigmoid作为激活函数,ReLU在网络加深时的效果远远好于sigmoid函数,解决了sigmoid在网络加深时出现的梯度消失和爆炸的问题。
  • 训练时加入了dropout策略,随机忽略一些神经元,以避免过拟合,起到了正则化的效果,Alexnet在网络的全连接层用到了dropout策略。
  • 在CNN中开始用最大池化代替平均池化,避免了平均池化的模糊问题
  • 提出了LRN层,局部响应归一化,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
  • 加入CUDA训练,极大的提升了训练速度
  • 开始加入数据增强,增加了泛化能力、

LRN详解

在这里插入图片描述
通过公式可以看出,LRN本质上是一个对数据做归一化,将响应较大的值变得相对更得,抑制较小的神经元。累加的方式是通道方向,也就是不同的通道之间相互抑制。公式中的β,n,α,k是可以设置的参数

ReLU比sigmoid好在哪

  • sigmoid函数计算量大,反向传播求梯度时,求导涉及除法,计算量更大了。
  • 对于深度网络,sigmoid易发生梯度消失和梯度爆炸,因为sigmoid导数的关系,其导数在饱和区变化很小,导数趋于0,容易发生梯度消失和梯度爆炸,无法完成深度网路的训练,而ReLU的导数是一个常数,有助于解决深层网络收敛的问题。
  • ReLU在输出的时候会使得一部分神经元输出为0,这样就造成了网络的稀疏性,减少了参数相互依存的关系,缓解了过拟合。

VGG

VGG网络提出于2014年,其主要贡献点在于证明了加深网络深度有利于图像分类的准确度。其主要贡献点有:

  1. 反复堆叠3×3的卷积核加深网络的深度,3×3的卷积核反复堆叠的好处有三点:1扩大了感受野,两个3×3的卷积核堆叠相当于一个5×5的卷积核,3个3×3的卷积核相当于一个7×7的卷积核.2在扩大感受野的同时,尽管网络的层数增加了,但减少了网络的参数。3卷积核之间的堆叠,由于激活函数的增加,使得网络的非线性得到增强。
  2. 在网络中增加了1×1的卷积层,1×1的卷积层实际为线性的,但是由于激活函数的存在,实际上增加了网络的非线性。
    深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet_第1张图片
    另外VGG在训练的时候有几个trick:
  • 1 单尺度训练测试 ,256*256的size大小训练测试
  • 2 多尺度训练测试 ,train_size = [sizemin : sizemax], test_size = {sizemin,0.5*(sizemin + sizemax), sizemax}。训练过程中的多尺度是把原图resize成不同的大小,然后crop成224。
  • 3 裁剪训练测试 从256size中随机裁剪224大小的图片进行训练。
  • 4 不同模型之间的融合 多种VGG之间的融合,不同尺度,不同策略,不同网络结构的融合。
  • 5 论文中将全连接层替换为全卷积层,具体操作可以参照博客,其实原理也很好理解,就是再加两层卷积层,最后池化,和现在常用的全局池化思想差不多。

此外,vgg并没有采用Alexnet中的LRN结构,因为作者在实验中发现LRN并没有提升精度,反而会增加计算量。

Resnet

Resnet有Kaiming He提出,在VGG证明网络的加深有利于提升分类精度之后,发现了网络的深度不能一直加深,当加深到一定程度的时候,网络的训练精度和测试精度会同时下降(退化degradation问题),可以确定这不是过拟合的问题,因为过拟合在训练集的精度不会下降。为了解决这个问题,作者提出了Residual Unit.

Residual unit 详解

深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet_第2张图片
如上图所示,Residual unit 包含 residual mapping 和 identity mapping。最后的输出为 y = F(x) + x. 其中identity mapping是其本身,也就是x,而F(x)是y-x,也就是残差,所以残差指的是F(x)部分。通常来说,优化残差比直接优化更简单。
Residual unit的好处在于当网络达到最优的时候,residual mapping将为0,只剩下identity mapping,使得网络性能不回下降,而当网络没有达到最优的时候,residual mapping将会起作用,通过residual的学习提升网络性能,更深层的网络的误差不会大于浅层网络的误差。从另一个角度理解,卷积网络在信息传递的时候,或多或少会存在信息丢失和信息损耗的问题,resnet在某种程度上可以解决这个问题,通过直接将输入信息传到输出,保护信息的完整性,整个网络则只需要学习输入输出差别那一部分,简化了学习目标和难度。

算法细节:

  1. 网络结构,整个网络结构主要是基于VGG改进的。如下图所示,不同的是VGG通过池化减少featuremap,Resnet通过stride为2的卷积进行下采样。
    深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet_第3张图片
  2. residual block细节:对于下图中的维度匹配问题,当x与F(x)维度相同时,y=x+F(x),当维度不同时,如虚线所示,主要有两种解决方法,(1)对x补0至同维度,(2)线性映射的方法,y = Wx + F(x)。
    深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet_第4张图片
    另外,如下如所示,对于Resnet34,采用下图左图中的Residual unit, 对于Resnet50以上深度的Resnet,采用的是下图右图中bottleneck的Residual unit。右图中对Residual unit进行了降维,主要作用是减少参数,减少计算量。
    深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet_第5张图片
    上图中左边的结构主要用于resnet18和resnet34,右边的结构主要用于resnet50、resnet101、resnet152.虽然Resnet152的层数更多,更深,但是Resnet152的参数量和模型大小是小于Vgg16/19的。
    另外Resnet这种旁路支线的将输入连接到后面的层,使得后面的层直接学习残差,这种结构称为shortcut。
    深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet_第6张图片
  3. Resnet在featuremap大小减半的时候,featuremap的数量增加一倍,保证了网络的复杂度
    另外对于Resnet梯度的反向传播,如下图所示,深层的梯度直接传到浅层,有效的缓解了深度神经网络梯度消失的问题。
    深度学习总结:常见卷积神经网络——AlexNet,VGG,Resnet_第7张图片

结论,Resnet解决了在网络加深时的退化问题,使得网络可以进一步加深。我认为是深度学习历史性的突破。

你可能感兴趣的:(深度学习,CV)