Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >知识蒸馏:如何用一个神经网络训练另一个神经网络

知识蒸馏:如何用一个神经网络训练另一个神经网络

作者头像
小白学视觉
发布于 2022-02-14 01:42:19
发布于 2022-02-14 01:42:19
5440
举报

如果你曾经用神经网络来解决一个复杂的问题,你就会知道它们的尺寸可能非常巨大,包含数百万个参数。例如著名的BERT模型约有1亿1千万参数。

为了说明这一点,参见下图中的NLP中最常见架构的参数数量。

各种模型结构的参数数量

在Kaggle竞赛中,胜出的模型通常是由几个模型组成的集合。尽管它们在精确度上可以大大超过简单模型,但其巨大的计算成本使它们在实际应用中完全无法使用。

有没有什么方法可以在不扩展硬件的情况下利用这些强大但庞大的模型来训练最先进的模型?

目前,有三种方法可以压缩神经网络,同时保持预测性能:

  • 权值裁剪
  • 量化
  • 知识蒸馏

在这篇文章中,我的目标是向你介绍“知识蒸馏”的基本原理,这是一个令人难以置信的令人兴奋的想法,它的基础是训练一个较小的网络来逼近大的网络。

什么是知识蒸馏?

让我们想象一个非常复杂的任务,比如对数千个类进行图像分类。通常,你不能指望ResNet50能达到99%的准确度。所以,你建立一个模型集合,平衡每个模型的缺陷。现在你有了一个巨大的模型,尽管它的性能非常出色,但无法将其部署到生产环境中,并在合理的时间内获得预测。

然而,该模型可以很好地概括未见的数据,因此可以放心地相信它的预测。(我知道,情况可能不是这样的,但我们现在就开始进行思维实验吧。)

如果我们使用来自大而笨重的模型的预测来训练一个更小的,所谓的“学生”模型来逼近大模型会怎么样?

这本质上就是知识的蒸馏,这是由Geoffrey Hinton、Oriol Vinyals和Jeff Dean在论文Distilling the Knowledge in a Neural Network中介绍的。

大致说来,过程如下。

  1. 训练一个能够性能很好泛化也很好的大模型。这被称为教师模型
  2. 利用你所拥有的所有数据,计算出教师模型的预测。带有这些预测的全部数据集被称为知识,预测本身通常被称为soft targets。这是知识蒸馏步骤。
  3. 利用先前获得的知识来训练较小的网络,称为学生模型

为了使过程可视化,见下图。

知识蒸馏

让我们关注一下细节。知识是如何获得的?

在分类器模型中,类的概率由softmax层给出,将logits转换为概率:

其中:

是最后一层生成的logits。替换一下,得到一个稍有修改的版本:

其中,T是一个超参数,称为温度。这些值叫做soft targets。

如果T变大,类别概率会变软,也就是说会相互之间更加接近,极端情况下,T趋向于无穷大。

如果T = 1,就是原来的softmax函数。出于我们的目的,T被设置为大于1,因此叫做蒸馏

Hinton, Vinyals和Dean证明了一个经过蒸馏的模型可以像由10个大型模型的集成一样出色。

Geoffrey Hinton, Oriol Vinyals和Jeff Dean的论文Distilling the Knowledge in a Neural Network中对一个语音识别问题的知识蒸馏的结果

为什么不重头训练一个小网络?

你可能会问,为什么不从一开始就训练一个更小的网络呢?这不是更容易吗?当然,但这并不一定有效。

实验结果表明,参数越多,泛化效果越好,收敛速度越快。例如,Sanjeev Arora, Nadav Cohen和Elad Hazan在他们的论文“On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization”中对此进行了研究。

左:单层网络与4层和8层的线性网络。右:使用TensorFlow教程中的MNIST分类的参数化和基线模型。

对于复杂的问题,简单的模型很难在给定的训练数据上很好地泛化。然而,我们拥有的远不止训练数据:教师模型对所有可用数据的预测。

这对我们有两方面的好处。

  • 首先,教师模型的知识可以教学生模型如何通过训练数据集之外的可用预测进行泛化。回想一下,我们使用教师模型对所有可用数据的预测来训练学生模型,而不是原始的训练数据集。
  • 其次,soft targets提供了比类标签更有用的信息:它表明两个类是否彼此相似。例如,如果任务是分类狗的品种,像“柴犬和秋田犬非常相似”这样的信息对于模型泛化是非常有价值的。

左:秋田犬,右:柴犬

与迁移学习的区别

Hinton等人也提到,最早的尝试是复用训练好的集成模型中的一些层来迁移知识,从而压缩模型。

