以PaddleSlim为例讲解深度学习实例化模型压缩和量化-----工作日志(1.31)

一. 背景介绍

1.1 什么是量化

深度学习神经网络模型中的量化是指浮点数用定点数来表示,神经网络模型在训练时都是浮点运算的,得到的模型参数也是浮点的。而且通常一个参数用浮点数表示占四个字节,而如果用8比特量化的话,一个参数只占一个字节,memory得到了极大的节约,在memory紧张的处理器上尤为重要。

1.2 如何进行量化

模型的量化可分为训练中量化和训练后量化,还可分为对称量化和非对称量化。我们用的是训练后对称量化,即先训练好用浮点表示的模型参数等,然后再去量化,量化某类值(比如weight)时看其绝对值的最大值,从而可以知道用什么定标的Q格式最合适。我们目前用的是主流的8比特量化方式。模型的量化主要包括两方面的内容:各层参数的量化和各层输出的量化。

1.3 网络结构搜索

在过去的很多年深度学习在视觉、语音等方面都已经取得了巨大的成功,其中一个很大的原因就是出现了很多新颖的网络结构——ResNet、MobileNet、ShuffleNet等。随着网络结构越来越复杂,人工设计网络的试错成本和时间成本会难以承受。所以在这里我们提供了automl的一个综述,文章会从三个部分:搜索空间、搜索策略和性能评估策略来展开介绍:

1.搜索空间:搜索空间从原则上定义了可能出现的体系结构,再结合适合这个任务的相关属性可以进一步减小搜索空间,简化搜索。但同时也引入了人工偏见,这使得模型可能学不到超出人类目前认知的新颖结构;
2.搜索策略:搜索策略从细节上展现了如何探索搜索空间。它包含了经典的 exploration-exploitation 策略,一方面它要根据所学到的知识来快速发现表现好的结构,另一方面又要避免由于快速收敛而得到一个次优结构;
3.性能评估策略:NAS的典型目标是在一个看不见上的数据集上发现一个好的网络结构。性能评估的最简单的策略就是在一个标准数据集上训练然后在数据上验证网络,但是这种方法通常是计算昂贵型的,也会限制可以探索的网络结构的数量。最近的很多研究聚焦于探索如何减小性能评估成本的方法;

二. 量化示例

在这里插入图片描述

2.1 各层输出的量化

评估时把测试集中各个文件每层的输出保存下来,然后看每层输出值的绝对值的最大值,比如绝对值最大值为3.6,可以从上面的8比特量化表看出用Q2.5 量化最为合适(也可以用公式 np.ceil(np.log2(max))算出整数的表示位数,然后确定小数的表示位数,从而确定定标)。再来看各层参数的量化。

2.2 各层参数的量化

参数主要包括weight和bias,这两种参数要分别量化,量化方法同上面的每层输出的量化方法一样,这里不再赘述。需要注意的是如果当前层是卷积层或者全连接层,为了减少运算量,一般部署模型时都会将BatchNormal(BN)层参数融合到卷积层或者全连接层(只有当卷积层或者全连接层后面紧跟BN层时才可以融合参数,否则不可以)。

2.3 量化原理

具体怎么融合如下:假设层的输入为X,不管是卷积层还是全连接层,运算均可以写成 WX + b (W为权重weight, b为bias),BN层执行了两个操作,一个是归一化,另一个是缩放,两个阶段的操作分别为:
在这里插入图片描述
上面三个式子合并(卷积层或者全连接层的输出就是BN层的输入, 原卷积层或者全连接层的参数为Wold和bold),可以得到:
在这里插入图片描述
上式等于Wnew * X + bnew,展开得到:
在这里插入图片描述
这样合并后的运算就成了:

在这里插入图片描述

在卷积层或者全连接层里用上面得到的新参数(Wnew和bnew)替代旧参数(Wold和bold),inference时BN层就消失啦。

三. 量化评估

按照上面的方法,各层的模型参数以及输出都量化好了。量化好后还要对量化进行评估,评估的指标是余弦相似度和欧几里得距离等。余弦相似度是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似。公式如下:
在这里插入图片描述
欧几里得距离,又称欧氏距离,是最常见的距离度量,衡量的是多维空间中两个向量之间的绝对距离。欧氏距离越小,相似度越大;欧氏距离越大,相似度越小。公式如下:
在这里插入图片描述
评估时要一层一层的评估,用余弦相似度和欧几里得距离等比较每层的量化前浮点的输出的向量和量化后的定点的输出向量(定点的输出向量算好后要根据定标转成浮点数才能比较)。余弦相似度要接近1和欧几里得距离要接近0,才是一个合格的量化。否则要找出量化中的问题,直到指标达标.

四. 参考文献

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值