Re-parameterizing Your Optimizers rather than Architectures
Re-parameterizing Your Optimizers rather than Architectures
paper:https://arxiv.org/abs/2205.15242
摘要
神经网络设计良好反应了纳入模型的先验知识,尽管不同的模型考虑了不同的先验,但是仍旧习惯于使用模型无关优化器SGD对其训练。在本文中提出了一种新的范式,将特定于模型的先验知识合并到优化器中训练模型。提出了一种新的方法,通过一组特定于模型的超参数修改梯度来添加先验知识,称为梯度重参数化,优化器称为重优化器。
介绍
神经网络的结构设计是将先验知识整合到模型中,如ResNet的残差加法。高质量的结构先验对神经网络至关重要。另一方面优化方法也发挥着重要作用,可分为三类:
- 一阶方法,例如SGD及其变体
- 高阶方法,利用曲率信息,但面临计算的挑战
- 对于目标函数的导数可能不存在的情况使用无导数方法
我们注意到:
- 虽然高阶优化器以不同的方式改进了训练过程,但他们没有特定于模型的先验知识
- 虽然我们通过设计结构不断将我们的理解加入模型,但我们使用SGD等模型无关优化器对其进行训练
**一种新的范式。**我们提出了通用结构+特定优化器。通用模型意味着模型应该尽可能少地具有结构先验知识,特定优化器指优化器通过以特定于模型的方式更改训练动态来实现更好的性能。
**基于SGD的优化器方法。**本文主要研究深度神经网络,因此我们只考虑基于SGD的优化器,但思想可推广到高阶或无导数方法,由于SGD核心使用梯度更新参数,建议在更新可训练参数前通过根据一组特定于模型的超参数修改梯度,使优化器模型特定,为了获得这些超参数,提出了一种超搜索方法。
我们希望通过与RepVGG及其关键方法结构重参数化的比较,突出本文工作的新颖性,因此采用RepVGG作为基线,但方法不同
差异总结如下
- RepVGG向具有精心设计结构的模型中添加了优先级,并使用通用优化器,但RepOptVGG向优化器中添加了优先级
- 与RepOptVGG相比,虽然转换后的RepVGG具有相同的推理时间,但训练时间RepVGG要复杂得多,需要花费更多的时间和内存进行训练
- 可以使用自定义优化器实现等效的训练效果,在训练过程中产生一样的输出
该范式可以推广到其他模型和优化方法。
RepOptVGG也是一种良好的基础模型,具有高效推理和训练时间的特点
- 内存消耗低,并行度高
- 训练时对计算资源有限、希望快速交付或快速迭代模型的应用场景
- 除了训练效率外,重优化器还克服了结构重参数化的量化难题
相关工作
RepVGG采用了一种名为结构重参数化的方法,将训练时的卷积操作进行重新组合提高推理时的速度,显著缺点是额外的训练成本无法避免。
RepOptVGG梯度重参数化扩展和深化了结构重参数化,没有改变可训练参数的形式,也没有引入额外的正向、反向计算。
RepOptimizers
重优化器通过改变原始的训练动态来工作,采用了三个步骤:
- 定义一个先验知识和想象一个复杂结构来反应知识
- 研究了如何用一个简单的目标结构来实现等价的训练动量,该目标结构的梯度根据一些超参数进行修改
- 获得超参数来构建重优化器
重优化器的设计取决于给定的模型和先验知识。
将知识融入结构
重优化的核心是我们希望使用优化器的先验知识。一般使用多个分支的输入和输出相加,以不同尺度进行加权,从而提高模型的性能。我们希望改进VGG系列的模型,选择RepVGG的结构设计。
将结构先验转化为等效的重优化
之前的先验知识每个分支仅包含一个具有可选常数尺度的线性可训练算子,只要适当设置尺度特征来进行融合,模型的性能仍会提高,我们将这种线性模块称为常数尺度线性假加法(CSLA)。
可以使用一个操作来替换CSLA模块,并通过将梯度乘以常数尺度当初的掩码来实现等效的训练动量,意味着如果使用相同的训练数据,在训练迭代之后产生的输出是相等的。我们将此类掩码称为梯度掩码。
展示两个卷积和两个常数尺度作为尺度因子的结论:
设αA,αB为两个常数标量,W(A),W(B)为两个形状相同的conv核,X和Y为输入和输出,∗ 表示卷积,CSLA块的计算流程表示为YCSLA=αA(X∗ W(A))+αB(X∗ W(B))。
对于GR,我们直接训练W0参数化的目标结构,以便YGR=X∗ W’,设i为训练迭代次数,我们可以确保Y(i)CSLA=Y(i)GR,同时需要根据两条规则:
- 初始化规则:W0应初始化为W0(0)← αAW(A)(0)+αBW(B)(0)。换句话说,GR对应物应与CSLA对应物一样使用等效参数(可通过线性轻松获得)初始化,以使其初始输出相同。
- 迭代规则:当使用常规SGD更新规则更新CSLA对应项时,GR对应项的梯度应乘以(α2A+α2B)。形式上,让L为目标函数,λ为学习率,我们应该更新W0。
当CSLA=GR时,我们可以通过首先设计CSLA结构来设计和描述再优化器的行为。在RepOptVGG的情况下,CSLA结构是通过简单地将RepVGG块中3×3和1×1层之后的BN层替换为恒定的按信道缩放,将标识分支中的BN替换为可训练的按信道缩放(因为CSLA分支没有超过一个线性可训练运算符),如图2所示。
在这种稍微复杂一些的情况下,卷积具有不同的核大小,然后是通道方向的常数尺度,梯度掩码将是张量,条目应分别使用相应位置上的尺度进行计算。我们给出了与这种CSLA块相对应的梯度掩模的公式,该公式将用于训练单个3×3转换。设C为通道数,s,t∈ RC是3×3和1×1层之后的恒定通道尺度,梯度掩模MC×C×3×3由:
直观地说,p=2和q=2意味着3×3内核的中心点与1×1分支相关(就像RepVGG块将1×1 conv合并到3×3内核的中心点一样)。由于可训练的通道方向缩放可以被视为“深度”1×1 conv,然后是一个恒定的缩放因子1,因此我们在“对角线”位置向渐变遮罩添加1(如果输出形状与输入形状不匹配,CSLA块将没有这样的快捷方式,因此我们只需忽略此项)。
备注:与RepVGG结构重参数化形式相比,CSLA无需等待过长的训练时间,也可以通过常见的结构重参数技术产生相同推理结果。
通过超搜索获取重优化器的超参数
作为重优化器的超参数,梯度掩模会影响性能。所以提出了一种将优化器的超参数与辅助模型和搜索可训练参数相关联的新方法,即超搜索(HS)。
具体来说就是通过可训练的尺度替换重优化器对应的CSLA模型的中的常数来构建辅助超搜索模型,并在一个小的搜索数据集上进行训练。在搜索数据集上进行训练后,可训练尺度的最终值被当做CSLA模型中的预期常数,正是我们构建重优化器梯度掩码所需的。
带重优化器训练
在超搜索之后,使用到的常量尺度存储在每个操作符构建重优化器的梯度掩模。在训练在每次训练计算之后将梯度掩码元素乘以相应操作符的梯度。
为了使用RepOptimizer开始训练,我们根据搜索到的超参数重新初始化模型参数。
实验
ImagenNet分类的RepOptimers
实验各阶段层数和通道数如表1所示
有如下观察结果:
- RepOptVGG消耗的内存更少,训练更快;RepOptVGG-B1使用各自的maxBS训练速度为RepVGG-B1的1.7倍
- 随着批量增大,每个模型的性能都有明显提高(有提高嘛?)
- RepOptVGG的准确性与RepVGG非常接近,表明在训练效率和准确性之间有一个明显更好的权衡
消融实验
消融实验比较重优化器不改变初始化或不改变梯度,都会使性能降低,因为训练动量不再等同于训练CSLA模型,同时我们将常量比例更改为1)所有为1;2)与HS模型中初始值相同;3)通过每个层所有通道的比例值获取的值。表明重优化器每个通道的不同训练动态不同尺度决定了重要的模型特定知识。
迁移实验:重优化器是特定于模型的但是数据集是不可知的
1)在目标数据集上搜索的重优化器超参数不会比在不同数据集上获得结果更好
2)对不同的超参数,重优化器在目标数据集上提供类似的结果,表明优化器是数据集不可知的
3)RepOptVGG表现优于VGG结束为数据集的挑战性
搜索数据集上的性能不能反映目标数据集的性能,证明搜索的常数是特定于模型的,因此重优化是特定与模型的。
在COCO数据目标检测任务和Cityscapes分割任务中RepOptVGG的性能仍与RepVGG相当。
易于量化的重优化器
结论和局限性
本文提出了一种将模型的先验转换为优化器的新范式,并提出了一种通过梯度重参数化实现的方法。虽然结构重参数化和重优化是数学等效的,但是更复杂和一般的情况,例如分支中存在BN层或多个顺序线性可训练算子,不能用梯度重参数化代替。
Re-parameterizing Your Optimizers rather than Architectures相关推荐
- 通用目标检测开源框架YOLOv6在美团的量化部署实战
基于美团目标检测模型开源框架 YOLOv6,本文介绍了一种通用的量化部署方案,在保持精度的同时大幅提升了检测的速度,为通用检测的工业化部署探索出一条可行之路,希望能给大家带来一些启发或者帮助. 1. ...
- 人工智能 | ShowMeAI资讯日报 #2022.06.30
ShowMeAI日报系列全新升级!覆盖AI人工智能 工具&框架 | 项目&代码 | 博文&分享 | 数据&资源 | 研究&论文 等方向.点击查看 历史文章列表, ...
- tf.keras.optimizers.Adam 优化器 示例
tf.keras.optimizers.Adam 优化器 示例 tf.keras.optimizers.Adam(learning_rate=0.001, # 学习率 默认 0.001beta_1=0 ...
- [转载]xcode5时代如何设置Architectures和Valid Architectures
2019独角兽企业重金招聘Python工程师标准>>> xcode5时代如何设置Architectures和Valid Architectures 目前ios的指令集有以下几种: 1 ...
- win nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are depr
win nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are depr nvcc -arch=sm_35 cu ...
- Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性
转自http://www.tuicool.com/articles/aeiaUr Architectures 这代表,在这个项目里你想要Xcode编译的目标设备列表. Valid Architec ...
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)
问题: No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv ...
- 优化器 - tf.keras.optimizers.SGD()【TensorFlow2入门手册】
函数原型 tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.0, nesterov=False, name='SGD'
- CV:翻译并解读2019《A Survey of the Recent Architectures of Deep Convolutional Neural Networks》第一章~第三章
CV:翻译并解读2019<A Survey of the Recent Architectures of Deep Convolutional Neural Networks>第一章~第三 ...
- No Architectures to Compile for (ONLY_ACTIVE_ARCH=
摘要 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7, VA 运行报错 出现的原因:armv7s是应用 ...
最新文章
- 趣学python3(32)-enumerate,zip
- 返回多维数组中某一维的最大值
- 计算机用户组连接打印机,在组策略中使用脚本为域用户添加网络打印机
- 取代安卓梦碎!鸿蒙系统不用于手机
- 让 Android WebView 支持文件下载的三种解决方案
- Java解码aac,Android MediaCodec解码AAC,AudioTrack播放PCM音频
- 渗透测试工程师面试题大全(二)
- 万用表——最详细使用教程
- 基于SSH的房屋租赁系统的设计与实现
- 共享洗车机无人值守是怎样运营的?
- 新版方正教务系统爬虫
- 2021最新MySQL数据库面试题
- 【游戏开发实战】(完结)使用Unity制作像天天酷跑一样的跑酷游戏——第七篇:游戏界面的基础UI
- JS 取Json数据中对象特定属性值
- 【人工智能】2028:AI创造了哪些工作?未来10年21个核心工作岗位 。
- 林语堂:我生之初尚无为
- 组合导航原理剖析(二):惯性导航方法与应用综述
- VIVADO 设计流程介绍
- java开发oa系统的目的_JAVA开发的OA系统价值体现
- 程序员入门消遣看看(一)