深度学习--二值神经网络BNN基础概念学习总结+官方代码解析
作者:互联网
BNN网络
1.基础概念学习总结
优势
-
加速训练
-
减小权重的值的尺度的影响
-
归一化所带来的噪声也有模型正则化的作用
-
由于二值网络权值W中的元素只占一位二进制,因此在保存训练好后的模型时所需的内存非常小;同时又去除了普通的乘法操作。在减少模型参数所占的内存和运算量的同时还能保持神经网络的性能,这给深度学习在移动端的应用带来了非常大的前景。
摘要解读:
介绍了一种训练二值化神经网络(BNNs)的方法。在训练时,使用二元权值和激活度来计算参数梯度。在前向传递过程中,BNNs大大减小了内存大小和访问,并将大部分算术运算替换为按位运算,有望大幅度提高效率。
我们进行了两组实验Torch7和Theano框架,前者结合lua脚本语言,后者结合python
实验结果得出,在这两个框架,BNNs都取得了几乎是最先进的成果
MNIST, CIFAR-10和SVHN数据集。最后,我们写了一个二进制矩阵乘法
GPU内核(runtime),它可以运行我们的MNIST, BNN的速度比未优化的GPU内核快7倍,并且在分类精度上没有任何损失。
我们介绍了一种训练二元神经网络(BNNs)的方法,即在运行时训练具有二元权值和激活的神经网络,以及在训练时计算参数梯度的方法
主要思想
在前向传播过程中,经Deterministic(确定法)的Sign函数,可以将实数型的权值和激活值量化成+1,-1,当用于预测时,参数值仅为+1或-1,可以减小参数的内存占用和存取量;但是,训练时,仍需要对实数型的权值和激活值计算梯度,并以此更新权值
乘法优化
背景介绍:batch Normalization,简称BN。所谓的BN是指在数据经过一层进入下一层之前,需要对数据进行归一化,使之均值为0,方差为1。这样可以使得各层的参数量级上没有太大的差别。
有三个优点:加速训练,减小权重的值的尺度的影响,归一化所带来的噪声也有模型正则化的作用。
本研究创新
Shift-based Batch Normalization:二值网络对Batch Normalization操作的优化主要是通过AP2(x)操作和<<>>操作来代替普通的乘法。AP2(x)的作用是求与x最接近的2的幂次方,如AP2(3.14)=4,AP2(2.5)=2;而<<>>操作就是位移操作。AP2(x)的操作,在作者给出的源码中能够找到;但是<<>>的操作,从源码中只能看到Torch的点乘函数cmul()。(注:Shift-based AdaMax中的乘法操作也是用上述两个操作代替)
国内研究现状
有论文已经实现resnet和BNN的结合(应用于行人识别)[1]
摘要
网络结构
但是他们的实践表明如下这种二值化方法效果更好
[1]曹立宇,方向忠.一种基于BNN的行人再识别方法[J].信息技术,2018,42(12):129-133.
自然语言识别领域也有应用
2.代码解析
代码来源:https://github.com/MatthieuCourbariaux/BinaryNet
源码分为两个文件夹,其中train time,runtime运用了论文中XNOR和GPU核
然后安装代码前面的一些如theano等等包,到了这里
from pylearn2.datasets.mnist import MNIST
from pylearn2.utils import serial
先上这个网址https://github.com/lisa-lab/pylearn2下载这个文件夹,解压到site-packages下,然后在pycharm的local中输入(省略号里面写自己的路径)
cd C:\...site-packages\pylearn2-master
python setup.py develop
如果出现这个No module named ‘theano.compat.six’错,参考这个网址https://blog.csdn.net/qq_43232373/article/details/82999076
S.T.A.R. 发布了7 篇原创文章 · 获赞 0 · 访问量 136 私信 关注标签:训练,AP2,神经网络,BNN,权值,概念学习,二值,操作 来源: https://blog.csdn.net/weixin_44886683/article/details/104121308