找回密码
 立即注册
首页 业界区 科技 轻量化网络中的知识蒸馏技术

轻量化网络中的知识蒸馏技术

全阳霁 昨天 13:15

 1、轻量化网络

  轻量化网络是一类计算复杂度低、参数量小、内存占用少的神经网络模型,其核心目标是在保证模型性能(如精度、速度)的前提下,降低模型的计算和存储开销,使其能高效部署在移动端、嵌入式设备、边缘计算节点等资源受限的硬件平台上。与传统大型模型相比,轻量化网络通过结构优化、参数压缩等手段,实现了”小而精“的特征,是AI从云端走向终端的关键技术之一。

  轻量化网络的实现路径可分为四大类:压缩已训练模型、直接训练轻量化网络、加速卷积运算、硬件部署优化。

  • 压缩已训练好的模型:该方法针对已训练完成的大型模型(如预训练模型)进行”瘦身“,在损失少量京都的前提下大幅减少参数量和计算量。核心技术包括知识蒸馏、权重量化(将神经网络中32位浮点型权重转换为低比特整数或二进制,减少模型的存储大小和计算复杂度,量化的本质是通过近似值替代准确值,通过精度损失换效率提升)、剪枝(移除神经网络中冗余的参数或结构,保留对模型性能贡献大的部分)。
  • 直接训练轻量化网络:从模型设计之初就采用轻量化结构,同故宫创新的网络架构减少冗余计算,无需依赖预训练模型压缩。核心思路是用高效的操作替代传统卷积。
  • 加速卷积运算:通过数学优化或硬件友好的操作,加速卷积计算过程,不改变模型结构本身。
  • 硬件部署:针对特定硬件平台的架构特点,对模型进行适配和优化,最大化硬件利用率。

 2、算法库

  • openMMLab:是由港中文商汤科技联合实验室发起的开源计算机视觉算法体系,其以模块化设计为核心,提供从数据加载、模型构建、训练优化到推理部署的全流程工具链。
  • RepDistiller:是由清华大学团队于2020年开源的知识蒸馏专用算法库,专注于通过结构重参数化技术提升知识蒸馏的效率和性能,基于pytorch实现,是轻量化模型压缩领域的经典工具之一。

3、论文精读:Distilling the Knowledge in a Neural Network

(1)摘要

   多模型集成(在相同数据上训练多个不同模型并平均预测结果)是提升机器学习算法性能的简单有效方法,但集成模型预测过程繁琐且计算成本高,尤其是当单个模型为大型神经网络时,难以部署给大量用户。Caruana等人的研究表明,可将集成模型中的“知识”压缩到单个模型中,使其更易部署。本文进一步发展了这一方法,采用不同的压缩技术。

   通过知识蒸馏技术,将复杂集成模型的“暗知识”转移到单个轻量模型中,解决集成模型部署难的问题,同时提出更高效的集成范式提升模型性能。

