神经网络压缩方法总结

2.关于剪枝算法的分类和论文整理 关于剪枝的分类2 上次列举了剪枝的分类,分别列举了可以从那几个方面对模型进行剪枝,这里从另一个方向上更宏观地对剪枝进行分类。进行了成体系的剪枝论文整理,并对Pruning Filter In Filter, NIPS2020这篇论文做了详细分析。 前言 剪枝可以分为结构化剪枝和非结构化剪枝剪枝可以分为结构化剪枝和非结构化剪枝,剪枝可以分为结构化剪枝和非结构化剪枝。 结构化剪枝就是对原有网络的channel级或者layer级进行剪枝,非结构化剪枝就是剪去的并不足以组成一个结构。 阅读详情

首先,为什么需要对神经网络模型进行压缩呢?我们在之前的课程中介绍过很多大型的深度学习模型,但当我们想要将这些大模型放在算力比较小的边缘设备或者其他IoT设备里面,就需要对大模型进行压缩。

Lower latency:低时延 Privacy:私密性

介绍5个网络压缩的方法,我们只考虑算法(软件)层面,不考虑硬件层面的解决方法。

Network Pruning(网络剪枝)

对于一个大的网络来说,我们能想到的是,众多网络参数中一定会有不重要/冗余的一些参数,因此我们将这些参数减掉达到网络压缩的目的。

网络剪枝的步骤如下:首先,我们预训练一个大规模的网络,然后评估里面参数的重要性,包括权重(weight)的重要性和神经元(neuron)的重要性。

  • 评价weight重要性,我们可以用绝对值衡量,即绝对值越大,weight越重要,或者采用之前介绍的life long learning的想法。
  • 评价neuron重要性,我们可以用其输出的结果为0的次数衡量,即输出0越多越不重要。

接着我们对多余的参数的重要性评估并修剪,得到一个小的网络,再对里面的参数微调,再评估、修剪。。。重复上述过程,直到满足要求,完成Network pruning过程。

刚才提到,剪枝有两种形式,一种是以权重(weight)为单位,一种是以神经元(neuron)为单位,这两者有什么不同呢?

首先Weight pruning,通过除去一些冗余的weight,使网络结构变得简单一些,但这样就造成网络结构不规则(irregular),难以编程实现,同时难以用GPU加速。通常的做法是将冗余的weight置为0,但这样做还是保留了参数(等于0),不是真正去除掉。

在这篇论文中有个关于参数pruning多少与训练速度提升关系的实验验证,其中紫色线表示参数去掉的量。可以发现,虽然参数去掉了将近95%,但是速度依然没有提升。

接着Neuron pruning,通过去除冗余的神经元,简化网络结构。这样得到的网络结构是规则的,相比于Weight pruning,这种方式更好实现,也更容易通过GPU加速。

为什么我们先训练一个大的network,再压缩成一个小的network,而不是直接训练一个小的network呢?一般来说,大的network更容易训练,如果直接训练小的网络可能达不到大的network的训练效果。这里有个大乐透假说(Lottery Ticket Hypothesis)对上述观点进行了说明。

什么是大乐透假说(Lottery Ticket Hypothesis)呢?

现在有一个训练好的大的网络,可以分解成若干个小的网络,只要某一个小的网络性能与大的网络相同或相似,就说明这个大的网络可以压缩。

大乐透假说在实验上是怎么被证实的呢?

我们首先初始化网络结构,随机初始化参数并对网络进行训练,将训练完的网络做pruned。如果这时候我们还是采用这个压缩的网络结构但是随机初始化参数(绿色部分),发现网络训练不起来。但是如果我们采用这个压缩的网络结构,但是参数是从大网络对应参数位置拿过来训练(红色部分),就能训练起来。说明留下来的这组参数组成的网络是可以train起来的sub-network。

