1.简介

​ 二值化神经网络,在浮点型(权重值和激活函数值存储类型,32bit)神经网络的基础,将其权重和激活函数值进行二值化(+1,-1存储,只需1bit)得到的神经网络。[1]

​ BNN可用于嵌入式或移动场景(例如手机端、可穿戴设备、自动驾驶汽车等)[1],这些场景都没有GPU且计算能力和存储容量相对较弱且限制较大,具有研究的价值和意义。

二值化神经网络示例

2.优点

​ 既然参数值存储位数变少,其运算速度和存储空间必然能较原来神经网络有所提升,同时在训练效果上有所提升。

  • 存储空间上,通过将权重矩阵二值化,一个权重值只占用一个比特,相比于单精度浮点型权重矩阵,网络模型的内存消耗理论上能减少32倍,因此BNN在模型压缩上具有很大的优势。[1]

  • 运算速度上,权重值和激活函数值进行二值化之后,原来32位浮点型数的乘加运算,可以通过一次异或运算和一次popcnt(population count 统计有多少个为1的位)运算解决,在模型加速上具有很大的潜力。[1]

  • 训练效果上,有的时候二值网络的训练效果甚至会超越全精度网络,因为二值化过程给神经网络的权重和激活值带来了noise,像dropout一样,反而是一种regularization,可以部分避免网络的overfitting。[2]

3.基本原理

​ 方法来自于Bengio组2016年发表《Binarynet: Training deep neural networks with weights and activations constrained to +1 or -1》

3.1 权重和激活值二值化[3]

Deterministic(确定法):大于等于0,取+1;否则,取-1

Stochastic(统计法):以一定的概率,取+1,或-1

​ 作者采用确定法,在前向传播过程中,经过Sign函数,可以将实数型的权值和激活值量化成+1,-1,当用于预测时,参数值仅为+1或-1,可以减小参数的内存占用和运算量;但是,训练时,仍需要对实数型的权值和激活值计算梯度,并以此更新权值。论文中说到这里如果不是实际值的话,梯度处处为0,无法进行梯度下降。

3.2 乘法优化

用Xnor代替乘法的可行性:

假如用0表示-1,那么原来的二值乘法运算,与Xnor的真值表一样,所以,用Xnor代替乘法是合理、可行的。

例:a=[1,-1, 1, 1, -1],W=[-1,1,1,-1,-1]

正常乘法操作:a1xw1+a2xw2+a3xw3+a4xw4+a5xw5 =1x-1+-1x1+1x1+1x-1+-1x-1=-1

转成Xnor的计算方式:在程序中,a=[1,0,1,1,0],W=[0,1,1,0,0]表示的,

a^W=[1^0,0^1,1^1,1^0,0^0]=[1,1,0,1,0]

Popcount(a^w)=3

用vec_len表示向量元素个数的话,那么用xnor代替正常的乘累加(卷积),可以用通式:-(2Popcount(a^w)-vec_len)来计算,此例结果为 -(2Popcount(a^w)-5) = -1

3.3 权重和激活值更新

网络前向传播算法:

​ 对所有层循环,符合函数对当前权重Wk二值化,记为Wbk ,然后与上层激活值abk-1相乘在进行BN得本层激活值ak ,如果不是最后一层,则ak进行二值化。

网络反向传播算法:

​ 对所有层循环(倒序),如果k不是第一层,则计算梯度gak ,其中1|ak|含义:

图片来源于[3]

, 这里表示当|r|<=1时,Sign(r)的梯度等于1;否则,均为0。可见,这样处理,既保留了梯度信息,当r太大时,又取消梯度,加速网络的收敛。这就相当于,用HTanh(x)代替Sign(x)[3]

