• 问答
  • 技术
  • 实践
  • 资源
模型压缩经典解读:解决训练数据问题,无需数据的神经网络压缩技术(三)
技术讨论

作者丨科技猛兽
编辑丨极市平台

目录

1 无需训练数据的噪声蒸馏技术 DFND (CVPR 2021)
(来自华为诺亚方舟实验室)
1.1 DFND 原理分析
1.1.1 DFND 的应用背景
1.1.2 从自然场景下的数据集中收集数据
1.1.3 无标签的噪声蒸馏方法
1.1.4 实验结果

2 仅需少量数据的云端网络压缩技术 PU Compression (NIPS 2019)
(来自华为诺亚方舟实验室)
2.1 PU Compression 原理分析
2.1.1 PU Compression 的应用背景
2.1.2 使用PU分类器挑选数据
2.1.3 鲁棒的知识蒸馏算法
2.1.4 实验结果

随着深度学习技术的发展,深度神经网络 (CNN) 已经被成功的应用于许多实际任务中 (例如,图片分类、物体检测、语音识别等)。由于CNN需要巨大的计算资源,为了将它直接应用到手机、摄像头等小型移动设备上,许多神经网络的压缩和加速算法被提出。现在的问题是这些神经网络的压缩和加速算法都有一个基本的假设,那就是:训练数据是可获得的。

但是实际情况是:在现实中的应用上,由于隐私因素的制约或者传输条件的限制,我们无法获得训练数据。比如:在医学图像场景中,用户不想让自己的照片 (数据) 被泄露;训练数据太多没办法传到云端,甚至是存储这些巨大量的数据集对于小型企业都是个难题;所以,使用常规的模型压缩办法在这些限制下无法被使用。

甚至,预训练网络的基本架构和参数都是未知的,就像一个黑盒,只能通过输入来获取输出信息。所以剪枝,量化等等常用的模型压缩方法就更无从下手了。

但是,目前很少有工作关注在无数据情况下的网络压缩,然而,这些方法得到的压缩后的网络准确率下降很多,这是因为这些方法没有利用待压缩网络的信息。为了解决这一问题,本文介绍2种无需训练数据的网络压缩方法。

在这里需要强调的一点是:当前有许多用 GAN 来生成自然图像/高清图片/漫画图片/风格迁移/去雨/去噪/去模糊/去马赛克,等等等等各种生成任务。但是,它们无一例外在 GAN 模型的训练过程中都使用了大量的训练数据,它们难以存储、传输和管理,而这在实际的业务条件下有时候是不被允许的

1 无需训练数据的噪声蒸馏技术 DFND (CVPR 2021)

论文名称:Learning Student Networks in the Wild

论文地址:
https://openaccess.thecvf.com/content/CVPR2021/papers/Chen_Learning_Student_Networks_in_the_Wild_CVPR_2021_paper.pdf

开源地址:

https://github.com/huawei-noah/Efficient-Computing

  • 1.1 DFND 原理分析:

华为诺亚方舟实验室联合北京大学和悉尼大学于 CVPR 2021 提出了在无数据情况下的网络噪声蒸馏方法 DFND,使用 ResNet18 作为学生网络,在 CIFAR-10 和 100 上分别达到了 94.02\% 和 76.35\%,在 ImageNet 上无数据的情况下达到了 Top-1 Accuracy 为 61.75\% 的学生网络,非常值得研究。

1.1.1 DFND 的应用背景

当我们能够获得全部的训练数据和预训练的模型时,传统的模型压缩方法可以在不损失精度的前提下获得相当大的压缩比。但是,在诸如隐私条件或传输条件受到限制的一些实践场景中,训练数据通常是不可用的。例如,我们希望压缩在数百万张图像上训练的深度模型,而数据集难以传输和存储。此外,人们往往愿意向公众公开他们的预训练模型,但是往往非常担心训练数据,尤其是一些私人数据,例如人脸、语音和指纹。因此,最近的趋势是在没有原始训练数据的情况下使用知识蒸馏的技术来压缩神经网络模型。

之前已经有一些方法实现了无需数据的知识蒸馏技术,链接如下:

但是这些方法往往只是在小数据集上面表现不错。当面对数据集庞大的场景时,由于训练数据的大小通常比给定的网络大得多,因此很难生成具有足够信息来训练压缩网络的图像。例如,ImageNet 数据集由超过1000 万张 224×224 大小的图像组成,需要超过 138GB 的存储空间,而 ResNet-50 模型仅包含 100MB 的参数。因此,这些方法不能保证这些生成图像的质量。此外,为大规模数据集 (例如 ImageNet) 生成足够的图像的运行时间和开销是非常昂贵的。因此,我们迫切需要一种高效、有效的方法来学习没有训练数据的轻量级的学生网络。

令 $\mathcal{N}_T$ 为预训练的教师超分网络, $\mathcal{N}_S$ 为学生网络,知识蒸馏的方法通过下面的目标函数来训练学生网络:

$$
\mathcal{L}_{KD}(\mathcal{N}S)=\mathcal{H}{CE}(\mathcal{N}S(x),y)+\lambda D{KL}(\mathcal{N}_S(x),\mathcal{N}_T(x))\tag{1}
$$

其中, $(x\in X,y\in Y)$ 是训练样本, $\mathcal{H}{CE}$ 是交叉熵损失, $D{KL}$ 是KL散度 (Kullback–Leibler 距离)。 方程中的第二项使教师和学生网络的输出分布之间的距离最小化,这可以被认为是帮助学生网络训练的一个强正则化项。

传统的知识蒸馏过程需要原始的训练数据,即用于训练教师网络 $\mathcal{N}_T$ 的数据集。然而,如上所述,由于隐私或传输问题,该数据集通常不可用。那么我们发现互联网上有大量的数据 (如 ImageNet 和Flickr1M),都可以为我们所用。我们把这些数据称为 public unlabeled data: $x^U \in X^U$ 。

一种直观的利用 public unlabeled data $x^U \in X^U$ 的办法是:直接让教师和学生模型都通过 public unlabeled data,并最小化二者之间的差距,如下式所示:

$$
\mathcal{L}_{KD}^U(\mathcal{N}S)=D{KL}(\mathcal{N}_S(x^U),\mathcal{N}_T(x^U))\tag{2}
$$

但是这种做法的缺点在哪里?

  1. 这种做法只能保证在廉价的 public unlabeled data 上两个网络的输出分布尽量接近,但是 public unlabeled data 的数据分布和原数据集的分布不一样
  2. public unlabeled data 的标签是未知的,缺乏了这么重要的监督信息就很难保证学生网络的分类性能。

针对以上的缺点,本文提出一种无数据噪声蒸馏 (Data-Free Noisy Distillation, DFND) 方法,帮助学生网络从老师那里学习到有用和正确的信息。

简而言之,作者从未标记数据中选择最有价值的样本,这有助于学生网络在原始数据的分布上获得良好的性能,并为未标记数据配备有噪声的伪标签 (noisy pseudo label),以实现2式中缺失的分类损失。

1.1.2 从自然场景下的数据集中收集数据

由于直接使用 public unlabeled data 无法保证学生网络的分类性能,所以说作者希望从 Wild 数据集中找到一些有用的数据,用它们来指导蒸馏的过程。假设原来的数据集为 $X^O$ ,则目标可以使用下式来概括:

$$
\hat X^U=\arg\min{X^U}D{KL}(\mathcal{N}_S(x^O),\mathcal{N}_T(x^O))\tag{3}
$$

意思就是希望从Wild 数据集 $X^U$ 中找到这样的一些 $\hat X^U$ ,使得原始数据集中教师模型和学生模型的输出更加接近。

但是这个式子根本没办法直接求解,因为我们并不知道原始数据集 $X^O$ 。所以作者提出了一种选择的原则来指导从Wild 数据集 $X^U$ 中找到这样的 $\hat X^U$。

Hinton 在 Distilling the knowledge in a neural network 这篇论文中曾经证明了:最小化教师和学生模型的 soft targets 的 KL 散度等同于是在 temperature 极大时最小化二者的 MSE Loss。

所以对于3式作者改为研究 MSE Loss:

$$
\hat X^U=\arg\min{X^U}\mathcal{L}{MSE}(\mathcal{N}_S(x^O),\mathcal{N}_T(x^O))\tag{3}
$$

Proposition 1: 给定教师网络 $\mathcal{N}_T$ ,和一个巨大的无标记数据集 $X^U$ ,则样本 $x^U$ 的噪声价值可以表示为:

$$
V(x^U)=D_{KL}(\mathcal{N}_T(x^U),\hat y^{U})\tag{P.1}
$$

式中, $\hat y^{U}=\arg\max_i \mathcal{N}_T(y=y_i|x^U)$ 是样本 $x^U$ 的伪标签。 $V(x^U)$ 可以理解为样本 $x^U$ 通过教师模型的真实输出和伪标签的 KL 散度。 $V(x^U)$ 越小,代表样本的噪声越小。

Proof:

为了证明的方便,这里计算 Domain 之间的距离,而非直接计算图片之间的距离。

将原始数据的域命名为 $D^O$ ,无标签数据的域命名为 $D^U$ ,根据三角不等式,教师网络和学生网络在原始数据下的距离满足:

$$
d_{\mathcal{L}_2}(D_S^O, DT^O)\leq \color{red}{d{\mathcal{L}_2}(D_S^O, DS^U)}+\color{orange}{d{\mathcal{L}_2}(D_S^U, DT^U)}+\color{teal}{d{\mathcal{L}_2}(D_T^U, D_T^O)}\tag{P.2}
$$

式中, $D_S^O,D_S^U$ 代表学生网络在原始数据的域和无标签数据的域的输出, $D_T^O,D_T^U$ 代表教师网络在原始数据的域和无标签数据的域的输出

