背景介绍

目录

背景介绍

什么是模型压缩?

剪枝

非结构化剪枝

结构化剪枝

量化

低秩近似(Low-rank approximation)

知识蒸馏(Knowledge distillation)

神经架构搜索 (NAS)

结论

参考

量化

Low-Rank Approximation

Knowledge Distillation

Neural Architecture Search


运行机器学习模型也往往是一个资源密集型过程。最先进的网络通常由数百万个参数组成,它们需要大量内存来在运行时获取权重和计算点积。这些网络的能耗主要由内存访问决定,它们通常依赖硬件加速器进行及时推理。然而,很多低功耗的嵌入式设备并不支持高功耗的GPU 来运行模型。

在这种背景下,显然需要减小神经网络的大小和复杂性。对该主题的研究迅速增长,存在许多有效的模型压缩技术。在这篇博客中,我将介绍一些常见的方法。

什么是模型压缩?

模型压缩的目标是在不显着降低精度的情况下实现从原始模型简化的模型。简化模型是一种在大小和/或延迟上比原始模型减少的模型。具体来说,尺寸减小意味着压缩模型具有更少和/或更小的参数,因此在运行时使用更少的 RAM,这是可取的,因为它释放了内存供应用程序的其他部分使用。延迟减少是模型根据训练模型的输入进行预测或推理所需的时间的减少,通常转化为运行时的能耗降低。模型大小和延迟通常是密切相关的,因为更大的模型需要更多的内存访问才能运行。正如我们所见,两种类型的缩减都适用于在太空中部署模型,其中计算资源面临严格的大小和功率限制。

以下是一些流行的、经过大量研究的用于实现压缩模型的方法:

  • 剪枝
  • 量化
  • 低秩近似和稀疏性
  • 知识蒸馏
  • 神经架构搜索 (NAS)

剪枝

剪枝涉及从训练网络中移除神经元或整个神经元、通道或过滤器之间的连接,这是通过将其权重矩阵中的值清零或完全移除权重组来完成的;例如,要修剪网络中的单个连接,权重矩阵中的一个权重设置为零,而要修剪神经元,矩阵中列的所有值都设置为零。剪枝背后的动机是网络倾向于过度参数化,多个特征编码几乎相同的信息。根据被移除的网络组件的类型,剪枝可以分为两种类型:非结构化剪枝涉及移除单个权重或神经元,而结构化剪枝涉及移除整个通道或过滤器。我们将分别查看这两种类型,因为它们的实现和结果不同。

非结构化剪枝

通过在权重矩阵中用零替换连接或神经元,非结构化剪枝增加了网络的稀疏性,即零与非零权重的比例。存在各种硬件和软件,例如 TensorFlow Lite 和 Caffe,它们专门用于在稀疏矩阵上高效加载和执行操作,因此,与其原始密集表示相比,可以显着减少修剪模型的延迟。例如,Caffe 可用于将掩码应用于修剪参数,从而导致它们在网络操作期间被跳过,从而减少 FLOP 的数量,从而减少进行推理所需的功率和时间。根据稀疏程度和使用的存储方法,修剪后的网络也可以比密集的网络占用更少的内存。

但是决定哪些权重应该被移除的标准是什么?一种称为基于幅度的剪枝的常用方法将权重的幅度与阈值进行比较。 Han 等人在 2015 年发表的一篇被高度引用的论文。促使这种方法被广泛采用。在他们的实现中,修剪是逐层应用的。首先,将预先确定的“质量参数”乘以层权重的标准偏差来计算阈值,并将低于阈值的权重归零。修剪完所有层后,重新训练模型,以便调整剩余的权重以补偿被删除的权重,并重复该过程多次迭代。研究人员使用这种方法修剪了四种不同的模型架构,其中两种在 MNIST 数据集上进行了预训练,另外两种在 ImageNet 数据集上进行了训练。我们可以在下图中看到他们的非结构化修剪方法的效果,该图显示了一个 MNIST 网络的第一个完全连接层的稀疏模式,其中蓝点表示非零参数:

Source (modified)

