0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文解析网络压缩算法的原理实现及结果

454398 来源:AI加速微信公众号 作者:AI加速微信公众号 2020-11-14 10:51 次阅读

引言

网络压缩在AI加速中可以说起到“四两拨千斤”的作用,网络参数的减小不仅仅降低了存储和带宽,而且使计算逻辑简单,降低了LUT资源。从本篇开始,我们就一起挖掘一下网络压缩算法的类型,原理,实现,以及效果。写这类算法类文章,一是学习,二是希望能够令更多做FPGA的人,不再将眼光局限于RTL,仿真,调试,关心一下算法,定会发现FPGA的趣味和神通。

网络结构

二值化网络,顾名思义,就是网络参数只有两个数值,这两个数值是+1和-1。在DNN网络中主要是乘和加法运算,如果参数只有两个数值,那么乘法的实现就很简单,仅仅需要符号判断就可以了。比如输入数据A,如果和1乘,不变;和-1乘,变为负数。这用LUT很好实现,还节省了DSP的使用。相对于单精度浮点数,存储减小16倍,带宽也增加16倍。在计算单元数目相同情况下,比浮点运算速率提高了16倍。当然由于乘法和加法使用LUT数目减少,计算单元也会成倍增长,总的下来计算速率将大幅度提高。

网络训练中使用的都是浮点类型参数,这样做是为了保证训练的精度。那么这些浮点类型的参数如何量化的只有两个数值呢?论文中提出了两种方法,第一种是粗暴型,直接根据权重参数的正负,强行分出1和-1。即:

这里wb是二值参数,w是实际权重参数。量化可以看做在原来数据基础上增加了噪声,导致数据间最短距离变大。比如原来数据的分辨率为R0,如果增加一个高斯噪声s,那么其分辨率就增大了。这样在DNN中矩阵乘法中也引入了噪声,为:

数据分辨率的降低导致了有效信息的损失,但是在大量权重情形下,平均下来可以补偿一定的信息损失,即如果有:

那么在权重无穷多时,有:


图1.1 数据增加了噪声,导致数据分辨率降低

另外一种是随机型,即以一定概率来选择1和-1,论文中采用如下公式:

其中“hard sigmoid”函数为:

这实际上是对sigmoid函数进行了线性化,这样做的目的可以减少计算量。因为线性计算只有一个乘法和加法,而sigmoid函数有指数计算。使用随机量化更能均衡化量化引入的噪声,消除噪声造成的信息损失。粗暴型量化可能因为权重参数分布不同而发生较大的“不平衡”,比如负数权重较多,那么导致-1远远多于+1,这样就会出现权重偏移在负方向多一些。如果使用随机概率模型,即使负数权重多,也会有一定概率出现+1,弥补了+1较少的情况。

图1.2 粗暴型和随机型量化:随机型量化的分布更加均匀

训练过程

训练过程主要包括三个部分:

1) 前向传播:给定输入数据,一层一层的计算,前一层激活函数的结果作为下一层的输入;

2) 反向传播:计算每一层代价函数的梯度,从最后一层开始计算,反向计算前一层,一直到计算出第一层的梯度值;

3) 更新参数:根据计算出来的梯度和前一时刻的参数,计算出下一时刻的参数。

计算过程可以用图2.1表示:

图2.1 训练过程

图2.2 训练算法

每次量化发生在计算出浮点参数之后,然后在进行前向计算,得到代价函数,进行反向计算代价函数梯度,接着利用前一刻参数计算出下一刻数据,不断迭代直到收敛。

结果

论文在三个数据集上进行了测试:MNIST,CIFAR-10,SVHN。

MNIST有6万张内容为0-9数字的训练图片,以及1万张用于测试的28x28大小的灰度图片。论文研究了两种量化方式下训练时间,以及测试出错率。从中看出随机量化出错率更低,更适合用于二值量化。

图3.1 不同量化方式下的训练时间以及测试错误率:点线表示训练误差,连续线表示测试错误率

CIFAR-10图片内容比MNIST复杂一些,包含了各种动物。有5万张训练图片和1万张32x32大小的测试图片。

SVHN也是0-9数字图片,含有604K张训练图片和26K的32x32大小的测试图片。以上三种数据集下使用二值网络的结果如下图:

图3.2 三种数据集结果(错误率)比较

从中看出二值网络错误率几乎和其他网络模型差不多,但是其大大压缩了网络模型。

结论

二值化网络中参数只用两个数值表示,实际上仅仅考虑了权重的符号作用。在三种小型简单的数据集上表现良好。

文献

1 Matthieu Courbariaux, Y.B., Binary Connect Training Deep Neural Networks with binary weights during propagations. ArXiv preprint, 2016.

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593158
  • 算法
    +关注

    关注

    23

    文章

    4455

    浏览量

    90751