(2)引言

  我们经常会在训练阶段和部署阶段用同一个模型,尽管训练和部署的需求不一样。训练的目标是提取数据集中的特征进行学习,会耗费很多计算资源。但部署时需求变了,如果需要部署给十几亿用户时,对实时性的要求很高,尽量少消耗计算资源。当笨重的模型训练好后,可以用知识蒸馏的方式把其中的知识迁移到单个小模型上。

  如何定义知识?教师网络中预测结果中各类别概率的相对大小,如一张马的照片喂到教师网络,教师网络会给出不同类别的概率,可能也有驴的概率,那么不同类别之间的相对大小(或错误类别直接的相对大小)隐式包含了知识。不仅要告诉学生网络这是一匹马,还要告诉学生更像马而更不像汽车。

  教师网络一般是个分类网络,优化一个平均对数似然概率(优化一个交叉熵损失函数)。比如有三个类别“猫、狗、猪”,有三张图片,各占一个类别,那么网络会给每个照片对于每个类别都给一个预测值。我们希望让教师网络三种图片全部预测正确的事件发送的概率最大(把正确类别预测的概率值乘起来,即似然概率),我们的目标就是最大化这个似然概率。

  训练神经网络:有一个神经网络,里面有若干个权重,我们先求出损失函数,然后求出损失函数相对于每一个权重的偏导数,然后微调每一个权重使得损失函数最小化。(可以把每个权重想象成很多个水龙头,求得偏导数后就知道水龙头往哪个方向拧可以使得整个损失函数最小化,不断迭代、微调,最后训练出来的网络使得损失函数收敛到一个很小的程度)

  我们的目标是,平常用训练集来训练,最终到测试集上去验证效果。训练集好比是测试题,测试集是高考集,我们的目的是通过训练集上的训练让他在测试集上表现好。若平时作业做很好,但高考考砸了就属于过拟合。

  如何让学生网络来学习教师模型?一个非常明显的方法就是直接使用教师网络的soft targets作为学生网络的标签去学习。这时可以用一个额外的数据集中的每个图片喂到教师网络中,获取其对每张图片的soft target,用这个soft target和数据集来训练学生网络。如果这个soft targets的熵很高(不同类别概率之间的差异很小),这样可以体现出更丰富的信息。现在的交叉熵用soft targets(不是之前的hard targets非0即1了)。但是这种方法的一个缺点就是可能会导致不太像的类别非常低的置信度。我们可以用提高温度的方式让soft targets变得更软(不同概率之间的差别变小)。

  知识蒸馏的另外一个好处是教师网络已经训练好了,可以用一个无限大的非监督数据集来获得教师网络的soft targets,以此来训练学生网络。

1.png

(3)整体介绍

  知识蒸馏系统通常由三部分组成,分别是知识、蒸馏算法、师生架构。

  • 知识:从教师模型中提取的有价值的信息,可以是输出的logits(未归一化概率)、中间层的特征表示或模型参数等。
  • 蒸馏算法:用于将教师模型的知识传递给学生模型的具体方法和技术。
  • 师生架构:指的是教师和学生模型的设计和配置方式,包括它们之间的交互模式和训练过程。

(4)知识类型

  教师模型网络中的知识来源很多,可以分为四类:Response-based、Feature-based、Relation-based、Architecture-based。

  • response-based:基于响应的知识通常是指教师模型的输出,如分类任务中通过softmax处理后输出的类型概率分布(soft targets)。该方法利用教师模型对输入数据的预测结果来帮助学生模型学习,从而提高性能。
    • 假设z_t为教师模型的输出logits,z_s为学生模型的输出logits,那么这里的蒸馏损失表示为L_R(z_t, z_s),降低这个蒸馏损失即可。
    • 这种方法的优势在于可以只关注模型对样本的预测输出,而不用关注神经网络模型的内在结构或特征表达。
  • feature-based knowledge:上面一种方法中,输出层提供的信息是有限的,在神经网络中,数据通过多个层次的神经元进行传递和处理,每一层都可以看作是一次特征提取。考虑到网络的复杂,因此模型的中间层的输出,也可以作为知道学生模型学习的知识。
    • 虽然基于特征的知识转移为学生提供了更多信息,但是由于学生模型和教师模型的结构不一致,如何从教师模型中选择某一层网络,从学生模型中选哪一层网络进行模仿也是一个问题。

2.png

  •  relation-based knowledge:该知识类型认为,知识不仅是特征输出的结果,而且还可能是网络层与层之间的及样本数据之间的关系。传统蒸馏只教“单个样本的特征”(比如猫有胡须),但样板间的关系能帮模型理解更抽象的规律:如即使遇到没见过的动物(如狐狸),模型也能通过“狐狸和猫/狗的相似度”判断它属于“陆生宠物”类,而不是“水生动物”类。
    • 基于关系的知识蒸馏,本质上是让学生模型学习教师模型对“数据之间隐藏联系”的理解,而不只是表面的特征。1)网络层与层之间的关系:教你“步骤的逻辑”。2) 样本之间的关系:教你“数据的分类和关联”(如哪些菜是一类,哪些动物更像)。