MNIST 数据集由 0-9 的手写数字的 28×28 像素图像组成,如上图所示,模型经过训练以对这些数字进行分类。为了输入到神经网络中,图像通过从上到下端到端连接像素行来展平,从而产生一个包含 784 个值的向量。网络的第一层与 300 个神经元全连接。正如我们所看到的,数字往往位于图像的中心,因此边缘周围的像素对分类任务的影响较小,并且与它们的连接被更严重地修剪。对于整个网络,修剪导致所需的非零权重和 FLOP 的数量减少了 12 倍,而预测性能没有下降。同样,对于在 ImageNet 上训练的 AlexNet 和 VGG-16 模型,参数数量分别从 6100 万减少到 670 万和从 1.38 亿减少到 1030 万,分类准确率没有下降。

Han 等. al 表明当正确实施时,非结构化修剪可以产生一些真正令人印象深刻的压缩程度,正如他们在文章中指出的“AlexNet 和 VGGNet要求的存储足够小,所有权重都可以存储在芯片上,而不是片外 DRAM,片外的DRAM运行时需要电能数量增加了几个数量级。”然而,他们也承认“通用硬件对稀疏计算的限制”,因此,使用专门的软件来解决这个问题。事实上,非结构化修剪依赖专门设计的软件或硬件来处理网络稀疏性以加快计算速度是一个重大限制,采用结构化方法不会面临这一限制。

结构化剪枝

Three types of structured pruning. Source

与非结构化修剪不同,结构化修剪不会导致权重矩阵具有有问题的稀疏连接模式,因为它涉及删除给定权重矩阵内的整个权重块。这意味着修剪后的模型可以使用与原始模型相同的硬件和软件运行。虽然我们现在正在研究要在channel 或卷积核级别删除的权重组,但仍然可以通过根据 L1 规范对它们进行排名来应用基于幅度的修剪。但也有人提出了更智能的“数据驱动”方法,可以取得更好的结果。

例如,Huang 等人在其 2018 年的论文中率先将一种控制网络性能和规模之间权衡的方法集成到剪枝过程中。他们的算法输出一组过滤器“剪枝代理”——每个神经网络对应于网络的一个卷积层——以及原始模型的替代剪枝版本,它被初始化为与原始模型相同。修剪代理致力于最大化由“下降边界”值参数化的目标,该值定义为原始模型和修剪模型之间允许的最大性能下降,迫使代理将性能保持在指定水平以上。对于每个卷积层,通过评估该层内不同过滤器的修剪组合的效果来训练修剪代理。为此,它从替代模型中删除了某些过滤器,并将该模型在评估集上的性能与原始模型的性能进行比较,了解哪些修改将提高网络效率,同时仍遵守精度约束。一旦训练了一层的代理并且该层的过滤器已被最佳移除,整个剪枝模型将被重新训练以适应变化,并且该过程对下一个卷积层重复。

下图显示了使用这种方法在 CIFAR 10 数据集上训练的 VGG-16 模型的层上使用 drop bound b = 2 实现的修剪程度。更高层的更大程度的修剪表明它们往往比初始卷积核包含更多不必要的卷积核。

Source

我们还可以看到使用不同 drop bound 值修剪该模型的定量压缩结果。括号中的精度值对应于修剪为相同比率但使用基于幅度的方法的模型,我们看到“数据驱动”实现具有优越的性能。

Source

通过各种结构化修剪方法也取得了同样令人印象深刻的结果,使其成为一种流行的模型压缩技术。但总的来说,修剪仍然有一些潜在的缺点。例如,通常不清楚给定方法在不同架构中的泛化程度如何,并且修剪过程往往涉及大量微调,这可能会成为实现和泛化的障碍。此外,在许多情况下,简单地使用更高效的架构可能比修剪次优架构更有效。如果您有兴趣仔细研究当前用于修剪模型的各种方法,我建议您查看此博客或论文“What is the State of Neural Network Pruning?”, 两者均于 2019 年撰写。

量化

Source

