网络压缩之参数量化(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) 比较大的限制,它比较不容易过拟合,所以用二值权重反而可以达到防止过拟合的效果。

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

相关推荐
We་ct4 分钟前
LeetCode 222. 完全二叉树的节点个数:两种解法详解(BFS + 二分查找优化)
数据结构·算法·leetcode·typescript
小白菜又菜6 分钟前
Leetcode 234. Palindrome Linked List
python·算法·leetcode
阿里云大数据AI技术34 分钟前
阿里云PAI助力新一代Qwen3.5模型发布!
人工智能·算法
mightbxg41 分钟前
【学习一下】深入理解交叉熵
人工智能·学习·机器学习
小白菜又菜1 小时前
Leetcode 221. Maximal Square
算法·leetcode·职场和发展
响叮当!1 小时前
大模型输出的全过程
人工智能·深度学习·机器学习
流云鹤1 小时前
牛客周赛Round 132(无F)
算法
Lee川1 小时前
深入解析:从内存模型到作用域陷阱——JavaScript变量的前世今生
javascript·算法
㓗冽1 小时前
回文数2(字符串)-基础题97th + 加法器(字符串)-基础题98th + 构造序列(字符串)-基础题99th
算法
IvanCodes2 小时前
人工智能、机器学习和深度学习,其实不是一回事
人工智能·机器学习