因为我们无法直接去最小化 $d_{\mathcal{L}_2}(D_S^O, D_T^O)$ ,因为原始数据 $D^O$ 未知,但我们可以最小化其上界。

上界的第1项 $\color{red}{d_{\mathcal{L}_2}(D_S^O, D_S^U)}$ 测量原始数据和未标记数据通过学生网络的输出之间的距离,可以看作是学生网络的泛化能力,由学生网络本身决定。

上界的第2项 $\color{orange}{d_{\mathcal{L}_2}(D_S^U, D_T^U)}$ 测量未标记数据下学生网络和教师网络输出之间的距离,就是上式2。

上界的第3项 $\color{teal}{d_{\mathcal{L}_2}(D_T^U, D_T^O)}$ 测量原始数据和未标记数据通过教师网络的输出之间的距离,因为教师网络是固定的,所以只能通过选择 $D^U$ 来改变这一项的值。

所以这个第3项就显得尤其重要。因为原始数据未知,所以 $D_T^O$ 我们并不知道,就假设原始数据域的标签为 $D^Y$ 。直接观察第3项有如下不等式:

第1个不等式是因为 $d_{\mathcal{L}2}$ 以 $d{\mathcal{L}1}$ 为上界,第2个不等式是因为 $d{\mathcal{L}_1}$ 以KL 散度为上界。

因为网络训练良好,所以第2项 $\color{teal}{\sqrt{D_{KL}(D_T^O, D^Y)}}$ 是非常小的数,所以有:

$$
\color{teal}{d_{\mathcal{L}_2}(D_T^U, DT^O)}\leq \color{teal}{\sqrt{D{KL}(D_T^U, D^Y)}} \tag{P.4}
$$

所以,式 $P.2$ 可以写为:

$$
d_{\mathcal{L}_2}(D_S^O, DT^O)\leq \color{red}{d{\mathcal{L}_2}(D_S^O, DS^U)}+\color{orange}{d{\mathcal{L}_2}(D_S^U, DT^U)}+\color{teal}{\sqrt{D{KL}(D_T^U, D^Y)}}\tag{P.5}
$$

根据 MSE Loss 和 KL 散度的关系,上式3可以重写为:

$$
\hat X^U=\arg\min{X^U}\left[ \sqrt{D{KL}(\mathcal{N}T(x^U), y)} +\sqrt{D{KL}(\mathcal{N}_T(x^U),\mathcal{N}_S(x^U))}\right]\tag{P.6}
$$

式中, $y$ 是教师网络的输出的等价标签。上式 $P.6$ 的第2项正好是训练学生网络的目标 (2式),并且将被最小化到非常小的值。

所以,选择合适的 $X^U$ 其实就是优化上式 $P.6$ 的第1项的过程,即:

$\hat X^U=\arg\min{X^U}\left[ D{KL}(\mathcal{N}_T(x^U), y)\right]\tag{P.7}$

Proposition 1 得证。

Proposition 1 告诉我们:

要优化式 $P.2$ ,其实本质上就是去寻找噪声价值 $V(x^U)=D_{KL}(\mathcal{N}_T(x^U),\hat y^{U})$ 更小的样本 $x^U\in X^U$ 。如果我们能够找到这样的一些 $x^U\in X^U$ ,则这些样本就是能够让式 $P.2$ 得到优化的 Wild dataset $x^U\in X^U$ 。

所以根据 Proposition 1,我们只需要看看大数据集 Wild dataset $X^U$ 中的哪些样本,在通过教师模型之后得到的输出更像 one-hot 值,那么这样的样本就是我们要挑选出的样本。

1.1.3 无标签的噪声蒸馏方法

知识蒸馏的常用做法就是1式所示:

$$
\mathcal{L}_{KD}(\mathcal{N}S)=\mathcal{H}{CE}(\mathcal{N}S,y)+\lambda D{KL}(\mathcal{N}_S(x),\mathcal{N}_T(x))\tag{1}
$$

此时我们需要有标签的数据集来提供监督信息。但是实际情况是我们只有选出来的一堆无标签的数据 $X^U$ 。

一种很直接的想法是让这些无标记的数据通过教师网络的输出作为伪标签信息,此时伪标签记作 $\hat y$ 。蒸馏过程可以进一步表示为:

$$
\mathcal{L}_{KD}(\mathcal{N}S)=\mathcal{H}{CE}(\mathcal{N}S(x),\hat y)+\lambda D{KL}(\mathcal{N}_S(x),\mathcal{N}_T(x))\tag{4}
$$

式中, $\hat y=\arg\max_i \mathcal{N}_T(y=y_i|x)$ 。第2项还是蒸馏的损失,第1项是使用伪标签作为监督信息的CE Loss。

但现在的问题是这个伪标签有可能是错误的,因为 $\hat y$ 它只是教师模型的输出,而不是真正的标签啊。所以说这个伪标签其实是 noisy label。为了解决这个问题,作者利用下式5来发现噪声标签和真正标签的概率关系:

$$
P(\hat y=i|x)=\sum_{j=1}^{k}{\color{red}{P(\hat y=i|y=j)}P(y=j|x)}\tag{5}
$$

式中, $\hat y$ 是图片 $x$ 的伪标签,而 $y$ 是图片 $x$ 的真实标签。注意标红的 $\color{red}{P(\hat y=i|y=j)}$ 很关键,它把 $p(y|x)$ 转化成了 $p(\hat y|x)$ 。这个转换的意义在哪里?

就是假设如果有一个 Transformation matrix $\color{red}{Q}$ 的话,并满足 $\color{red}{Q_{ij}=P(\hat y=i|y=j)}$ ,那么上式1蒸馏过程其实就变成了下面的噪声蒸馏过程6,读者可以对比下这个变化。

$$
\mathcal{L}_{KD}(\mathcal{N}S)=\mathcal{H}{CE}(\mathcal{N}S(x),y)+\lambda D{KL}(\mathcal{N}_S(x),\mathcal{N}_T(x))\tag{1}
$$

$$
\mathcal{L}_{\color{red}{ND}}(\mathcal{N}S)=\mathcal{H}{CE}(\color{red}{Q}(\mathcal{N}S(x)),\color{red}{\hat y})+\lambda D{KL}(\mathcal{N}_S(x),\mathcal{N}_T(x))\tag{6}
$$

但是这个 Transformation matrix $\color{red}{Q}$ 的值我们其实并不清楚,所以就随着网络一起学习。初始化时,假设教师网络输出的第 $i$ 个类的概率是 $ai$ ,则可设置 $Q{ii}=a_i$ 。 $Q$ 的每一列的和为1,则Transformation matrix $\color{red}{Q}$ 的初始化为:

$$
Q=\begin{bmatrix} a_1 & \frac{1-a_2}{k-1}&...& \frac{1-a_k}{k-1} \ \frac{1-a_1}{k-1}&a_2 &...& \frac{1-a_k}{k-1}\\vdots&\vdots&\ddots&\vdots\\frac{1-a_k}{k-1}&\frac{1-a_2}{k-1}&...&a_k \end{bmatrix} \tag{7}
$$

无标签的噪声蒸馏方法如下图1所示,具体算法如下图2所示:

图1:无标签的噪声蒸馏方法

图2:无标签的噪声蒸馏方法

首先,选择具有最小噪声价值 $V(x^U)=D_{KL}(\mathcal{N}_T(x^U),\hat y^{U})$ 的未标记的数据 $x^U$ ,最大限度地减少了原始数据集中的教师和学生输出之间的分歧。其次,作者使用Transformation matrix $\color{red}{Q}$ 来纠正标签噪声。

1.1.4 实验结果

作者在CIFAR、ImageNet三个数据集上分别进行了实验。

CIFAR 实验

CIFAR-10 数据集: 10类,50000 training+10000 testing。

CIFAR-100 数据集: 100类,50000 training+10000 testing。

作者使用的教师和学生模型分别为Resnet-34Resnet-18。训练时的 weight_decay = 5×e-4,momentum=0.9。

学生网络训练了40000个 iterations。使用 DFND 方法以 ImageNet 为 Wild dataset,从中选出了 600000 张图片,并缩放到32×32×3的维度。蒸馏超参数 $T$ 设置为2。6式中的 $\lambda=4$ 。

图3是 CIFAR 数据集的实验结果,我们以 CIFAR-10 数据集为例。

  • 使用原始数据集,教师网络可以达到 94.85\% 的精度。
  • 使用原始数据集,学生网络可以达到 93.92\% 的精度。
  • 使用原始数据集,学生网络+蒸馏方法可以达到 94.34\% 的精度,轻微有损。
  • 不使用任何数据集,使用 DAFL 的方法可以达到 92.22\% 的精度,轻微有损。
  • 不使用任何数据集,使用 DFAD 的方法可以达到 93.30\% 的精度,轻微有损。
  • 不使用任何数据集,使用 Deep-Inversion 的方法可以达到 93.26\% 的精度,轻微有损。
  • 使用 PU 数据集,使用 PU-compression 的方法可以达到 93.75\% 的精度,轻微有损。
  • 不使用任何数据集,随机从 Wild dataset 中选择图片,可以达到 91.25\% 的精度,轻微有损。
  • 不使用任何数据集,使用本文 DFND 方法从 Wild dataset 中选择图片,可以达到 94.02\% 的精度,轻微有损。

图3:CIFAR 数据集实验结果

特征可视化

作者使用在 CIFAR-10 数据集上训练的教师模型 Reset-34 从ImageNet 数据集中所选择的数据。图4显示了这些数据的分布。我们发现选择的图片的特征分布和原始数据类似,比如都包含猫和狗等图片。相反,未选择的图像中人类和风景居多。此可视化结果表明,DFND 可以正确地从 Wild dataset 中选择出一些与原始数据集非常接近的有用的图片供网络去学习。 通过使用这些所选数据,学生网络可以从教师网络成功地学习到有用的信息。

