Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1
M. Courbariaux M, et al., Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1, (2016).
摘要
二值化神经网络(Binarized Neural Networks,BNNs):推理(run-time)阶段,权值(weights)和**(activations)均为二进制数值;训练阶段:使用二进制权值和**计算参数梯度
训练BNNs的方法
网络前馈过程(forward pass)中,BNNs减小内存占用及访问(access),且多数运算为位操作(bit-wise operations),能够有效降低功耗(power-efficiency)
引言
二值化神经网络(Binarized Neural Networks,BNNs):推理(run-time)阶段,权值(weights)和**(activations)均为二进制数值;训练阶段:使用二进制权值和**计算参数梯度
1 二值化神经网络
1.1 确定、随机二值化(Deterministic vs Stochastic Binarization)
训练BNN时,将权值和**限定为±1
二值化函数(binarization functions):
(1)确定(deterministic)二值化函数:
xb=Sign(x)={+1−1if x≥0otherwise(1)
(2)随机(stochastic)二值化函数:
xb={+1−1with probability p=σ(x)with probability 1−p(2)
其中,σ为“硬逻辑”(hard sigmoid)函数:
σ(x)=clip(2x+1,0,1)=max(0,min(1,2x+1))
随机二值化函数性能优于确定二值化函数,但需要硬件生成随机序列,因此难以应用。
1.2 梯度计算与累加(Gradient Computation and Accumulation)
权值的梯度是实数值(real-valued),通过实值变量累加计算。
随机梯度下降(Stochasic Gradient Descent,SGD)采用有噪的小步长探索参数空间,各权值的随机梯度贡献累加平滑能够消除噪声。
计算参数的梯度时,向权重和**项中添加噪声相当于了一种正则化,有助于提高模型的泛化能力。
本文训练BNNs的方法可以视为Dropout的变体,Dropout是随机将**置零,本文是对权值和**二值化。
1.3 离散化梯度传播(Propagating Gradients Through Discretization)
符号函数量化(sign function quantization)
q=Sign(r)
假设梯度∂q∂C的估计量gq已知,则梯度∂r∂C的估计量(straight-through estimator)为
gr=gq1∣r∣≤1(4)
上式保留了梯度信息,但当r过大时,丢弃(cancel)梯度。
C:迷你批次(minibatch)的损失函数
λ:学习速率衰减系数
L:网络层数
∘:元素乘法(element-wise multiplication)。
Binarize():指定权值和**的二值化方法(确定、随机);
Clip():指定如何截断权值;
BatchNorm():指定如何对**批量标准化;
BackBatchNorm():标准化层处,指定梯度如何反向传播;
Update():梯度已知时,如何更新参数(ADAM、AdaMax)。

导数1∣r∣≤1可视为通过“硬正切”(hard tanh)传播梯度,表示为分段线性**函数(piece-wise linear activation function):
Htanh(x)=Clip(x,−1,1)=max(−1,min(1,x))(5)
隐层单元通过 非线性符号函数(sign function non-linearity)得到二值**(binary activations),其权值计算分为两步:
(1)将实数权值限定在−1和+1之间:当权值更新使wr超出[−1,+1],将wr投影到−1或+1上,即训练时截断(clip)权值。
(2)使用权值wr时,将其二值化wb=Sign(wr)
1.4 移位批标准化(Shift based Batch Normalization)
- 算法2:移位批标准化(shift-based batch normalization,SBN)
AP2(x)=Sign(x)×2round(log2∣x∣):2的幂函数的近似;
≪≫:移位(both left and right binary shift)

【作者给出的公式书写有误】
推导:
x=Sign(x)2log2(∣x∣)≈Sign(x)×2round(log2∣x∣)
(1)BatchNorm:
均值:μB=m1∑i=1mxi
方差:σB2=m1∑i=1m(xi−μB)2
标准化:x^i=σBxi−μB
缩放平移(scale and shift):yi=γx^i+β
(2)Shift-based BatchNorm:
C(xi)=xi−μB,σB2=m1∑i=1mC2(xi)
用移位运算近似平方运算(C2(xi)):
C2(xi)=≈==C(xi)×Sign(C(xi))2log2∣C(xi)∣C(xi)×Sign(C(xi))2round(log2∣C(xi)∣)∣C(xi)∣2round(log2∣C(xi)∣)∣C(xi)∣≪≫round(log2∣C(xi)∣)
近似方差:
σB2≈m1∑i=1mC(xi)∣≪≫round(log2∣C(xi)∣)
用移位运算近似除运算(C2(xi)/σB):
σBC(xi)=≈==Sign(σB)2log2∣σB∣C(xi)Sign(σB)2round(log2∣σB∣)C(xi)2round(log2σB)C(xi)C(xi)≪≫round(log2σB))
标准化:
x^i≈C(xi)≪≫round(log2σB))
缩放平移:
yi=Sign(γ)x^i≪≫round(log2∣γ∣)+β
1.5 移位AdaMax(Shift based AdaMax)
- 算法4:移位AdaMax优化器(shift-based AdaMax)
gt2:按元素取平方,gt∘gt
默认设置:α=2−10、1−β1=2−3、1−β2=2−10
所有向量运算均指按元素运算。
β1t、β2t:β1、β2的t次方(β1 and β2 to the power t)

1.6 第一层
相邻两层,前一层的输出是后一层的输入,因此除第一层外,所有层的输入都是二进制的。
连续数值(continuous-valued inputs)输入可以用定点数(fixed point numbers)处理(fixed point numbers),8位(8-bit)定点输入可表示为:
s=x⋅wb
s=i=1∑82n−1(xn⋅wb)
其中,x为由1024个8-bit输入组成的向量,x18表示第1个输入的最高位(most significant bit of the first input),wb为由1024个1-bit权值组成的向量,s为加权和。

2 基准测试(Benchmark Results)
2.1 多层感知器、MNIST、Theano(Multi-Layer Perception (MLP) on MNIST (Theano))

2.2 多层感知器、MNIST、Torch7(MLP on MNIST (Torch7))
2.3 卷积网络、CIFAR-10、Theano(ConvNet on CIFAR-10 (Theano))

2.4 卷积网络、CIFAR-10、Torch7(ConvNet on CIFAR-10 (Torch7))
2.5 卷积网络、SVHN(ConvNet on SVHN)

3 前向过程低功耗(Very Power Efficient in Forward Pass)
3.1 内存占用及访问(Memory Size and Accesses)


3.2 同或(XNOR-Count)
1-bit XNOR-count operations
3.3 重复滤波器(Exploiting Filter Repetitions)
二值卷积核的数量取决于卷积核的尺寸(the number of unique filters is bounded by the filter size)。
4 运算速度提升7倍(Seven Times Faster on GPU at Run-Time)

5 讨论(Discussion and Related Work)