深度学习技术:二值化神经网络

深度学习领域,算法和硬件的改进一直是研究的热点,尤其是在加速神经网络计算方面。其中,低精度算术的研究尤为引人注目。本文将重点介绍一类特殊的低精度网络——二值化神经网络(BNNs),探讨其背后的基本概念,并展示如何在CPU和GPU上实现Neon框架。BNNs在多种数据集上达到了与传统神经网络相当的精度。

二值化神经网络(BNNs)

BNNs通过使用二值权重和激活函数进行所有计算,从而取代了深度学习中所有计算(包括计算梯度、应用参数更新和计算激活函数)所依赖的浮点数运算。这种32位浮点数乘法非常昂贵。在BNNs中,浮点数乘法被位运算XNOR和左右位移所取代。从硬件角度来看,这种二进制操作在计算效率和低功耗方面具有极大的吸引力。

二值化神经网络的优势在推理阶段比在训练阶段更为明显。在训练过程中,尽管每次迭代(前向传播、反向传播和参数更新)的速度更快,但BNNs需要比标准神经网络更多的迭代次数才能达到相同的精度。对于推理,大部分乘法运算被简化为二进制操作。Courbariaux等人认为,推理速度提高了七倍,且功耗更低,而精度没有损失。这些优势对于部署在边缘设备上的推理芯片非常有吸引力,例如自动驾驶汽车、无人机和智能手机中的芯片。

在BNNs中,标准深度学习网络的常见组件被其二进制变体所取代。例如,典型的学习率计划将被基于位移的学习率计划所取代。其他替代包括二值线性层、符号函数、基于位移的批量归一化、基于位移的AdaMax和XNOR点积。这些变体使用三个基本概念:二值化、位打包、近似平方位移,来替代浮点数乘法。

BNNs的原始操作是二值化函数,它负责将权重和激活函数转换为-1和+1。这个函数有两种形式:确定性和随机性。确定性函数根据符号对权重或激活函数进行阈值化。随机函数则以概率方式选择-1和+1。实现这个函数比较困难,因为它需要随机生成位。

σ(x) = 1 if x > 0 else -1

二值化函数应用于所有权重层,并用作激活函数。例如,在前向传播中:

θ_k = σ(W_k * θ_{k-1})

其中L是总层数,W_k和θ_k分别是第k层的权重和批量归一化参数。二值化,尤其是随机二值化,可以被视为一种正则化形式。从概念上讲,这与Dropout类似,因为一些值是概率性阈值化的。

在BNNs中,需要将-1和+1的矩阵相乘;例如,在前向传播期间激活函数和权重的乘法。GPU并不原生支持二进制操作。如果只需要1位,却使用32位或16位数字,这将非常浪费。

二进制算术通过将32位打包到一个32位整数中,然后执行位运算XNOR来模拟。换句话说,两个32位整数之间的位运算XNOR将产生32个不同的二进制操作。XNOR在-1和1的二进制域中充当乘法:如果操作数相同,则结果为1;如果操作数不同,则结果为-1。打包整数是前期成本,但每次操作的计算吞吐量是32倍。

这个概念用于实现XNOR点积,它用于将两个由-1和+1组成的矩阵相乘。在普通的矩阵乘法中,C = AB,其中A、B和C是矩阵,结果矩阵C的每个元素是通过A中的一行和B中的一列的点积计算得出的。在简单的CUDA内核实现中,将看到以下内容:

C[i][j] = A[i] * B[j]

XNOR点积将A中的位按行打包,将B中的位按列打包,然后使用位异或和计数操作如下:

C[i][j] = XNOR(A_p[i], B_p[j])

其中A_p和B_p是它们对应物的位打包版本。为了方便,-1用0表示,1用1表示。累积值稍后在结果矩阵中解包。累积、计数和异或都可以高效实现。

在深度学习中,经常需要缩放值,例如随着训练的进行减少学习率,计算批量归一化的尺度和位移,更新学习规则中的参数等。这些乘法可以用近似平方位移的二进制位移来替代。例如,假设想要计算7*5的近似值:

7 * 5 ≈ 2^(2.82)

其中AP2是近似平方位移运算符,<<是左二进制位移。这有两个吸引力:1)近似平方可以非常高效地计算(查看位操作技巧以获得灵感);2)与平方的乘法可以用左位移和右位移简单地实现。以下是如何在实践中应用的示例,这是vanilla AdaMax的更新规则:

θ_t = θ_{t-1} - α * g_t / (β_1 * g_t + β_2 * sqrt(1 + g_t^2))

最后一行的乘法可以用近似平方位移来替代,以得出基于位移的AdaMax更新规则。

θ_t = θ_{t-1} - α * g_t / (β_1 * g_t + β_2 * sqrt(1 + g_t^2)) ≈ θ_{t-1} - α * g_t / (β_1 * g_t + β_2 * 2^(2.82))

基于位移的批量归一化和学习率计划也是如此。

二值化、近似平方位移和位打包被用来取代乘法运算,以实现计算和功耗高效的二进制操作。这三个概念为BNNs提供了基础。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485