当前位置: 首页 > news >正文

AI模型压缩-详解

🍋🍋AI学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


模型压缩的四种主流技术

Pruning 剪枝

剪枝是一种减少深度神经网络参数数量的强大技术。在 深度神经网络中,许多参数是冗余的,因为它们在训练期间贡献不大。因此,在训练之后,可以从网络中删除这些参数,而对准确性的影响很小。

Quantization 量化

在 深度神经网络模型 中,权重存储为 32 位浮点数,即fp32。量化通过减少每个权重所需的位数来压缩原始网络。例如,权重可以量化为 fp16 位、int8 位甚至 int4 位。通过减少使用的位数,可以显著减小 DNN 的大小,且加速推理速度。

Knowledge distillation 知识蒸馏

在知识蒸馏中,在大型数据集上训练大型复杂模型。当这个大模型可以泛化并进行推理时,使其知识转移到较小的网络。较大的模型称为教师模型,较小的网络称为学生网络。

Low-rank factorization 低秩因式分解:

低秩因式分解通过采用矩阵分解来识别深度神经网络的冗余参数。当需要减小模型大小时,低秩因式分解技术通过将大型矩阵分解为较小的矩阵来提供帮助。

一、量化

实际部署的时候需要一些模型加速的方法,每种框架除了fp32精度外,都支持了int8的精度,而量化到int8常常可以使我们的模型更小更快,所以在部署端很受欢迎。常用的模型量化方式有动态量化、训练中量化,QAT,和训练后量化,PTQ。

  • 通俗的理解, 就是将模型的参数精度进行降低操作, 用更少的比特位(torch.qint8)代替较多的比特位(torch.float32), 从而缩减模型, 并加速推断速度.

二、蒸馏

按“知识”类型分类(最常见分类)

这是最主流的分类方式,根据从教师模型中提取什么类型的知识来划分。

  1. 输出层蒸馏(Response-based Distillation)

  • 知识来源:教师模型的输出层概率分布(软标签)。

  • 方法:

    • 使用高温 softmax 生成平滑的概率分布。

    • 学生模型学习模仿这个分布。

  • 损失函数:KL 散度 + 真实标签交叉熵。

  • 优点:简单、通用、易于实现。

  • 代表工作:Hinton et al. (2015) 《Distilling the Knowledge in a Neural Network》

适用场景:图像分类、文本分类等。


  1. 特征层蒸馏(Feature-based Distillation / Representation Distillation)

  • 知识来源:教师模型中间层的特征表示(如隐藏层输出、注意力矩阵)。

  • 方法:

    • 让学生模型的中间层输出逼近教师模型对应层的输出。

    • 常用 L2 损失或注意力迁移(Attention Transfer)。

  • 损失函数:MSE 或相似性度量(如余弦相似度)。

  • 优点:传递更丰富的结构化知识,适合复杂任务。

  • 代表工作:

    • FitNet:让学生网络“模仿”教师的中间层激活。

    • TinyBERT:蒸馏 Transformer 的注意力矩阵和隐藏状态。

适用场景:BERT 蒸馏、目标检测、语义分割。


  1. 关系型蒸馏(Relation-based Distillation)

  • 知识来源:样本之间的关系结构(如样本对之间的相似性、排序关系)。

  • 方法:

    • 构建样本间的关系图(如距离、相似度)。

    • 学生模型学习保持相同的样本间关系。

  • 代表工作:

    • RKD(Relational Knowledge Distillation):蒸馏样本间的距离和角度关系。

    • PKD(Probabilistic Knowledge Distillation):蒸馏样本对的排序关系。

适用场景:度量学习、小样本学习。


按训练策略分类
  1. 离线蒸馏(Offline Distillation)

  • 流程:

    1. 先训练好教师模型。

    2. 固定教师参数,用它生成软标签或特征。

    3. 训练学生模型。

  • 优点:简单、稳定。

  • 缺点:需要先训练大模型,耗资源。

  • 最常见方式


  1. 在线蒸馏(Online Distillation)

  • 流程:教师和学生同时训练,互相学习。

  • 特点:

    • 教师不一定是预训练大模型,可能是多个学生模型的集成(Self-Ensemble)。

    • 可以是同构(相同结构)或异构(不同结构)。

  • 代表工作:

    • Deep Mutual Learning:两个学生模型互相当老师。

    • Born-Again Networks:一个模型训练完后,用它蒸馏自己(自蒸馏)。

优点:无需预先训练教师,适合资源有限场景。


  1. 自蒸馏(Self-Distillation)

  • 定义同一个模型,用深层的知识指导浅层的学习。

  • 方式:

    • 用模型深层的输出或特征,作为监督信号训练浅层。

    • 或:先训练一个模型,再用它的输出蒸馏一个结构相同但更小的学生模型。

  • 优点:无需额外教师模型,提升模型自身性能。

  • 代表工作:Noisy Student Training(Google)、Teaacher-Student with same architecture.

分类维度主要方式关键特点
知识类型输出层蒸馏学习软标签
特征层蒸馏学习中间表示
关系型蒸馏学习样本间关系
训练策略离线蒸馏教师先训练好
在线蒸馏教师与学生共训练
自蒸馏

自己教自己

三、剪枝

模型剪枝的核心思想是:识别并移除神经网络中的冗余部分(如权重、神经元、通道等),从而得到一个更小、更快、更高效的模型,同时尽量保持其原始精度。

它的灵感来自于人脑的发育过程——婴儿期会产生大量神经元连接,但之后不常用的连接会被修剪掉,使得大脑网络更高效。