关于大乐透假说的一个后续的研究如下,通过充分的实验得到了一些结论:

  • 第一个发现是,尝试了不同的pruning strategy,发现如果训练前和训练后参数的差距越大,将其pruning后得到的结果越有效。
  • 第二个发现是,小的sub-network只要我们不改变参数的正负号,就可以训练起来。
  • 第三个发现是,对于一个初始的大的网络(参数随机初始化),有可能不训练就已经有一个sub-network可以有一个比较好的效果。

大乐透假说一定是对的吗?不一定。下面这篇文章就“打脸”了大乐透假说。实验是这样的,我们用pruned完的小网络随机初始化参数,再训练,只要多训练几个epoch,就可以比不随机初始化训练小网络的效果要好。

当然这篇文章的作者也给出了一些对大乐透假说的回应,大乐透假说出现的前提是当learning rate很小,或者unstructured(做Weight pruning )时候才有可能出现大乐透假说现象。


Knowledge Distillation(知识蒸馏)

首先我们先定义一个Teacher Net(大网络),训练它做特定的任务,比如手写数字识别,如图所示,训练好的大网络收敛后,预测“1”的结果可能“1”的概率是0.7,“7”的概率是0.2,“9”的概率是0.1.现在我们再定义一个Student Net(小网络),让它学习Teacher Net的训练结果。为什么这么做呢?因为我们之前说过,如果让小的网络得到跟大网络一样的效果往往比较难train,所以我们直接按照大network的训练精度训练小网络,会更容易train一些。

在上面给出的论文中也有介绍说,利用这种方式训练出的小网络,可能就算不给它“7”数据集样本,也有可能有一定的概率预测出“7”这个数字。因为“1”跟“7”很相近。

这个Teacher Net不一定是一个巨大的network,也有可能是将多个network组合(ensemble)得到的。但是多个network组合的模型往往比较复杂,在实际应用中,我们可以训练一个Student Net,让结果逼近N Networks的结果,使得模型准确度差不多的情况下,复杂度大大减少。

关于Knowledge Distillation的一个小技巧,在softmax函数基础上对每个输出结果加一个超参数T(Temperature),这样会对最后的预测结果进行一个平滑处理,让Student Net更好训练一些。

Parameter Quantization(参数量化)

参数量化,也可以称为参数压缩。这种方法的主要是对weight在存储量上减少的一类方法,具体来说有如下几种方式:

  1. 对于Weight的精度可能不需要太高就可以获得一个比较好的效果,比如从64位调整为32位或者16位等等,这样就可以减少存储的数据量。
  2. Weight clustering(权重聚类):将神经网络所有weight按值大小进行分堆,数值差不多的聚成一类。然后对每个类取一个值(可以是平均值)替换里面所有的权值,相当于每一堆只用一个值就可以存储,这样存储的数据量也大大减少。
  3. 采用信号处理中常用的一种方法:Huffman encoding(哈夫曼编码),常出现的东西用比较少的bit描述,不常出现的东西用比较多的bit描述,这样平均起来存储的数据量将大大减少,这也是一种有效减少数据量的方法。

weight到底可以压缩到什么程度呢?这里有种方法叫Binary Weights,也就是网络中的weight要么是+1,要么是-1,这样每个weight只需要1bit就可以存下来。

那这样训练出的网络效果会不会不太好?这里有一篇文章介绍了该方法用于3种数据集的图像分类问题中,结果发现BinaryConnect的方法识别错误率更小,原文给出的解释是这种方法会在一定程度上减少过拟合情况的发生。

Architecture Design(Depth Separable Convolution)

这里介绍一种关于CNN的减少参数量的结构化设计。

首先回顾一下CNN,假设输入有2个channel,对应的filter也是2个channel。假设有4个filter,每个filter都是3*3的,那么输出就有4个channel。卷积层共有 [公式] 个参数。

接着介绍Depth Separable Convolution,它分为两个步骤:

  1. Depthwise Convolution

它在做卷积的时候与传统的对图像做卷积有很大的不同。图片有几个channel就对应有几个filter,每个filter只管一个channel。channel大小是 [公式] ,channel数为1,因此channel与channel之间的联系无法体现出来。

上述过程有 [公式] 个参数。

2. Pointwise Convolution

