百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

INQ问世,让深度神经网络百倍无损压缩美梦成真!

wptr33 2025-02-28 17:40 7 浏览

智东西

文 | 英特尔中国研究院

近几年来,深度学习技术在计算机视觉、语音识别和自然语言处理等诸多领域取得的了一系列重大突破。然而,深度学习的发展依然面临诸多问题。尤为突出的是,时下主流的深度神经网络,一般包含数千万甚至是过亿的学习参数,而如此海量的参数给神经网络模型在存储、计算和功耗开销等方面带来了严峻的考验。

针对上述问题,英特尔中国研究院于近期提出了一种名为INQ(Incremental Network Quantization)的神经网络无损低比特量化技术。给定任意结构的全精度浮点神经网络模型(诸如AlexNet, VGGNet, GoogleNet和ResNets),我们此次提出的INQ技术能高效地将其转换成无损的低比特二进制模型,从而很好地解决了现有神经网络量化压缩方法的不足,为深度神经网络在定制化硬件上的部署、加速等开辟了新途径。

神经网络无损低比特量化技术

研究人员此前已经提出了很多神经网络量化压缩方法,但现有方法存在两方面的应用瓶颈:其一,来自量化压缩过程的网络精度损失依然不可忽视,在一定程度上限制了量化后模型的使用接受程度;其二,大多数量化压缩方法仅适用于处理特定的模型结构或者特定类别的层,一定程度上限制了方法的泛化能力和量化压缩的性能。

英特尔中国研究院认知计算实验室的姚安邦、郭怡文、周奥军、徐琳、陈玉荣等研究人员所提出的INQ技术,极其有效地解决了现有方法泛化能力不足,模型精度损失明显,以及重训练时间长等问题。

该技术提出了渐进式神经网络量化思想,其核心是引入了参数分组、量化和重训练三种操作。我们在实现中首先将全精度浮点网络模型中每一层参数分为两组,第一组中的参数将被直接量化并固定,而另一组中的参数将通过重训练以补偿量化给模型造成的精度损失。然后,上述三种操作将依次迭代应用到完成重训练后的全精度浮点参数部分,直到模型完全量化为止。通过巧妙耦合参数分组、量化和重训练操作,该技术抑制了模型量化造成的性能损失,从而在实际中适用于任意结构的神经网络模型。

INQ渐进式网络量化策略

(绿线代表当前已经被量化的网络连接;蓝线代表需要重新训练的网络连接)

值得一提的是,该技术还包含另外两个亮点。其一,在模型量化过程中,所有参数被限制成二进制表示,并包含零值,极限量化结果即为三值网络或者二值网络。这种量化使得最后的模型非常适合在硬件上部署和加速。比如在FPGA上,复杂的全精度浮点乘法运算将被直接替换为简单的移位操作。其二,现有神经网络量化压缩方法在处理二值网络或者三值网络时,为了让模型精度损失不至于太大,往往将模型第一层和最后一层参数依然保留为全精度浮点型,而我们的技术在对模型的所有参数进行量化的同时,实现了性能的全面领先

INQ渐进式网络量化示例

第一行:依次为参数分组、量化与重训练;

第二行:迭代过程

(绿色区域代表当前已经被量化的网络参数;浅紫区域代表需要重新训练的网络参数)

三大实际应用

基于业界最具挑战的ImageNet图像分类任务,英特尔中国研究院的研究人员给出了一系列令人激动的实验应用与结果。

参数二进制化的神经网络模型

首先,我们的研究人员将INQ技术应用到了时下所有的主流深度神经网络结构上。以AlexNet、 VGGNet、 GoogleNet和ResNets为例,通过5比特量化(其中1比特专用于表示零值,下同),我们的模型分类精度全面超越了原始的全精度浮点模型。以ResNet-18为例,在4比特和3比特条件下,INQ技术能够做到无损量化。尽管在三值量化时,量化后的模型精度有少许损失,但损失程度远低于目前业界已知的结果。

(固定比特长度、参数二进制化的神经网络模型性能)

(不同比特长度、参数二进制化的神经网络模型性能)

(三值、二值神经网络模型性能比较)

深度参数二进制化的神经网络模型

其次,我们的研究人员将INQ技术与之前我们发表在NIPS 2016的“动态外科手术”(Dynamic Network Surgery, DNS)技术相结合,实现了深度的神经网络二进制量化压缩。以AlexNet为例,首次实现了接近无损的、百倍级、二进制的神经网络模型

深度参数二进制化的神经网络模型性能

(P: 剪枝;Q: 量化;H: 霍夫曼码)

输入、输出及参数均二进制化的神经网络模型

