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 \pm 1 ±1
二值化函数(binarization functions):
(1)确定(deterministic)二值化函数:
(1) x b = S i g n ( x ) = { + 1 if x ≥ 0 − 1 otherwise x^b = \mathrm{Sign}(x) = \begin{cases} +1 & \text{if} \ x \geq 0 \\ -1 & \text{otherwise} \end{cases} \tag{1} xb=Sign(x)={ +1−1if x≥0otherwise(1)
(2)随机(stochastic)二值化函数:
(2) x b = { + 1 with probability p = σ ( x ) − 1 with probability 1 − p x^b = \begin{cases} +1 & \text{with probability} \ p = \sigma(x) \\ -1 & \text{with probability} \ 1 - p \end{cases} \tag{2} xb={ +1−1with probability p=σ(x)with probability 1−p(2)
其中, σ \sigma σ为“硬逻辑”(hard sigmoid)函数:
σ ( x ) = c l i p ( x + 1 2 , 0 , 1 ) = max ( 0 , min ( 1 , x + 1 2 ) ) \sigma(x) = \mathrm{clip}(\frac{x + 1}{2}, 0, 1) = \max(0, \min(1, \frac{x + 1}{2})) σ(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 = S i g n ( r ) q = \mathrm{Sign}(r) q=Sign(r)
假设梯度 ∂ C ∂ q \frac{\partial C}{\partial q} ∂q∂C的估计量 g q g_q gq已知,则梯度 ∂ C ∂ r \frac{\partial C}{\partial r} ∂r∂C的估计量(straight-through estimator)为
(4) g r = g q 1 ∣ r ∣ ≤ 1 g_r = g_q 1_{|r| \leq 1} \tag{4} gr=gq1∣r∣≤1(4)
上式保留了梯度信息,但当 r r r过大时,丢弃(cancel)梯度。
- 算法1:训练BNN
C C C:迷你批次(minibatch)的损失函数
λ \lambda λ:学习速率衰减系数
L L L:网络层数
∘ \circ ∘:元素乘法(element-wise multiplication)。
Binarize():指定权值和激活的二值化方法(确定、随机);
Clip():指定如何截断权值;
BatchNorm():指定如何对激活批量标准化;
BackBatchNorm():标准化层处,指定梯度如何反向传播;
Update():梯度已知时,如何更新参数(ADAM、AdaMax)。
导数 1 ∣ r ∣ ≤ 1 1_{|r| \leq 1} 1∣r∣≤1可视为通过“硬正切”(hard tanh)传播梯度,表示为分段线性激活函数(piece-wise linear activation function):
(5) H t a n h ( x ) = C l i p ( x , − 1 , 1 ) = max ( − 1 , min ( 1 , x ) ) \mathrm{Htanh}(x) = \mathrm{Clip}(x, -1, 1) = \max(-1, \min(1, x)) \tag{5} Htanh(x)=Clip(x,−1,1)=max(−1,min(1,x))(5)
隐层单元通过 非线性符号函数(sign function non-linearity)得到二值激活(binary activations),其权值计算分为两步:
(1)将实数权值限定在 − 1 -1 −1和 + 1 +1 +1之间:当权值更新使 w r w^r wr