当前位置: 首页 > news >正文

网络压缩之参数量化(parameter quantization)

        参数量化(parameter quantization)。参数量化是说能否只 用比较少的空间来储存一个参数。举个例子,现在存一个参数的时候可能是用64位或32位。 可能不需要这么高的精度,用16或8位就够了。所以参数量化最简单的做法就是,本来如果 存网络的时候,举例来说,我们是16个位存一个数值,现在改成8个位存一个数值。储存空 间,网络的大小直接就变成原来的一半,而且性能不会掉很多,甚至有时候把储存参数的精度 变低,结果还会稍微更好一点。还有一个再更进一步压缩参数的方法,即权重聚类(weight clustering。

        如图1 所示,举个例子,先对网络的参数做聚类,按照这个参数的数值来分群。数值 接近的放在一群,要分的群数会先事先设定好,比如设定好要分四群。比较相近的数字就被当 做是一群。每一群都只拿一个数值来表示它。比如黄色的群所有数字的平均值是−0.4,就用 −0.4 来代表所有黄色的参数。储存参数时,就只要记两个东西:一个是表格,这个表格是记 录说每一群代表的数值是多少。另外一个要记录的就是每一个参数属于哪一群。假设群的数 量设少一点,比如说设四群,这样只要两个位就可以存一个参数了。本来存一个参数可能要 16 位或8位,再进一步压缩到存一个参数只需要两个位就好。

图1 权重聚类

        其实还可以把参数再更进一步做压缩,使用哈夫曼编码(Huffmanencoding)。哈夫曼编 码的概念就是比较常出现的东西就用比较少的位来描述它,比较罕见的东西再用比较多的位 来描述它。这样的好处平均起来,储存数据需要的位的数量就变少了,所以这个就是哈夫曼编 码,所以可以用这些技巧来压缩参数,让我们储存每一个参数的时候需要的空间比较小,最终 可以压缩到只拿一个位来存每一个参数。

        网络里面的权重不是+1,就是−1。假设所有的权重只有正负1两种可能,每一个权重 只需要一个位就可以存下来了。像这样子的这种二值权重(binaryweight)的研究其实还蛮多 的,具体可相关论文。

        虽然二值网络(binary network)参数值不是 +1,就是 −1,但这个网络的性能不一定会 很差。二值网络里面的其中一个经典的方法,即二值连接(binary connect)。把二值连接这 个技术用在三个图像识别的问题上,从最简单的MNIST,还有稍微难一点的CIFAR-10以及SVHN 数据集。用二值连接结果居然是比较好的,所以用二值网络结果居然还比正常的网络 的性能好一点。用二值网络的时候,给了网络比较大的限制,给网络容量(networkcapacity) 比较大的限制,它比较不容易过拟合,所以用二值权重反而可以达到防止过拟合的效果。

        其实权重聚类有一个很简单的做法。权重聚类是需要在训练的时候就考虑的。但是 有一个简单的做法是,先把网络训练完,再直接做权重聚类。但这样直接做可能会导致 聚类后的参数跟原来的参数相差太大。所以有一个做法是在训练的时候,要求网络的 参数彼此之间比较接近。训练的量化可当做是损失的其中一个环节,直接塞到训练的 过程中,让训练的过程中达到参数有权重聚类的效果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 毕业论文免费查重网站
  • Mysql高级篇(上)
  • 【HuggingFace Transformers】LlamaModel源码解析
  • 003、架构_详解(重点)
  • 【python计算机视觉编程——多视图几何】
  • pnpm快速入门
  • ComfyUI:基于差分扩散的像素级图像修改
  • 【Linux修行路】进程通信——消息队列、信号量
  • 计算之魂:持续于正确的因果链(一)
  • MySQL用户管理:用户管理、用户授权、用户权限撤销
  • 兴业证券基于Apache DolphinScheduler的应用实践
  • Linux 系统入门:高级系统管理与文本处理
  • 29 路由工作原理
  • 大二必做项目贪吃蛇超详解之中篇游戏设计与分析
  • sqlserver数据库常见操作
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • co.js - 让异步代码同步化
  • CODING 缺陷管理功能正式开始公测
  • ES6 学习笔记(一)let,const和解构赋值
  • JavaScript对象详解
  • jQuery(一)
  • linux安装openssl、swoole等扩展的具体步骤
  • React-Native - 收藏集 - 掘金
  • SAP云平台里Global Account和Sub Account的关系
  • Solarized Scheme
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • XML已死 ?
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 我与Jetbrains的这些年
  • 新手搭建网站的主要流程
  • 用Canvas画一棵二叉树
  • 原生js练习题---第五课
  • 源码安装memcached和php memcache扩展
  • 云大使推广中的常见热门问题
  • 【干货分享】dos命令大全
  • 如何正确理解,内页权重高于首页?
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​渐进式Web应用PWA的未来
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 飞书APP集成平台-数字化落地
  • #{} 和 ${}区别
  • #考研#计算机文化知识1(局域网及网络互联)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3) cmake编译多个cpp文件
  • (35)远程识别(又称无人机识别)(二)
  • (4)(4.6) Triducer
  • (c语言+数据结构链表)项目:贪吃蛇
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (一)kafka实战——kafka源码编译启动
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器