图4:从ImageNet 数据集中所选择的数据

如图5所示,所选数据的特征与原始数据的分布类似。可视化结果表明所选择的数据可以与来自教师网络的原始数据继承类似的信息。

图5:几种数据的 T-SNE 可视化结果

Transformation matrix $\color{red}{Q}$ 的对比实验

作者又对比了Transformation matrix $\color{red}{Q}$ 的不同初始化方法和不同训练方法的结果,当它按照上式7作初始化,且是可学习矩阵时,效果是最佳的。

图6:Transformation matrix 对比实验结果

ImageNet 实验

ImageNet 数据集: 1000类,1.2 million training+50,000 validation+100000 testing。

已有的一些无需数据的知识蒸馏方法,如DAFL 的方法和Deep-Inversion 的方法很难在无数据的情况下生成224×224×3这样高分辨率的图片,所以采用本文的 DFND 的方法。使用 Flicker1M 作为无标签的 Wild dataset,它包含了 1 million 的数据。

作者使用的教师和学生模型分别为Resnet-34Resnet-18。训练时的 weight_decay = 5×e-4,momentum=0.9。

学生网络训练了110个 Epochs。

图7是 ImageNet 数据集的实验结果。

  • 使用原始数据集,教师网络可以达到 73.27\% 的精度。
  • 使用原始数据集,学生网络可以达到 67.00\% 的精度。
  • 使用原始数据集,学生网络+蒸馏方法可以达到 68.67\% 的精度,有损。
  • 不使用任何数据集,使用 DAFL 的方法,无效。
  • 不使用任何数据集,使用 Deep-Inversion 的方法,无效。
  • 使用 PU 数据集,使用 PU-compression 的方法可以达到 61.92\% 的精度,有损。
  • 不使用任何数据集,使用本文 DFND 方法从 Wild dataset 中选择图片,可以达到 61.75\% 的精度,轻微有损。

图7:ImageNet 数据集实验结果

小结

本文提出了 DFND 方法,一种无需训练数据的,可以在海量廉价无标签数据集中挑选出合适的无标签数据辅助教师网络知识蒸馏的学生网络训练方法,帮助学生网络从老师那里学习到有用和正确的信息。从未标记数据中选择最有价值的样本,这有助于学生网络在原始数据的分布上获得良好的性能,实验证明在 CIFAR, ImageNet 数据集上取得了满意的效果。

2 仅需少量数据的云端网络压缩技术 PU Compression (NIPS 2019)

华为诺亚方舟实验室联合北京大学和悉尼大学发布论文《Positive-Unlabeled Compression on the Cloud》,提出了基于少量数据的云端网络压缩技术,ResNet-18 网络在 CIFAR-10和 ImageNet 上分别达到了 93.75\% 的 Top1 和 86.00\% 的 Top5 准确率 (分别使用 2\% 和 10\% 的原始数据集),该论文已被 NeurIPS 2019 接收。

论文地址:
https://papers.nips.cc/paper/2019/file/ac796a52db3f16bbdb6557d3d89d1c5a-Paper.pdf

开源地址:

https://github.com/huawei-noah/Efficient-Computing

  • 2.1 PU-Compression 原理分析:

2.1.1 PU Compression 的应用背景

深度卷积神经网络 (CNN) 被广泛应用于诸多计算机视觉领域的实际任务中 (例如,图片分类、物体检测、语义分割等) 。然而,为了保证性能,神经网络通常是过参数化的,因此会存在大量的冗余参数、为了将神经网络直接应用于小型化移动设备例如手机、相机、摄像头等,通常需要使用神经网络压缩算法对过度参数化的原始神经网络进行压缩和加速。

传统的神经网络压缩算法如量化方法、剪枝方法和知识蒸馏不能轻易部署在云端来压缩在端测的用户 (users) 提交的大网络。主要原因是,这些方法大多需要用户提供原始训练数据来训练压缩网络,以避免精度大幅下降。但是,在提供云端模型压缩服务时,上传这些原始训练集通常是非常耗时的。例如,用户上传一个 95MB 大小的 ResNet-50 神经网络只需要几秒钟至几分钟,但上传 120GB 完整的包含100万张图片的 ImageNet 原始训练集则需要数个小时甚至数天。这样一来,用户必须等待一段很长的时间才能启动压缩算法开始进行模型压缩的工作,从而极大的伤害用户体验。

为了解决这个问题,作者提出了一种新的仅需少量数据的云端网络压缩技术,如下图1所示。这种方法的特点是利用上了云端海量的无标签的数据。当用户需要进行模型压缩操作时,只需要往云端上传待压缩的预训练模型,和少量的原始训练数据即可。PU Compression 的方法会结合云上存在的大量未标记数据,以一种 PU Learning 的方法从未标记数据中挑选出和用户上传的数据属于相同类别的数据,之后,使用改进的鲁棒知识蒸馏 (Robust Knowledge Distillation) 方法对网络进行压缩。

