深度神经网络压缩与加速技术

news2025/4/23 20:36:21

  //  

深度神经网络是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。深度神经网络是一种判别模型,可以使用反向传播算法进行训练。随着深度神经网络使用的越来越多,相应的压缩和加速技术也孕育而生。LiveVideoStackCon 2023上海站邀请到了胡浩基教授为我们分享他们实验室的一些实践。

文/胡浩基

编辑/LiveVideoStack

大家好,我是来自浙江大学信息与电子工程学院的胡浩基。今天我分享的主题是《深度神经网络压缩与加速技术》。

88a7c01f3ffc646e33d734f5980222cf.png

首先一个问题是,为什么要做深度神经网络压缩?有两个原因:第一个原因是大型的深度神经网络很难部署在小型化的设备上。另一个原因是当深度模型越来越大,需要消耗的计算和存储资源越来越多,但是物理的计算资源跟不上需求增长的速度。

从右边的图可以看出,从2005年开始,硬件的计算资源增长趋于放缓,而随着深度学习领域的蓬勃发展,对算力的需求却是指数级增长,这就导致了矛盾。因此,对深度模型进行简化,降低其计算量,成了当务之急。近年来,以ChatGPT为代表的大模型诞生,将这个问题变得更加直接和迫切。如果想要应用大模型,必须有能够负担得起的相对低廉计算和存储资源,在寻找计算和存储资源的同时,降低大模型的计算量,将是对解决算力问题的有益补充。

ec8e1d1cb2a4eb6a1cb3c8af7dfd0a1b.png

例如2017年流行的VGG-16网络,在当时比较主流的CPU上处理一张图片,可能需要1.7秒的时间,这样的时间显然不太适合用部署在小型化的设备当中。

1886991784cee024441d08ea220f03de.png

深度神经网络的压缩用数学表述就是使用一个简单的函数来模拟复杂的函数。虽然这是一个已经研究了几百年的函数逼近问题,但是在当今的环境下,如何将几十亿甚至上千亿自由参数的模型缩小,是一个全新的挑战。这里有三个基本思想 -- 更少参数、更少计算和更少比特。在将参数变少的同时,用较为简单的计算来代替复杂的计算。用低精度量化的比特数来模拟高精度的数据,都可以让函数的计算复杂性大大降低。

107692eb23064b9975a962396b510880.png

深度模型压缩和加速领域开创人MIT的副教授韩松在2015年的一篇文章,将深度学习的模型压缩分成了如下的5个步骤。最左边输入了一个深度学习的模型,首先要经过分解(decomposition),即用少量的计算代替以前复杂的计算,例如可以把很大的矩阵拆成多个小矩阵,将大矩阵的乘法变成小矩阵的乘法和加法。第二个操作叫做剪枝(pruning),它是一个减少参数的流程,即将一些对整个计算不那么重要的参数找出来并把它们从原来的神经网络中去掉。第三个操作叫做量化(Quantization),即将多比特的数据变成少比特的数据,用少比特的加法和乘法模拟原来的多比特的加法乘法,从而减少计算量。做完以上三步操作之后,接下来需要编码(encoding),即用统一的标准将网络的参数和结构进行一定程度的编码,进一步降低网络的储存量。经过以上四步的操作,最后可以得到一个被压缩的模型。

017db461eda5de4313f14eb35dd7621c.png

我们团队提出了另外一种基于层次的模型压缩分类。最上面一个层级叫做网络结构搜索(network architecture design),即搜索一个计算量较少但对于某些特定任务很有效的网络,这也可以看作另一种压缩方式。第二个层级叫做分层压缩(Layer)。深度学习网络基本上是分层的结构,每一层有一些矩阵的加法和乘法,对每一层的这些加法和乘法进行约束,例如将矩阵进行分解等,这样可以进一步降低计算量。第三个压缩层级是参数(weight),将每一层不重要的参数去掉,这也就是剪枝。最下面的层级是比特(bit),用量化对每个参数做比特层级的压缩,变成量化的编码。