用Hinton等人的话来说,

“……我们倾向于用学习的参数值在训练过的模型中识别知识,这使得我们很难看到如何改变模型的形式而保持相同的知识。知识的一个更抽象的观点是,它是一个从输入向量到输出向量的学习好的映射,它将知识从任何特定的实例化中解放出来。—— Distilling the Knowledge in a Neural Network

因此,与转移学习相反,知识蒸馏不会直接使用学到的权重。

使用决策树

如果你想进一步压缩模型,你可以尝试使用更简单的模型,如决策树。尽管它们的表达能力不如神经网络,但它们的预测可以通过单独观察节点来解释。

这是由Nicholas Frosst和Geoffrey Hinton完成的,他们在他们的论文Distilling a Neural Network Into a Soft Decision Tree中对此进行了研究。

他们的研究表明,尽管更简单的神经网络的表现比他们的研究要好,但蒸馏确实起到了一点作用。在MNIST数据集上,经过蒸馏的决策树模型的测试准确率达到96.76%,较基线模型的94.34%有所提高。然而,一个简单的两层深卷积网络仍然达到了99.21%的准确率。因此,在性能和可解释性之间存在权衡。

Distilling BERT

到目前为止,我们只看到了理论结果,没有实际的例子。为了改变这种情况,让我们考虑近年来最流行和最有用的模型之一:BERT。

来自于谷歌的Jacob Devlin等人的论文BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,很快被广泛应用于各种NLP任务,如文档检索或情绪分析。这是一个真正的突破,推动了几个领域的技术发展。

然而,有一个问题。BERT包含约1.1亿个参数,需要大量的时间来训练。作者报告说,训练需要4天,使用4个pods中的16个TPU芯片。训练成本将约为10000美元,不包括碳排放等环境成本。

Hugging Face成功地尝试减小BERT的尺寸和计算成本。他们使用知识蒸馏来训练DistilBERT,这是原始模型大小的60%,同时速度提高了60%,语言理解能力保持在97%。

DistilBERT的性能。

较小的架构需要更少的时间和计算资源:在8个16GB V100 gpu上花费90小时。如果你对更多的细节感兴趣,你可以阅读原始论文"DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter"或者文章的综述,写的很精彩,强烈推荐。

总结

知识蒸馏是压缩神经网络的三种主要方法之一,使其适合于性能较弱的硬件。

