草庐IT

【网络结构设计】11、E-LAN | 通过梯度传输路径来设计网络结构

呆呆的猫 2023-04-03 原文

文章目录

论文:Designing Network Design Strategies Through Gradient Path Analysis

代码:暂无

出处:暂无

一、背景

现有网络结构设计的不同方向:

  • 实际应用的高效性上:
    • SENet:使用通道 attention 的方式,降低了 AlexNet 约 50 倍参数,但可以保持类似的效果
    • MobileNet 和 ShuffleNet:MobileNet 将硬件的延迟直接考虑到了网络设计中,ShuffleNet 分析了硬件的特性并作为网络设计的参考原则
  • 超深网络结构及不同层特征的融合上:
    • ResNet、ResNeXt、DenseNet 等结构解决了超深网络结构训练的模型收敛问题
    • 之后的其他模型从 ① 特征融合 ② 提高感受野 ③ attention ④ 分支选择等方面来进行研究

总结上述内容可以得到下面的结论:

  • 很多研究都是从相同的角度出发的,也就是从浅层抽取 low-level 特征,从深层抽取 high-level 特征,然后将这些特征结合起来,即是 data path(前向传播)的角度

本文作者的思考:

  • 如图 1 所示,[16] 和 [36] 中,在 objective 和 loss 的角度分析了浅层和层模型,作者发现通过调整 objective 和 loss layer 的配置,就可以控制每层学习到的特征(无论浅层还是深层)。
  • 也就是说,网络学习到什么类型的特征取决于训练人员用什么信息投喂,而不是如何组合这些层,基于此,作者重新设计的网络结构

本文作者的出发点:

  • 由于目前的参数更新方法都是反向传播规则,即目标函数会根据梯度来更新权重参数,所以本文是基于梯度传播路径来设计网络结构

本文的做法:为 layer-level、stage-level、network-level 设计了梯度路径:

  • Layer-level design:设计了梯度分流策略,并通过调整 layers 的数量和计算残差连接的 channel ratio,设计了 Partial Residual Network(PRN)(PRN 和本文是相同的作者团队)
  • Stage-level design:将硬件的特性引入网络结构中来加速网络的推理过程。作者通过最大化梯度结合和最小化硬件消耗的两个方式,设计了 Cross Stage Network(CSPNet)[33] (CSPNet 和本文是相同的作者团队)
  • Network-level design:作者考虑了梯度传播的效率来平衡网络的学习能力,以网络的梯度反传路径长度作为总基础,设计了 Efficient Layer Aggregation Network(ELAN)

二、方法

2.1 网络设计策略

在本文中,作者将网络设计策略分为两种,如图 2 所示:

  • data path design strategies:主要关注特征抽取方式、特征选择、特征融合方式等的设计
  • gradient path design strategies:主要通过分析梯度的来源、组合方式、更新方式等,来进行网络设计,提高参数使用率,获得更好的效果

1、data path design strategy

优势:

  • 可以提取有特殊物理含义的特征,比如使用对称计算单元来抽取不同感受野的特征
  • 可以针对不同的输入来自动地选择合适的操作单元,比如使用不同的 kernel 来解决不同的输入 [2, 19]
  • 学习到的特征可以直接复用,比如 FPN 可以直接使用从不同层得到的特征

劣势:

  • 在训练过程中,容易导致无法预测的损失,所以需要复杂的结构来解决这些问题
  • 多样且具有特殊设计的算术单元在模型优化过程中会造成一些困难

2、gradient path design strategy

优势:

  • 能够高效地使用网络参数,通过调整梯度传播的路径,不同计算单元的权重可以学习更丰富的信息,提高性能
  • 模型学习很稳定,由于梯度传输路径会直接影响每个计算单元的参数的更新,训练过程中可以避免性能损坏
  • 前向传播效率更高,通过控制梯度传输的路径,模型可以在不增加其他复杂结构的基础上得到高准确率。

2.2 Partial Residual Networks

PRN 是本文作者团队在 2019 年提出的,属于 layer-level 的设计策略

在 PRN 的设计中,主要是围绕着如何最大化梯度的组合来更新每层的权重

下面两个因素会主要影响梯度的组合:

  • 梯度的来源层 source layer of the gradient
  • 梯度从 loss 层传递到其他层的时间戳(链路法则)

