“自我笔记”一些有用网址的保存

Python的学习

AI机器视觉

机器学习

好玩的AI

模型量化

Android Studio的使用

分布式框架

嵌入式和物联网

操作系统知识

零碎

一些零碎语句

模型优化包括各种技术,尤其是模型削减、量化以及高效模型设计。高效模型设计包括神经架构搜索(NAS)和手工设计方法。模型削减已经成为工业应用中优化模型的主要策略。作为主要加速方法,模型削减关注于有意去除冗余权重,同时保持准确性。这个过程通常涉及三个连续步骤:

  1. 初始基准模型训练;
  2. 后续削减不太重要的权重或层通道;
  3. 最后对修剪后的模型进行微调阶段。

模型削减可以分为非结构削减和结构削减。结构削减是工业应用中模型部署的首选方法,主要是因为硬件限制。与非结构方法不同,结构削减在卷积核层中的不太重要权重以稀疏方式在每个核通道中零化,而结构削减包括通道削减和模块削减等技术。通道削减关注于在核内消除整个通道滤波器,而模块削减则涉及更大的规模,通常针对完整的模块。由于模块削减导致模型深度减少,因此也称为深度削减器。CNN模型的设计演变导致了更高效模型的开发。例如,MobileNetV2采用许多深度卷积层和反转残差模块堆叠,实现了高性能,同时最小化了参数和浮点运算。ConvNeXtV1利用大核技巧并堆叠反转残差模块,实习拿了显著的效率。传统的按通道削减方法面临深度卷积层的挑战,因为稀疏计算和更少的参数。此外,现在模型平台更喜欢更高的并行计算,如GPU,按通道削减方法会使高效模型更薄、更稀疏,导致低硬件利用率,从而降低可实现的硬件效率。重参化技术的局限性:1.直接通过移除激活层微调子网可能会损害基准模型权重的完整性,从而阻碍获得高性能。2.无法剪枝具有某些规范化层(如LayerNorm或GroupNorm层)的模型,因为重参化技术无法将不是BatchNorm层的规范化层合并到相邻卷积层或全连接层。3.这些方法无法应用于视觉Transformer模型进行优化,因为存在LayerNorm层。


模型量化(Model Quantization,也叫网络量化)过程分为两部分:将模型的单精度参数(一般FP32-32位浮点参数)转化为低精度参数(一般INT8-8位定点参数),以及模型推理过中的浮点运算转化为定点运算,这个需要推理框架支持。

零碎论文

《LoRA: Low-Rank Adaptation of Large Language Models》

机器学习论文共读:《LoRA: Low-Rank Adaptation of Large Language Models》

《Revisiting small batch training for deep neural networks》

论文地址:arxiv.org/pdf/1804.07612.pdf

讨论的条件是保证每个样本平均SGD权重更新期望值保持恒定


这个平均期望值的计算如下,意味着随着batch size(m)的增加,为了保证期望值的恒定,学习率η也需要不断线性地增长。
在这里插入图片描述


上面是从均值的角度,下面从梯度总和的角度来分析,如果用θk处的梯度总和来更新参数,那么SGD的参数更新规则可以表示为:

在这里插入图片描述

对于这种方法,如果batch size增加了,只需要保证学习率 η ~ \widetilde{\eta} η 固定就能满足每个样本平均SGD权重更新恒定。

假设batch size为m的时候,公式(5)的第k+n步的权重可以表示为:

在这里插入图片描述

增大batch size为m+n,第k+1步的权重可以表示为:

在这里插入图片描述

对比(7)(8)可以发现,在学习率固定的情况下,大批量训练基本上可以被看成是小批量训练的近似值,它只是在梯度更替时增加了一些并行性。


如果使用梯度平均值来讨论,给出的结论是:用更大的batch size可以提供更“准确”的梯度估计,并允许使用更大的学习率。但使用梯度总和来进行讨论会发现,结论并非如此。实际上,1)使用较小的batch size可以用最新权重梯度,2)在小batch size的情况下SGD更新时的方差都较低,因此我们可以使用更高的基本学习速率。这两个因素都可能带来更快、更稳健的收敛效果。

在这里插入图片描述

对于非常小的批次,批次均值和方差的估计可能非常嘈杂,这可能会限制 BN 在减少协变量偏移方面的有效性。此外,如果批量大小非常小,训练期间使用的批量均值和方差的估计与测试所用均值和方差相差会较大。


做了一系列的对比实验,实验中所有的训练都是基于标准SGD优化。

在这里插入图片描述
在这里插入图片描述

各个模型在CIFAR-10的实验结论,m表示batch size:

1)在m小于等于32的时候,各模型的性能都还能维持在较高水平;

2)对于没有BN的模型,m=2时性能最佳;

3)对于有BN的模型,m=4和8时效果更好。


总结:

对于较大的批量大小,能保持稳定训练的可选学习率的范围变小,通常无法使用到最佳学习率,原因是权重更新的方差会随批量大小线性增加。在大规模训练中,对于给定的计算资源,使用小批量可以更好地保证模型的通用性和训练稳定性。在大多数情况下,batch size小于等于32时模型的性能较优,当batch size等于2或4时,模型性能可能会达到最优。

如果要使用batch进行归一化处理,或者使用的是大型数据集,这时我们也可以用较大的batch,比如32或64。但是需要注意的一点是,为了保证训练效率,这些数据最好是分布式处理的,比如最好的方法是在多个处理器上分别做BN和随机梯度优化,这样做的优势是对于单个处理器而言,这其实还是在做小批量优化。而且根据文章的实验,BN的最优batch size通常比SGD的还要小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值