虽然修剪通过减少权重的数量来压缩模型,但量化包括减少权重的大小。量化通常是将值从大集合映射到较小集合中的值的过程,这意味着输出包含比输入更小的可能值范围,理想情况下不会在此过程中丢失太多信息。我们可以在图像压缩的背景下考虑这一点,就像上面爱因斯坦的图像一样。在最左边的表示中,每个像素值由 8 位表示,因此可以呈现 256 种不同的灰度。每个连续图像中可能的阴影数量减半。但是请注意,我们确实无法检测到前四张左右图像之间的太大差异,这代表了模型量化的目标:将网络组件的精度降低到更轻巧但没有疗效上的“显着”差异。直觉上,神经网络应该能够处理一些信息丢失是有道理的,因为它们经过训练可以很好地处理输入中的高水平噪声,而较低精度的计算基本上可以被视为另一个噪声源。

那么,不同精度之间的映射(即量化方案)如何工作?在神经网络中,特定层的权重或激活输出往往在一定范围内呈正态分布,因此理想情况下,量化模式利用这一事实并适应每一层的个体分布。例如,模型权重通常存储为 32 位浮点数,一种常见的方法是将它们减少到 8 位定点数(尽管有些技术甚至用单个位表示它们!),为此有 2⁸ = 256 个可能的值:在最简单的情况下,我们可以取一个层的最小和最大权重,将两者之间的范围划分为 255 个均匀间隔的区间,并根据它们最接近的区间边缘对权重进行 bin到:

Source (modified)

我们可以看到以这种方式量化权重如何将它们的内存占用减少 4 倍。还有许多其他更复杂的技术可以实现更低的信息丢失,例如 Han 等人的实现。涉及k-means聚类的所有内容。具体来说,他们的压缩管道结合了权重剪枝、量化和霍夫曼编码,我们可以在下图中看到在 ImageNet 上训练的 AlexNet 的剪枝和量化如何协同工作,以实现模型大小为原始大小的 3.7% 而没有损失准确性:

除了权重之外,神经网络还包含矩阵乘法、卷积、激活函数和池化等操作符,这些操作符也必须被量化以处理较低精度的权重。虽然一般思想是相同的,但量化运算符比量化预训练的权重要棘手一些,因为它们必须处理潜在的位溢出和看不见的输入,这会使确定模式变得困难。幸运的是,许多深度学习软件,例如 TensorFlow、PyTorch 和 MXNet,都具有量化常用运算符的功能(如果您有兴趣,此博客提供了对 TensorFlow 过程的高级解释),这可以产生延迟显着减少的网络鉴于较低精度操作的效率提高。

在实践中,量化可能很难实际实现,因为它需要对硬件和逐位计算有很好的理解。事实证明,决定将模型压缩到的精度并不像选择随机位数那么简单:您必须确保您使用的硬件甚至能够处理该大小的数字,更不用说有效地这样做。在查阅文献时,我发现许多最先进的量化实现所提供的节省与所使用硬件的特性有关,尽管这里存在其他压缩方法,可以很好地适用于多种硬件,例如作为低秩分解。

低秩近似(Low-rank approximation)

卷积滤波器组 (a) 学习用于提取视网膜扫描图像中的线性结构,以及其可分离的低秩近似 (b)。来源

我们意识到深度神经网络往往被过度参数化,不同层和/或通道之间会出现很多相似性或冗余性。例如,上面的图像 a 显示了为图像分割任务学习的卷积层的过滤器,其中许多看起来几乎相同。低秩逼近的目标是使用较少过滤器的线性组合来逼近层的众多冗余过滤器,例如图像 b 中表示的过滤器。以这种方式压缩层可以减少网络的内存占用以及卷积运算的计算复杂性,并且可以显着提高速度。

具体来说,b 中的过滤器的等级低于 a 中的过滤器。矩阵的秩定义为其列所跨越的向量空间的维数,该维数等于其线性无关的列数。为了说明,假设我们有以下矩阵:

[[1, 0, -1],
[-2, -3, 1],
[3, 3, 0]]

如果我们只看前两列,我们会看到它们是线性无关的,因为不能使用线性运算从另一列计算出来,所以矩阵的秩必须至少为 2。但是如果我们查看所有三列,我们看到如果我们从第二个中减去第一个,我们得到第三个,因此所有三个都不是线性无关的,矩阵只有 2 的秩。