以 ResNet 为例来分析 Masked residual layer:

  • ResNet 中,每个 block 的输出都会和残差连接的特征相加
  • 在 PRN 的设计中,使用 binary mask 和残差连接相乘,只允许一部分通道的残差信息和 block 输出相加,如图 3 所示
  • 使用 masked residual layer 可以让特征图分为两部分,通过抑制另一半通道,只有一半的残差通道会和 block 输入通道相加,这样可以提高梯度结合的数量
  • 此外,不同的梯度 source 层会影响整个梯度传播的时间,让梯度的结合冗余

以 ResNet 来分析 Asymmetric(非对称) residual layer:

  • 在 ResNet 的结构下,只有大小相同的特征图可以详见,这也也导致该结构是一个比较受限制的结构
  • 在使用 PRN 时,可以允许一些 channels 被抑制,通道抑制的数量也可以不同,可以看做非对称残差层,这样就可以让网络更灵活

梯度结合(gradient combination)的一些分析:

一般研究中通常使用『最短梯度路径』和『融合特征的数量』来衡量模型的学习效率和网络结构的能力,[39] 在任务,这些度量方式和 accuracy 及 参数 没有很强的关系,如表 1 所示。

作者认为梯度传播和梯度结合是被用来更新参数的,和网络相关性更大,所以下面会进行「梯度结合」的相关分析。

梯度结合包括:gradient timestamp 和 gradient source

1、gradient timestamp

如图 7,展示了四种不同的网络结构的 gradient timestamp

  • ResNet 使用残差的方式,梯度结合方式比较受限
  • PRN 使用 channel splitting 的方式,丰富了 gradient timestamp,和 ResNet 相比,梯度结合方式更多样
  • SparseNet 使用 sparse connection 让不同的 layer 更灵活
  • DenseNet 使用逐层 concat 的方式,梯度结合很冗余

2、gradient source

如图 8 所示,展示了 3 种不同网络在第一个 gradient timestamp 处的 gradient source:

  • 级联结构(DenseNet、SparseNet),需要特殊处理
  • 残差结构(ResNet、PRN),ResNet 相同的梯度信息会传输到输出的所有层,source 有冗余,PRN 更灵活

2.3 Cross Stage Partial Networks

CSPNet 也是本文团队在 2019 年提出的,可以看做 stage-level 梯度网络

CSPNet 也是基于最大化梯度组合来实现的

CSPNet 和 PRN 的不同:

  • CSPNet:是为提升硬件推理速度来设计的
  • PRN:是从理论角度出发并通过梯度的结合来提升网络的学习能力

所以,在 CSPNet 设计的时候,是从 layer-level 扩展到了 stage-level

CSPNet 的结构如下:

1、Cross stage partial operation

当每个 channel 都有不同的梯度传播路径的时候,可以达到 the source of gradient 的最大化

当每个 channel 都不同的计算深度的时候,梯度时间戳的数量可以最大化

所以,可以通过上面的两个理论来设计结构,最大化 gradient source 和 gradient timestamp

划分 channel 可以提高 gradient source,让子网络和不同 layer 的不同 channel 结合可以提高 gradient timestamps 的数量

结构如图 4 所示:

  • 将输入划分为两部分,一部分经过 block ,一部分直接和 block 的输出特征进行进行 concat 即可
  • 如此一来,可以降低计算量,提升网络推理速度

2、Gradient flow truncate operation

作者分析了 CSPNet 的梯度流传播

由于 block 中用了很多残差连接,特征流和残差流的梯度有很多重复的,所以作者在 block 和残差连接的末尾都插入了 transition layer,来截断一些梯度。

图 5 展示了 3 种不同的结合方式:

CSPNet 设计之初是为了加强模型在线学习的能力,并且加速推理。

2.4 Efficient Layer Aggregation Network

ELAN 代码在 2022 年 7 月开源,在 layer-level 上设计了 gradient path designed network。

ELAN 的主要目标是为了解决 deep model scaling 时难以收敛的问题

ELAN 是由 VoVNet 和 CSPNet 结合而来的,且其整个网络的梯度长度的优化是基于 Stack in computational block 结构的

Stack in computational block:

在做模型缩放时,如果网络达到了一定的深度,再叠加深度时,网络的效果可能会不升反降

举个例子:

  • scaled-YOLOv4,P7 model 使用很多操作和参数,但只获得了很小的性能提升
  • ResNet-152 约是 ResNet-50 参数量的 3 倍,但在 ImageNet 只带了了 1% 的 acc 提升,当 ResNet 堆叠到大约 200 层时,性能比 ResNet-152 更差
  • VoVNet 堆叠到 99 层时,其 acc 比 VoVNet-39 还低

