热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

权重矩阵最小路径_伯克利人工智能实验室提出HAWQ:基于Hessian矩阵的全自动混合精度量化方法...

公众号:将门创投(thejiangmen)▶NeurIPS2020文章专题第12期混合精度量化(Mixed-PrecisionQuantization)是模型压缩领域
公众号:将门创投 (thejiangmen)

NeurIPS 2020 文章专题 第·12·期

混合精度量化 (Mixed-Precision Quantization) 是模型压缩领域的重要方法。HAWQ (音同Hawk,鹰) 提出了一种基于Hessian矩阵的可以全自动确定混合精度的方法。其核心思想是使用敏感度分析,对神经网络中特别敏感的层使用高量化位宽,对不敏感的层使用低量化位宽。

本文是伯克利人工智能实验室 (BAIR) 发表于NeurIPS 2020的一项工作,提出Hessian矩阵的迹是衡量敏感程度的重要指标,并且基于此进行了组合优化。HAWQ的方法在不同模型和不同任务上泛化很好,取得了SOTA的量化结果(ImageNet Top1:8MB ResNet50 75.9%,1MB SqueezeNext 68.7%) 。

1b0f0c23d7464f32fd9e55bcd8d959bb.png
  • 论文链接:

https://papers.nips.cc/paper/2020/file/d77c703536718b95308130ff2e5cf9ee-Paper.pdf

  • 视频简介:

https://neurips.cc/virtual/2020/protected/poster_d77c703536718b95308130ff2e5cf9ee.html

  • 相关代码:

https://github.com/Zhen-Dong/HAWQ

一、问题描述

边缘计算由于其低延迟、低成本、低功耗、隐私保护等优点在近年被广泛研究。量化 (Quantization) 又称定点化方法,是模型压缩的重要分支,对于生成高效的神经网络模型,赋能边缘计算,有着重要意义。但是在超低位宽 (高压缩率) 的情况下使用统一的量化比特数 (位宽) 会严重影响模型的表现。混合精度量化允许神经网络的每一层拥有不同的量化位宽,从而可以很大程度上保留模型的精确度,但是确定每一层的位宽导致了一个指数级的搜索空间。已有工作使用强化学习或者可微分搜索等方法来确定每一层的量化位宽,但因为每搜索一步就要量化一个神经网络来得到反馈 (量化一个神经网络的开销和训练一个神经网络的开销在一个量级) ,使得已有算法很耗时且对计算资源十分依赖。

二、方 法

本文提出了一种基于敏感度分析的方法来确定每层的量化位宽。神经网络中不同的层有着不同的作用,相对应的,对最终模型预测结果的影响也不尽相同。

be71b4aa4d42ed70b74d0822512e5087.png

如图所示,本文作者对预训练模型中某一层的权重进行干扰,而保持其他层的权重不变。为了可视化,权重干扰方向为最大的两个Eigenvector对应方向 (在任意的两个方向施加微小扰动只会对loss产生不可见的微扰,所以选用Eigenvectors) ,对每个干扰计算loss就得到了图中的损失函数图像loss landscape。可以看到,对于InceptionV3而言,其第4个block (为了可视化可以把神经网络几层合并为一个block) 的loss landscape很陡峭,说明对于干扰比较敏感,但是其第16个block的loss landscape却很平缓,说明对于干扰不敏感。基于此可以给敏感的第4个block更高的量化位宽,而给不敏感的第16个block较低的量化位宽。

以上画出loss landscape做判断的方法开销很大,实际操作时需要用敏感度作为判断依据。HAWQV2假设预训练的模型已经收敛,因此文章中忽略一阶影响而使用二阶分析 (Hessian) 来判定模型的敏感度 (量化过程要使用量化模拟来再训练模型,所以衡量敏感度比损失函数变化值本身更为重要) 。本文从数学上证明了Hessian矩阵的迹除以权重数量 (等价于eigenvalues的平均值,后文简称为平均迹) 可以作为衡量敏感度的标准。图中第4个block的Hessian矩阵的平均迹是8.8e-2,而第16个block的Hessian矩阵的平均迹是3.6e-4,对应的第4个block比第16个block敏感很多。

因为神经网络的权重很多,和Hessian矩阵相关的计算往往开销也很大。本文提出了使用Hutchinson方法来隐式的计算Hessian矩阵的迹 (即不显示地生成Hessian) 。如图所示,Hutchinson方法可以在使用较少输入图片,以及较少迭代步数的情况下收敛,从而可以更加快速的计算Hessian矩阵的迹。

9533130ef9b1fbff884c3e39dc14e6b2.png
6f39359794739aa87b863e889e7575f9.png