二值化神经网络(BNN)基础学习(一)的更多相关文章

  1. XNOR-Net:二值化卷积神经网络

    https://www.jianshu.com/p/f9b015cc4514 https://github.com/hpi-xnor/BMXNet  BMXNet:基于MXNet的开源二值神经网络实现 ...

  2. 深度学习实践-强化学习-bird游戏 1.np.stack(表示进行拼接操作) 2.cv2.resize(进行图像的压缩操作) 3.cv2.cvtColor(进行图片颜色的转换) 4.cv2.threshold(进行图片的二值化操作) 5.random.sample(样本的随机抽取)

    1. np.stack((x_t, x_t, x_t, x_t), axis=2)  将图片进行串接的操作,使得图片的维度为[80, 80, 4] 参数说明: (x_t, x_t, x_t, x_t) ...

  3. 《opencv学习》 之 OTSU算法实现二值化

    主要讲解OTSU算法实现图像二值化:    1.统计灰度级图像中每个像素值的个数. 2.计算第一步个数占整个图像的比例. 3.计算每个阈值[0-255]条件下,背景和前景所包含像素值总个数和总概率(就 ...

  4. 机器学习实战基础(十二):sklearn中的数据预处理和特征工程(五) 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段

    处理连续性特征 二值化与分段 sklearn.preprocessing.Binarizer根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量.大于阈值的值映射为1,而小于或等于阈值的值 ...

  5. [转载+原创]Emgu CV on C# (四) —— Emgu CV on 全局固定阈值二值化

    重点介绍了全局二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也 ...

  6. Opencv实现图像的灰度处理,二值化,阀值选择

    前几天接触了图像的处理,发现用OPencv处理确实比較方便.毕竟是非常多东西都封装好的.可是要研究里面的东西,还是比較麻烦的,首先,你得知道图片处理的一些知识,比方腐蚀,膨胀,仿射,透射等,还有非常多 ...

  7. [置顶] c#验证码识别、图片二值化、分割、分类、识别

    c# 验证码的识别主要分为预处理.分割.识别三个步骤 首先我从网站上下载验证码 处理结果如下: 1.图片预处理,即二值化图片 *就是将图像上的像素点的灰度值设置为0或255. 原理如下: 代码如下: ...

  8. python-opencv 图像二值化,自适应阈值处理

    定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果. 一幅图像包括目标物体.背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用 ...

  9. 数据预处理:规范化(Normalize)和二值化(Binarize)

    注:本文是人工智能研究网的学习笔记 规范化(Normalization) Normalization: scaling individual to have unit norm 规范化是指,将单个的样 ...

随机推荐

  1. 02-MySQL基础

    MySQL基础 1.存储引擎 1.1MyISAM MySQL5.5以及之前默认存储引擎MyISAM 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性.并发性要求不高,那么 ...

  2. scala的多种集合的使用(6)之映射Map的操作方法

    1.创建映射 1)创建不可变的映射 scala> val status = Map(1 -> "a",2 -> "b") status: sc ...

  3. centos 6.8 配置 Redis3.2.5

    配置Redis3.2.5 与 php-redis 一.配置Redis 1.下载Redis3.2.5安装包 [root@zhangsan /] wget http://download.redis.io ...

  4. 关于vue build时一直报错

    真鸡儿坑,截图说下是什么错: 像上面这种,一大堆,看不出具体是为什么,然后根据网上搜到的教程注释了webpack.base.conf.js里的某一行: 重新build,成功.......... 醉了啊 ...

  5. vue学习初探

    一.环境的搭建安装 VS Code vue开发环境的搭建 理解vue的脚手架 合适的cnpm版本

  6. Spring项目定时任务

    最近某协会网站有个需求:显示当天访问量,很明显需要做俩步:一个是访问请求量的显示,一个需要每天00点恢复访问次数为0 所以需要做个定时任务:每天00点更新: 注解用法Spring配置: 1.在spri ...

  7. Centos7 启动指定docker容器报错

    今天做docker实验时,把docker镜像pull下后,启动报如下错误: 错误信息:WARNING: IPv4 forwarding is disabled. Networking will not ...

  8. 【zabbix教程系列】七、自动注册(Windows)

    零.页面操作,设置自动注册Windows 配置--->动作--->事件源选为自动注册---->创建动作 填写名称,配置触发条件 主机元数据   值为 Windows 操作 一.Win ...

  9. Ajax 的优势和不足

    Ajax 的优势 1. 不需要插件支持 Ajax 不需要任何浏览器插件,就可以被绝大多数主流浏览器所支持,用户只需要允许 JavaScript 在浏览器上执行即可. 2. 优秀的用户体验 这是 Aja ...

  10. h5手机查看

    1.装个node:2.全局装个anywhere的npm包.(npm i -g anywhere)3.大功告成,现在到任意目录下用命令行执行anywhere就可以:(-p 参数可以设置启动端口) 补充: ...