直观地,我们得到的感觉是,如果矩阵的一个元素可以使用其他存在的元素来计算,那么矩阵中就会出现一些信息冗余。虽然网络中的单个过滤器和通道往往是满秩的,表明它们本身没有冗余,但不同的过滤器或通道之间通常存在显着的冗余。由于低秩矩阵编码冗余信息,因此我们可以使用它们来近似网络的这些冗余层,这正是低秩近似所做的。为了理解如何实现这一点背后的直觉,让我们看一下 Jaderberg 等人的一个相对简单的方法。这利用了交叉过滤器冗余。

目标是基于 N 个过滤器之间存在冗余的假设,通过使用 M 个低秩过滤器的线性组合来逼近 N 个满秩过滤器,其中 M<N,从而降低这些操作的计算复杂度。具体来说,Jadenberg 等人。强加新过滤器的秩为 1。如果矩阵的秩为 1,这意味着如果我们选择其中的一列,所有其他列将是该列的倍数。因此,秩 1 矩阵可以被因式分解或分解为列向量和行向量的乘积(称为可分离性的属性),例如:

[[1, 4, 5],          [[1],   [[1, 4, 5]]
[2, 8, 10],     =     [2], *
[3, 12, 15]]          [3]]

通过强加 M 个基滤波器的可分离性并添加一层以从压缩基近似原始卷积操作的 N 个输出通道,我们得到了如下所示的变换操作:

Source (modified)

虽然它可能看起来更复杂,但如果 M 足够小,它实际上是一个计算效率更高的操作。通过最小化原始层的输出和近似层的输出之间的重构误差来异步优化这些修改层的可分离基。贾德伯格等人。使用类似的方法来利用通道之间的冗余,与为文本分类任务训练的浅层网络相比,它们实现了 4.5 倍的加速,而分类精度仅下降了 1%。

如果您查看有关低秩近似的文献,您很可能会遇到术语 SVD(“奇异值分解”)、Tucker 分解和 CP(“Canonical Polyadic”)分解,因此有必要简要解释一下这些术语的意义。 SVD 代表“奇异值分解”,是一种矩阵分解。在用我们讨论过的较低秩 r 的另一个矩阵 M' 逼近矩阵 M 的上下文中,最佳 M' 等于受 r 约束的 M 的 SVD。 Tucker 和 CP 分解是将 SVD 推广到张量的方法。您可能知道,张量是一个多维数组。 Tucker 分解将张量分解为一组矩阵和一个小的核心张量。 CP 实际上是 Tucker 分解的一个特例,它将张量分解为秩为 1 的张量的总和,尽管它们在文献中经常被称为两种独立的方法。我们可以在下面的 3D 空间中看到它们是如何工作的:

Source

两者都有其优点和缺点,您可以在此处相关信息,并且是深度神经网络低秩逼近的流行方法。例如,Kim 等人使用 Tucker 分解实现了大量压缩。他们采用数据驱动的方法来确定压缩层应具有的等级,然后根据这些等级执行 Tucker 分解。他们将这种压缩应用于图像分类任务的各种模型,并在 Titan X 和三星 Galaxy S6 智能手机上运行它们,值得注意的是,它们的 GPU 计算能力比 Titan X 低 35 倍,内存带宽比 Titan X 小 13 倍。以下表显示了压缩模型的性能下降、尺寸和 FLOP 的减少,以及它们处理单个图像的时间和能量消耗。

有了这些结果,Kim 等人。证明低秩近似是一种有效的压缩手段,可显着减少深度神经网络在移动设备上的潜在部署的大小和延迟。正如我之前提到的,低秩近似作为一种压缩技术的一个巨大优势是,由于它仅通过减少参数数量来简化模型结构,因此不需要专门的硬件来实现。

知识蒸馏(Knowledge distillation)

