商汤提出的BRECQ量化框架是个什么?

BrecqQuant

商汤提出的BRECQ量化框架是个什么?

引言

近年来,深度学习在多个领域取得了显著进展,但其巨大的计算成本和内存占用问题逐渐凸显。为了压缩和加速已训练好的网络,量化成为了一种重要的技术手段。量化主要分为两类:量化感知训练(QAT)和后训练量化(PTQ)。尽管QAT能够取得较好的量化效果,但其需要完整的训练数据集和大量的计算资源。相比之下,PTQ则更加轻量级,仅需要一小部分校准数据即可进行量化,但低比特量化时的精度损失较大。本文提出了一种新的PTQ框架BRECQ(Block Reconstruction based Quantization),首次实现了INT2比特量化的极限突破。

方法概述

BRECQ通过分析量化过程中的二阶误差,并基于神经网络的基本构建块进行重建。其主要贡献包括:

  1. 基于二阶误差分析定义重建单元:本文定义了一组重建单元,并通过理论和实验证明块重建是实现跨层依赖和泛化误差之间良好平衡的最佳选择。

  2. 结合遗传算法和块内敏感度度量生成混合精度量化模型:通过遗传算法和块内敏感度度量,BRECQ能够生成具有延迟和大小保证的混合精度量化神经网络,适用于各种硬件平台。

  3. 广泛的实验验证:本文在多种手工设计和搜索得到的神经架构上进行了大量实验,证明了BRECQ在图像分类和目标检测任务中的有效性。

方法细节

二阶误差分析

量化可以视为对权重的一种特殊扰动。为了定量分析量化引起的损失退化,可以使用泰勒级数展开来近似:

E [ L ( w + Δ w ) ] − E [ L ( w ) ] ≈ Δ w T g ˉ ( w ) + 1 2 Δ w T H ˉ ( w ) Δ w E[L(w+\Delta w)] - E[L(w)] \approx \Delta w^T \bar{g}(w) + \frac{1}{2} \Delta w^T \bar{H}(w) \Delta w E[L(w+Δw)]E[L(w)]ΔwTgˉ(w)+21ΔwTHˉ(w)Δw

其中, g ˉ ( w ) = E [ ∇ w L ] \bar{g}(w) = E[\nabla_w L] gˉ(w)=E[wL] 是梯度, H ˉ ( w ) = E [ ∇ w 2 L ] \bar{H}(w) = E[\nabla_w^2 L] Hˉ(w)=E[w2L] 是Hessian矩阵, Δ w \Delta w Δw 是权重扰动。

为了处理大规模Hessian矩阵的计算和存储问题,本文将其转化为输出Hessian矩阵,即:

arg ⁡ min ⁡ θ ^ Δ θ T H ˉ ( θ ) Δ θ ≈ arg ⁡ min ⁡ θ ^ E [ Δ z ( n ) T H ( z ( n ) ) Δ z ( n ) ] \arg \min_{\hat{\theta}} \Delta \theta^T \bar{H}(\theta) \Delta \theta \approx \arg \min_{\hat{\theta}} E[\Delta z^{(n)T} H(z^{(n)}) \Delta z^{(n)}] argθ^minΔθTHˉ(θ)Δθargθ^minE[Δz(n)TH(z(n))Δz(n)]

块重建

网络输出重建虽然能准确估计二阶误差,但在实践中容易导致过拟合。本文提出块重建方法,即在每个块内进行输出重建,忽略块间依赖但考虑块内依赖。块重建的优点在于它能够在跨层依赖和泛化误差之间找到良好的平衡。

近似预激活Hessian

为了计算块内的二阶误差,需要用到预激活Hessian矩阵。本文使用对角Fisher信息矩阵(FIM)来近似预激活Hessian,优化目标变为:

min ⁡ w ^ E [ Δ z ( i ) T diag ( ( ∂ L ∂ z 1 ( i ) ) 2 , . . . , ( ∂ L ∂ z a ( i ) ) 2 ) Δ z ( i ) ] \min_{\hat{w}} E[\Delta z^{(i)T} \text{diag}((\frac{\partial L}{\partial z^{(i)}_1})^2, ..., (\frac{\partial L}{\partial z^{(i)}_a})^2) \Delta z^{(i)}] w^minE[Δz(i)Tdiag((z1(i)L)2,...,(za(i)L)2)Δz(i)]

混合精度量化

为了进一步提升量化效果,BRECQ结合混合精度技术,通过遗传算法搜索最优的比特宽度配置。其优化目标为:

min ⁡ c L ( w ^ , c ) , s.t.  H ( c ) ≤ δ , c ∈ { 2 , 4 , 8 } n \min_c L(\hat{w}, c), \text{ s.t. } H(c) \leq \delta, c \in \{2, 4, 8\}^n cminL(w^,c), s.t. H(c)δ,c{2,4,8}n

其中, c c c 是比特宽度向量, H ( ⋅ ) H(\cdot) H() 是硬件性能度量函数, δ \delta δ 是性能阈值。

实验结果

图像分类任务

在ImageNet分类任务上,BRECQ在各种现代深度学习架构上均取得了优异的量化效果。特别地,在2比特权重量化下,BRECQ的精度损失控制在5%以内,远超过其他现有方法。

目标检测任务

在MS COCO目标检测任务上,BRECQ在4比特权重和8比特激活量化下,性能几乎无损。即使在2比特权重量化下,模型仍能保持接近原始的性能。

混合精度量化

通过遗传算法搜索最优的混合精度配置,BRECQ能够在相同延迟下显著提升量化模型的精度,并适应不同的硬件要求。

结论

BRECQ是一种基于块重建的后训练量化框架,通过二阶误差分析和混合精度技术,实现了INT2比特量化的极限突破。实验结果表明,BRECQ在多种任务和模型上均取得了优异的量化效果,为深度学习模型的压缩和加速提供了新的思路。

代码示例

由于篇幅限制,这里仅展示BRECQ框架中部分关键步骤的伪代码实现。完整的实现代码请参考论文附带的源代码。

# 伪代码:块重建优化算法
def block_reconstruction(model, calibration_data, iterations):for block in model.blocks:input_data, fp_output = prepare_input_output(block, calibration_data)for _ in range(iterations):quantized_output = quantize_block(block)delta_z = fp_output - quantized_outputupdate_block_weights(block, delta_z)return model# 伪代码:遗传算法搜索混合精度配置
def genetic_algorithm_search(population, mutation_prob, iterations, threshold):for _ in range(iterations):fitness = evaluate_fitness(population)sorted_population = sort_population(fitness)crossover_population = crossover(sorted_population)mutation_population = mutate(sorted_population, mutation_prob)population = combine_populations(crossover_population, mutation_population, threshold)return best_individual(population)

希望本文解析能帮助大家更好地理解和应用BRECQ框架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA插件:mybatis log plus,完整SQL语句输出插件

背景 idea中,我们开发项目时,在控制台中都会有日志输出,操作数据库也会有对应的SQL输出。 不过在控制台输出的SQL,不管增删改查,如果有传参,参数一般都是需要我们自己拼接,形成一个完整的、可…

Lottie:动态动画的魔法棒

文章目录 引言官网链接Lottie 的原理基础使用1. 导出动画2. 引入 Lottie 库3. 加载和播放动画 高级使用1. 动画控制2. 交互性3. 自定义动画例子:交互式按钮动画 优缺点优点缺点 结语 引言 Lottie 是 Airbnb 开源的一个动画库,它允许设计师在 Adobe Afte…

三极管和MOS管,二者的主要区别

1、工作性质:三极管用电流控制,MOS管属于电压控制. 2、成本问题:三极管便宜,mos管贵。 3、功耗问题:三极管损耗大。 4、驱动能力:mos管常用来电源开关,以及大电流地方开关电路。 三极管比较…

在Ubuntu子系统上安装宝塔面板(BT Panel)

在Ubuntu子系统上安装宝塔面板(BT Panel),可以按照以下步骤进行: 更新系统软件包: 打开Ubuntu终端,输入以下命令更新系统软件包: sudo apt update && sudo apt upgrade -y安装必备的软件…

华清数据结构day4 24-7-19

链表的相关操作 linklist.h #ifndef LINKLIST_H #define LINKLIST_H #include <myhead.h> typedef int datatype; typedef struct Node {union{int len;datatype data;};struct Node *next; } Node, *NodePtr;NodePtr list_create(); NodePtr apply_node(datatype e); …

前端常用简化开发的框架和组件

一.BootStrap框架 BootStrap官网直达 Bootstrap是一个强大且易于使用的前端框架&#xff0c;适合各种规模的项目。它的响应式设计、丰富的组件和灵活的布局系统&#xff0c;使得开发者能够高效地构建现代化的网站。无论是初学者还是经验丰富的开发者&#xff0c;Bootstrap都能…

基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)

基于微信小程序SpringBootVue的刷题系统(带1w文档) 基于微信小程序SpringBootVue的刷题系统(带1w文档) 本系统是将网络技术和现代的管理理念相结合&#xff0c;根据试题信息的特点进行重新分配、整合形成动态的、分类明确的信息资源&#xff0c;实现了刷题的自动化&#xff0c;…

