3. Method 方法

3.1 Cross Stage Partial Network 跨阶段局部网络

3.1.1 Cross Stage Partial Network 跨阶段局部网络
3.1.1.1 ResNet 和 DenseNet 的优缺点

  主流的卷积神经网络(CNN)架构,如ResNet [8]、ResNeXt [37]、DenseNet [11],其输出通常是中间层输出的线性或非线性组合。因此,一个k层CNN的输出可以表示为:
y=F(x0)=xk=Hk(xk−1,Hk−1(xk−2,Hk−2(xk−3,…,H1(x0),x0)(1) \begin{aligned} y &= F(x_0) = x_k \\& = H_k(x_{k - 1}, H_{k - 1}(x_{k - 2}, H_{k - 2}(x_{k - 3}, \ldots, H_1(x_0), x_0) \tag{1} \end{aligned} y=F(x0)=xk=Hk(xk1,Hk1(xk2,Hk2(xk3,,H1(x0),x0)(1)
其中,FFF是从输入x0x_0x0到目标yyy的映射函数,它也是整个CNN的模型。对于HkH_kHk,它是CNNkkk层的操作函数。通常,它由一组卷积层一个非线性激活函数组成。如果我们以ResNet和DenseNet为例,它们可以分别用公式2和公式3表示:
xk=Rk(xk−1)+xk−1=Rk(xk−1)+Rk−1(xk−2)+…+R1(x0)+x0(2) \begin{aligned} x_k &= R_k(x_{k - 1}) + x_{k - 1} \\&= R_k(x_{k - 1}) + R_{k - 1}(x_{k - 2}) + \ldots + R_1(x_0) + x_0 \tag{2} \end{aligned} xk=Rk(xk1)+xk1=Rk(xk1)+Rk1(xk2)++R1(x0)+x0(2)
xk=[Dk(xk−1),xk−1]=[Dk(xk−1),Dk−1(xk−2),…,D1(x0),x0](3) \begin{aligned} x_k &= [D_k(x_{k - 1}), x_{k - 1}] \\&= [D_k(x_{k - 1}), D_{k - 1}(x_{k - 2}), \ldots, D_1(x_0), x_0]\tag{3} \end{aligned} xk=[Dk(xk1),xk1]=[Dk(xk1),Dk1(xk2),,D1(x0),x0](3)
在以上两个公式中,RRRDDD分别代表残差层密集层的计算操作,这些操作通常由2 - 3个卷积层组成。
从以上两个公式可以看出,无论是残差层还是密集层,构成它们的每个卷积层的输入都会接收所有之前层的输出
①为什么可以梯度路径最小化:本来梯度要从k层传递到给1层,要层层传递,k先给k-1,k-1再给k-2等等,现在梯度可以直接 “跳过” 中间层
在这种情况下,梯度路径的长度可以最小化,从而使反向传播过程中的梯度流动更加高效。
②解决了梯度消失问题,但是为什么导致重复学习冗余信息:前面很多层的特征有重叠、冗余、反复用相似梯度去更新,会使网络学习重复、没必要的信息、增加计算量
然而,我们也知道,这种架构设计会让第kkk层将梯度传递到所有k−1,k−2,…,1k - 1, k - 2, \ldots,1k1,k2,,1层,并利用这些梯度来更新权重,这将导致重复学习冗余信息

3.1.1.2 改进版

  最近,一些研究尝试使用经过筛选的HkH_kHk的输入 来提高学习能力和参数利用率。
①例如,SparseNet [44] 使用指数间隔连接,使HkH_kHk直接与Hk−1,Hk−2,Hk−4,…,H2n,…H_{k - 1}, H_{k - 2}, H_{k - 4}, \ldots, H_{2^n}, \ldotsHk1,Hk2,Hk4,,H2n,相关联。
②ShuffleNetV2 [2]使用分裂通道使Hk仅与Hk−1通道的一半直接相关,并且它的等式可以表示为S([Hk(xk−1[1:c/2]),xk−1(c/2+1:c])])S([H_k(x_{k - 1}[1:c/2]), x_{k - 1}(c/2 + 1:c])])S([Hk(xk1[1:c/2]),xk1(c/2+1:c])]),其中SSS表示混洗操作xk−1[1:c/2]x_{k - 1}[1:c/2]xk1[1:c/2]表示xk−1x_{k - 1}xk1的第一个到c/2c/2c/2个通道。
③对于PyramidNet [7] 和PRN [33],它们都使用不同数量的通道来构建ResNet,以实现梯度分流的效果。

3.1.1.2 本文提出的CSP

  当前最先进的方法着重于优化每个层的HiH_iHi函数,而我们提出CSPNet直接优化FFF函数,优化方式如下:
y=M([x0′,T(F(x0′′))])(4) y = M([x_0', T(F(x_0''))]) \tag{4} y=M([x0,T(F(x0′′))])(4)
其中,x0x_0x0沿通道维度被分成两部分,表示为x0=[x0′,x0′′]x_0 = [x_0', x_0'']x0=[x0,x0′′]
T用于截断,M用于混合
TTT 是过渡函数,用于截断H1,H2,…,HkH_1, H_2, \ldots, H_kH1,H2,,Hk 的梯度流,MMM 是过渡函数,用于混合这两个分割部分。
接下来,我们将展示如何将CSPNet整合到DenseNet中,并解释如何解决CNN中重复学习信息的问题。
在这里插入图片描述

3.1.2 DenseNet 密集网络

  图2(a)展示了黄等人提出的DenseNet的一级详细结构 。
DenseNet的每一级都包含一个密集块一个过渡层,每个密集块由kkk个密集层组成,第iii个密集层的输出会与第iii个密集层的输入进行拼接,拼接后的结果将作为第(i+1)(i + 1)(i+1)个密集层的输入。

3.1.2.1 正向

  上述机制可用以下等式表示:
x1=w1∗x0x2=w2∗[x0,x1]⋮xk=wk∗[x0,x1,…,xk−1](5) \begin{align*} x_1&=w_1 * x_0\\ x_2&=w_2 * [x_0, x_1]\\ &\vdots\\ x_k&=w_k * [x_0, x_1, \ldots, x_{k - 1}] \end{align*}\tag{5} x1x2xk=w1x0=w2[x0,x1]=wk[x0,x1,,xk1](5)
其中∗*表示卷积操作符,[x0,x1,…][x_0, x_1, \ldots][x0,x1,]表示对x0,x1,…x_0, x_1, \ldotsx0,x1,进行拼接wiw_iwixix_ixi分别是第iii个密集层的权重输出

3.1.2.2 反向梯度传播

  如果使用反向传播来更新权重,权重更新的等式可写为:
w1′=f1(w1,g1)w2′=f2(w2,[g0,g1])⋮wk′=fk(wk,[g0,g1,…,gk−1])(6) \begin{align*} w_1'&=f_1(w_1, g_1)\\ w_2'&=f_2(w_2, [g_0, g_1])\\ &\vdots\\ w_k'&=f_k(w_k, [g_0, g_1, \ldots, g_{k - 1}]) \end{align*}\tag{6} w1w2wk=f1(w1,g1)=f2(w2,[g0,g1])=fk(wk,[g0,g1,,gk1])(6)
其中fif_ifi是第iii个密集层的权重更新函数,gig_igi表示传播到第iii个密集层的梯度。我们可以发现,大量的梯度信息被重复用于更新不同密集层的权重。这将导致不同的密集层反复学习复制的梯度信息。

3.1.3 Cross Stage Partial DenseNet 跨阶段局部密集网络

  所提出的CSPDenseNet的单阶段架构如图2(b)所示。
CSPDenseNet的一个阶段由一个局部密集块一个局部过渡层组成。

3.1.3.1 局部密集块

  在局部密集块中,一个阶段的基础层特征图通过通道划分为两部分,即x0=[x0′,x0′′]x_0 = [x_0', x_0'']x0=[x0,x0′′]。在x0′x_0'x0x0′′x_0''x0′′之间,前者直接连接到阶段末尾后者将经过一个密集块

3.1.3.2 局部过渡层

  局部过渡层涉及的所有步骤如下:首先,密集层的输出[x0′′,x1,…,xk][x_0'', x_1, \ldots, x_k][x0′′,x1,,xk]将经过一个过渡层。其次,该过渡层的输出xTx_TxT将与x0′x_0'x0 拼接,并经过另一个过渡层,然后生成输出xUx_UxU

3.1.3.3 前向传播和梯度更新

  CSPDenseNet前向传播和权重更新的等式如公式7和公式8所示:
xk=wk∗[x0′′,x1,…,xk−1]xT=wT∗[x0′′,x1,…,xk]xU=wU∗[x0′,xT](7) \begin{align*} x_k &= w_k * [x_0'', x_1, \ldots, x_{k - 1}] \\ x_T &= w_T * [x_0'', x_1, \ldots, x_k] \\ x_U &= w_U * [x_0', x_T] \end{align*}\tag{7} xkxTxU=wk[x0′′,x1,,xk1]=wT[x0′′,x1,,xk]=wU[x0,xT](7)
wk′=fk(wk,{g0′′,g1,…,gk−1})wT′=fT(wT,{g0′′,g1,…,gk})wU′=fU(wU,{g0′,gT})(8) \begin{align*} w_k' &= f_k(w_k, \{g_0'', g_1, \ldots, g_{k - 1}\}) \\ w_T' &= f_T(w_T, \{g_0'', g_1, \ldots, g_k\}) \\ w_U' &= f_U(w_U, \{g_0', g_T\}) \end{align*}\tag{8} wkwTwU=fk(wk,{g0′′,g1,,gk1})=fT(wT,{g0′′,g1,,gk})=fU(wU,{g0,gT})(8)
可以看到,来自密集层的梯度被单独整合。另一方面,未经过密集层的特征图x0′x_0'x0 也被单独整合。用于更新权重的梯度信息两侧均不包含属于另一侧的重复梯度信息。
总体而言,所提出的CSPDenseNet保留了DenseNet特征复用特性的优势,同时通过截断梯度流防止了过多的重复梯度信息。这一思想通过设计分层特征融合策略实现,并在局部过渡层中应用。

3.1.4 Partial Dense Block 局部密集块

  设计局部密集块的优势如下:

  1. 增加梯度路径:通过分割与合并策略,梯度路径的数量可翻倍。由于采用了跨阶段策略,能够缓解因使用显式特征图复制进行拼接而产生的弊端。
  2. 平衡各层计算量:通常,DenseNet中基础层的通道数远大于增长率。在局部密集块中,参与密集层操作的基础层通道数仅为原始数量的一半,因此可有效解决近一半的计算瓶颈问题。
  3. 减少内存流量:假设DenseNet中一个密集块的基础特征图尺寸为w×h×cw \times h \times cw×h×c,增长率为ddd,且共有mmm个密集层。那么,该密集块的内存流量(CIO)为(c×m)+((m2+m)×d)/2(c \times m) + ((m^2 + m) \times d)/2(c×m)+((m2+m)×d)/2,而局部密集块的内存流量为((c×m)+(m2+m)×d)/2((c \times m) + (m^2 + m) \times d)/2((c×m)+(m2+m)×d)/2。由于mmmddd通常远小于ccc,局部密集块最多能够节省网络一半的内存流量 。
3.1.5 Partial Transition Layer 局部过渡层

  设计局部过渡层的目的是最大化梯度组合的差异。局部过渡层是一种分层特征融合机制,它采用截断梯度流的策略,防止不同层学习重复的梯度信息。
在此,我们设计了两种CSPDenseNet的变体,以展示这种梯度流截断对网络学习能力的影响。图3(c)和图3(d)展示了两种不同的融合策略。CSP(先融合)指的是将两部分生成的特征图拼接,然后执行过渡操作。若采用该策略,大量梯度信息会被重复利用。对于CSP(后融合)策略,密集块的输出会先经过过渡层,然后再与来自第一部分的特征图进行拼接。若采用CSP(后融合)策略,由于梯度流被截断,梯度信息不会被重复利用。若使用图3所示的四种架构进行图像分类,相应结果如图4所示。可以看出,若采用CSP(后融合)策略进行图像分类,计算成本显著降低,但top-1准确率仅下降0.1% 。另一方面,CSP(先融合)策略确实有助于大幅降低计算成本,但top-1准确率显著下降了1.5% 。通过在跨阶段采用分割与合并策略,我们能够有效降低信息整合过程中出现重复的可能性。从图4所示结果可以明显看出,若能有效减少重复的梯度信息,网络的学习能力将大幅提升。
在这里插入图片描述
在这里插入图片描述

3.1.6 Apply CSPNet to Other Architectures 将CSPNet应用于其他架构

  CSPNet也可应用于ResNet和ResNeXt,其架构如图5所示。由于仅有一半的特征通道会经过Res(X)块,因此不再需要引入瓶颈层。这使得在浮点运算量(FLOPs)固定时,内存访问成本(MAC)的理论下限得以确定 。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88705.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88705.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88705.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习4:小白入门注册表单的制作(包括详细思考CSS、JS实现过程)

这篇我们来做一个简单表单,即常见的注册页面吧~学习完这篇我们将学习到Input、label、CSS伪类、CSS入门、更多的JS操作等。。一、首先明确需求:直接模仿常见的注册页面,包括:用户名、Email、性别(单选按钮男/女&#x…

强化学习 (RL) 新突破:超越游戏,走向复杂现实决策

强化学习 (RL) 新突破:超越游戏,走向复杂现实决策 强化学习(Reinforcement Learning, RL)作为人工智能的核心范式之一,历经数十年的发展,正迎来一场深刻的范式转移。曾以战胜人类顶尖选手的Alph…

2025年6-7月AI领域关键进展:从药物研发到全球监管--AI深度融入产业与社会

2025年6月至7月,人工智能领域继续以惊人速度发展,在技术突破、行业应用、政策法规、企业战略及学术研究等方面取得了一系列重要里程碑。以下为关键动态:一、技术突破: AI向生命科学和认知科学纵深挺进DeepMind启动AI设计药物人体试…

【TOOL】ubuntu升级cmake版本

文章目录一、下载cmake脚本二、安装一、下载cmake脚本 在编译新工程时遇到cmake版本过低的情况,到 cmake官网 下载指定cmake安装脚本: 若需下载指定版本,见上图右上角蓝框。 二、安装 # 赋予可执行权限 sudo chmod x cmake-3.31.8-linux-x8…

GMSK调制解调系统的matlab性能仿真,对比维特比解调,1bit差分解调,2bit差分解调

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 GMSK(Gaussian Minimum Shift Keying,高斯最小频移键控)是一种连续相位调制技术,基于MSK调制改进而…

SQL138 连续两次作答试卷的最大时间窗

SQL138 连续两次作答试卷的最大时间窗 问题分析 找出2021年至少有两天作答的用户计算每个用户连续两次作答的最大时间窗基于历史数据预测在这个时间窗内平均会做多少套试卷 版本1 with-- 功能​:筛选2021年至少有两天作答的用户及其作答记录-- 子查询找出2021年…

TensorFlow2 study notes[2]

文章目录tf.autodiff.ForwardAccumulatorreferencestf.autodiff.ForwardAccumulator the function can be used to achieve the Computation of Jacobian-vector products with forward-mode autodiff. primals is variables need to watch.tangents is direction vector. …

稳定币将成为新时代的重要金融工具

在数字经济加速渗透的今天,加密货币作为一种新型价值载体,正深刻改变着全球金融的运作逻辑。其中,稳定币与非稳定币构成了加密货币生态的两大支柱,二者在设计逻辑、应用场景和市场表现上呈现出显著差异。 稳定币锚定法定货币 稳定币是一类以法定货币、大宗商品或其他资产…

Constants

本节是《Solidity by Example》的中文翻译与深入讲解,专为零基础或刚接触区块链开发的小白朋友打造。我们将通过“示例 解说 提示”的方式,带你逐步理解每一段 Solidity 代码的实际用途与背后的逻辑。 Solidity 是以太坊等智能合约平台使用的主要编程语…

五镜头倾斜摄影相机的技术优势与应用原理

倾斜摄影技术作为三维实景建模的核心手段,其硬件设计直接影响数据采集效率与模型质量。在众多镜头配置方案中,五镜头结构(下视前、后、左、右四个倾斜视角)已成为行业主流选择。这一设计并非偶然,而是基于严苛的技术需…

ThinkSound V2版 - 一键给无声视频配音,为AI视频生成匹配音效 支持50系显卡 一键整合包下载

ThinkSound 是阿里通义实验室开源的首个音频生成模型,它能够让AI像专业“音效师”一样,根据视频内容生成高度逼真、与视觉内容完美契合的音频。 ThinkSound 可直接应用于影视后期制作,为AI生成的视频自动匹配精准的环境噪音与爆炸声效&#x…

如何从0开始构建自己的第一个AI应用?(Prompt工程、Agent自定义、Tuning)

一、前言 从0开始基于自定义Agent构建AI应用,涉及从创建智能Agent到使用、测试及优化提示词等一系列步骤。前置:什么是LLM、Prompt、Mcp和Agent? 二、步骤一:规划和设计AI应用 在创建AI应用之前,你需要明确应用的目标…

Java ThreadLocal详解:从原理到实践

Java ThreadLocal详解:从原理到实践(图解极简示例) 一、什么是ThreadLocal?——线程的"专属储物柜" ThreadLocal 是 Java 提供的线程本地存储机制,通俗来说,它能为每个线程创建一个独立的变量副本…

如何在 Visual Studio Code 中使用 Cursor AI

在当今快节奏的开发环境中,像 Cursor AI 这样的 AI 工具正在彻底改变开发人员编写和管理代码的方式。Cursor AI 通过提供智能代码建议、自然语言编辑和多文件项目更新功能,增强了“ Visual Studio Code (VS Code )”的功能,所有这些功能均由 …

阿里面试:服务与发现 ,该选择 CP 还是 AP?为什么?

说在前面 最近有小伙伴拿到了一线互联网企业如微博、阿里、汽车之家、极兔、有赞、希音、百度、网易、滴滴的面试资格,遇到一几个很重要的面试题: 服务注册发现,该选 AP 还是 CP? 为什么? 最近有小伙伴在面 阿里。 小伙…

模拟实现Vue2-Vue3响应式更新

Vue2作为 MVVM框架/* Vue2 通过 Object.defineProperty 监听、挟持数据,实现响应式 并通过 Dep(依赖收集器) 和 Watcher 实现依赖收集,通知视图更新 *//* 但是 Vue2用Object.defineProperty 无法监听新增属性、无法监听数组索引变…

一文理解锂电池充电、过放修复与电量测量:从原理到实战

一、为什么要看这篇文章? 手机电量突然从20%跳到0%?电动车冬天续航腰斩?18650过放后还能救吗? 本文用一张思维导图一张表格一段口诀,一次性讲透锂电池的充电四阶段、过放修复全方案、电量测量底层原理,并给…

【爬虫】01 - 爬虫原理及其入门

爬虫01 - 爬虫原理及其入门 文章目录爬虫01 - 爬虫原理及其入门一:爬虫原理1:爬虫的优势‌2:爬虫的核心库3:经典举例4:合规问题一:爬虫原理 学习爬虫之前前置知识需要了解这些: 我的HTTP介绍, 了…

React对于流式数据和非流式数据的处理和优化

React 在处理流式数据和非流式数据时,可以借助其组件模型、状态管理以及 React 18 引入的并发特性来实现高效的数据处理与渲染优化。 文章目录一、流式数据(Streaming Data)1. 定义2. 常见来源3. 处理方式使用 useState / useReducer 管理状态…

3、Vue 中使用 Cesium 实现可拖拽点标记及坐标实时显示功能

在 Cesium 地图开发中,实现点标记的拖拽交互并实时显示坐标信息是一个常见的需求。本文将详细介绍如何在 Vue 框架中使用 Cesium 的 Primitive 方式创建点标记,并实现拖拽功能及坐标提示框跟随效果。先看效果图功能实现概述我们将实现的功能包括&#xf…