如果我们考虑一下,压缩神经网络的需要源于这样一个事实,即训练和推理是两个根本不同的任务。例如,在训练期间,模型不必实时运行,也不一定面临计算资源的限制,因为其主要目标只是从给定数据中提取尽可能多的结构,但如果将其部署用于推理时,我们确实需要关注延迟和资源消耗。因此,经过训练的模型通常比推理的理想模型更大、更慢,因此,我们必须开发压缩它们的方法。为了解决这个问题,康奈尔大学的研究人员在 2006 年提出了一个想法,即通过训练模仿较大模型的输出,将知识从一个大型训练模型(或模型集合)转移到一个较小的模型中进行部署,Hinton 等人提出了这一过程。于 2014 年推广并命名为蒸馏。简而言之,知识提炼的动机是训练和推理是不同的任务,因此应该为每个任务使用不同的模型。

学生-教师网络例子的可视化,源自

在 Hinton 等人的实现中,小型“学生”网络通过最小化损失函数来学习模仿大型“教师”网络,其中目标基于教师的 softmax 函数输出的类概率分布。为了理解这一点,让我们回顾一下 softmax 函数的工作原理:它接收一个特定类的 logit z_i,然后通过除以所有 j 个类的 logit 的总和将其转换为概率:

这里,术语 T 是温度,其较高的值对应于“较软”的输出。 T 通常设置为 1,这会导致“硬”输出,其中正确的类别标签被分配接近 1 的概率,表明该预测接近确定性,而其他人被分配的概率接近 0。Hinton 等人。然而,建议不正确的类标签的分布包含有关可以从中学习的数据的有价值的信息,正如它们在手写数字分类任务的上下文中所描述的那样:

 “2 的一个版本可能有 10^-6 是 3 的概率和 10^-9 是 7 的概率,而对于另一个版本,它可能是相反的。这是有价值的信息,它定义了数据的丰富相似性结构(即它说明哪些 2 看起来像 3,哪些看起来像 7)……”

为了利用这些信息,Hinton 等人。提高教师网络的 softmax 函数中的温度 T,以在他们称为蒸馏的过程中软化类标签上的概率分布,如下所示:

在网络的 softmax 函数中提高温度 T 的效果示例。由此产生的概率与我们所知道的真实情况一致,即狗比牛更像猫,当然比汽车更像。源自

然后训练学生网络以最小化两种不同交叉熵函数的总和:一种涉及使用 T=1 的 softmax 获得的原始硬目标,另一种涉及软化目标。Hinton等人。通过训练具有两个 12,000 个单元的隐藏层的教师网络和具有两个仅 800 个单元的隐藏层的学生网络来证明该技术的有效性。在测试集上,教师达到 67 个测试错误,学生达到 74 个,相比之下,与学生相同大小但未经蒸馏训练的网络产生的 146 个测试错误。

在 Hinton 等人的这一初步突破之后。为了训练学生模仿教师的 softmax 输出,研究人员 Romero 等人。发现学生还可以使用来自教师中间隐藏层的信息来提高其最终表现。具体来说,他们提出了他们所谓的“FitNets”,这是一种比老师更薄但更深的学生网络,它们增加的深度使它们能够很好地泛化,而它们的小宽度仍然使它们紧凑。罗梅罗等人。在学生网络中间引入一个“引导层”,其任务是从教师网络中间的一个“提示”层中学习。下表展示了与 CIFAR-10 图像分类数据集上的教师架构相比,不同大小的 FitNet 实现的加速、减少的参数数量和普遍提高的准确性。此外,它们的性能与最先进的方法不相上下,其中当时的最高准确率为 91.78%

像这样的令人印象深刻的结果激发了对将知识从教师网络转移到学生网络的各种不同方法的研究。事实上,知识提炼的研究领域在某些领域变得如此广泛和专业,以至于很难评估一般方法的整体功效。因此,知识蒸馏作为压缩技术的一个缺点是用户必须预先做出许多决定才能实现它;例如,与我们讨论过的其他压缩技术不同,压缩网络甚至不需要与原始网络具有相似的结构。但这也意味着知识蒸馏非常灵活,可以适应广泛的任务。如果您有兴趣更多地了解不同的知识蒸馏技术,这篇 2020 年的论文将对基于视觉的任务的最新方法进行全面回顾。

神经架构搜索 (NAS)