为了解决无法学习输入图像channel与channel之间联系的问题,将Depthwise Convolution的输出结果用 [公式] 的filter做卷积,以4个filter为例,效果如下:

上述过程有 [公式] 个参数。

将标准CNN和Depth Separable Convolution参数量做对比,可以发现Depth Separable Convolution参数量比CNN要少很多。

上述方法为什么有效呢?这里有个解释(Low rank approximation)。如果神经网络某一层输入为N,输出为M,那么对应的weight就有 [公式] 个。这时,如果我们在N和M中间加一层,对应输出为K,那么参数量就是 [公式] 。当K比较小时,参数量相比于 [公式] 会大大减少。

结合上述思想,Depth Separable Convolution相当于将CNN中间多加了一层,这样就可以减少整体网络的参数量。

关于网络结构设计方面还有一些文献参考,感兴趣可以看一下里面相关的内容,这里就不多介绍。

Dynamic Computation(动态计算)

所谓Dynamic Computation就是让神经网络可以自适应调整计算量,比如让神经网络自适应不同算力的设备,或者同一设备不同电量时对算力的分配。

为什么不在一个设备上放好多个模型呢?因为需要占更多的空间。

如何自适应调整网络的计算量呢,一种方式是调整网络的动态深度,举例来说,我们让每个layer之间都接一个输出层,并决定不同算力应该从哪个output 层输出出来。这样的网络训练过程也比较简单,一种很直接的方式就是把所有输出层的loss统统加起来,让其最小。这种方式效果到底如何,可以参考下面的文献(MSDNet)中给出的结果。

另外一种方式是调整网络的动态宽度,也就是对某一个网络,根据不同算力动态决定其宽度,训练方法与上述动态深度方法类似,所有输出的loss都加起来,让其最小。

上述两种方法都是人为决定根据设备不同的算力(比如电量)动态调整网络深度和宽度,但实际上来说,对于不同难度的训练样本可能需要的层数也不一样。具体来说,对于简单的样本可能几层就可以得到正确的结果,但是对于复杂的样本可能需要多训练几层才能得到正确的结果,关于通过样本自适应调整网络结构的研究可以参考一下下面的一些文献。

最后总结一下,关于神经网络压缩(Network Compression)的这几种方法,它们并不是互斥的,可以先用某一个方法,再接着用剩余的一个或几个方法,直到满足压缩条件。

深度学习+压缩感知的图像压缩论文分享 (分块压缩的老问题了)现有的基于神经网络的压缩感知模型绝对多数都关注卷积来捕获图像局部特征,但这也导致建模全局关系时受到限制,而且这些模型的效率比较低,一直在用卷积层的堆叠,这就是作者要重新设计一个神经网络,使其学习图像子块间的全局关系的原因。proj的每个h都是第h个头部的线性投影,d是输入维度,attn()表示缩放的点积函数,concat()是用于将头部的离散注意力拼接在一起的函数,拼接后得到输出。初始重构后的结果仍然存在很强的块效应,而且它还是欠拟合的,不过是能用较低的容量保持了图像的信息。 阅读详情

相关推荐

模型压缩常用方法简介

模型压缩常用方法简介

weixin_44966641的博客 8012

神经网络压缩

面对参数量巨大的神经网络,如何将这些巨大的模型更好应用于算力较小的设备上成为一个难点,因而研究如何对神经网络进行压缩成为一个重点。 神经网络压缩有五种方法 1.参数/神经元修剪(Network Pruning) 每次只修建网络的一小部分参数或者神经元,之后进行训练,如此反复。 通过去除网络中对网络性能影响不大的参数或者神经元来缩小网络规模,使得缩小后的模型虽然性能稍微有所下降,但仍然在可接受的范围内,本质上是用模型性能换取模型所需算力。 通过对模型参数重要性进行评估,如参数的绝对值的大小,

weixin_43219470的博客 1563

基于聚类神经网络的颜色降维图片压缩方法