9daddb32b03db78ec863ed18ef7d569f.png

这里是各种压缩方式的介绍以及它们的挑战。剪枝(Pruning)减少模型的参数;低秩分解(Low rank factorization)将大矩阵拆成小矩阵;知识蒸馏(Knowledge Distillation)用大的网络教小的网络学习,从而使小的网络产生的结果跟大的网络类似;量化(Quantization将深度神经网络里的参数进行量化,变为低比特参数,降低计算量。

4e96a0f8bb1f6c4c5125341cc3216c2d.png

2018年BMVC会议,我们团队提出了一种基于概率的剪枝方法,叫做Structured Probabilistic Pruning。这种方法的核心思路是将神经网络里不重要的参数去掉。那么如何划分重要与不重要,是首要问题。最好的标准是去掉某个参数以后测试对于结果的影响。但是在整个网络中那么多的参数,如果每去掉一个参数都测试对结果的影响,时间就会非常漫长。所以需要用一些简单的标准,例如参数绝对值的大小来评判参数的重要性。但有一个矛盾是,简单标准对于衡量参数重要性来说并不准确。那么如何解决上述矛盾呢?我们提出的方案形象一点就是,用多次考试代替一次考试。我们将在训练到一定的地步之后,去掉不重要的参数,这个过程叫做一次考试。但是每次考试都有偏差。于是我们发明了这种基于概率的剪枝方法,将一次考试变成多次考试。即每训练一段时间测试参数重要性,如果在这段时间内它比较重要,就会给它一个较小的剪枝概率,如果在这一段时间内不那么重要,就会给它一个较大的剪枝概率。接下来继续训练一段时间,再进行第二次考试。在新的考试中,以前不重要的参数可能变得重要,以前重要的参数也可能变得不重要,把相应的概率进行累加,一直随着训练的过程累加下去,直到最后在训练结束时,根据累加的分数来决定哪些参数需要被剪枝。

37b16538065d7195d522e82babcf6f69.png

644ef70c23c0cbc2277b52336c533a72.png

这种方式叫做SPP——Structured Probabilistic Pruning。SPP算法相对于其他的算法有一定的优势,具体体现在左边的图片里。例如我们将AlexNet压缩两倍,识别准确率反而提高了0.7,说明对于AlexNet这样比较稀疏的网络效果很好。从别的图片也可以看到,相对于其他的算法也有一定优势,这里不详细展开介绍。

64792bff7d62d139cc3227317a895d8f.png

2020年我们又提出一种基于增量正则化的卷积神经网络剪枝算法。通过对网络的目标函数加入正则化项,并变换正则化参数,从而达到剪枝的效果。

a4113ade49245370aca302d3133f749a.png

我们通过严格的数学推导证明了一个命题,即如果网络函数是二阶可导,那么当我们增加每一个网络参数对应正则化系数时,该参数的绝对值会在训练过程中会减小。所以我们可以根据网络参数的重要程度,实时分配其对应正则化系数的增量,从而将一些不太重要的参数绝对值逐渐压缩到零。通过这种方式,可以将神经网络的训练和剪枝融合到一起,在训练过程中逐步压缩不重要参数的绝对值,最终去除它们。

5f6d4f5e59e7a6f080bfac577354df76.png

相比SPP, 增量正则化方法在AlexNet(ImageNet)上将推理速度提高到原来的4倍,也能够提高0.2%的识别率。在将网络推理速度提高5倍情况下,识别率也仅仅下降了0.8,这相比其他压缩算法也有很大的优势。

644b50bb6cc50f578d0fdf9576e12d6b.png

增量正则化方法对于三维卷积网络的也有一定的压缩效果,在3D-ResNet18上,将推理速度提高2倍,识别率下降了0.41%;将推理速度提高4倍,识别率下降2.87%。

956758fa048b9e772c89a71643b509a2.png

基于增量正则化方法,我们参与了AVS和IEEE标准的制定,提出的算法成功的写入到国家标准《信息技术 神经网络表示与模型压缩 第1部分 卷积神经网络》中,同时也被写入“IEEE Model Representation, Composition, Distribution and Management”标准中并获得今年的新兴标准技术奖。

ad8d7a41c44a645ca5950e577c4f3e4a.png

最近几年,我们还将深度模型压缩技术应用到图像风格迁移、图像超分辨率等底层视觉任务中。2020年的CVPR论文,我们利用知识蒸馏来压缩风格迁移网络。这里是风格迁移网络的例子,即输入两张图片,一张是内容图片,一张是风格图片。通过风格迁移网络生成一张图片,将内容和风格融合起来。我们需要做的事就是压缩风格迁移网络的大小。

5152082df94960ddfa179be0cba65d73.png

我们利用知识蒸馏来压缩风格迁移网络,即设计小的学生模型,用小的学生模型来模拟大的教师模型的输出,从而达到压缩大的教师模型的目的。我们也设计了针对风格迁移网络的损失函数,更好的完成了知识蒸馏的任务。我们提出的方法有很好的性能,例如在2020年效果比较好的WCT风格迁移网络,整个模型的大小是133m,经过压缩之后只有10m。一块GPU上使用WCT最多可以同时处理900×900的图片,压缩之后,同样的GPU上能够处理6000×6000的图片,在处理速度上,处理900×900的图片,WCT需要花费78秒,压缩之后只需要7秒,同时处理6000×6000的图片,在单卡的GPU也只要花费52秒的时间。

be606f6719f2da38df621199fe559fa7.png

8c7cebf98466afaf08a03f51f17ffce6.png

1ffc1fd410e7982b242d4cb359cf5ad8.png

6caea4619be4854dc51228ba45c6a83e.png

可以看到,通过我们的模型压缩技术,即便是4,000万像素图片的风格迁移,放大后的图像细节依然清晰。

c167bb945bdaff3c57a727d355fa480e.png

在人脸识别方面,我们也使用了知识蒸馏的方法。这是2019年发表在ICIP的论文,人脸识别中有个三元组的损失,即图片左上角。其中有一个超参数m。这个m是不可以变化的。通过改进,我们将m变成了一个可变的参数,这个参数能够由学生网络计算两个图之间的距离,用距离的方式将m确定下来。基于这种动态的超参数,我们规划了知识蒸馏算法,获得了不错的效果。

9937b052a030413aee62b11bb9a99db9.png

我们实现了可能是世界上第一个公开的2M左右的人脸识别模型,同时在LFW数据上达到99%以上的识别率。同时,我们将所做的小型化人脸识别模型嵌入到芯片中,让人脸识别获得了更多的应用。

29ae00f1bd35e3f3efc963102cf1a128.png

0bead0bf338b15f8652b47e41a8b6868.png

在瑞芯微RK3288上,原有的模型处理一张图片大概在0.31秒。而我们这个压缩后只有2M左右的模型,处理一张图片的时间在0.17秒左右。

25aba3944eecff8d6bef2d2195725bed.png

2020年开始,我们和华为合作,将深度压缩模型应用在图像超分辨率上。卷积神经网络是一个先处理局部,再处理全局的模型。而在超分辨率网络中,局部信息很重要,需要用跳线连接前面和后面的层。每一个跳线不仅把数据传送过去,还要同时将那一层的特征图传过去。后面的层不仅仅要处理自己那一层产生的特征图,还要处理前面传送过来的特征图。然而,不是每一个跳线都重要,都需要保留。于是我们规划算法,删除一些不重要的跳线,同时也删除了传送过来的特征图,从而降低了图像超分辨率网络的计算量。我们采用马尔科夫过程建模目标函数,消除冗余的跳线,从而完成对超分辨率网络的压缩。

f28219b58f961d002c5b9aecfadaa9ee.png

左边表格是一些定量的结果。FLOPs是网络中加法和乘法的次数。经过压缩之后的模型DCP-R-102的FLOPs只有102G,与计算量最大的网络D-DBPN相差50多倍的计算量,而图像的PSNR和SSIM基本不变。右边图片是定性结果,可见,我们的网络DCP-R可以很好的恢复图片的纹理和细节。

72d6a13fb188776e7aad8b1d32a6dfb5.png

这是关于图像超分辨率的另一个工作。这里我们将将蓝色的大网络拆成两块,通过互蒸馏(cross knowledge distillation)这种方式进一步完成对超分辨率网络的压缩。右图是具体的定性和定量的结果。

43d7ea6cca1e765520c1ed9e2701ba87.png

这篇发表在期刊Pattern Recognition上的文章所做的事情是对深度模型进行量化。最极致的量化叫做二值化(binarization),即对每个参数只用+1和-1两个值来表示。如果每个参数都只是+1和-1,那么网络计算中矩阵的乘法将可以变为加减法,这样就比较适用于类似FPGA这种对于乘法不友好的硬件系统中。但是二值化也会带来一定的坏处,由于每个参数取值范围变小,整个网络的性能会有极大的下降。我们在将网络二值化的同时,为网络加一些辅助的并行结构,这些并行结构是通过网络搜索出来的,也都是一些二值化的分支,即图中红色的部分。加入并行结构后一方面让二值化的性能有了提升,另一方面也让计算增量保持在可控的范围内。利用下方的公式,综合考量精度(accuracy)、特征图相似性(similarity)和复杂度(complexity)三个方面,构造目标函数,在提高精度的前提下尽量减小复杂度,从而达到模型精度和复杂度的平衡。最近我们也在尝试使用重参数化的方式,将这些增加的结构合并到以前的网络当中,从而使网络结构不发生改变的前提下,进一步增加网络二值化的效果。

5ec0192d2aad8e7e3442ad4b05db16cb.png

在ResNet-18上可以看到,使用上述方法可以把90.5%的识别准确度变成92.8%,同时计算量没有提升特别多。

214e1d7cbfbc14635a9ad92bb2611b41.png

我们也是比较早做Transformer压缩的实验室。Transformer压缩的第一步是用矩阵理论对Transformer中Q、K、V三个矩阵进行分解,用小的矩阵相乘和相加代替大矩阵的相乘。通过一些理论推导,证明在特定场合下相比原有的矩阵计算准确度上界会有一定提升。压缩的第二步是减掉Transformer网络里的跳线。通过这两个相对简单的压缩方式完成对Transformer网络的压缩,同时将其用在智能视觉问答任务中。

a62686db697434e9d892bbdb8b3cd5d1.png

这是一些定量和定性结果的比较,可以看到我们的算法在保留原来性能的同时大幅度减少了网络的计算量。

07201a475ec4ef09581918dfb1031889.png

8816dea64759113717762a1ebe4e6bf8.png

最后,讲一下我认为这个领域可能有前途的未来发展方向。

首先,利用神经网络压缩技术弥补大规模语言和视觉基础模型的不足是迫在眉睫的方向。大模型消耗过多的计算量和存储量,如何将大模型变小是一个重要的科学问题。一些具体的问题包括,如果大模型是可以做100种任务的通才,那么如何将其转变为只能做1种任务小模型,也就是专才?这里有很多空间,值得继续挖掘。

第二,针对流行的特定任务网络进行压缩,例如Nerf和扩散模型等。但是,如果我们不能在方法上有所创新,只是一昧追逐流行的网络进行压缩,也会陷入内卷的困境。

第三,我认为软硬结合的的网络压缩算法是值得深入研究的方向。将硬件参数和硬件结构作为优化函数的一部分写入到网络压缩算法中,这样压缩出来的网络就能够直接适配到专门的硬件上。

第四,神经网络压缩算法和通信领域的结合。例如增量压缩,即设计神经网络压缩算法,在发送端首先传输网络最重要的部分,接收端首先收到一个识别精度较低的模型;随着更多的传输,接收端能逐步接收到越来越精确的模型。这个想法与图像或视频的压缩类似,可以完成神经网络模型在不同环境和资源下的个性化部署。

最后,我比较关注的是理论方面的研究,我暂且把它称为深度神经网络的信息论。目前的模型压缩算法设计主要靠经验,欠缺理论基础。一个重大的理论问题是,对于特定的任务、数据和网络架构,实现特定的精度所需要的最小计算是多少?这个问题当然是有一个明确的答案,但目前我们离这个答案仍然非常遥远。就像香农的信息论在通信领域的基础地位一样,我们也期待深度神经网络的信息论早日诞生。

我的演讲就到这里,以下是我们实验室的网页、联系方式,以及一些开源的代码,欢迎有兴趣的听众和我们联系。谢谢大家。


83b76ff8737a3f51595cf8a50fc0a519.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1087394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度SEO优化全攻略(提高网站排名的5个方面)

百度SEO入门介绍: 随着互联网的不断发展,SEO已经成为网站优化的重要一环。而百度作为中国最大的搜索引擎,其SEO优化更是至关重要。SEO不仅能够提高网站排名,还能够提高网站流量、用户体验以及品牌知名度。因此,掌握百…

软件性能瓶颈问题之数据库性能问题定位

前言:数据库的性能瓶颈包括:数据库索引,锁,表空间,慢sql,数据量 一、性能问题 1.1 缺乏索引: 索引本质上是一种数据结构,允许数据库快速查找特定的数据 1.2 查询效率低&#xff1…

【数据库系统概论】第三章关系数据库标准语言SQL

选择题会考: 1.数据查询: SELECT:用于选择需要查询的列和行。 FROM:用于指定要查询的表。 WHERE:用于指定查询条件。 GROUP BY:用于按照指定的列对结果进行分组。 HAVING:用于指定分组条件…

解决jmeter软件显示为英文、返回数据乱码、设置编码格式的问题

一.jmeter软件每次打开都需要手动切换中文 1.修改配置文件,可以把jmeter设置成中文: 2.打开jmeter.properties配置文件,修改languagezh_CN 二.返回数据乱码 改配置文件 进入Jmeter的bin目录下,找到jmeter.properties文件&#…

科研上新 | 第2期:可驱动3D肖像生成;阅读文本密集图像的大模型;文本控制音色;基于大模型的推荐智能体

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

minio桶命名规则

一、背景 今天做项目需要上传图片到minio,上传失败,查看错误是桶未创建成功。 minio桶的创建具有自己的命名规则,不符合则无法创建。 二、命名规则 1、存储桶名称的长度必须介于 3(最小)到 63(最大&…

KBL610-ASEMI内置4颗84MIL芯片KBL610

编辑:ll KBL610-ASEMI内置4颗84MIL芯片KBL610 型号:KBL610 品牌:ASEMI 封装:KBL-4 恢复时间:>50ns 正向电流:6A 反向耐压:1000V 芯片个数:4 引脚数量&#xff1…

将C盘中的文件夹迁移到其他盘符

目录 1 微信文件 2 移动系统自带文件夹 3 清除软件的缓存 1 微信文件 微信文件默认存储在C盘中,放任不管可能会占用很大的空间 更改后文件会自动挪过去,在C盘中只保留较小的空间 2 移动系统自带文件夹 像文档,图片这种文件夹&#…

数据治理是一个怎样的体系化的过程?_光点科技

数据治理是一个复杂而系统化的过程,旨在确保企业能够有效地管理、维护和利用其日益增长的数据资产。这一过程涉及多个层面和步骤,需要有明确的框架和战略规划。 数据治理的体系化始于明确定义的目标和愿景。企业需要明确意识到数据对于业务成功的重要性&…

华泰证券:京东营收增长或短期承压

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,华泰证券近期发布研报称京东营收增长或短期承压。华泰证券主要观点如下:营收增长或短期承压,聚焦长期内生能力建设 考虑到消费情绪的恢复仍需一定时间,我们预计…

免疫球蛋白介绍

免疫球蛋白(Immunoglobulin,Ig)是广泛存在于哺乳动物血清、淋巴液、组织液和外分泌液中的一种具有抗体活性或化学结构与抗体相似的球蛋白,在机体防御疾病的重要成分在疾病研究、药物研发、疫苗评价中具有重要作用。抗体&#xff0…

PLL的环路滤波器

本篇文章仅为分享PLL学习过程及一些公式推导,如有错误,还请批评指正! 文章目录 1、一阶RC低通滤波器(II类锁相环)2、二阶RC低通滤波器A、加电容型B、加RC低通滤波器型 3、三阶低通滤波器 锁相环3大组成部分&#xff1…

浅谈IT运维-服务目录

目录 服务目录的作用 服务目录常见的应用场景 服务目录是否必须有 服务目录的视图分类 用户视图 客户视图 服务提供者视图 服务目录的分类原则 为什么要分类 服务目录的分类方法 服务目录划分的颗粒度把握 服务详情 服务目录包括:服务目录、服务详情两大…

Redis cluster 集群

redis集群redis集群是一个提供在多个redis节点间共享数据的程序集,redis集群可以支持多个master Redis集群支持多个master,每个master又可以挂载多个slave 读写分离、支持数据的高可用、支持海量数据的读写存储操作由于Cluster自动Sentinel的故障转移机制&#xff…

ChatGLM流式输出的报错修复

ChatGLM中的openai_api.py中的代码如下: # codingutf-8 # Implements API for ChatGLM2-6B in OpenAIs format. (https://platform.openai.com/docs/api-reference/chat) # Usage: python openai_api.py # Visit http://localhost:8000/docs for documents.import …

为什么要学习python

Python 越来越火爆 Python 在诞生之初,因为其功能不好,运转功率低,不支持多核,根本没有并发性可言,在计算功能不那么好的年代,一直没有火爆起来,甚至很多人根本不知道有这门语言。 随着时代的…

MySQL常用命令02

今天主要总结下命令行模式下创建数据库、查看数据库以及删除的命令。 1.创建数据库的命令:CREATE DATABASE [IF NOT EXISTS] 数据库名称; 创建一个名为db_teaching的数据库 库已经创建成功,重复创建报错: 提示改数据库已经存在。 我们在创…

调整C / C ++编译器以在多核应用程序中获得最佳并行性能:第二部分

下面的图5.10 描述了此过程,该过程包括四个步骤:点击领取嵌入式物联网学习路线 1.表征应用程序。 2.优先进行编译器优化。 3.选择基准。 4.评估编译器优化的性能。 图5.10:编译器优化过程 使用编译器的优化始于 对应用程序的表征。此步骤…

Python 实训教学,更便捷的学生邀请及内容分发|ModelWhale 版本更新

中秋国庆假期结束,ModelWhale 又迎来了新一轮的版本更新,让我们调整好节奏,一起奔赴新的旅程! 本次更新中,ModelWhale 主要进行了以下功能迭代: 新增 一键邀请外部用户加入课程(团队版✓&#…

欢迎大家关注我的个人公众号-这个豆包有点粘

欢迎大家关注我的个人公众号-这个豆包有点粘 如果大家不嫌弃的话,可以帮忙关注一下公众号,谢谢大家,个人准备长期运营此账号,文章内容种类繁多,前端学习、时事新闻、心灵鸡汤、幽默段子,一定有一款适合你。…