与其他两种强大的压缩方法权值剪枝和量化不同,知识蒸馏不直接对网络进行缩减。相反,它使用最初的模型来训练一个更小的模型,称为“学生模型”。由于教师模型甚至可以对未标记的数据提供预测,因此学生模型可以学习如何像教师那样进行泛化。在这里,我们看到了两个关键的结果:最初的论文,它介绍了这个想法,和一个后续的论文,展示了简单的模型,如决策树,也可以用作学生模型。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在神经网络中提取知识:学习用较小的模型学得更好
在传统的机器学习中,为了获得最先进的(SOTA)性能,我们经常训练一系列整合模型来克服单个模型的弱点。但是,要获得SOTA性能,通常需要使用具有数百万个参数的大型模型进行大量计算。SOTA模型(例如VGG16 / 19,ResNet50)分别具有138+百万和23+百万个参数。在边缘设备部署这些模型是不可行的。
deephub
2020/11/09
8990
在神经网络中提取知识:学习用较小的模型学得更好
BERT 模型的知识蒸馏: DistilBERT 方法的理论和机制研究
如果你曾经训练过像 BERT 或 RoBERTa 这样的大型 NLP 模型,你就会知道这个过程是极其漫长的。由于其庞大的规模,训练此类模型可能会持续数天。当需要在小型设备上运行它们时,就会发现正在以巨大的内存和时间成本为日益增长的性能付出代价。
deephub
2021/12/15
1.9K0
BERT 模型的知识蒸馏: DistilBERT 方法的理论和机制研究
知识蒸馏,中文文本分类,教师模型BERT,学生模型biLSTM
虽然说做文本不像图像对gpu依赖这么高,但是当需要训练一个大模型或者拿这个模型做预测的时候,也是耗费相当多资源的,尤其是BERT出来以后,不管做什么用BERT效果都能提高,万物皆可BERT。
机器学习AI算法工程
2022/02/28
1K0
知识蒸馏,中文文本分类,教师模型BERT,学生模型biLSTM
CVPR2021目标检测:少见的知识蒸馏用于目标检测(附论文下载)
然而,以往的蒸馏检测方法对不同的检测框架具有较弱的泛化性,并且严重依赖于GT,忽略了实例之间有价值的关系信息。因此,研究者提出了一种新的基于鉴别实例的检测方法,而不考虑GT的正负区别,称为通用的实例蒸馏(GID)。
计算机视觉研究院
2021/07/09
1.8K0
【AI系统】知识蒸馏原理
本文将介绍知识蒸馏(Knowledge Distillation, KD)的原理,这是一种通过从大型的教师模型向小型的学生模型转移知识来实现模型压缩和优化的技术。知识蒸馏的核心思想是利用教师模型在大量数据上积累的丰富知识,通过特定的蒸馏算法,使学生模型能够学习并吸收这些知识,从而达到与教师模型相似的性能。
用户11307734
2024/12/05
3080
独家 | 基于知识蒸馏的BERT模型压缩
在过去一年里,语言模型的研究有了许多突破性的进展, 比如GPT用来生成的句子足够以假乱真[1];BERT, XLNet, RoBERTa [2,3,4]等等作为特征提取器更是横扫各大NLP榜单。但是,这些模型的参数量也相当惊人,比如BERT-base有一亿零九百万参数,BERT-large的参数量则高达三亿三千万,从而导致模型的运行速度过慢。为了提高模型的运行时间,本文率先提出了一种新的知识蒸馏 (Knowledge Distillation) [5] 方法来对模型进行压缩,从而在不损失太多精度的情况下,节省运行时间和内存。文章发表在EMNLP 2019。
数据派THU
2019/10/14
9890
独家 | 基于知识蒸馏的BERT模型压缩
【科普】联邦知识蒸馏概述与思考
随着深度学习与大数据的进一步发展,效果好的模型往往有着较大的规模和复杂的结构,往往计算效率与资源使用方面开销很大,无法部署到一些边缘设备、移动终端或者嵌入式设备上。因此,如何在保证模型性能的前提下减少模型的参数量以及加快模型前向传播效率,这是一个重要的问题,总的来说不同的模型压缩与加速技术具体可以分为以下四类:
CV君
2022/03/30
1.4K0
【科普】联邦知识蒸馏概述与思考
75岁Hinton中国大会最新演讲「通往智能的两种道路」,最后感慨:我已经老了,未来交给年轻人
「但我已经老了,我所希望的是像你们这样的年轻有为的研究人员,去想出我们如何能够拥有这些超级智能,使我们的生活变得更好,而不是被它们控制。」
机器之心
2023/08/07
2270
75岁Hinton中国大会最新演讲「通往智能的两种道路」,最后感慨:我已经老了,未来交给年轻人
ICCV 2019 提前看 | 三篇论文,解读神经网络压缩
神经网络压缩方向是目前深度学习研究的一个热门的方向,其主要的研究方向是压缩,蒸馏,网络架构搜索,量化等。在 ICCV2019 中,不少的研究单位和学者都发表了神经网络压缩方向的论文。本文主要以其中三篇论文来研究神经网络压缩的目前发展趋势。
机器之心
2019/10/24
7330
综述 | 知识蒸馏(1)
近年来,深度神经网络在工业和学术界都取得了较大成功,尤其是在计算机视觉任务方面:主要归因于其可扩展性以编码大规模数据(提取特征),并操纵数十亿个模型参数。然而,将这些繁琐的深度模型部署在资源有限的设备(例如,移动电话和嵌入式设备)上也是一个挑战:不仅计算复杂度高,且存储需求大。为此,多种模型压缩和加速技术被提出;其中,知识蒸馏可以有效地从大型“教师”模型学习小型的“学生”模型,迅速受到重视。本文从知识的类别、训练的策略、蒸馏的算法和应用等角度,对知识蒸馏进行了全面调研。此外,简述了知识蒸馏的挑战,并对未来研究进行讨论。
公众号机器学习与AI生成创作
2020/07/24
1.6K0
综述 | 知识蒸馏(1)
【深度学习】深度学习中的知识蒸馏技术(上)简介
在化学中,蒸馏是一种有效的分离不同沸点组分的方法,大致步骤是先升温使低沸点的组分汽化,然后降温冷凝,达到分离出目标物质的目的。化学蒸馏条件:(1)蒸馏的液体是混合物;(2)各组分沸点不同。
黄博的机器学习圈子
2021/04/16
6.4K0
【深度学习】深度学习中的知识蒸馏技术(上)简介
关于"知识蒸馏",你想知道的都在这里!
"蒸馏",一个化学用语,在不同的沸点下提取出不同的成分。知识蒸馏就是指一个很大很复杂的模型,有着非常好的效果和泛化能力,这是缺乏表达能力的小模型所不能拥有的。因此从大模型学到的知识用于指导小模型,使得小模型具有大模型的泛化能力,并且参数量显著降低,压缩了模型提升了性能,这就是知识蒸馏。<Distilling the Knowledge in a Neural Network>这篇论文首次提出了知识蒸馏的概念,核心思想就是训练一个复杂模型,把这个复杂模型的输出和有label的数据一并喂给了小网络,所以知识蒸馏一定会有个复杂的大模型(teacher model)和一个小模型(student model)。
炼丹笔记
2021/12/20
1.2K0
关于"知识蒸馏",你想知道的都在这里!
模型压缩 | 知识蒸馏经典解读
知识蒸馏是一种模型压缩方法,是一种基于“教师-学生网络思想”的训练方法,由于其简单,有效,在工业界被广泛应用。这一技术的理论来自于2015年Hinton发表的一篇神作:Distilling the Knowledge in a Neural Network[1]
NewBeeNLP
2020/08/26
3.4K0
模型压缩 | 知识蒸馏经典解读
知识蒸馏(Knowledge Distillation)
本文主要罗列与知识蒸馏相关的一些算法与应用。但首先需要明确的是,教师网络或给定的预训练模型中包含哪些可迁移的知识?基于常见的深度学习任务,可迁移知识列举为:
全栈程序员站长
2022/07/01
2.9K0
知识蒸馏(Knowledge Distillation)
BERT蒸馏完全指南|原理/技巧/代码
今天rumor就结合Distilled BiLSTM/BERT-PKD/DistillBERT/TinyBERT/MobileBERT/MiniLM六大经典模型,带大家把BERT蒸馏整到明明白白!
NewBeeNLP
2020/12/08
2.6K0
用了这个方法,两周没变过的模型精度居然提升了(附资源)
【导语】知识蒸馏是一种模型压缩技术,它利用训练好的大网络(教师网络)去教小网络(学生网络)。较小的网络经过训练后,可有类似于大网络的性能。这样就可以在诸如手机或其他移动端设备等小型设备上部署此类模型。在今天的文章中,将为大家介绍关于几个重要的知识蒸馏的工作进展。
AI科技大本营
2019/11/28
1.7K0
知识蒸馏——深度学习的简化之道 !!
在深度学习的世界里,大型神经网络因其出色的性能和准确性而备受青睐。然而,这些网络通常包含数百万甚至数十亿个参数,使得它们在资源受限的环境下(如移动设备和嵌入式系统)运行变得不切实际。知识蒸馏(Knowledge Distillation)技术应运而生,旨在解决这一挑战,通过将大型网络的知识“蒸馏”到更小、更高效的模型中,以实现类似的性能,但以更低的计算成本。
JOYCE_Leo16
2024/03/24
2.1K0
知识蒸馏——深度学习的简化之道 !!
模型压缩与蒸馏!BERT家族的瘦身之路
之前我们讨论了『模型压缩与蒸馏!BERT的忒修斯船』,算是一个开篇。本文继续讨论关于模型蒸馏(Distilling Knowledge)及关于BERT模型的知识蒸馏,分享针对具体任务时可行的简洁方案,同时在新的视角下探讨了知识蒸馏有效的一些原因,并通过实验进行验证。
NewBeeNLP
2021/03/03
9390
模型压缩与蒸馏!BERT家族的瘦身之路
小版BERT也能出奇迹:最火的预训练语言库探索小巧之路
近日,HuggingFace 发布了 NLP transformer 模型——DistilBERT,该模型与 BERT 的架构类似,不过它仅使用了 6600 万参数(区别于 BERT_base 的 1.1 亿参数),却在 GLUE 基准上实现了后者 95% 的性能。
机器之心
2019/09/10
1.1K0
小版BERT也能出奇迹:最火的预训练语言库探索小巧之路
深度学习实践篇[17]:模型压缩技术、模型蒸馏算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT
理论上来说,深度神经网络模型越深,非线性程度也就越大,相应的对现实问题的表达能力越强,但相应的代价是,训练成本和模型大小的增加。同时,在部署时,大模型预测速度较低且需要更好的硬件支持。但随着深度学习越来越多的参与到产业中,很多情况下,需要将模型在手机端、IoT端部署,这种部署环境受到能耗和设备体积的限制,端侧硬件的计算能力和存储能力相对较弱,突出的诉求主要体现在以下三点:
汀丶人工智能
2023/10/11
1.7K0
深度学习实践篇[17]:模型压缩技术、模型蒸馏算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT
推荐阅读
相关推荐
在神经网络中提取知识:学习用较小的模型学得更好
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档