只用不到二十个数字就能在某种失真度上保存一张图片,你信不信? 1、方法原理 ……首先要了解,图片的保存原理是利用像素点,所有颜色都是由三原色(红黄蓝)按不同比例混合而成的,所以每一张彩色图片的每一个像素点就包含着这三种颜色的权重。 ……一张彩色图片的像素信息由三张二维矩阵构成,每一个二维矩阵代表三原色其中一种颜色的权重,可以简单地这样理解: 将一张彩色图片很细密地横竖切割成MXN个小块块,当小块足...

m0_46557838的博客 846

神经网络模型压缩方法

神经网络模型压缩方法( flask API、onnx、ncnn在嵌入式、流媒体端口应用)

zhaohaobingniu的博客 4373

VALSE 2017 | 神经网络模型压缩优化方法

​近年来,深度神经网络在计算机视觉、语音识别等领域取得了巨大成功。为了完成更加复杂的信息处理任务,深度神经网络变得越来越深,也使得其计算量越来越大。然而,手机、车载等移动端应用对深度神经网络的需求越来越多,因而深度神经网络模型的压缩、加速、优化变的越来越重要。这也是本届VALSE的热点之一。 深度学习算法是计算密集型和存储密集型的,这使得它难以被部署到资源有限的嵌入式系统上。

计算机视觉life 1万+

卷积神经网络模型压缩方法介绍

1.矩阵分解法 矩阵分解法被广泛地应用于线性模型的加速以及参数的压缩上,具体方法是使用奇异值分解的方式对参数矩阵进行分解。奇异值分解有很明显的物理意义,即它可以将一个复杂矩阵用几个小矩阵相乘来表示,这些小的矩阵描述的是复杂矩阵的重要特征。例如,给定一个参数矩阵,可以将其分解为。这里、里面的向量称为左奇异向量和右奇异向量,而且向量是两两正交的。通过方阵可以求得特征值,这里的为右奇异向量。再通过公式...

weixin_37603007的博客 4365

转神经网络压缩提升方法

神经网络压缩 2018-07-06| 阅读:次 https://ewenwan.github.io/2018/07/Deep_Compression/ 性能提升方法 本文github链接 1. 小模型 mobilenet , 更精细模型的设计,紧致网络设计 mobilenet squeezenet shufflenet MobileNet逐通道卷积 + 普通点卷积...

liangjiubujiu的博客 1676

神经网络压缩联合优化方法的研究综述