图8:仅需少量数据的云端网络压缩技术 PU Compression

原始的知识蒸馏过程可以使用下式来表述:

$$
\mathcal{L}{KD}=\frac{1}{n}\sum{i}{\mathcal{L}_c({\bf y}_i^{te},{\bf y}_i^{st})},\tag{8}
$$

式中, $\mathcal{L}c$ 是 CE Loss,8式的意思就是希望教师模型 $\mathcal{N}{te}$ 和学生模型 $\mathcal{N}_{st}$ 的输出更加接近。 学生网络以这种方式进行训练可以获得比训练从头训练更好的结果。

但是教师模型 $\mathcal{N}_{te}$ 的训练样本通常很大,ImageNet 原始训练集包含1.28 million 的训练集,其大小超过了 100GB。但是,现代 CNN 模型架构却越来越轻,例如 MobileNet-V2 的模型大小仅为 15MB。因此,上传此类庞大数据集的时间消耗会影响用户对云上模型压缩服务的体验。

2.1.2 使用PU分类器挑选数据

由于传输速度的限制,或基于隐私的原因,实际中我们通常只能够得到少量的训练数据,传统的神经网络压缩方法在这种情况下通常没有办法得到高性能的压缩网络。因此,本文提出了云端模型压缩方案,利用云端海量的无标签数据 (例如CIFAR,Imagenet 和 Flickr),使用 PU 分类器从中挑选出和用户上传的少量训练数据属于相同类别的数据,以便于神经网络的压缩。

假设原始数据集的样本数为 $n$ ,为了减少所需的样本数 $n$ ,作者希望从云端海量的无标签数据入手,提出了 PU 分类方法。它是一种特殊的半监督学习方法,用于解决标记数据中只有正类数据的问题。在本问题中,用户上传的少量训练数据可以视为正类数据 (Positive data),云端的无标签数据可以视为未标记数据 (Unlabeled data),因此能够使用 PU 学习方法,通过 PU 分类器 (PU classifier) 对未标记数据进行分类,从中挑选出正类数据。待解决的问题就变成了从未标记数据 (Unlabeled data) 中挑选出我们需要的正类未标记数据 (Positive-Unlabeled data)

PU 分类器给定一个训练集 $T$ ,给定 ${\bf x}_i \in \mathcal{X}\subseteq \mathbb{R}^d,y_i \in \mathcal{Y}=\left{ \pm 1 \right}$ :

$$
T=L\cup U={({\bf x}l,+1)}{l=1}^{n_l}\cup{({\bf x}_u, yu)}{u=1}^{n_u}, \tag{9}
$$

其中 $L$ 为正类数据 (Positive data), $U$ 为未标记数据 (Unlabeled data)。PU 分类器假设

$f:\mathcal{X}\rightarrow \mathcal{Y}$ 为一个决策函数 (decision function), $F:\mathcal{X}\rightarrow R$ 是一个判别函数 (discriminant function),将输入数据映射成为一个实数: $f({\bf x})=\text{sign}(F({\bf x}))$ 。

$l:\mathcal{X}\times \mathcal{Y}\rightarrow \mathbb{R}$ 为任意的损失函数。决策函数 $f$ 可以通过优化以下式子来进行学习:

$$
\tilde{R}_{pu}(f) = \pi_p \hat{R}p^+(f) + \max{0, \hat{R}{\bf x}(f)-\pi_p \hat{R}_p^-(f)}, \tag{10}
$$

其中 $\hat{R}{\bf x}(f)=\mathbb E{\bf x}[l(F({\bf x}), -1)]$ ,$\hat{R}_p^+(f)=\mathbb E_p[l(F({\bf x}), +1)]$ 和 $\hat{R}_p^-(f)=\mathbb E_p[l(F({\bf x}), -1)]$ 为对应的风险函数 (risk functions), $\pi_p=p(y=+1)$ 为类别先验。 $l(t,y)$ 是计算目标 $t$ 和真值 $y$ 的一个任意的损失函数。

该优化方程通过对正类数据及未标记数据施加不同的损失函数,并利用未标记数据中的类别先验知识,完成对未标记数据的分类问题。

这样一来,给定预训练好的教师模型 $\mathcal{N}_{te}$ ,即原始神经网络,我们可以要求用户只上传很少量的原始训练数据 $L_t$ (大概只占原始训练数据集的10\%)。然后我们可以在云中收集未标记的数据 $U$ ,将少量的用户上传数据与大量的云上未标记数据输入网络,并通过上述优化方程对网络进行学习。这样一来,这些收集的训练数据其实也成为了一个数据集,以便后续相关的模型压缩工作。