分析:

  • 从梯度路径的设计来看,作者认为随着堆叠层数的增加, VoVNet 比 ResNet 的性能下降更多的原因在于,VoVNet 是基于 OSA module 堆叠而来,而每个 OSA module 都包括一个 transition layer,所以每堆叠一个 OSA module,每个层的梯度路径都会增加 1
  • 而 ResNet 是基于 residual layers 堆叠而来的,每堆叠一个 residual layer,只会增加梯度最长路径

为了进一步分析,作者基于 YOLOR-CSP 进行了一些实验,并且发现:

  • 当堆叠层数达到 80+ 时, CSP 早融合的方式比 normal CSP 效果更好,每个 stage 的最短梯度路径会减 1
  • 当网络继续变深和变宽,CSP 晚融合的方式得到了更好的效果,每个 layer 的最短梯度路径会减 1

Stack in computational block 如图 6 所示:

  • 出发点 1:为了避免使用更多 transition layer
  • 出发点 2:让整个网络的最短梯度路径变得更长一些

这里介绍一下 VoVNet:

  • 提出了 One-shot Aggregation(OSA),将中间的特征一次性聚合(在最后一层聚合一次),如图 1b 所示,能够在保留 concat 优势的同时优化 MAC(中间层输入输出通道相同) 和 GPU 计算效率(无需 1x1 卷积)
  • 基于 OSA 模块,构建了 VoVNet,一个 backbone 网络结构,并且将该 backbone 用于 DSOD、RefineDet、Mask R-CNN 等方法中,取得了比 DenseNet、ResNet 等方法更好的效率和准确率的平衡
  • VoVNet 是基于 DenseBlock 的,DenseBlock 中的每一层的输入都是前面所有层 feature map 的叠加。而 VoVNet 只有最后一层的输入是前面所有层 feature map 的叠加。

E-LAN 结构如图 6c 所示:主要为了避免过多的使用 transition layer(会提升梯度最短路径,影响网络加深)

我们已知,在分析梯度路径时,不能只看整个网络的最短梯度路径和最长梯度路径,而且需要更详细的梯度路径分析。

stop gradient:

首先,探索一下 ResNet 的最短路径长度。和 PlainNet,ResNet 的每个 block 都有一部分梯度是会经过 block 传递的

所以,作者会分别在 block 和残差连接上进行 stop gradient 操作,如图 9 所示:

  • 残差连接上使用后:gradient path 会和 PlainNet 很类似,也就是说最长梯度路径和最短梯度路径相同了
  • block 上使用后:最短梯度路径会直接从所有残差连接通过,所以最短梯度路径永远为 1,因为 block 有两层,所以最长梯度路径为 2
  • 在 YOLOR-CSP 上的实验结果如表 3 所示,结果表明,在 ResNet 中缩短梯度路径是让深度网络能正常收敛的很重要的因素

Gradient path planning:

作者重新设计了 VoVNet 的 transition layer:

  • 首先,移除 deep VoVNet 中的 OSA module 的所有 transition layer,只在最后一个 stage 的最后一个 OSA module 中使用 transition layer
  • 然后,将 CSPNet 的结构应用于上面的往来账哦好难过,来进一步观察 CSPNet 的效果,结果如表 4
  • 结论,deep VoVNet 从无法收敛到收敛良好。所以,不应该只考虑最短梯度路径和最长路径的数值,而是需要确保的是每层的梯度最短路径和整个网络的梯度最长路径都可以被有效的训练到

三、效果

有关【网络结构设计】11、E-LAN | 通过梯度传输路径来设计网络结构的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  4. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  5. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  6. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  7. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  8. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  9. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  10. ruby-on-rails - 一般建议和推荐的文件夹结构 - Sinatra - 2

    您将如何构建一个简单的Sinatra应用程序?我正在制作,我希望该应用具有以下功能:“应用程序”更像是一个包含所有信息的管理仪表板。然后另一个应用程序将通过REST访问信息。我还没有创建仪表板,只是从数据库中获取东西session和身份验证(尚未实现)您可以上传图片,其他应用可以显示这些图片我已经使用RSpec创建了一个测试文件通过Prawn生成报告目前的设置是这样的:app.rbtest_app.rb因为我实际上只有应用程序和测试文件。到目前为止,我已经将Datamapper用于ORM,将SQLite用于数据库。这是我的第一个Ruby/Sinatra项目,所以欢迎任何和所有建议-我应

随机推荐