【CNN轻量化】ParameterNet: Parameters Are All You Need 参数就是你所需要的

论文链接:http://arxiv.org/abs/2306.14525
代码链接:https://github.com/huawei-noah/Efficient-AI-Backbones

一、摘要

  现有的低FLOPs模型(轻量化模型)无法从大规模预训练中受益。本文旨在增加大规模视觉预训练模型中的参数数量,同时最大限度地减少FLOPs的增加。利用动态卷积将额外的参数引入网络中,而仅仅带来了FLOPs的轻微增加。ParameterNet方法使得低FLOPs网络能够充分利用大规模视觉预训练。此外,将ParameterNet概念扩展到语言领域,以提高推理结果的同时保持推理速度。在大规模ImageNet-22K上的实验证明了我们ParameterNet方案的优越性。例如,ParameterNet-600M在ImageNet上的准确率比广泛使用的Swin Transformer更高(81.6% vs. 80.9%),而且FLOPs要低得多(0.6G vs. 4.5G)。在语言领域,经ParameterNet增强的LLaMA-1B比原始LLaMA准确率高出2%。

二、关键问题与创新点

1、关键问题

  如下图所示,随着FLOPs的逐渐增加,准确性增加,无论是在ImageNet-1K还是ImageNet-22K的预训练中。对于具有高FLOPs(>10G)的模型,在ImageNet-22K上的预训练优于在ImageNet-1K上的预训练。然而,对于具有较低FLOPs(<4G)的模型,更多数据的预训练并不会提高性能。如图中在ImageNet-22K上预训练的FLOPs小于2G的EfficientNetV2模型无法比在ImageNet-1K上预训练的模型表现更好。

  通过对Transformer和CNN网络的观察,得出了一个经验性结论:低FLOPs模型无法从大规模预训练中受益,这被称为低FLOPs陷阱。

fig2
fig3

2、主要贡献

  • 低FLOPs陷阱,即高FLOPs模型的性能随着更多训练数据而增加,但低FLOPs模型的性能不增加。

  • 提出参数比FLOPs对于大规模视觉预训练更为重要,并进一步引入ParameterNet方案,通过增加更多参数而保持低FLOPs。

  • 提出的ParameterNet方案可以克服低FLOPs陷阱,实验结果表明,在视觉和语言任务中,ParameterNet在大规模预训练中取得了显著更高的性能。

二、理论

  当FLOPs高于5G FLOPs时,基于Transformer的模型在计算成本相似的情况下始终优于CNN。至于更小的模型,特别是在600M FLOPs内的移动级模型,具有局部性和平移等变性的CNN仍然占主导地位。文中选择CNN作为基础模型GhostNet用于视觉任务的高效主干网络,设计原则是在保持低FLOPs的同时增加更多参数。

  引入了参数增强函数,旨在引入更多参数:
W ′ = f ( W ) W^{′} = f(W) W=f(W),
函数 f f f应满足两个基本规则:1)不需要太多的计算成本,2)大幅增加模型的容量或可训练参数。例如动态卷积和重新参数化卷积

1、动态卷积

  文中主要考虑高效的动态卷积(图4中的一种多专家MoE层),它在几乎不增加额外FLOPs的情况下多倍增加了参数数量。
  具有 M M M个动态专家的动态卷积可以写成:
Y = X ∗ W ′ , W ′ = ∑ i = 1 M = α i W i , Y = X * W^{′},W^{′} = \sum_{i=1}^{M} = \alpha_{i} W_{i}, Y=XWW=i=1M=αiWi,
其中 W i ∈ R C o u t × C i n × H × W W_{i} \in R^{Cout×Cin×H×W} WiRCout×Cin×H×W是第i个卷积权重张量, α i \alpha_{i} αi是相应的动态系数。系数 α i \alpha_{i} αi是根据不同的输入样本动态生成的,一种典型的方式是基于输入使用MLP模块生成:
α = s o f t m a x ( M L P ( P o o l ( X ) ) ) , \alpha = softmax(MLP(Pool(X))), α=softmax(MLP(Pool(X))),
其中 α ∈ R M \alpha \in R^{M} αRM。方程式4中的系数生成与原始卷积层相比只带来了可忽略的FLOPs。通过这种方式,使用动态卷积实现的ParameterNet可以大幅增加更多参数,同时最小化FLOPs的增加。
fig4

  对于标准卷积层,参数数量为 C o u t ⋅ C i n ⋅ K ⋅ K C_{out} \cdot C_{in} \cdot K \cdot K CoutCinKK,FLOPs数量为 H ′ ⋅ W ′ ⋅ C o u t ⋅ C i n ⋅ K ⋅ K H^{′} \cdot W^{′} \cdot C_{out} \cdot C_{in} \cdot K \cdot K HWCoutCinKK。动态卷积包括系数生成模块、动态权重融合和卷积过程。具有 C i n C_{in} Cin个隐藏维度的系数生成模块需要 C i n 2 + C i n M C^{2}_{in} + C_{in} M Cin2+CinM个参数和 C i n 2 + C i n M C^{2}_{in} + C_{in} M Cin2+CinM个FLOPs。动态权重融合是无参数的,具有 M ⋅ C o u t ⋅ C i n ⋅ K ⋅ K M \cdot C_{out} \cdot C_{in} \cdot K \cdot K MCoutCinKK个FLOPs。因此,动态卷积的总参数和FLOPs数量分别为