现实情况是,到目前为止我们讨论的多种压缩技术都可以应用于给定的场景,当您考虑它们的组合时,可以探索的可能架构的数量会急剧增加。当然,困难的部分是选择最佳的。这就是神经架构搜索 (NAS) 的用武之地。从最一般的意义上说,NAS 是对定义神经网络不同组件的一组决策的搜索——它是一种学习最佳模型架构的系统化、自动化的方式。这个想法是从过程中消除人为偏见,以实现比人类设计的架构更好的新颖架构。

显然,对于任何给定的任务,都有无限可能的模型架构可供探索,并且有许多不同的方法来搜索它们。 2019 年的一项调查根据以下三个维度对不同的 NAS 技术进行了分类:

NAS 的三个基本组件如何在训练管道中组合在一起。源自

  • 搜索空间:可以在搜索中发现的可能架构。我们知道网络可以由一整套操作组成,例如卷积、池化、串联和激活函数,并且定义搜索空间涉及对如何以及哪些组件可以组合以生成被搜索的网络施加约束通过。例如,定义搜索空间可能涉及限制网络可以拥有的可能卷积层的数量或要求它多次重复一般的操作模式。不可避免地,施加此类限制会在搜索过程中引入一些人为偏见。即使有这些限制,搜索空间仍然会非常大,这也是 NAS 的重点——发现和评估我们通常可能构建的领域之外的架构。

搜索空间的示例,其中允许层之间的跳过连接(左)和受通用架构模板约束的搜索空间(右),其中重复操作模式但深蓝色层之间的连接不固定。来源

  • 搜索策略:遵循的策略指导搜索空间的探索,即什么决定了在搜索中探索的下一个架构。虽然这可能是随机的,但鉴于给定搜索空间的巨大范围,不可能随机出现最佳架构,因此搜索策略通常会考虑先前探索的架构的性能。例如,所谓的“进化”算法基于在整个训练过程中保持不断进化的候选架构群体。还有基于强化学习的策略,其中训练代理以估计架构在看不见的数据上的性能。
  • 性能估计策略:如何估计候选模型在未见数据上的性能。性能反馈用于优化搜索策略。这可以像从头开始训练每个网络并在验证集上测量它们的准确性一样简单,但这可能非常昂贵;因此,已经开发了涉及许多模型之间的参数共享或使用数据或网络本身的低保真近似值的策略。

可以想象,NAS 是一个非常广泛的研究领域,所以在这里我们将只关注它用于压缩预训练模型的具体用途。例如,在 2018 年,He 等人。引入了 AutoML for Model Compression (AMC),这是一种使用强化学习搜索策略逐层压缩预训练网络的技术。具体来说,AMC 的搜索空间由用户定义的、基于硬件的约束参数化,例如最大延迟、模型大小或 FLOPS 数量。代理一次一层地通过网络,输出基于层组成的压缩比,该压缩比也符合硬件约束。通过结构化或非结构化方法根据其比率修剪所有层后,无需微调即可计算压缩模型的验证精度,并将其用作代理的奖励。压缩模型后放弃微调是一种策略 He 等人。采用他们的性能评估策略,可以更快地探索策略。

AMC 的基于学习的剪枝在各种模型上针对手工制作的、基于规则的方法进行了测试,并被发现表现出全面的卓越性能。例如,下表显示了 AMC 在 MobileNet 上使用 50% FLOP 或 50% 延迟约束的压缩结果,与基于规则的策略相比,将网络修剪为原始参数的 75%(第二行):

正如我们所见,与基于规则的剪枝技术相比,使用 AMC 剪枝的网络与原始 MobileNet(顶行)几乎相同,但延迟和内存大小有所降低。

最近在 2019 年,Cao 等人。使用贝叶斯优化来搜索最佳压缩架构。在他们的实现中,他们不断地添加到一组模型中,这些模型都基于原始网络,但通过随机删除或收缩层并添加跳过连接进行了压缩。这些架构是根据与原始架构相比减少的参数数量和准确度来评估的。在多个 epoch 中,对模型进行采样并用于学习预测新的随机生成的压缩模型在压缩和准确性方面将在多大程度上优于该集合的当前最佳模型——这样,随机生成的架构不会不必经历对数据进行实际评估的时间密集型过程,而是可以探索更多架构。基于这些预测,新生成的模型中最有希望的将根据数据进行评估,并将其添加到不断增长的模型集中,然后该过程继续进行。最后,在压缩和精度方面选择集合中最好的模型。下表展示了与随机 NAS 方法和 Ashok 等人相比,Cao 等人的方法在 CIFAR-100 数据集上压缩三种结构以进行图像分类的有效性。 al 最先进的“N2N”技术。