神经网络轻量化的方法有直接设计轻量级网络和压缩现有的神经网络模型2种思路。直接设计轻量级网络分为人工设计轻量级网络模型和基于神经网络架构搜索(neural architecture search , NAS)的自动化神经网络架构设计。人工设计轻量级神经网络的思路是设计更加高效的卷积计算方式、构造更高效的神经网络结构,如谷歌采用深度可分离卷积替代传统卷积提出了MobileNet v1[4。

fzq0625的博客 202

6 种 卷积神经网络压缩方法

神经网络压缩算法是,旨在将一个庞大而复杂的预训练模型(pre-trained model)转化为一个精简的小模型。按照压缩过程对网络结构的破环程度,我们将模型压缩技术分为“前端压缩”和“后端压缩”两部分。是指在不改变原网络结构的压缩技术,主要包括知识蒸馏、轻量级网络(紧凑的模型结构设计)以及滤波器(filter)层面的剪枝(结构化剪枝)等;是指包括低秩近似、未加限制的剪枝(非结构化剪枝/稀疏)、参数量化以及二值网络等,目标在于尽可能减少模型大小,会对原始网络结构造成极大程度的改造。

不要给自己设限,尝试更多可能(思所向 皆可往) 1516

AI人工智能神经网络的模型压缩方法

本文旨在系统性地介绍神经网络模型压缩的各种方法和技术,帮助读者理解如何在不显著损失模型性能的前提下,减小模型体积、降低计算复杂度。内容涵盖基础概念、核心算法、数学原理、实际应用和未来趋势。文章首先介绍模型压缩的基本概念和必要性,然后详细讲解三种主要压缩方法:量化、剪枝和知识蒸馏。接着展示实际应用案例和代码实现,最后讨论未来发展趋势和挑战。模型压缩:减小神经网络模型大小和计算需求的技术量化:将模型参数从高精度表示转换为低精度表示的过程剪枝:移除神经网络中不重要的连接或神经元知识蒸馏。

AI云原生与云计算技术学院 1154

卷积神经网络压缩方法

卷积神经网络的6种压缩方法

allein_STR的博客 847

神经网络压缩方法的优缺点比较

随着技术的进一步发展和创新,神经网络压缩方法将在实际应用中发挥更重要的作用,并为人工智能技术的推广和普及提供支持。常见的量化方法包括权重量化和激活量化。在知识蒸馏中,大型模型(教师模型)的预测结果被用作小型模型(学生模型)的监督目标。在训练过程中,根据权重的大小对神经网络进行修剪,将较小的权重置为零或移除。这样可以减少网络中不必要的连接,降低存储空间的占用和计算的复杂度。知识蒸馏方法依赖于教师模型的存在,对教师模型的选择和训练有一定的要求。知识蒸馏可以将大型模型的知识传输到小型模型中,实现了模型的压缩。

298

卷积神经网络压缩方法总结

前端压缩,是指在不改变原网络结构的压缩技术,主要包括知识蒸馏、紧凑的模型结构涉及以及滤波器(filter)层面的剪枝(结构化剪枝)等; 后端压缩,是指包括低秩近似、未加限制的剪枝(非结构化剪枝/稀疏)、参数量化以及二值网络等,目标在于尽可能减少模型大小,会对原始网络结构造成极大程度的改造。

专注计算机视觉算法训练,算法优化部署以及SDK开发的知识分享。 367

卷积神经网络与图像压缩:高效的方法

1.背景介绍 卷积神经网络(Convolutional Neural Networks, CNNs)是一种深度学习算法,主要应用于图像处理和计算机视觉领域。它们的主要优势在于能够自动学习特征表示,从而在图像分类、目标检测、对象识别等任务中取得了显著的成功。然而,随着数据量的增加,卷积神经网络的参数量也随之增加,导致模型训练和推理过程中的计算开销和存储需求大大增加。因此,图像压缩技术在这些场景中具...

AI天才研究院 2099

Arduino平台软硬件原理及使用——Arduino Uno板卡的使用

Arduino Uno板卡的基本使用

洪博hopes的博客 4174

用Matlab和CVX搞定原子范数最小化:一个信号处理小白的避坑实践

本文详细介绍了如何使用Matlab和CVX实现原子范数最小化(Atomic norm minimization),特别适合信号处理初学者。从CVX安装配置、核心代码解析到实战中的典型问题与解决方案,提供了全面的避坑指南。通过具体案例展示了原子范数在频率估计和DOA估计中的优势,并给出性能优化策略和可视化方法。

weixin_28731231的博客 232

卷积神经网络的压缩方法简介

卷积神经网络的压缩方法简介低秩近似剪枝与稀疏约束参数量化二值网络知识蒸馏紧凑的网络结构 尽管卷积神经网络在诸如计算机视觉、自然语言处理等领域取得了出类拔萃的效果,但其动辄过亿的参数数量却使得诸多实际应用望而却步(特别是基于嵌入式设备的应用)。经典的VGG-16网络中,其参数数量达到了1亿3千多万。存储代价和计算代价都很大,严重制约了深度网络在移动端等小型设备上的应用。 鉴于各种问题,神经网络的压缩逐渐成为当下深度学习领域的热门研究课题。研究者们提出了各种新颖的算法,在追求模型高准确度的同时,尽可能地降低其复

张帅影&RS&DeepLearning 1542

在Allegro设计界面中如何修改封装焊盘

在高密度板的情况下,SUIPLA(支持内层没有的焊盘摘掉)打勾,在高密度板的情况下,内层没有的焊盘摘掉可以增加走线的空间。3、修改完焊盘后,选择File→Update to Design(更新到设计)。然后关闭焊盘修改对话框即可。,将会定期不定期更新技术文章,互相学习交流。或者点击Options选项卡下要修改的焊盘,然后点击Edit修改。在Allegro PCB设计界面中修改封装焊盘的方法。2、然后点击封装上要修改的焊盘,右击选择Edit。修改完成后如下图所示。

bhxc809751502的博客 7806

6种卷积神经网络压缩方法

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达来源:机器学习杂货店 本文约5200字,建议阅读10+分钟 我们知道,在一定程度上,网络越深,参数越多,模型越复杂,其最终效果越好。神经网络的压缩算法是,旨在将一个庞大而复杂的预训练模型(pre-trained model)转化为一个精简的小模型。按照压缩过程对网络结构的破坏程度,我们将模型压缩技术分为 “前端压缩” 和 “后...

小白学视觉 270

【国产MCU系列】-GD32F4开发环境搭建(基于Embedded Builder)

GD32F4系列MCU采用Arm® Cortex®-M4内核,处理器主频高达240MHz,可支持算法复杂度更高的嵌入式应用,具备更快速的实时处理能力,并拥有业界领先的大容量存储优势。

视觉与物联智能 3078

【Metashape精品教程4】软件设置

介绍Metashape软件设置

penglu366366的博客 2949

总结了6种卷积神经网络压缩方法

神经网络的压缩算法是,旨在将一个庞大而复杂的预训练模型(pre-trained model)转化为一个精简的小模型。

华为云官方博客 1213

华为OD机试 - 取出尽量少的球 - 感谢@吴修柯反馈(Python/JS/C/C++ 双机位A卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。感谢@吴修柯反馈,2025-03-22,A卷200分考试真题。某部门开展 Family Day 开放日活动,其中有个从桶里取球的游戏。有 N 个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球,每个小桶装的小球数量记录在数组 bucke

学Java,找哪吒 1485

面向稀疏大数据的神经网络模型压缩与加速方法研究

当前的研究主要集中在参数剪枝和知识蒸馏等方法上,未来的研究方向包括结合稀疏性和压缩方法、自适应和动态压缩方法等。然而,随着数据规模的增大和模型复杂度的提高,神经网络的存储和计算开销也越来越大。未来的研究方向是开发具有自适应性和动态压缩的方法,根据数据的特点和需求实时调整模型的结构和参数。未来的研究方向是将稀疏性和压缩方法相结合,设计适用于稀疏大数据的神经网络模型压缩与加速方法。通过将大模型的预测结果作为小模型的目标,可以减少小模型的存储和计算开销,同时保持较高的性能。二、神经网络模型压缩方法。

C_19870的博客 226

搭建ROS小车真的难吗?

搭建ROS小车真的难吗?不难 1.引言 本着为大家谋福利的心态,根据自己以往的开发经验,打算写一个从零开始制作一个可以实现地图构建和导航的ROS小车。目前某宝上面有很多现成产品,但是我个人认为,一个好的移动机器人开发工程师,应该对机器人的整个流程都能具备维护的能力,然后再深入研究其中一个方向即可。看到网上很少有整个系列的开发教程,看到同学们大多东拼西凑,浪费了不少时间。我就想着利用空余时间,将我本人的开发过程输出给大家。有基础理论、有实际工程代码、有丰富的学习资料,尽最大努力帮大家进入移动机器人的大门。 国

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

【面试系列】数据分析师高频面试题及详细解答

本文为数据分析师岗位提供了详尽的面试题库和解答,涵盖初级、中级和高级三个层次。初级面试题涉及基本的数据处理和统计分析知识,如SQL查询、数据清理和基础统计概念。中级面试题则重点考察数据可视化、复杂查询和数据建模等技能。高级面试题则深入探讨高级统计方法、大数据处理和高级分析工具的使用。通过这些问题和解答,候选人可以全面了解数据分析师岗位所需的技能,帮助其更好地准备面试。常考知识点总结部分则系统归纳了数据分析师岗位的关键技能领域。

在路上的专栏 5228
上一篇: 推荐系统领域最新研究进展(0410-0417)
下一篇: 目标检测之YOLO系列
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值