ResNet网络结构,BN以及迁移学习详解

  •  看b站up主霹雳吧啦Wz视频,以及一些文章参考,所做笔计
     
  • 链接:
  • ResNet网络结构

    • ResNet在2015年由微软实验室提出,战火当年ImageNet竞赛中分类任务第一名,目标检测第一名,图像分割第一名
    • ResNet网络简介

      • 一般来说,如果存在某个k层的网络f是当前最优的网络,那么可以构造一个更深层的网络,其最后几层仅是该网络f第k层输出的恒等映射,就可以取得与一致的结果;如果k还不是所谓“最佳层数”,那么更深的网络就可以取得更好的结果。总而言之,与浅层网络相比,更深的网络的表现不应该更差。并且,越深的网络提取的特征越抽象,越具有语义信息。
      • 但是在实际实验时发现,不仅是测试精度,而且在训练精度上,更深的(56层)神经网络也远不如浅一些的(20层)神经网络

      • 实验表明,当网络堆叠到一定深度时会出现两个问题:
        • 1、梯度消失或梯度爆炸
          • 梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
          • 梯度爆炸:若每一层的误差梯度大于1,反向传播时,网路越深,梯度越来越大
        • 2、退化问题
          • 在解决了梯度消失、爆炸问题后,仍然存在深层网络的效果可能比浅层网络差的现象
      • ResNet能很好地解决这些问题,网络亮度包括
        • 超深的网络结构(突破1000层)
        • 提出residual模块
        • 使用Batch Normalization加速训练(丢弃dropout)
      • 使用ResNet后可以看出提升效果很明显

        • 对于梯度消失或梯度爆炸问题,通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。
        • 对于退化问题,提出了 residual结构(残差结构)来减轻退化问题
    • 残差残差网络是什么

      • 残差的思想都是去掉相同的主体部分,从而突出微小的变化
      • 残差网络依旧让非线形层满足 H(x,Wh),然后从输入直接引入一个短连接到非线形层的输出上,使得整个映射变为

        • 这就是残差网络的核心公式,换句话说,残差是网络搭建的一种操作,任何使用了这种操作的网络都可以称之为残差网络。
      • 如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络,那现在要解决的就是学习恒等映射函数了。
      • 但直接让一些叠加层去拟合一个潜在的恒等映射函数H(x) = x会比较困难,而这可能就是深层网络难以训练的原因。
      • 但是如果把网络设计为H(x) = F(x) + x,就可以转换为学习一个残差函数F(x) = H(x) - x,采用一些非线性层,让它们去拟合,只要F(x)=0,就构成了一个恒等映射H(x) = x,这样拟合残差肯定更加容易。

        • 整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。
      • 简单的例子
        • 例子:F是求和前网络映射,H是从输入到求和后的网络映射。
        • 比如把5映射到5.1,那么引入残差前是F'(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。
        • 这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。
        • 明显后者输出变化对权重的调整作用更大,所以效果更好。
    • 残差网络的优越性

      • 如果增加的层被构建为同等函数,那么理论上,更深的模型的训练误差不应当大于浅层模型,但是出现的退化问题表面,求解器很难去利用多层网络拟合同等函数。但是,残差的表示形式使得多层网络近似起来要容易的多,如果同等函数可被优化近似,那么多层网络的权重就会简单地逼近0来实现同等映射,即F(x) = 0。实际情况中,同等映射函数可能不会那么好优化,但是对于残差学习,求解器根据输入的同等映射,也会更容易发现扰动,总之比直接学习一个同等映射函数要容易的多。
      • 普通的平原网络与深度残差网络的最大区别在于,深度残差网络有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这些支路就叫做shortcut。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet 在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。
    • residual是什么

      • 为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。
      • 残差网络由许多隔层相连的神经元子模块组成,我们称之为 残差块 Residual block。单个残差块的结构如下图所示:

      • 图中红色部分称为 short cut 或者 skip connection(也称 捷径分支),直接建立a[l]和a[l+2]之间的隔层联系,其前向传播的计算步骤为:

      • 由多个残差块组成的神经网络就是残差网络

    • ResNet中的残差结构

      • 实际应用中,残差结构的 short cut 不一定是隔一层连接,也可以中间隔多层,ResNet所提出的残差网络中就是隔多层。
      • 跟VggNet类似,ResNet也有多个不同层的版本,而残差结构也有两种对应浅层和深层网络:

      • 左侧残差结构称为 BasicBlock,右侧残差结构称为 Bottleneck

      • 对于深层的 Bottleneck,1×1的卷积核起到降维和升维(特征矩阵深度)的作用,同时可以大大减少网络参数。

        • 注:CNN参数个数 = 卷积核尺寸×卷积核深度 × 卷积核组数 = 卷积核尺寸 × 输入特征矩阵深度 × 输出特征矩阵深度
    • ResNet18层网络为例说明

      • 观察下图的 ResNet18层网络,可以发现有些残差块的 short cut 是实线的,而有些则是虚线的。
      • 这些虚线的 short cut 上通过1×1的卷积核进行了维度处理(特征矩阵在长宽方向降采样,深度方向调整成下一层残差结构所需要的channel)。

      • 下图是原论文给出的不同深度的ResNet网络结构配置,注意表中的残差结构给出了主分支上卷积核的大小与卷积核个数,表中 残差块×N 表示将该残差结构重复N次。

      • conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层残差结构都是虚线残差结构。因为这一系列残差结构的第一层都有调整输入特征矩阵shape的使命(将特征矩阵的高和宽缩减为原来的一半,将深度channel调整成下一层残差结构所需要的channel)
      • 需要注意的是,对于ResNet50/101/152,其实conv2_x所对应的一系列残差结构的第一层也是虚线残差结构,因为它需要调整输入特征矩阵的channel。
        • 根据表格可知通过3x3的max pool之后输出的特征矩阵shape应该是[56, 56, 64],但conv2_x所对应的一系列残差结构中的实线残差结构它们期望的输入特征矩阵shape是[56, 56, 256](因为这样才能保证输入输出特征矩阵shape相同,才能将捷径分支的输出与主分支的输出进行相加)。
        • 所以第一层残差结构需要将shape从[56, 56, 64] --> [56, 56, 256]。
        • 注意,这里只调整channel维度,高和宽不变(而conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层虚线残差结构不仅要调整channel还要将高和宽缩减为原来的一半)。
      • 下面是 ResNet 18/34 和 ResNet 50/101/152 具体的实线/虚线残差结构图:
        • ResNet 18/34

        • ResNet 50/101/152s

  • Batch Normalization

  • 迁移学习

    • 迁移学习是一个比较大的领域,我们这里说的迁移学习是指神经网络训练中使用到的迁移学习。
    • 在迁移学习中,我们希望利用源任务(Source Task)学到的知识帮助学习目标任务 (Target Task)。例如,一个训练好的图像分类网络能够被用于另一个图像相关的任务。再比如,一个网络在仿真环境学习的知识可以被迁移到真实环境的网络。迁移学习一个典型的例子就是载入训练好VGG网络,这个大规模分类网络能将图像分到1000个类别,然后把这个网络用于另一个任务,如医学图像分类。
    • 为什么可以这么做呢?如下图所示,神经网络逐层提取图像的深层信息,这样,预训练网络就相当于一个特征提取器。

    • 使用迁移学习的优势:

      • 能够快速的训练出一个理想的结果
      • 当数据集较小时也能训练出理想的效果
      • 注意:使用别人预训练好的模型参数时,要注意别人的预处理方式
    • 常见的迁移学习方式

      • 载入权重后训练所有参数
      • 载入权重后只训练最后几层参数
      • 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knoka705

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值