深度学习模型如何缩小到可以放到微处理器呢?作为炼丹师,模型变的越来越复杂,模型大小也不断增加.在工业场景下光训练数据就有几百T,训练就要多机多卡并行跑数天.到底如何把这些模型部署在小型嵌入式设备的呢?

要理解我们如何缩小模型,就要先理解模型文件如何被压缩.如下图所示,一个常见的DNN模型由神经元和它们之间的连接构成,模型的大小主要就是由这些weights构成.一个简单的CNN都有上百万的参数,我们知道训练的时候,它们的dtype都是float32,一个float32占4个字节,上百万的参数往往就占据几十兆的空间大小.几十兆的模型?我们可能觉得这已经很小了,但是一个微型处理器就只有256Kb的随机存储器.

为了把模型缩小到可以塞到这么小的处理器中,有以下几个框架:

  • AIMET from Qualcomm
  • TensorFlow Lite from Google
  • CoreML from Apple
  • PyTorch Mobile from Facebook

tensorflow提供一个python库tensorflow_model_optimization,这个库优化模型的延迟,大小.直观上,优化模型大小,一个就是优化参数的数量,另一个就是优化每个参数的大小.主要的方式就是以下几种.

Compression or Distillation

模型训练完成后,如何在准确率可接受的情况下压缩模型,最常见的方式就是剪枝和蒸馏.

剪枝-删除对输出影响较低或者可能会引起过拟合的weights,再剪枝后稀疏的神经网络需要重新被训练.蒸馏炼丹师都比较熟悉了,用小模型去学习打模型即可.

Quantisation

该方法用低精度的参数去学习一个同样效果的模型,这种方式提升了模型的处理能力和效率.这种方法主要是把float压缩到int8上,如下图所示:

Quantisation Aware Training(QAT) 这个方式是在模型训练过程中使用量化,如下图所示,该方法会带来噪声也会影响loss,所以学到的模型更加鲁棒.

Post-Training Quantisation (PTQ) 该方法不用重训练模型,直接把float32量化到int8,这样直接把模型大小降低了4倍,预估性能也提升了两倍,精度也没有显著下降.

weight clustering 使用权重聚类/共享,降低了存储参数的数量,该方法把一层的参数聚成N个类,并共享索引,举例来说,如果我们把一层聚成8个类,每个参数都会只占3bit(2^3 = 8).从实验我们可以看到,使用该方法可以降低模型大小6倍,仅仅降低了0.6%的准确率.我们还可以通过fine-tune聚类的中心点,来提升模型精度.

Encoding

通过使用霍夫曼编码对模型进行压缩,使用01编码weights,把最常出现的权重用较少的bit去编码,如下图所示,我们有已经被量化的权重矩阵:

每个权重占5bit(0~31),如果使用霍夫曼编码,我们就会得到下面这颗树:

17会被编码成11,22编码为001,可以看到权重通过编码显著被压缩.

Compilation

剩下的就是工程上的优化了,如使用C++,相较于python更快更省内存.

参考文献

1.https://github.com/quic/aimet

2.https://www.tensorflow.org/lite

3.https://developer.apple.com/documentation/coreml

4.https://pytorch.org/mobile/home/

5.https://medium.com/marionete/tinyml-models-whats-happening-behind-the-scenes-5e61d1555be9

"微"模型

深度学习模型如何缩小到可以放到微处理器呢?相关推荐

  1. 深度学习模型轻量化(下)

    深度学习模型轻量化(下) 2.4 蒸馏 2.4.1 蒸馏流程 蒸馏本质是student对teacher的拟合,从teacher中汲取养分,学到知识,不仅仅可以用到模型压缩和加速中.蒸馏常见流程如下图所 ...

  2. 一文看懂深度学习模型压缩和加速

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 1 前言 近年来深度学习模型在计算机视 ...

  3. 提升深度学习模型性能及网络调参

    提升深度学习模型性能及网络调参 https://www.toutiao.com/a6637086018950398472/ 图像处理与机器视觉 2018-12-25 10:42:00 深度学习有很多的 ...

  4. 【AI初识境】如何增加深度学习模型的泛化能力​​​​​​​

    文章首发于微信公众号<有三AI> [AI初识境]如何增加深度学习模型的泛化能力 这是专栏<AI初识境>的第9篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  5. 【AI初识境】如何增加深度学习模型的泛化能力

    这是专栏<AI初识境>的第9篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中的generalization问题,也就是泛化和正则化有关的内容. 作者 ...

  6. amd 深度学习模型部署_Web服务部署深度学习模型-续集

    在上一篇中,本人介绍了如何使用Web服务部署深度学习模型,见知乎链接:刘聪NLP:Web服务部署深度学习模型. 有同学提问:"是否可以在web上有输入数据的接口,通过深度学习模型的计算数据的 ...

  7. 不用归一化,深度学习模型也可以很优秀!

    本文转载自机器之心. 深度学习,已经不需要归一化了. 我们知道,在传递给机器学习模型的数据中,我们需要对数据进行归一化(normalization)处理. 在数据归一化之后,数据被「拍扁」到统一的区间 ...

  8. 深度学习模型训练的一般方法(以DSSM为例)

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 本文主要用于记录DSSM模型学习期间遇到的问题及分析.处理经验.先统领性地提出深度学习模型训练 ...

  9. 训练好的深度学习模型原来这样部署的!(干货满满,收藏慢慢看)

    点击上方蓝字关注我们 计算机视觉研究院专栏 作者:Edison_G 当我们辛苦收集数据.数据清洗.搭建环境.训练模型.模型评估测试后,终于可以应用到具体场景,但是,突然发现不知道怎么调用自己的模型,更 ...

最新文章

  1. WatchStor观察:思科携EMC等合作伙伴 圈地数据中心市场
  2. HTML-CSS-JS-PHP的顺序及相关网址(转)
  3. CloudFoundry Service 使用
  4. 查看tp框架版本方法
  5. POJ 1195 Mobile phones【 二维树状数组 】
  6. OAuth2.0授权协议与客户端授权码模式详解
  7. 协议圣经 四 rtspclient
  8. polkit启动失败_linux某服务启动失败,提示Authorization not available. Check if polkit...问题解决...
  9. redhad6.4 安装zabbix2.4
  10. 为什么字节跳动、腾讯、阿里都在用 Python??
  11. 开心消消乐分析与设计
  12. Python OpenCV 美女换装,图像处理取经之旅第 19 天
  13. 精心整理|Python爱好者社区历史文章合集(作者篇)--20190925从豆瓣获取
  14. 中国34个省市用字体logo 石昌鸿 字体设计-借用手法
  15. 微型计算机与巨型计算机相比,微型计算机的特点及应用
  16. SSM整合开发实战-poi导入导出excel-前言
  17. 软件工程 -- 状态转换图
  18. 36岁大厂程序员,找不到工作。。。
  19. 防范勒索蠕虫病毒入侵,3分钟教你快速关闭高危端口445!
  20. tomcat启动子容器启动失败tomcat org.apache.catalina.LifecycleException异常的解决办法

热门文章

  1. 软件测试作业1 -- 关于c++项目中类相互调用的问题与解决
  2. 【下载】推荐一款免费的人脸识别SDK
  3. 动态代理案例1:运用Proxy动态代理来增强方法
  4. 代码动态创建checkbox
  5. 【Knockout】二、监控属性Observables
  6. DP_字串匹配(HDU_1501)
  7. C语言#line预处理器
  8. DtCms.DAL.WebSet.cs
  9. C语言 | 编译与预处理指令(宏定义完整讲解:#define)
  10. 北斗导航 | 卫星信号的跟踪与解调