收藏 人收藏

    评论

    相关推荐

    FPGA压缩算法有哪些

    在图像压缩算法中可以采用哈夫曼编码的方式对编码冗余的信息进行压缩,可以采用预测的方式来减少像素间冗余,可以采用量化的方式完成心理视觉冗余信息的去除
    的头像 发表于 04-15 11:48 174次阅读
    FPGA<b class='flag-5'>压缩</b><b class='flag-5'>算法</b>有哪些

    基于门控线性网络(GLN)的高压缩比无损医学图像压缩算法

    实现基于门控线性网络(GLN)的高压缩比无损医学图像压缩算法,以提高医学图像存储和分发系统的效率。与“传统”的基于上下文的数据
    的头像 发表于 04-08 10:29 169次阅读
    基于门控线性<b class='flag-5'>网络</b>(GLN)的高<b class='flag-5'>压缩</b>比无损医学图像<b class='flag-5'>压缩</b><b class='flag-5'>算法</b>

    基于FPGA的网络加速设计实现

    首先是FPGA硬件的变化太多,各个模块可配参数的变化(比如卷积模块并行数的变化),另外一个是网络模型多种多样以及开源的网络模型平台也很多(tensorflow,pytorch等)。网络压缩
    发表于 04-08 09:48 99次阅读
    基于FPGA的<b class='flag-5'>网络</b>加速设计<b class='flag-5'>实现</b>

    ADAS1000如何压缩24位的采样结果

    目前是按照2k的采样率,输出结果是24位(三个字节)的,因为是通过串口往上位机传输结果帧的结果数据量有点大,串口传输不过来(尤其是18导联时)。但又不想用128k的采样率,那样数据
    发表于 12-14 06:22

    如何将sigmastudio的compressor压缩限幅参数换算成DSP的设置值?

    压缩曲线各点参数换算不尽相同,标准compressor(-90~6dB)与扩展compressor(-135~24dB)的压缩曲线各点参数换算也不尽相同?有什么算法可以准确换算出来,实现
    发表于 11-29 06:43

    请问视频网络传输需要哪些压缩或者解码协议?

    现需要将stm32采集到的摄像头信息,通过网口传输给PC直接通过PC抓图,视频网络传输需要哪些压缩或者解码协议?
    发表于 10-17 07:56

    无线传感器网络数据融合路由算法分析

    [3]提出种基于决策数据融合的路由算法AFST(Adaptive Fusion Steiner Tree),它通过权衡融合代价与传输代价,动态决定数据相遇点是否进行数据融合,可以进步减少
    发表于 09-21 08:29

    如何实现垃圾压缩设备的数据采集与智能管理?

    进行压缩处理,保证减小空间占用、减少污水外溢等,可以将垃圾压缩设备PLC接入物通博联工业智能网关,由网关进行协议解析和数据采集,并将数据进行处理后上传到云平台,以实现设备监控、故障报警
    的头像 发表于 09-07 15:30 363次阅读
    如何<b class='flag-5'>实现</b>垃圾<b class='flag-5'>压缩</b>设备的数据采集与智能管理?

    如何使用软件算法计算CRC-16/8的结果

    应用程序:使用查询表或应用软件算法计算 CRC-32/16/8 结果 BSP 版本: NUC230/240 Series BSP CMSIS v3.01.002 硬件: NuTiny - EVB
    发表于 08-31 09:50

    卷积神经网络算法有哪些?

    算法。它在图像识别、语音识别和自然语言处理等领域有着广泛的应用,成为近年来最为热门的人工智能算法之一。CNN基于卷积运算和池化操作,可以对图像进行有损压缩、提取特征,有效降低输入数据的维度,从而
    的头像 发表于 08-21 16:50 1153次阅读

    卷积神经网络算法是机器算法

    卷积神经网络算法是机器算法吗  卷积神经网络算法是机器算法的一种,它通常被用于图像、语音、文本等
    的头像 发表于 08-21 16:49 522次阅读

    如何抓取app数据包 网络抓包原理及实现

    实现对App的网络数据抓包,需要监控App与服务器交互之间的网络节点,监控其中任意一个网络节点(网卡),获取所有经过网卡中的数据,对这些数据按照
    发表于 08-11 09:30 1773次阅读
    如何抓取app数据包 <b class='flag-5'>网络</b>抓包原理及<b class='flag-5'>实现</b>

    Linux内核网络拥塞控制算法的具体实现框架(一)

    谈起网络拥塞控制,大家可能很熟悉八股文中的“加法增大“、”乘法减小“、”慢开始“、“拥塞避免”、“快重传”、“快恢复”等概念。没错,这是一种经典网络拥塞控制算法的基础理论,但在实际的实现
    的头像 发表于 07-28 11:32 435次阅读
    Linux内核<b class='flag-5'>网络</b>拥塞控制<b class='flag-5'>算法</b>的具体<b class='flag-5'>实现</b>框架(一)

    基于粒神经网络与遗传算法优化的人脸识别算法

    分为额头、眼睛与嘴三个部分,粒神经网络采用不同数量的数据点对面部子区域进行训练,获得多个训练结果;设计了一种多级的遗传算法对粒神经网络进行优化。基于两组公开人脸数据库的对比实验
    发表于 07-20 15:38 0次下载

    zSwap 技术压缩算法介绍

    压缩可以降低占用空间,顾名思义,内存压缩就是压缩内存,节省内存空间。就目前的技术而言, I/O 的速度远远慢于这 RAM 操作速度。因此,如果频繁地做 I/O 操作,不仅影响 flash 使用寿命
    的头像 发表于 05-19 09:25 820次阅读