量化&二值网络概述

二值化网络前言部分本文引用【Binary Neural Networks: A Survey 】的观点,后续其他内容根据实际进行补充

背景

二值网络大幅度的节省了内存和计算量,以便在资源有限的设备上部署深度学习模型。然而,二值化势必会导致信息丢失,并且更糟糕的是,其不连续性给深度模型优化带来了困难。为了解决这些问题,大量的算法被提出,并在近几年取得了一定的进展。本文针对这些算法进行了一个综合性的调研,主要分为以下几类:原始解决方案二值化,以及使用最小化量化误差、改进网络损失函数和减少梯度误差。我们也调查了二值化中更为实际性的一些方面,比如硬件友好型模型的设计&训练技巧。其次,我们针对不同的任务进行了讨论与评估,包括图像分类、目标检测以及语义分割。最后,我们提出了二值化在未来发展可能遇到的挑战&展望。

Introduction

随着深度学习的进一步发展,深度神经网络在很多领域都有重大发展,包括计算机视觉、自然语言处理以及语音识别。而卷积神经网络被证明在图像处理、目标检测以及目标识别上是有效的,并且被广泛的应用在实际当中。
Deep CNNS 有强大的学习能力,因此通常在相应任务上能够达到令人满意的表现,但是这类模型有非常多的layer以及大量的参数。比如,在ImageNet dataset 的图像分类任务当中,VGG-16在top-5指标上有92.7%的准确率,而参数量则包含了140 million 的32-bit 浮点型数据。整个网络需要占用超过500 兆字节的存储空间以及需要执行1.6 * 10^10次浮点算术操作。这使得Deep CNNs 严重依赖与高性能的硬件比如GPU,而在真实应用场景中,通常设备的计算资源是受限的(移动手机、嵌入式设备)。例如,基于FPGAs的嵌入式设备通常只有几千的计算单元,远达不到常见模型所需的百万级浮点操作。因此,在复杂模型和有限的计算资源之间存在着严重的矛盾。即使现在,出现了大量为深度学习服务的专用型硬件,提供了有效的向量运算使得在前向推理中有更快的卷积,但是这大量的计算以及存储仍然限制了Deep CNNs在实际中的应用。除此之外,由于巨大的模型参数空间,神经网络的预测结果通常被看成黑匣子,让其可解释性变得很差。一些工作凭经验探索网络每一层的功能,他们形象化将不同filters的特征图进行可视化,并将其视为不同视觉组件的对应单元。
{ 这个地方是作者引导的话,大神可以直接跳过,如有不对的地方,请指正!嘿嘿 谢谢
【以上都是官话,说白了就是目前深度学习模型太大,在硬件部署上有难度,即提出问题
【那么如何解决这个问题?能不能得到一个尺寸又小,精度又高的小模型呢,这样不就可以在嵌入式设备上部署了嘛】
【先说答案,是可以的。其次为什么呢?】
我早期的时候曾经把模型每一层的参数分布简单可视化,发现模型中存在大量0附近的值,当然这跟模型初始化采用高斯分布矩阵以及归一化都有关系,不能说是模型训练一个人的锅。【这个地方也有人为了训练一个量化友好型的模型,采用均匀分布去对模型进行约束,从而让模型分布趋于均匀分布,抑或是得到尖端分布。这都是后话了】
请添加图片描述请添加图片描述
【而从可解释分析这个方面来看,许多大模型的参数以及结构是冗余的(比鲁棒还鲁棒),比如很多位置的值趋于0,对整体输出贡献度不大,每次都是摸摸鱼,没有实际输出(QAQ 这不就是我嘛)那这样的结构或者参数就算被裁掉也没有关系,对结果的影响也不大,反而可以得到更小模型的架构。(模型剪枝&参数量化就是这个思想),那还有就是我上面有人告诉我,哪些人哪些岗位实际上没啥用,那我在训练模型的时候不就可以训出一个更精炼的模型嘛(知识蒸馏 教师学生网络)
好了 玩笑开完了,这个地方知道模型能够压缩的原因主要是目前大模型有较多冗余的参数】
结合上面说的综述继续 不过翻译我就不翻了,原文如下https://blog.csdn.net/c9yv2cf9i06k2a9e/article/details/104831847/

--------------------------------------------------------------------------

解决问题

既然大模型理论上是冗余的,有些卷积核的功能是相似的(我更喜欢说他们是线性相关的),因此我们可以对模型进行压缩,从而达到减小模型大小的效果。
那模型压缩有以下几种方法:模型剪枝、参数量化、知识蒸馏、低秩分解、紧凑网络模型设计
而今天主要讲的是参数量化中的二值网络。
先声明定义,二值网络是什么?
请添加图片描述
这里我从Residual Quantization for Low Bit-width Neural Networks (TMM 2021)摘出一部分原文进行解释,二值网络即表明该网络由两种数值组成,即(-1,+1)。那么比较常用的的量化方式即如图中所示,大于等于0时返回1,否则返回-1。但是我们一般不直接用-1,+1去表示,而是会乘以相应的缩放因子,这个主要是由于二值一般表示两个数值,那我们就可以乘以相应的缩放因子(在量化中一般称为量化步长),这样既满足只有两个数值的约束,还能使得二值化前后有相应的对应关系。
并且原本相应的卷积也会有相应的变形,可以转化成异或操作&bitcount如下图所示。

请添加图片描述
那非常明显问题是:二值化前后误差非常大,所以需要进行相应的校正。如下图所示,x是量化之前的数值,αxq是量化之后的值,那为了使量化前后误差最小,我们可以求取量化前后的L2范数,当其最小时即可达到目标,如式4所示。我们再对式4进行展开以及求导,就可以得到当误差最小时,xq & α 的取值。请添加图片描述
以上,我们就得到了二值网络的一般形式~

而最近三年的论文也是比较多的,相关思维导图如下:
请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值