事实上,由于用户数据与未标记数据的分布不同,直接使用用户上传的原始神经网络 $\mathcal{N}{te}$ 作为特征提取器并不能够达到好的效果。同时用户上传的原始神经网络是针对于传统的分类问题设计的,并不适用于 PU 数据的分类问题。因此作者构造了基于注意力机制的多尺度特征提取器 $\mathcal{N}{A}$ ,用于对输入数据提取特征,即 $F({\bf x})$ 。因为神经网络内部的特征一般都是从 General 到 Specific 的,高层特征的 Transferability 迅速下降。只使用最后一层的特征将产生大的 Transferability gap,同时使用网络不同的层的组合特征将减少这种 gap。

设 ${\bf h}_j\in \mathbb{R}^{H_j\times W_j\times c_j}$ 为网络第 $j$ 层的特征,先对每一层的特征使用 global average pooling 操作:

$$
oc^j=\frac{1}{H\times W}\sum{m=1}^{H}\sum_{n=1}^{W}{h(m,n,c)}\tag{11}
$$

将每一层的 $o_c^j$ concatenate 在一起之后得到 $o=\left{ o_1,...,o_j \right}$ ,再通过一个包含 Attention 机制的 SE 模块建立权重:

$$
\text{w}=Attention(o,\text{W})=\sigma(\text{W}_2(\delta(\text{W}_1o)))\tag{12}
$$

式中, $\delta$ 是 ReLU 激活函数。 $\text{W}_1\in \mathbb{R}^{\frac{C}{r}\times C},\text{W}_2\in \mathbb{R}^{C\times \frac{C}{r}}$ 为 SE 模块的权重。

SE 模块的输出是:

$$
\tilde{o}^j=w_jo^j\tag{13}
$$

基于以上的多尺度特征提取器 $\mathcal{N}_{A}$ ,作者从未标记的数据 $U$ 中随机采样,得到 Positive-Unlabeled Dataset $U^p$ ,与原来的 $L^t$ 并在一起作为最终使用的数据集 $L^l$ :

$$
L^l=L^t \cup U^p\tag{14}
$$

算法如下:

图9:训练 PU 分类器并得到最终的数据集

2.1.3 鲁棒的知识蒸馏算法

利用上个步骤得到的扩展数据集,本文使用了鲁棒的知识蒸馏方法对网络进行压缩。

注意到扩展数据集可能存在严重的类别不平衡问题,因为未标记数据集中可能存在大量的某一类别的用户数据,然而不存在或只存在很少量的另一类别的用户数据。比如在 ImageNet 数据集中,类别 'dog' 中的样本数量比 'plane' 类别中的 30 倍,并且没有类别 'deer' 的示例。之前也有许多工作研究了数据不平衡问题。但是,它们不能直接用于我们的问题,因为每个类别中的样本数量在 $L^l$ 中是未知的。 PU 学习方法仅区分一个数据是否属于给定的数据集 $L$。除此之外,通过 PU 方法得到的扩展训练集存在噪声,因为上一步骤中从未标记数据集中挑选出的正类数据不可能达到完全准确的程度,因此我们对传统的知识蒸馏方法进行了改进。

具体的,针对类别不平衡问题,我们为每个类别的数据增加一个权重,拥有更少数据的类别的权重会更大。定义 ${\bf y}={y^1, y^2, \cdot\cdot\cdot, y^K}=\sum_{i}{{\bf y}i^{te}}$ 为用户上传的教师网络对于输入数据的输出分布之和,类别权重向量 ${\bf w}{kd} = {w^k{kd}}{k=1}^{K}$ 可以通过下式进行计算:

$$
w^k{kd} = \frac{K/y^k}{\sum{k=1}^{K}{1/y^k}},\ \ k=1,2,\cdot\cdot\cdot, K, \tag{15}
$$

其中, $K$ 为原始数据集中的类别个数。当训练学生网络时,输入数据的权重被定义为 $w_i=w^{categoryi}{kd}$ ,其中$category_i$ 为教师网络对输入数据的预测类别。因此,改进的知识蒸馏损失函数为:

$$
\tilde{\mathcal L}^{KD}=\frac{1}{n}\sum_{i}wi\mathcal F{ce}({\bf y}_i^{te}, {\bf y}_i^{st}),\tag{16}
$$

其中 $\mathcal{F}_{ce}$ 为交叉熵损失函数。

注意到 ${\bf w}_{kd}$ 并非最优的,因为教师网络对于训练数据预测的输出分布 ${\bf y}i^{te}$ 不是最优的,并含有噪声。然而我们认为教师网络是被很好的训练过的,因此 ${\bf w}{kd}$ 与最优的权重向量 ${\bf w}_{kd}^*$ 之间只有轻微的差异,即:

$$
p(|w^k{kd}-w^{*k}{kd}| < \epsilon)>1-\delta. \tag{17}
$$

因此对原始的权重向量 ${\bf w}{kd}$ 中的每一个元素给予一个随机扰动 $\epsilon$ ,并得到多个扰动后的权重向量 ${\bf W} = {{\bf w}{kd_1},\cdot\cdot\cdot,{\bf w}{kd_n}}$ ,其中 $|w{kd_i}^k-w^k_{kd}|<\epsilon$ 。我们通过优化如下方程来学习压缩后的学生网络:

$$
\mathcal N{st}^{\bf W} = \mathop{\arg\min}{\mathcal N{st}\in\mathcal N}\max\limits{{\bf w}\in{\bf W}} \tilde{\mathcal L}^{KD}(\mathcal N_{st}, {\bf w}), \tag{18}
$$

算法2是对上述方法的总结。

图10:鲁棒的知识蒸馏方法

2.1.4 实验结果

作者在 CIFAR10,ImageNet,MNIST 三个数据集上分别进行了实验。

下图11是在 CIFAR-10 数据集上的结果,作者使用了 ResNet-34 模拟用户上传的教师网络,ResNet-18 为待压缩的学生网络。无标签的数据集 $U$ 使用的是 ImageNet, $n_u=1.2M$ 。'positive' 的含义是无标签的数据集中的某一类属于原始数据集 CIFAR10 中的某一类。注意类别先验 $\pi_p=p(y=+1)$ 为无标签的数据集 $U$ 中的正样本的比例,从 ImageNet 中选择的正样本大概是 270k 张图片,所以先验为 $\pi_p=0.21=270k/1280k$ 。

第1步的多尺度的特征提取器为 ResNet34 PU,使用 SGD 训练了200 epochs,ImageNet 数据集被全部 resize 到了 32×32 的维度。选择出正样本之后。

第2步鲁棒知识蒸馏使用了 ResNet-34 模拟用户上传的教师网络,ResNet-18 为待压缩的学生网络。可以看到,在使用了 2\% 的 CIFAR-10 训练数据集的情况下,本方法能够自动从未标记数据集中挑选出 $n_t$ 个数据,并使用鲁棒知识蒸馏方法对学生网络进行压缩,达到 93.75\%的性能,仅比使用全部数据进行知识蒸馏的压缩方法减少了 0.65\% 的准确率。

作者安排了4组不同的实验设置:

第1组设置是 Baseline-1:手动把 ImageNet 中的所有 positive data 送入第2步的蒸馏过程。

第2组设置是 Baseline-2:随机选择一些训练数据 (大小与原始数据集的训练数据大小相等),送入第2步的蒸馏过程。

第3组设置是 PU-s1:直接把 PU 方法选出来的所有 positive data $U_p$ 送入第2步的蒸馏过程。如果我们从 CIFAR-10 中选取 1000 张数据,配合从 ImageNet 中挑选出的 110k 张 positive data,就可以蒸馏得到 93.75\% 的准确率。甚至超过了使用 ImageNet 中全部的 positive data 的 93.44\% 的准确率。

第4组设置是 PU-s2:随机从 positive data $U_p$ 中选择一些训练数据 (大小与原始数据集的训练数据大小相等),送入第2步的蒸馏过程。

可以看到,使用 positive data $U_p$ 的实验结果要好很多。因为第2组设置不可避免地会引入很多 negative 的噪声数据,影响蒸馏的性能。

假设 $n_p^u$ 代表 PU 方法选出的 positive 数据的数量,参加蒸馏过程的共有 $n_t$ 个数据,则有: $n_t=n_p^u+10n_l$ 。

图11:CIFAR-10 数据集实验结果

作者还进行了一系列的对比实验来验证不同先验 $\pi_p$ 和蒸馏方法的性能比较:

图12:不同先验和蒸馏方法的性能比较

实验结果表明,尽管在 ImageNet 数据集中存在许多负数据,但 PU 分类器可以成功选择大量的正数据,其类别与给定数据的类别相同。因此,具有给定数据和选择性数据的扩展数据集可用于训练学生网络。

对于 ImageNet 数据集,无标注数据集使用 Flicker1M。在ImageNet数据集上,在使用了 10\% 的原始数据集的情况下,作者的方法达到了 86.00\% 的 Top-5 准确率,先验 $\pi_p$ 设置为 0.7。比使用完整训练集得到的压缩结果仅有少量下降,超过了从原始数据集中挑选 50\% 的训练数据情况下的压缩结果KD-500k。

图13:ImageNet 数据集实验结果

作者在 MNIST 数据集上进行了实验,并与其余使用少量数据的压缩方法进行了对比,可以看到 PU Compression 的方法具有明显的优势。

图14:MNIST 数据集实验结果

小结

本文提出了 PU-Compression 方法,一种仅需少量数据的云端网络压缩技术。这种方法的特点是利用上了云端海量的无标签的数据。当用户需要进行模型压缩操作时,只需要往云端上传待压缩的预训练模型,和少量的原始训练数据即可。PU Compression 的方法会结合云上存在的大量未标记数据,以一种 PU Learning 的方法从未标记数据中挑选出和用户上传的数据属于相同类别的数据,之后,使用改进的鲁棒知识蒸馏 (Robust Knowledge Distillation) 方法对网络进行压缩。

  • 0
  • 0
  • 119
收藏
暂无评论