最后,我们的研究人员进一步将INQ技术从只量化模型参数推广到了不但量化模型参数,还量化网络每一层输入和输出。以VGGNet为例,首次实现了无损的、低比特、全量化的神经网络模型

(输入、输出及参数均二进制化的神经网络模型性能)

目前,该方法相关文章即将发表在ICLR2017。作为深度学习领域的顶级会议,获准发表的论文都会得到业内人士的极大关注,从而对深度学习的发展产生相当的推动作用。据不完全统计,在ICLR2017接收的196篇文章中,英特尔中国研究院的INQ技术是唯一一项完全出自中国内地的研究工作。与这项工作相关的源代码正在逐步开源中,相信将会对学界和工业界产生巨大的影响,欢迎大家持续关注。

相关推荐

每天一个编程技巧!掌握这7个神技,代码效率飙升200%

“同事6点下班,你却为改BUG加班到凌晨?不是你不努力,而是没掌握‘偷懒’的艺术!本文揭秘谷歌工程师私藏的7个编程神技,每天1分钟,让你的代码从‘能用’变‘逆天’。文末附《Python高效代码模板》,...

Git重置到某个历史节点(Sourcetree工具)

前言Sourcetree回滚提交和重置当前分支到此次提交的区别?回滚提交是指将改动的代码提交到本地仓库,但未推送到远端仓库的时候。...

git工作区、暂存区、本地仓库、远程仓库的区别和联系

很多程序员天天写代码,提交代码,拉取代码,对git操作非常熟练,但是对git的原理并不甚了解,借助豆包AI,写个文章总结一下。Git的四个核心区域(工作区、暂存区、本地仓库、远程仓库)是版本控制的核...

解锁人生新剧本的密钥:学会让往事退场

开篇:敦煌莫高窟的千年启示在莫高窟321窟的《降魔变》壁画前,讲解员指着斑驳色彩说:"画师刻意保留了历代修补痕迹,因为真正的传承不是定格,而是流动。"就像我们的人生剧本,精彩章节永远...

Reset local repository branch to be just like remote repository HEAD

技术背景在使用Git进行版本控制时,有时会遇到本地分支与远程分支不一致的情况。可能是因为误操作、多人协作时远程分支被更新等原因。这时就需要将本地分支重置为与远程分支的...

Git恢复至之前版本(git恢复到pull之前的版本)

让程序回到提交前的样子:两种解决方法:回退(reset)、反做(revert)方法一:gitreset...

如何将文件重置或回退到特定版本(怎么让文件回到初始状态)

技术背景在使用Git进行版本控制时,经常会遇到需要将文件回退到特定版本的情况。可能是因为当前版本出现了错误,或者想要恢复到之前某个稳定的版本。Git提供了多种方式来实现这一需求。...

git如何正确回滚代码(git命令回滚代码)

方法一,删除远程分支再提交①首先两步保证当前工作区是干净的,并且和远程分支代码一致$gitcocurrentBranch$gitpullorigincurrentBranch$gi...

[git]撤销的相关命令:reset、revert、checkout

基本概念如果不清晰上面的四个概念,请查看廖老师的git教程这里我多说几句:最开始我使用git的时候,我并不明白我为什么写完代码要用git的一些列指令把我的修改存起来。后来用多了,也就明白了为什么。gi...

利用shell脚本将Mysql错误日志保存到数据库中

说明:利用shell脚本将MYSQL的错误日志提取并保存到数据库中步骤:1)创建数据库,创建表CreatedatabaseMysqlCenter;UseMysqlCenter;CREATET...

MySQL 9.3 引入增强的JavaScript支持

MySQL,这一广泛采用的开源关系型数据库管理系统(RDBMS),发布了其9.x系列的第三个更新版本——9.3版,带来了多项新功能。...

python 连接 mysql 数据库(python连接MySQL数据库案例)

用PyMySQL包来连接Python和MySQL。在使用前需要先通过pip来安装PyMySQL包:在windows系统中打开cmd,输入pipinstallPyMySQL ...

mysql导入导出命令(mysql 导入命令)

mysql导入导出命令mysqldump命令的输入是在bin目录下.1.导出整个数据库  mysqldump-u用户名-p数据库名>导出的文件名  mysqldump-uw...

MySQL-SQL介绍(mysql sqlyog)

介绍结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同...

MySQL 误删除数据恢复全攻略:基于 Binlog 的实战指南

在MySQL的世界里,二进制日志(Binlog)就是我们的"时光机"。它默默记录着数据库的每一个重要变更,就像一位忠实的史官,为我们在数据灾难中提供最后的救命稻草。本文将带您深入掌握如...