scikit-learn中fit_transform会改变原始数据吗

在 Python 的 scikit-learn 库中&#xff0c;fit_transform 方法通常用于数据预处理阶段&#xff0c;比如在标准化、归一化、进行主成分分析&#xff08;PCA&#xff09;或其他转换时使用。这个方法同时执行 fit 方法和 transform 方法&#xff1a; fit&#xff1a;计算训练数…

HTML学习 - 表格

<table><tr><th>姓名</th><th>年龄</th><th>性别</th></tr><tr><td>张三</td><td>11</td><td>男</td></tr><tr><td>李三</td><td>21</td&…

springboot给属性赋值的两种方式(yaml与properties)

一&#xff0c;介绍 在Spring Boot中&#xff0c;配置文件是用来设置应用程序的各种参数和操作模式的重要部分。Spring Boot支持两种主要类型的配置文件&#xff1a;properties文件和YAML 文件。这两种文件都可以用来定义相同的配置&#xff0c;但它们在格式和表达能力上有所不…

matlab SAR图像的多视滤波

目录 一、算法原理1、概述2、时域多视滤波3、频域多视滤波4、参考文献 二、代码实现1、时域多视滤波 三、结果展示四、相关链接 一、算法原理 1、概述 单视复数数据&#xff08;Single Look Comple&#xff09;是原始的最高分辨率数据&#xff0c;但是从单个像元散射的雷达回波…

如何使用捕获过滤器

点击捕获&#xff0c;选项&#xff0c;然后在所选择的捕获过滤器上输入对应的捕获表达式 抓包过滤器 type(类型) 限定符: 比如host&#xff0c;net&#xff0c;port限定符等dir(方向) 限定符: src dstProto(协议类型)限定符: ether ip arp 二层过滤器举例 tcp dst port 135 …

数据库操作-视图

1、视图的概念 视图&#xff1a;是从一个或者几个基本表&#xff08;或者视图&#xff09;里的数据的逻辑显示&#xff08;查询的结果&#xff09;&#xff0c;是一张虚拟表&#xff0c;不会存储数据&#xff0c;只能进行查询结果的封装&#xff1b; 2、创建视图 CREATE VIEW 视…

K3s部署及研究

K3s部署及研究 K3s和K8s详解什么是 Kubernetes (K8s)?什么是 K3s?对比 K8s 和 K3s举个例子1、备份系统自带yum源配置文件2、进入 /etc/yum.repos.d3、删除文件4、设置5、缓存 查看集群是否正常 安装K3S Node节点查看主节点token获取主节点服务地址 添加node节点查看节点状态 …

python—selenium爬虫

文章目录 Selenium与Requests对比一、工作原理二、功能特点三、性能表现 下载对应驱动1.首先我们需要打开edge浏览器&#xff0c;打开设置&#xff0c;找到“关于Microsoft Edge”&#xff0c;点击进入查看浏览器版本。2.查找版本之后&#xff0c;搜索edge驱动下载&#xff0c;…

群管机器人官网源码

一款非常好看的群管机器人html官网源码 搭建教程&#xff1a; 域名解析绑定 源码文件上传解压 访问域名即可 演示图片&#xff1a; 群管机器人官网源码下载&#xff1a;客户端下载 - 红客网络编程与渗透技术 原文链接&#xff1a; 群管机器人官网源码

STM32CUBEIDE FreeRTOS操作教程(一):LED闪灯

STM32CUBEIDE FreeRTOS操作教程&#xff08;一&#xff09;&#xff1a;LED闪灯 STM32CUBEIDE(不是STM32CUBEMX)开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件&#xff0c;不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开…

PCB工艺边设计准则

在PCB设计时&#xff0c;通常会在电路板的边缘预留一定的空间&#xff0c;这部分空间被称为工艺边。它有助于在生产过程中确保电路板的尺寸和形状的准确性。以使得组装时更加顺畅、便捷。而工艺边的加工&#xff0c;使得线路板上的元件可以精准地与设备对接&#xff0c;从而提高…

leetcode6 -- z字形变换

题目描述&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R 之后&#xff…

springboot系列十一:Thymeleaf

文章目录 官方文档基本介绍Thymeleaf机制说明Thymeleaf语法表达式运算符th属性迭代条件运算使用Thymeleaf th属性需要注意点 Thymeleaf综合案例需求说明思路分析代码实现 作业布置 官方文档 在线文档: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 离线…