1/32
。
Courbariaux
等人 2016 年发表的名为《Binarynet: Training deep neural networks with weights and activations constrained to +1 or -1》的一篇论文 。这篇论文第一次给出了关于如何对网络进行二值化和如何训练二值化神经网络的方法 。Conv
)->批标准化(BNorm
)->激活(Activ
)->池化(Pool
)这样的顺序操作组成的 。对于异或神经网络,设计出的模块是由批标准化(BNorm
)->二值化激活(BinActiv)->二值化卷积(BinConv
)->池化(Pool
)的顺序操作完成 。这样做的原因是批标准化以后,保证了输入均值为 0
,然后进行二值化激活,保证了数据为 -1
或者 +1
,然后进行二值化卷积,这样能最大程度上减少特征信息的损失 。二值化残差网络结构定义实例代码如下:def residual_unit(data, num_filter, stride, dim_match, num_bits=1):"""残差块 Residual Block 定义"""bnAct1 = bnn.BatchNorm(data=https://www.huyubaike.com/biancheng/data, num_bits=num_bits)conv1 = bnn.Convolution(data=bnAct1, num_filter=num_filter, kernel=(3, 3), stride=stride, pad=(1, 1))convBn1 = bnn.BatchNorm(data=conv1, num_bits=num_bits)conv2 = bnn.Convolution(data=convBn1, num_filter=num_filter, kernel=(3, 3), stride=(1, 1), pad=(1, 1))if dim_match:shortcut = dataelse:shortcut = bnn.Convolution(data=bnAct1, num_filter=num_filter, kernel=(3, 3), stride=stride, pad=(1, 1))return conv2 + shortcut
4.1,二值网络的梯度下降现在的神经网络几乎都是基于梯度下降算法来训练的,但是二值网络的权重只有 \(\pm 1\),无法直接计算梯度信息,也无法进行权重更新 。为解决这个问题,Courbariaux 等人提出二值连接(binary connect)算法,该算法采取单精度与二值结合的方式来训练二值神经网络,这是第一次给出了关于如何对网络进行二值化和如何训练二值化神经网络的方法 。过程如下:- 权重
weight
初始化为浮点 - 前向传播
Forward Pass
:- 利用决定化方式(
sign(x)函数
)把 Weight 量化为+1/-1
, 以0为阈值 - 利用量化后的 Weight (只有+1/-1)来计算前向传播,由二值权重与输入进行卷积运算(实际上只涉及加法),获得卷积层输出 。
- 利用决定化方式(
- 反向传播
Backward Pass
:- 把梯度更新到浮点的 Weight 上(根据放松后的符号函数,计算相应梯度值,并根据该梯度的值对单精度的权重进行参数更新)
- 训练结束: 把 Weight 永久性转化为
+1/-1
, 以便inference
使用
1,如何对权重进行二值化?
权重二值化一般有两种选择:
- 直接根据权重的正负进行二值化:\(x^{b}=sign(x)\) 。符号函数
sign(x)
定义如下:
- 进行随机的二值化,即对每一个权重,以一定概率取 \(\pm 1\)
二值权重的梯度为0,无法进行参数更新 。为解决这个问题,需要对符号函数进行放松,即用 \(Htanh(x) = max(-1, min(1,x))\) 来代替 \(sinx(x)\) 。当 x 在区间 [-1,1] 时,存在梯度值 1,否则梯度为 0。
经验总结扩展阅读
- 起猛了是什么意思网络用语
- 网络语自来水是什么意思?
- tensorflow-gpu版本安装及深度神经网络训练与cpu版本对比
- 土豪是什么意思?
- 咸鱼网络语是什么意思?
- 来时路一年桃花一孤独是什么歌
- none网络是什么意思
- m什么意思网络流行语
- 鱼越大鱼越小梗出自哪里
- 抽烟抽骆驼是什么梗