C i n 2 + C i n M + M ⋅ C o u t ⋅ C i n ⋅ K ⋅ K C^{2}_{in} + C_{in} M + M \cdot C_{out} \cdot C_{in} \cdot K \cdot K Cin2+CinM+MCoutCinKK C i n 2 + C i n M + M ⋅ C o u t ⋅ C i n ⋅ K ⋅ K + H ′ ⋅ W ′ ⋅ C o u t ⋅ C i n ⋅ K ⋅ K C^{2}_{in} + C_{in} M + M \cdot C_{out} \cdot C_{in} \cdot K \cdot K + H^{′} \cdot W^{′} \cdot C_{out} \cdot C_{in} \cdot K \cdot K Cin2+CinM+MCoutCinKK+HWCoutCinKK

  动态卷积相对于标准卷积的参数比率为:
R p a r a m = C i n 2 + C i n M + M C o u t C i n K 2 C o u t C i n K K = C i n C o u t K 2 + M C o u t K 2 + M ≈ 1 K 2 + M . ( M ≪ C o u t K 2 , C i n ≈ C o u t R_{param} = \frac{C_{in}^{2} + C_{in}M + M C_{out} C_{in} K^{2}}{C_{out} C_{in} K K} = \frac{C_{in}}{C_{out} K^{2}} + \frac{M}{C_{out} K ^{2}} + M \approx \frac{1}{K^{2}} + M.(M ≪ C_{out} K^{2},C_{in} \approx C_{out} Rparam=CoutCinKKCin2+CinM+MCoutCinK2=CoutK2Cin+CoutK2M+MK21+M.MCoutK2CinCout
  FLOPs比率为:
R f l o p s = C i n 2 + C i n M + M C o u t C i n K 2 + H ′ W ′ C o u t C i n K 2 H ′ W ′ C o u t C i n K 2 = C i n H ′ W ′ C o u t C i n K 2 + M H ′ W ′ C o u t C i n K 2 + M H ′ W ′ + 1 ≈ 1. ( 1 < M ≪ H ′ W ′ , C i n ≈ C o u t R_{flops} = \frac{C_{in}^{2} + C_{in} M + M C_{out} C_{in} K^{2} + H^{′} W^{′} C_{out} C_{in} K^{2}}{H^{′} W^{′} C_{out} C_{in} K^{2}} = \frac{C_{in}}{H^{′} W^{′} C_{out} C_{in} K^{2}} + \frac{M}{H^{′} W^{′} C_{out} C_{in} K^{2}} + \frac{M}{H^{′} W^{′}} + 1 \approx 1.(1 < M ≪ H^{′} W^{′},C_{in} \approx C_{out} Rflops=HWCoutCinK2Cin2+CinM+MCoutCinK2+HWCoutCinK2=HWCoutCinK2Cin+HWCoutCinK2M+HWM+11.1<MHWCinCout

  因此,与标准卷积相比,动态卷积具有大约M倍的参数,而额外的FLOPs可以忽略不计。

2、将ParameterNet扩展到语言领域

  稀疏激活的专家混合(MoE)模型最初在自然语言处理领域引入,允许在保持每个标记或样本的计算负载不变的情况下大幅增加参数数量。许多后续研究深入探讨了高效的路由机制,并展示了MoE在各种大型语言模型(LLM)中的有效性,如T5[38]、NLLB[26]、LLaMA[54]和Palm[8]。在这种情况下,重点主要是低FLOPs语言模型,以验证提出的假设,即合并更多参数可以增强大规模预训练对低FLOPs模型的好处,文中按比例减少并构建一个缩减版本LLaMA-1B

  与MoE类似,获取一个标记表示 x x x,然后将其路由到从一组N个确定的专家中确定的前k个专家。路由器模块生成表示为 h ( x ) = s o f t m a x ( r o u t e r ( x ) ) h(x) = softmax(router(x)) h(x)=softmax(router(x))的逻辑值logits,通过softmax函数在该特定层上的N个可用专家之间创建一个归一化分布。然后选择前k个专家(在实验中 k = 1 k = 1 k=1)来路由标记 x x x。专家容量上的训练损失(每个专家计算的标记数量)遵循Switch Transformer[12]中的设置。

三、实验

1、数据集和设置

  采用ImageNet-22K进行大规模预训练,并使用ImageNet-1K作为正常训练数据进行比较。

  • ImageNet-22K是一个包含14,197,122张图片,属于21841个类别的大规模图像数据集。ImageNet-1K是ImageNet-22K的一个子集,包含1000个对象类别。其中包含1,281,167张训练图片和50,000张验证图片。

  • 在ImageNet-1K上训练。按照常见设置,使用AdamW优化器对模型进行300个epoch的训练,其中包括20个warm up。使用批量大小为1024。基础学习率设置为0.001,并按照余弦调度进行衰减。

  • 数据增强策略包括RandAugment和随机擦除。采用权重衰减和标签平滑进行正则化。更多细节在表1。

  在ImageNet-22K上预训练的模型有ImageNet-22K 25.6M 12.0G 80.0 , EfficientNetV2-B0 ImageNet-22K 7.1M 0.72G 77.6 , EfficientNetV2-B1 ImageNet-22K 8.1M 1.2G 79.0 , Swin-T ImageNet-22K 28M 4.5G 80.9 . GhostNet-600M模型在ImageNet-22K上进行90个epoch的预训练,其中包括5个热身epoch。批量大小为4096,基础学习率设置为0.004。其他设置基本遵循ImageNet-1K上的设置如表1。

  在ImageNet-1K上微调:在ImageNet-1K上对预训练模型进行30个epoch的微调,不包括warm up。批量大小为512,基础学习率设置为0.0005。权重衰减设置为1e-8,并关闭随机擦除以更好地适应ImageNet-1K。其他设置基本遵循ImageNet-1K上的设置,如表1所示。

table1

table2

2、ParameterNet(约300MFLOPs和约600MFLOPs)

  通过调整宽度和深度构建了基准GhostNet,其具有不同的FLOPs(约300M和约600M)。ParameterNet是通过用动态卷积替换传统卷积层构建的。默认情况下,专家数量设置为4。网络架构的详细信息可在附录中找到。结果如表2所示。仅在ImageNet-1K上训练,ParameterNet的性能优于原始GhostNet约0.4-xx的准确率。对于GhostNet,仅在ImageNet-22K上进行预训练并不能提高性能。在ImageNet-22K上预训练的ParameterNet可以比ImageNet-1K获得超过2%的改进。这表明我们的ParameterNet具有更多参数但类似FLOPs的优势,可以从大规模视觉预训练中受益。

  与SOTA的比较。文中将ParameterNet与其他在ImageNet-22K或更大数据集(如JFT-300M 和IG-1B-Targeted)上预训练的代表模型进行比较。从表3的结果可以看出,ParameterNet在拥有更少FLOPs的情况下胜过其他在大规模数据集上预训练的模型。例如,ParameterNet-600M实现了81.6%的top-1准确率,其FLOPs约为ResNet50或Swin-T的1/7。

  推理速度:我们评估了ParameterNet和其他代表模型的推理速度以进行比较。我们在Intel Xeon上使用ONNX工具包运行模型,如图5所示。

table3
fig5

3、消融实验

(1) 动态专家的数量。

  动态卷积的动态专家数量是动态卷积的一个重要超参数,直接控制参数和FLOPs。如表4所示,更多的专家将大幅增加参数数量,稍微影响FLOPs。更多专家的性能优于较少专家。我们默认使用4个专家以进行效率权衡。

请添加图片描述

(2) 动态卷积与重新参数化卷积。

  正如之前讨论的,有各种方法来构建ParameterNet,例如动态卷积和重新参数化卷积。比较这两种方法,其中动态卷积有4个专家,重新参数化卷积在原始卷积基础上增加了3个并行分支。从表6的结果来看,尽管重新参数化卷积增加了训练参数,但其参数和FLOPs在推断时保持不变,即模型容量没有增加,ImageNet-22K预训练性能也没有提高。

table6

(3) 其他网络架构的ParameterNet

  除了CNN,将ParameterNet扩展到Transformer架构(即Swin Transformer)。为构建一个较小版本,将Swin-T的token维度设置为24,得到大约300M FLOPs的Swin-300M。从表5的结果来看,原始的Swin-300M在对ImageNet-22K进行预训练时有显著的准确率下降。我们的策略可以从ImageNet-22K预训练中获得+2.2%的性能提升。

table5

4、语言领域

  训练数据集是由几个来源混合而成,包括C4 [39]、维基百科 [54] 和 ArXiv [31]。这些数据都是公开可用的,直接混合它们而没有进行任何质量过滤。总体而言,训练数据集的网络架构。通过按比例减少原始 LLaMA [54] 的维度和层数来构建基准 LLaMA-1B,如表8所示。具体来说,隐藏大小、中间大小、头数和层数分别为2048、8191、16和12。分词器与 LLaMA 相同。结果和分析。按照之前的工作[2],在几个常识推理任务上呈现相应的训练损失和零样本结果,其中模型对提出的答案进行排名。FLOPs 是在输出响应长度设置为1的情况下计算的。路由器模块采用线性层实现,输入通道为隐藏大小,输出通道等于专家数量。如表7所示,我们观察到更多的专家为基线模型带来了额外的参数,从而显著提高了下游性能。例如,在上投影层上具有8个专家的 LLaMA-1B 平均获得了2.37% 的准确率提升。此外,增加的参数有助于减少训练损失,表明通过将 ParameterNet 引入语言模型,可以增强对输入数据的理解。此外,实验结果表明,LLaMA 的 FFN 中的三个线性投影具有类似的效果。

table7
table8

四、总结

  ParameterNet是一种通用方法,有各种实现方法,如动态卷积和重新参数化卷积。在实验中使用动态卷积来构建ParameterNet模型。ParameterNet能够克服低FLOPs的缺陷,并从大规模视觉预训练中获益良多。在ImageNet-22K大规模数据集上的实验证明了所提出的ParameterNet的有效性,文中还验证了我们的方法在语言领域的泛化能力。

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

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

相关文章

跟着cherno手搓游戏引擎【29】Batch简单合批

思路&#xff1a; CPU和GPU都开辟同样大小的一大块内存&#xff08;为了存储顶点信息&#xff09; 索引在程序运行时生成对应规则后绑定到索引缓冲中 动态生成顶点信息&#xff08;现在改成Drawquad只是确定图形顶点的位置&#xff09; 然后在Endscene&#xff0c;将CPU的动…

蓝桥杯之简单数论冲刺

文章目录 取模快速幂 取模 这道题目有两个注意点&#xff1a; 1.当你的取模之后刚好等于0的话&#xff0c;后面就不用进行后面的计算 2.if sum detail[i] > q: 这个语句的等号也很重要 import os import sys# 请在此输入您的代码a,b,n map(int,input().split())week a*5 …

docker常用命令大全

服务相关命令​ 启动 docker 服务​ systemctl start docker 停止 docker 服务​ systemctl stop docker 重启 docker 服务​ systemctl restart docker 查看 docker 服务状态​ systemctl status docker 设置开机启动 docker 服务​ systemctl enable docker 镜像相…

初始Java篇(JavaSE基础语法)(2)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 逻辑控制 顺序结构 分支结构 if语句 switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出 输出到控制台 从键盘输入 …

详解隐私计算框架及技术要点

隐语架构一览 为什么这样分层&#xff1f; 完备性透明性开放性 隐语架构解析 产品层 算法层 隐语PSI特点 PIR Data Analysis SCQL 核心特性 联邦学习 特色 计算层 SPU 核心 HEU 同态加密设备 TEEU 密码原语 资源层 kuscia 互联互通 跨域管控 最后

多家中国车企宣布将搭载英伟达最新车载芯片;Altman 曝全新 GPT-5 细节丨 RTE 开发者日报 Vol.168

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

Linux环境开发工具之vim

前言 上一期我们已经介绍了软件包管理器yum&#xff0c; 已经可以在linux上查找、安装、卸载软件了&#xff0c;本期我们来介绍一下文本编辑器vim。 本期内容介绍 什么是vim vim的常见的模式以及切换 vim命令模式常见的操作 vim底行模式常见的操作 解决普通用户无法执行sudo问…

鸿蒙开发实战:【文件管理】

介绍 本示例主要展示了文件管理相关的功能&#xff0c;使用[ohos.multimedia.medialibrary]、[ohos.filemanagement.userFileManager] 、[ohos.fileio] 、[ohos.file.fs]、[ohos.app.ability.contextConstant] 等接口&#xff0c;实现了增添文件、删除文件、查找指定类型文件…

WRF高精度气象模拟技术及在地学领域中的应用

随着生态文明建设和“碳中和”战略的持续推进&#xff0c;我国及全球气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域&#xff08;生态、水资源、风资源及碳中和等问题&#xff09;的主要驱动因素&#xff0c;合理认知气候变化有利于解释生态环境变化机理及过…

(56)删除每行中的最大值

文章目录 1. 每日一言2. 题目3. 解题思路4. 代码5. 结语 1. 每日一言 抱怨过去发生的一切&#xff0c;就等于丧失了力量&#xff0c;白白浪费了往事要带给我们的成长。 2. 题目 题目链接&#xff1a;删除每行中的最大值 给你一个 m x n 大小的矩阵 grid &#xff0c;由若干正…

【动态规划】算法例题

目录 一维动态规划&#xff1a; 137. 爬楼梯 ① 138. 打家劫舍 ② 139. 单词拆分 ② 140. 零钱兑换 ② 141. 最长递增子序列 ② 多维动态规划&#xff1a; 142. 三角形最小路径和 ② 143. 最小路径和 ② 144. 不同路径 II ② 145. 最长回文子串 ② 146. 交错字符串…

SpringCloud-深度理解ElasticSearch

一、Elasticsearch概述 1、Elasticsearch介绍 Elasticsearch&#xff08;简称ES&#xff09;是一个开源的分布式搜索和分析引擎&#xff0c;构建在Apache Lucene基础上。它提供了一个强大而灵活的工具&#xff0c;用于全文搜索、结构化搜索、分析以及数据可视化。ES最初设计用…

​selenium+python做web端自动化测试框架与实例详解教程

最近受到万点暴击&#xff0c;由于公司业务出现问题&#xff0c;工作任务没那么繁重&#xff0c;有时间摸索seleniumpython自动化测试&#xff0c;结合网上查到的资料自己编写出适合web自动化测试的框架&#xff0c;由于本人也是刚刚开始学习python&#xff0c;这套自动化框架目…

【NLP笔记】RNN总结

文章目录 经典RNN单向RNN双向RNNDeep RNNRNN特性总结 变体RNNLSTMGRU 参考及转载内容&#xff1a; 循环神经网络&#xff08;RNN&#xff09;深度学习05-RNN循环神经网络完全理解RNN&#xff08;循环神经网络&#xff09; 传统的CNN&#xff08;Covolutional Neural Network&am…

Redis6.0多线程的疑惑解答

1.Redis6.0之前的版本真的是单线程吗&#xff1f; Redis在处理客户端的请求是&#xff0c;包括获取(socket读)、解析、执行、内容返回(socket 写)等都有一个 顺序串行的主线程处理&#xff0c;这就是所谓的"单线程"。但如果严格来讲并不是单线程&#xff0c;除了主线…

浏览量这么低,还要不要继续坚持?

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 曾经在一个群里聊天&#xff0c;有群友看到我两位数的浏览量&#xff0c;说到&#xff1a;浏览量这么低还坚持什么&#xff1f; 浏览量低是事实&#xff0c;大多数是十几二十的&#xff0c;上百的都是少数&#xff0c…

python社区垃圾分类管理平台的设计与实现flask-django-php-nodejs

近些年来&#xff0c;随着科技的飞速发展&#xff0c;互联网的普及逐渐延伸到各行各业中&#xff0c;给人们生活带来了十分的便利&#xff0c;社区垃圾分类管理平台利用计算机网络实现信息化管理&#xff0c;使整个社区垃圾分类管理的发展和服务水平有显著提升。 语言&#xf…

Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(一)

概览 Swift 语言给我们的印象是&#xff1a;简洁、现代化和可以“心安神泰”的完全信赖。不过&#xff0c;在一些特殊情况下我们唯有进入 Swift 底层的动态世界方能真正地“随遇而安”。 保安局“刘局长”曾语重心长的教导过我们&#xff1a;“非常时期&#xff0c;用非常方法…

有了std::thread,为什么还需要引入std::jthread?

C进阶专栏&#xff1a;http://t.csdnimg.cn/HGkeZ 目录 1.前言 2.std::is_invocable_v 3.std::jthread 3.1.构造函数 3.2.std::jthread无需join/detach使用实例 3.3.std::jthread处理外部请求中断实 3.4.处理中断请求示例代码 4.特性 5.总结 1.前言 C11以来提供了C原…

Redis实现高可用方案

文章目录 前言一、主从模式1.1 复制流程1.2 优缺点 二、哨兵模式2.1 介绍2.2 哨兵的工作模式 三、集群模式3.1 Cluster集群节点的通讯3.2 Hash Slot插槽算法3.3 Redis Cluster集群3.4 故障转移 前言 如果单机部署Redis服务的话&#xff0c;一旦Reids宕机&#xff0c;那么整个服…