知道了每一层对应的敏感程度之后,可以得到层与层之间的相对精度,但是每一层具体使用多少量化位宽仍需要人工确定。比如知道了第4层比第16层敏感需要给第4层更多的量化位宽,但依旧不能确定具体第4层是用6比特还是8比特。本文证明下面的基于Hessian矩阵的平均迹的评价标准 (metric) 可以很好地描述二阶扰动,从而可以将确定量化位宽的问题转化为一个整数规划问题,即找到满足压缩率限制条件的、使总二阶扰动最小的量化位宽的解。

HAWQV2中描述了这个整数规划问题的一种高效解法,并将得到的结果表示成一个帕累托最优边界 (Pareto Frontier) 。如图所示,横轴是量化模型的最终尺寸,纵轴是总的二次扰动值,图中的每一个点都代表着一个量化位宽分配方案。可以看到,最小的量化模型对应着最大的总二阶扰动,而大的量化模型一般具有小的总二阶扰动。根据实际情况的需求 (比如要求模型大小要小于8MB) 可以选择满足条件且总二阶扰动最小的点作为最终的混合精度量化方案。

21c199047378b41333e0918e417644c0.png
c530b2c5758a0f0a9a0f7e4dfe870af9.png

三、实验结果

本文提出的方法HAWQV2使用经典的量化模拟训练 (Quantization-Aware Training) ,采用标准训练超参数,只针对混合精度量化方案做出自动优化。HAWQV2在不同的神经网络模型 (ResNet50,InceptionV3,SqueezeNext,RetinaNet) ,以及不同的任务 (物体分类ImageNet,目标检测Microsoft COCO) 上面泛化能力很好。对于ResNet50 (预训练模型98MB) ,HAWQV2的8MB量化模型可以在ImageNet上实现75.2%的Top-1精确度。SqueezeNext是一个轻量级模型 (预训练模型10MB) ,HAWQV2的1MB量化模型可以在ImageNet上达到68.7%的Top-1精确度。在目标检测领域,RetinaNet是一个很常用的模型 (预训练模型145MB) ,HAWQV2的18MB量化模型可以在MS COCO上实现34.1mAP。对于自然语言处理、Hessian敏感度分析依然适用,文献[2] (Q-BERT) 中使用类似的方法在各种下游任务 (语言标注,情感分类,问答等) 取得了很好的 (SOTA) 量化结果 (比如25MB的压缩版BERT) 。

a6b1421141b5698f598cfa8e3f79bd42.png
6fe5217c94ce6ff038f78348a5996932.png
b8ab55cd755a60fec75904d42826172e.png

四、结 语

本文提出了一种基于Hessian的敏感度分析方法来解决混合精度量化问题。具体而言,文章证明了Hessian矩阵的迹可以表征神经网络中一层的敏感程度,从而可以对敏感的层给予高量化位宽,而对不敏感的层给予低量化位宽。文章中提出了高效计算Hessian矩阵平均迹的方法,并基于此给出了可以自动确定混合精度的整数规划方案。文章中的方法HAWQV2在不同模型以及不同任务上取得了很好的 (SOTA) 量化效果。

参考文献

[1] HAWQ: Hessian AWare Quantization of Neural Networks with Mixed-Precision, ICCV 2019.

[2] Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT, AAAI 2020.

//

作者简介

董镇,伯克利人工智能实验室 (BAIR) 三年级博士生,2018年本科毕业于北京大学EECS。目前的研究方向是高效神经网络(Efficient Deep Learning),模型压缩(Model Compression),软件硬件协同设计(HW-SW Co-Design & NAS)。


NeurlPS 2020 论文解读

// 1|伯克利新工作: 基于动态关系推理的多智能体轨迹预测问题

// 2|港中文MMLab自步对比学习: 充分挖掘无监督学习样本

// 3|Glance and Focus: 通用、高效的神经网络自适应推理框架

// 4|俄亥俄州立大学: DQL算法首次有限时长分析及收敛速率刻画

// 5|清华联合斯坦福:基于模型的对抗元强化学习

// 6|港中文深圳联合伊利诺伊香槟: 求解对抗训练等Min-Max问题的简单高效算法

// 7|IGNN图卷积超分网络: 挖掘隐藏在低分辨率图像中的高清纹理

// 8|UT Austin&快手提出Once-for-All对抗学习算法实现运行时可调节模型鲁棒性

// 9|RPI-IBM团队提出图结构&表征联合学习新范式IDGL:用于图神经网络的迭代式深度图学习

// 10 | 图网络在VLN中对于语言-场景-物体-方向之间的关联性学习

// 11|网易伏羲联手天大、中科大提出: 自适应奖赏塑形的双层优化建模和求解

更多精彩论文&独家攻略,尽在【NeurIPS 2020】专栏

@将门创投· 让创新获得认可

如果喜欢,别忘了赞同、关注、分享三连哦!笔芯❤



推荐阅读
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
author-avatar
npa3689305
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有