模型压缩--概述
目前在深度学习领域分类两个派别,一派为学院派,研究强大、复杂的模型网络和实验方法,为了追求更高的性能;另一派为工程派,旨在将算法更稳定、高效的落地在硬件平台上,效率是其追求的目标。复杂的模型固然具有更好的性能,但是高额的存储空间、计算资源消耗是使其难以有效的应用在各硬件平台上的重要原因。
工业层面
当前各大互联网公司都开始注意深度学习模型在工业上的落地。模型压缩工具开始在各家的生产工具中进入主流,并且各家也开源了对应的工具。具体如下:
- 百度PaddleSlim: https://github.com/PaddlePaddle/PaddleSlim 基于百度PaddlePaddle的一个模型压缩工具。提供量化、蒸馏、剪枝、模型结构搜索、硬件延时搜索等功能。功能强大、接口比较简单,对熟悉paddle的开发者比较友好。
- 腾讯Pocketflow:https://github.com/Tencent/PocketFlow 腾讯基于TensorFlow开发的一个模型压缩工具,功能有限,很久没更新
- 微软NNI:https://github.com/microsoft/nni 微软的模型压缩,网络结构搜索,网络剪裁工具。相对来说,功能比较完善,支持多个平台。
- 谷歌auto-sklearn:https://github.com/keras-team/autokeras 基于keras的一个自动学习平台,核心功能是网络结构搜索
总体来看,模型压缩方法、工具及应用落地已经在各个大互联网公司呈百花齐放的态势。各家都在构建自己的模型压缩工具及生态环境并努力实现在自家产品的落地(作者接下来会对各个工具做一些性能对比,并选出一家做详细的技术调研)
算法层面
理论算法层面,早在2015年,韩松发表的Deep Compression就是一篇对于模型压缩方法的综述型文章,将裁剪、权值共享和量化、编码等方式运用在模型压缩上,取得了非常好的效果,作为ICLR2016的best paper,也引起了模型压缩方法研究的热潮。
- Deep Compression:https://arxiv.org/abs/1510.00149
随着研究的深入,当前深度学习模型压缩和加速算法已经成为一个相当庞大且活跃的研究领域,涵盖软件和硬件,包括众多的技术方向。目前深度学习模型压缩方法的研究主要可以分为以下几个方向:
- 轻量网络设计:指重新设计新型网络结构,而不局限于仅对现有网络进行优化加速。轻量网络设计方向的主要代表论文是 MobileNet v1 / v2 , ShuffleNet v1 / v2 等,其主要思想是利用 Depthwise Convolution、Pointwise Convolution、Group Convolution 等计算量更小、更分散的卷积操作代替标准卷积。这类模型的计算量通常仅有几十到几百 MFLOPs,与传统的大型网络例如 VGG / Inception / ResNet等动辄上 GFLOPs 的计算量相比有明显优势,同时在比较简单的任务上与大模型的准确率差距较小。
- mobileNet-V1: https://arxiv.org/abs/1704.04861
- mobileNet-V2: https://arxiv.org/abs/1801.04381
- shuffleNet-V1: https://arxiv.org/abs/1707.01083
- shuffleNet-V2:https://arxiv.org/abs/1807.11164
- 模型裁剪:相比轻量网络设计,模型裁剪主要关注对现有模型做减法,由大化小。其主要思想是在保持现有模型的准确率基本不变的前提下,设计某种筛选机制(稀疏化),在某个尺度上筛选掉卷积层中重要性较低的权重,从而达到降低计算资源消耗和提高实时性的效果。模型裁剪算法的核心就在于权重筛选机制的设计以及筛选粒度的选择上。这也是本文接下来会着重深入讨论的方向。
- Learning both weights and connections for efficient neural network: https://arxiv.org/abs/1506.02626
- Pruning filters for efficient convnets:https://arxiv.org/abs/1608.08710
- Channel pruning for accelerating very deep neural networks:https://arxiv.org/abs/1707.06168
- Learning efficient convolutional networks through network slimming:https://arxiv.org/abs/1708.06519
- Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers:https://arxiv.org/abs/1802.00124
- AMC: AutoML for Model Compression and Acceleration on Mobile Devices :https://arxiv.org/abs/1802.03494
- 模型蒸馏:相比于模型裁剪的目标是把大模型逐渐变小,同时保持精度损失较小,模型蒸馏的目标是利用大模型(Teacher Network)提供的监督特征帮助计算量较小的模型(Student Network)达到近似于大模型的精度,从而实现模型加速。模型蒸馏的关键在于监督特征的设计,例如使用 Soft Target 所提供的类间相似性作为依据,或使用大模型的中间层特征图, 或 attention map作为暗示,对小网络进行训练。
- Distilling the Knowledge in a Neural Network:https://arxiv.org/abs/1503.02531
- FitNets: Hints for thin deep nets:https://arxiv.org/abs/1412.6550v4
- Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer:https://arxiv.org/abs/1612.03928
- 矩阵分解:由于深度学习模型中计算量最密集的部分就是卷积,而卷积可以经过 im2col 之后用矩阵乘法实现,因此我们可以使用多种矩阵低秩近似方法,将两个大矩阵的乘法操作拆解为多个小矩阵之间的一系列乘法操作,降低整体的计算量,加速模型的执行速度。
- Speeding up convolutional neural networks with low rank expansions: https://arxiv.org/abs/1405.3866
- Accelerating very deep convolutional networks for classification and detection: https://arxiv.org/abs/1505.06798
- 量化与低精度运算:深度学习模型在运行过程时需要进行大量的浮点乘加运算,一般默认数据位宽是 32bit,但是实际上我们完全可以用更低的位宽(例如 16bit / 8bit / 4bit / 2bit 甚至 1bit)来量化模型的权重和特征图,完成近似的运算。这么做一方面可以成倍的降低模型运行时的访存量,一方面在相应硬件指令集的支持下,可以成倍的提高模型的运算速度。其重点在于如何控制低精度对模型带来的精度损失。
- BinaryConnect: Training Deep Neural Networks with binary weights during propagations:https://arxiv.org/abs/1511.00363
- XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks:https://arxiv.org/abs/1603.05279
- Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations:https://arxiv.org/abs/1609.07061v1
- 计算图优化:深度学习模型的层数通常在几十层到上百层,但实际上层与层之间有很多部分都存在固定的组合关系(例如 Conv-BatchNorm-ReLU 组合),因此我们可以对计算图中的这些固定组合进行优化,分别在水平和垂直方向上将多层融合为一层执行,从而大量减少层间不必要的内存拷贝以及多次 kernel launch 带来的开销,有效提升模型的运行速度。
- 卷积算法优化:卷积运算本身有多种算法实现方式,例如滑动窗、im2col + gemm、FFT、Winograd卷积等方式。这些卷积算法在速度上并没有绝对的优劣,因为每种算法的效率都很大程度上取决于卷积运算的尺寸。因此,在优化模型时,我们应该对模型的各个卷积层有针对性的选用效率最高的卷积算法,从而充分利用不同卷积算法的优势。
- Fast Algorithms for Convolutional Neural Networks: https://arxiv.org/abs/1509.09308
- Winograd算法解析:https://www.cnblogs.com/shine-lee/p/10906535.html
- 硬件加速:任何模型的运行都需要依托于某种计算平台来完成,因此我们可以直接从计算平台的硬件设计方面进行加速。目前深度学习模型的主流计算平台是 GPU,从 Volta 架构开始,GPU 配备了专门用于快速矩阵乘法运算的硬件计算单元 Tensor Core,可以显著提升深度学习模型的吞吐量。同时,以低功耗低延迟为主要特性的 FPGA / ASIC 加速芯片也开始在业界崭露头角。
总之,深度学习的模型要真正落地,绕不开对模型进行速度及精度的优化。在模型优化方面,学术界和工业界也都开始发力。创新算法,使用工具,落地案例可能会越来越多。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
03月16日云栖号头条:钉钉入选联合国教科文组织远程教学平台
云栖号:https://yqh.aliyun.com第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! 今日最新云头条快讯: 在因疫情影响学校关闭期间,联合国教科文组织推荐了一份应用程序和平台清单给家长、老师和学校使用,钉钉成为首选视频会议、教学直播和团队协同通讯平台;中国消费者协会利用网络平台开展“2020年3·15国际消费者权益日”线上主题活动,活动主题为“凝聚你我力量”。 一起来看最新的资讯: 联合国教科文组织推荐远程教学平台,钉钉入选 3月13日,联合国教科文组织官网发布数据,全球39个国家和地区的4.21亿孩子和年轻人读书受到新冠肺炎疫情影响,其中学前到高中为3.545亿,高等教育为6688万。在因疫情影响学校关闭期间,联合国教科文组织推荐了一份应用程序和平台清单给家长、老师和学校使用。其中,钉钉成为首选视频会议、教学直播和团队协同通讯平台。 阿里健康组织升级,朱顺炎担任CEO 3月15日,阿里健康董事会委任朱顺炎担任首席执行官、执行董事兼董事会主席。阿里健康为面向未来的创新加强组织保障和投入,助力加速全社会医疗健康领域的数字...
- 下一篇
Rax,完美融合编译时与运行时的双引擎小程序框架
作者:阿里巴巴淘系前端工程师 弗申 逆葵 Rax Github Repo——https://github.com/alibaba/rax Rax 小程序官网——https://rax.js.org/miniapp 经过持续的迭代,Rax 小程序迎来了一个大的升级,支持全新的运行时方案。站在 2020 年初这个时间点,我们想从 Rax 小程序的特点出发,进行一次全面的梳理与总结,并且在文末附上了 Rax 与当前主流的小程序开发框架的对比。本文将从 API 设计与性能、双引擎架构、优秀的多端组件协议设计和基于 webpack 的工程架构四个方向展开。 一、API 设计与性能 当决定一个产品的技术选型的时候,我们往往会从几个方面考虑,(1)可用生态,即周边相关的工具是否满足产品开发的条件;(2)风险率,即出现问题是否能够快速定位解决,所使用的技术是否会持续维护;(3)上手成本,即需不需要很大代价才能达到能够使用的阶段;(4)性能,即能够满足产品既定的性能标准以及用户体验。 本节主要会介绍 Rax 小程序在后面两点上的优势。 API 设计 框架整体的上手成本是比较小的,Rax 小程序链路从框架...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果