(5)知识蒸馏方式

  一般分为三种:离线蒸馏、在线蒸馏以及自蒸馏。

  • 离线蒸馏:教师模型已完成训练,并且其参数在整个过程中被冻结。主要包含以下三个过程:
    • 蒸馏前教师模型预训练:教师模型在大规模数据集上训练,收敛。这个过程通常耗时耗资源。
    • 知识提取:将教师模型的知识提取处理,这里可以用上面说的三种常用的知识。
    • 学生模型的训练:这训练过程中,使用教师模型传授的知识作为直到。学生模型通过一个额外的蒸馏损失函数,学习如何模拟教师模型的输出。常见的蒸馏损失函数包括交叉熵损失和均方误差损失。
    • 该方法重点在于知识迁移,教师模型的参数量很大,一些大模型会通过这种方式得到较小模型(如BERT通过蒸馏学习得到tinyBERT)。优点在于:可以灵活选择预训练好的教师模型,训练过程只需关注学生模型的学习,而不用动教师模型的参数,简单可控。缺点是:学生模型非常依赖教师模型。
  • 在线蒸馏:教师模型不再是预训练好的,而是一起参与训练。这种方式使得教师和学生可以动态适应数据变化和任务需求,更适合跨领域、多模态等场景。
  • 自蒸馏:教师模型和学生模型采用相同的网络模型的在线蒸馏。在该过程中,雪漠西从自身的输出中学习,说明学生模型将深层的信息传递给浅层,以指导自身的训练,而无需依赖教师模型。(比喻:离线蒸馏是知识渊博的老师向学生传递知识,在线蒸馏是老师和学生一起学习,自蒸馏是自学)
    • 该方法主要是为了解决传统两阶段蒸馏方法的问题:1)预先训练大模型会消耗大量时间和资源,且学生和教师之间能力不匹配,可能导致学生无法有效学习老师。
    • 该方法不依赖教师指导,而是通过模型自身输出来学习,使得学生在没有指导的情况下也能自我提升,加快训练。

(6)蒸馏算法

 

3.png

   知识蒸馏的核心逻辑是教师模型向“学生模型”传递经验,让轻量化的小模型在保留大模型性能的同时实现高效部署。具体来说,教师网络会对输入数据生成经过温度T调整的“软标签”——这种标签并非简单的“非黑即白”分类结果,而是通过平滑的概率分布传递类别间的相似性等隐藏知识(比如猫和狗同属动物的关联);学生网络则同步进行双向学习,一方面用相同温度T生成软标签,与教师的软标签计算损失以学习隐藏知识,另一方面直接输出常规softmax结果与真实硬标签拟合以保证基础精度,最终通过加权求和的总损失完成训练,推理时学生网络直接输出常规softmax结果即可。

  温度T是调节软标签“软硬度”的关键参数,它就像教师讲解知识的“深度”:T越大,软标签的概率分布越平滑,隐藏知识越丰富(比如猫90%、狗8%的分布能体现两者的相似性),但T过大可能导致分布被拉平(如各类别概率接近30%),反而让学生无法捕捉有效信息;T越小,软标签越尖锐接近硬标签,虽能快速传递核心分类知识,但会丢失隐藏的关联信息。这种“软标签传递隐藏知识+硬标签保证基础精度”的双向学习,让小模型在参数量减少70%、速度提升3倍的情况下,性能仍接近甚至超过大模型,成为AI从云端走向手机、嵌入式设备等终端场景的关键技术。

 (7)实验

  为了看知识蒸馏的效果,我们训练了一个教师网络(2个隐含层,每个隐含层有1200个relu函数的神经元,这个网络被正则化了,使用了dropout和限制权重大小的正则化。droput可以视为一个非常有效的防止过拟合的手段。)学生网络有2个隐含层,每个隐含层有800个relu函数的神经元,没有使用正则化。

  如果用T=20,用教师网络的soft targets来做学生网络的标签来训练,学生网络的犯错次数减少了,说明知识蒸馏的作用是有效的。

 

 

 

 

参考:

  1. 1、https://www.bilibili.com/video/BV1N44y1n7mU?spm_id_from=333.788.videopod.sections&vd_source=99ec55b57f4eeedd9ed62c43e87cb6ff<br>2、https://github.com/Infrasys-AI/AISystem/blob/main/04Inference/03Slim/06Distillation.md
复制代码

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册