【记录】深度学习之蒸馏法训练网络

《Distilling the Knowledge in a Neural Network》
Geoffrey Hintion

论文链接

【记录】深度学习之蒸馏法训练网络_第1张图片

博主的一些絮絮叨叨:在哔哩哔哩看视频的时候了解到蒸馏方法,该方法可以将大规模的训练模型中的细粒度知识迁移至小规模模型的训练当中,使其学习的速度效率提高了很多,并且在小粒度的任务当中对于容易引起困惑的实例的分类效果得到了加强。准备学习一下这方面的知识,意外发现剔除蒸馏网络的居然是偶像Hinton在论文里提出来的。。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚

问题摘要:

在几乎所有的机器学习算法当中,我们都可以通过对同一数据集进行多次学习得到数个不同的模型,并将各模型的预测结果作以加权作为最终输出这一简单的方式来提高任务性能。然而显然这一方法在计算代价上经常过于昂贵。而在这篇文献当中作者提出了一种所谓的“蒸馏”法,将大规模的训练模型中的细粒度知识迁移至小规模模型的训练当中,使其学习的速度效率提高了很多,并且在小粒度的任务当中对于容易引起困惑的实例的分类效果得到了加强。

因此,本文主要做出了以下两点贡献:

  1. 提出一种 知识蒸馏(Knowledge Distillation)方法,从大模型所学习到的知识中学习有用信息来训练小模型,在保证性能差不多的情况下进行模型压缩
  2. 提出一种新的 集成模型(Ensembles of Models)方法,包括一个通用模型(Generalist Model)和多个专用模型(Specialist Models),其中,专用模型用来对那些通用模型无法区分的细粒度(Fine-grained)类别的图像进行区分

简介

在大规模的机器学习领域,如物体检测、语音识别等为了获得较好的performance常常会训练很复杂的模型,因为不需要考虑实时性、计算量等因素。但是,在部署阶段就需要考虑模型的大小、计算复杂度、速度等诸多因素,因此我们需要更小更精炼的模型用于部署。这种训练和部署阶段不同的模型形态,可以类比于自然界中很多昆虫有多种形态以适应不同阶段的需求。具体地,如蝴蝶在幼虫以蛹的形式存储能量和营养来更好的发育,但是到了后期就为了更好的繁殖和移动它就呈现了另外一种完全不一样的形态。

有一种直观的概念就是,越是复杂的网络具有越好的描述能力,可以用来解决更为复杂的问题。我们所说的模型学习得到“知识”就是模型参数,说到底我们想要学习的是一个输入向量到输出向量的映射,而不必太过于去关心中间映射过程。

Knowledge Distillation

【记录】深度学习之蒸馏法训练网络_第2张图片

Knowledge Distillation 的整体框架如上图所示,下面介绍一下图中的几个概念

  • cumbersome model:复杂的大模型
  • distilled model:经过knowledge distillation后学习得到的小模型
  • hard targets:输入数据所对应的label 例:[0,0,1,0]
  • soft targets:输入数据通过大模型(cumbersome model)所得到的softmax层的输出 例:[0.01,0.02,0.98,0.17]
soft targets 在训练过程中可以提供更大的信息熵,将已训练模型的知识更好地传递给新模型
  • softmax:
    在这里插入图片描述

其中 qi 表示第 i 类的输出概率,zi、zj 表示 softmax 层的输入(即 logits),T 为温度系数,用来控制输出概率的soft程度。

温度系数 T 的意义可以用如下图来理解,图中 绿 分别对用同一组z在T为(5,25,50)下的值,可以看出,T越大,值之间的差就越小(折线更平缓,即更加的 soft),但是相对的大小关系依然没变。

【记录】深度学习之蒸馏法训练网络_第3张图片
实现流程:

  1. 使用一个较大的 T 和 hard targets 训练一个大模型(cumbersome model),生成soft targets
  2. 使用 soft targets 训练一个简单的小模型(distilled model)(在测试时,T = 1)

distilled model 的目标函数由以下两项的加权平均组成:

  • soft targets 和小模型的输出数据的交叉熵(保证小模型和大模型的结果尽可能一致
  • hard targets 和小模型的输出数据的交叉熵(保证小模型的结果和实际类别标签尽可能一致

【记录】深度学习之蒸馏法训练网络_第4张图片

Training ensembles of model

当数据集非常巨大以及模型非常复杂时,训练多个模型所需要的资源是难以想象的,因此提出一种新的集成模型方法,包括:

  • 一个 Generalist model :使用全部数据进行训练
  • 多个 Specialist models :对某些易混淆的类别进行专门训练的专有模型

Specialist models 的训练集中,一半是初始训练集中某些特定类别的子集(special subset),另一半由剩余初始训练集中随机采样组成

在该方法中,只有 generalist model 耗时较长,剩余的 specialist model 由于训练数据较少,且相互独立,可以并行训练,因此整体运算量少了非常多。

但是,specialist model由于只使用特定类别的数据进行训练,因此模型对别的类别的判断能力几乎为0,导致非常容易过拟合,我们可以采用如下方法来解决

  • specialist model 通过 hard targets 训练完成后,再使用由 generalist model 生成的 soft targets 进行 finetune,这样做是因为 soft targets 保留了一些对于其他类别数据的信息,因此模型可以在原来基础上学到更多知识,有效避免了过拟合

实现流程:

训练阶段:
训练一个 generalist model
generalist model 生成的 confusion matrix 确定出每一个 specialist model 所对应的类别的子集
对每个类别子集独立训练每一个 specialist model(可并行训练)

测试阶段:

通过 generalist model 生成预测概率
由预测概率选择相关的 specialist model 进行再次预测
对相关 specialist model 的输出进行加权组合运算,并作为最终的预测结果

参考博客

你可能感兴趣的:(【记录】深度学习之蒸馏法训练网络)