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

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

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

智东西

文 | 英特尔中国研究院

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

针对上述问题,英特尔中国研究院于近期提出了一种名为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技术是唯一一项完全出自中国内地的研究工作。与这项工作相关的源代码正在逐步开源中,相信将会对学界和工业界产生巨大的影响,欢迎大家持续关注。

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个else解...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。今天分享一下break和continue在代码中的执行效果是什么,进一步区分出二者的区别。一、continue例1:当小明3岁时不打印年龄,其余年龄正常循环打印。可以看...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录由浅入深,66条JavaScript面试知识点(一)由浅入深,66...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)1.vue的生命周期有哪些及每个生命周期做了什么?beforeCreate是newVue()之后触发的第一个钩子,在当前阶段data、methods、com...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...