注意:“去除”表示仅通过去除层进行压缩,就像所有 N2N 报告的 ResNet-34 结果一样。 f(x) 是一个指标,与原始模型相比,它结合了压缩模型的准确性和大小。

我们已经看到 NAS 在实现更紧凑模型方面的有效性的两次演示。 NAS 的可能性确实是无穷无尽的,但成功的实施依赖于选择适合手头问题的搜索空间、搜索策略和性能估计策略,这可能需要大量的领域知识,并构成进入的障碍它作为一种压缩技术。

Google’s AutoML GUI. Source

幸运的是,确实存在可以抽象出一些复杂性以使 NAS 更易于访问的软件。例如,谷歌的 Cloud AutoML 使该过程就像输入训练数据集并让其算法搜索网络的最佳构建块集一样简单——用户可以微调以进一步优化的基线架构。所有这些都是在其 GUI 中完成的,即使没有经验的程序员也可以访问该过程。 Auto-Keras 是一个开源 NAS 包,它采用不同的方法,用户指定模型的高级架构,其算法通过配置细节进行搜索。

结论

我们现在已经对深度学习模型的一些流行压缩技术的内部工作原理有了基本的了解。下一步是实际尝试其中的一些——我们将在即将发布的博客中解决这个任务。具体来说,我们将使用此处讨论的一些技术来压缩 SpaceNet 6 挑战赛中的一些获胜模型,以展示如何使用于构建足迹分割的网络在空间部署时更加节省资源。

参考

剪枝

  • https://towardsdatascience.com/pruning-deep-neural-network-56cae1ec5505
  • What is the State of Neural Network Pruning?
  • Learning both Weights and Connections for Efficient Neural Networks
  • To prune, or not to prune: exploring the efficacy of pruning for model compression
  • Learning to Prune Filters in Convolutional Neural Networks

量化

  • Concept of Quantization
  • How to Quantize Neural Networks with TensorFlow « Pete Warden's blog
  • https://nervanasystems.github.io/distiller/quantization.html
  • Making Neural Nets Work With Low Precision | Manas Sahni
  • Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding

低秩近似

  • https://en.wikipedia.org/wiki/Rank_(linear_algebra)
  • Learning Low-Rank Approximation for CNNs
  • Learning Separable Filters
  • Speeding up Convolutional Neural Networks with Low Rank Expansions

知识蒸馏

  • Distilling the Knowledge in a Neural Network
  • https://nervanasystems.github.io/distiller/knowledge_distillation.html
  • https://www.ttic.edu/dl/dark14.pdf

神经架构搜索

  • A Survey on Neural Architecture Search
  • Neural Architecture Search: A Survey
  • Auto-Keras and AutoML: A Getting Started Guide - PyImageSearch

本文参考An Overview of Model Compression Techniques for Deep Learning in Space | by Hannah Peterson | GSI Technology | Medium