深度学习模型虽然强大,但存在明显的缺陷:

  1. 计算量大:参数量动辄数百万甚至数十亿,推理速度慢,难以部署在手机、嵌入式设备等资源受限的边缘设备上。

  2. 内存占用高:巨大的模型需要大量的存储空间和内存,导致部署成本高昂。

  3. 能耗高:大规模的计算意味着高能耗,对于移动设备和IoT设备来说是致命的。

  4. 过度参数化:研究发现,神经网络中存在大量冗余。很多权重对最终的输出贡献极小,移除它们对精度影响不大。

  1. 预训练:首先,你需要一个训练好的、性能良好的原始模型。剪枝通常不会从一个随机初始化的模型开始。

  2. 评估重要性并剪枝:这是最关键的一步。你需要制定一个重要性准则,来判断哪些参数是“不重要”的、可以移除的。

    • 常用准则

      • 幅度剪枝:最简单常用的方法。认为绝对值越小的权重越不重要,因为它对激活值的贡献很小。

      • 基于梯度的准则:考虑权重在训练中的梯度,梯度小的可能不重要。

      • 基于Hessian的准则:更高级的方法,考虑损失函数对权重的二阶导数,能更准确地评估重要性,但计算成本高。

  3. 微调/训练:剪枝后,模型性能必然会下降。需要通过微调让模型恢复性能。微调的过程本质上是对剩余的重要权重进行重新训练,让它们来补偿被移除的权重所承担的功能。

  4. 迭代:步骤2和3通常需要重复多次,逐步地剪枝,而不是一步到位地剪掉大部分参数。这样能保证模型性能不会崩溃。

***根据剪除的粒度大小,剪枝可以分为不同级别:

剪枝类型操作对象优点缺点
细粒度剪枝单个权重压缩率最高生成不规则稀疏模式,需要特殊硬件/库才能加速
向量/核剪枝一组权重(如卷积核的一行)结构化程度更高压缩率低于细粒度
粗粒度剪枝整个通道(通道剪枝)或整个神经元硬件友好,容易加速压缩率相对较低
随机剪枝随机选择权重进行剪枝实现简单效果通常不如结构化剪枝
结构化剪枝按结构(如通道)剪枝硬件友好,容易加速需要精心设计重要性准则

其中,通道剪枝是目前最流行的方法之一,因为它直接减少了卷积层的通道数,从而显著降低了计算量(FLOPs)和模型大小,并且可以被常规硬件高效执行。


文章转载自:

http://yNHGGZxQ.xdhcr.cn
http://DNacx2lp.xdhcr.cn
http://mlGvAc1n.xdhcr.cn
http://PArdiwX6.xdhcr.cn
http://AXgv2CUl.xdhcr.cn
http://tRudAEM0.xdhcr.cn
http://sw1HKs1N.xdhcr.cn
http://RmIIDRI6.xdhcr.cn
http://hylJ1COB.xdhcr.cn
http://KRRy0GWa.xdhcr.cn
http://6tPsd09O.xdhcr.cn
http://WYhldVgb.xdhcr.cn
http://N37NLkqU.xdhcr.cn
http://6NHwlral.xdhcr.cn
http://RbTkQujw.xdhcr.cn
http://PE92lEpf.xdhcr.cn
http://3ub6gVJL.xdhcr.cn
http://uoCQDRDM.xdhcr.cn
http://OGhLWGF3.xdhcr.cn
http://qmnqVtKl.xdhcr.cn
http://3uIRcdCn.xdhcr.cn
http://qpNHiv7f.xdhcr.cn
http://VvWPJ09N.xdhcr.cn
http://CsCgAV3I.xdhcr.cn
http://bn5Ra6Tz.xdhcr.cn
http://WkFMUKq9.xdhcr.cn
http://P5uv8QdF.xdhcr.cn
http://gSKYzh1Q.xdhcr.cn
http://v0TrAVDG.xdhcr.cn
http://sb8MSz0s.xdhcr.cn
http://www.dtcms.com/a/388678.html

相关文章:

  • 从入门到熟练掌握MySQL:聚焦增删改查操作
  • 小目标检测的尺寸极限
  • deepblog insCode 初体验[设计待更新]
  • MySQL--事务
  • PolarDB-for-PostgreSQL CDC 总结
  • web:ts的构造函数
  • 深入解析API测试:从工具使用到自动化实践
  • 某机场网络安全改造方案详细解析
  • 本地大模型编程实战(34)使用faiss实现语义检索
  • Linux:线程池
  • 告别依赖混乱:Spring IoC 容器与 DI 依赖注入入门精讲
  • Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商数据的高级策略与实践
  • 黑马JavaWeb+AI笔记 Day11 Web后端实战(登录模块)
  • Nocobase如何优雅的设置动态的自定义存储路径
  • 线性回归与 Softmax 回归:深度学习基础模型及训练逻辑解析
  • 第四章:职业初印象:打造你的个人品牌(3)
  • 大模型学习:什么是FastText模型架构
  • 【人工智能通识专栏】第十八讲:作业辅导提升
  • Python Matplotlib 布局
  • PHP自动计算文件大小,如:KB、MB、TB等
  • K近邻:从理论到实践
  • 微服务高可用流程讲解
  • 云HIS系统,HIS源码,基于云计算技术的医院信息管理平台,采用B/S架构和微服务技术开发,支持SaaS应用模式。
  • 【卷积神经网络详解与实例】10——经典CNN之GoogLeNet
  • C# 委托和事件详解,委托 vs 方法封装解析
  • MariaDB源码编译安装
  • 多智能体编排之王:深度解析微软Semantic Kernel的AgentOrchestration架构革命
  • AI工具推荐之ezremove.ai
  • 关于Address Editor中修改基地址和地址空间的指南
  • 【Linux 系统探幽:从入门到内核・系统编程开篇】基础指令与权限精讲,筑牢系统开发根基