深度学习模型压缩技术概览相关推荐

  1. 深度学习模型压缩与加速技术(三):低秩分解

    目录 总结 低秩分解 定义 特点 1.二元分解 2.多元分解 参考文献 深度学习模型的压缩和加速是指利用神经网络参数的冗余性和网络结构的冗余性精简模型,在不影响任务完成度的情况下,得到参数量更少.结构 ...

  2. 深度学习模型压缩与加速技术(二):参数量化

    目录 总结 参数量化 参数量化定义 参数量化特点 1.二值化 二值化权重 二值化权重与激活函数 2.三值化 3.聚类量化 4.混合位宽 手工固定 自主确定 训练技巧 参考文献 深度学习模型的压缩和加速 ...

  3. 深度学习模型压缩与加速技术(七):混合方式

    目录 总结 混合方式 定义 特点 1.组合参数剪枝和参数量化 2.组合参数剪枝和参数共享 3.组合参数量化和知识蒸馏 参考文献 深度学习模型的压缩和加速是指利用神经网络参数的冗余性和网络结构的冗余性精 ...

  4. 深度学习模型压缩与加速综述!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Pikachu5808,编辑:极市平台 来源丨https://zh ...

  5. 深度学习模型压缩与加速综述

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文详细介绍了4种主流的压缩与加速技术:结构优化.剪枝.量化 ...

  6. 腾讯 AI Lab 正式开源PocketFlow自动化深度学习模型压缩与加速框架

    11月1日,腾讯AI Lab在南京举办的腾讯全球合作伙伴论坛上宣布正式开源"PocketFlow"项目, 该项目是一个自动化深度学习模型压缩与加速框架,整合多种模型压缩与加速算法并 ...

  7. 端上智能——深度学习模型压缩与加速

    摘要:随着深度学习网络规模的增大,计算复杂度随之增高,严重限制了其在手机等智能设备上的应用.如何使用深度学习来对模型进行压缩和加速,并且保持几乎一样的精度?本文将为大家详细介绍两种模型压缩算法,并展示 ...

  8. PyTorch 深度学习模型压缩开源库(含量化、剪枝、轻量化结构、BN融合)

    点击我爱计算机视觉标星,更快获取CVML新技术 本文为52CV群友666dzy666投稿,介绍了他最近开源的PyTorch模型压缩库,该库开源不到20天已经收获 219 颗星,是最近值得关注的模型压缩 ...

  9. 深度学习模型压缩与加速

    深度神经网络在人工智能的应用中,包括语音识别.计算机视觉.自然语言处理等各方面,在取得巨大成功的同时,这些深度神经网络需要巨大的计算开销和内存开销,严重阻碍了资源受限下的使用.模型压缩是对已经训练好的 ...

最新文章

  1. java实验的技术问题及解决方法,2018-2019-2 20175313 实验一《Java开发环境的熟悉》实验报告...
  2. vba 窗体所有组件 enabled_Csharp设计闪烁窗体制作教程
  3. 给我10张画,我能还你1万张|Adobe团队搞定小样本图像生成
  4. 姜黄的毒副作用调研汇总(调研手稿二)
  5. stateful function用法记录(还没弄完)
  6. 修改mysql数据库字符集_修改及查看mysql数据库的字符集
  7. 献给新一代人工智能后浪——《后丹》
  8. mysql查询注意_mysql中sql查询使用注意
  9. sql server2012中使用convert来取得datetime数据类型样式(全)
  10. [iOS] 使用xib做为应用程序入口 with Code
  11. [转载]用户(User)和用户组(Grou…
  12. 三极管放大电路基础知识
  13. 计算机考试科目一模拟试题,学车科目一模拟考试,最全答题知识点,送给准备考驾照的你...
  14. 泊松过程的概念及其例题分析
  15. 小猿圈之初识python基础知识
  16. 【String】字符串中是否有空格(indexOf、split)
  17. 如何验证JDK和JRE安装成功
  18. 利用递归函数,实现一个阶乘函数,支持正数和负数的阶乘
  19. mysql易百_MySQL DATE类型(来自易百)
  20. Vasp进行分子动力学模拟关键词解析及计算示例1

热门文章

  1. 【MM32F5270开发板试用】快速移植STM32应用到MM32F5270(以OLED为例)
  2. Microsoft Excel 教程:如何在 Excel 中移动或复制工作表或工作表数据?
  3. 机器学习基础以及在pynq-Z2上部署Faster-RCNN的项目学习1
  4. 世界上首个太赫兹真空功率放大器问世
  5. GAN属于计算机视觉领域嘛_看见AI:人工智能在计算机视觉领域的历史与未来
  6. 循环判断核酸检测结果+logistics模型拟合确诊数据
  7. 机器人图形变变变_幼儿园学前班数学活动《图形变变变》PPT课件教案下载 - 快思幼教网...
  8. Python蹒跚学步2:feedparser 和 pydelicious的安装
  9. 华尔街之狼——游离法律边缘的传奇故事
  10. 游戏设计的艺术:一本透镜的书——第七章 游戏通过迭代改良