写点什么

深度神经网络中的 BNN 和 DNN:基于存内计算的原理、实现与能量效率

作者:申公豹
  • 2024-02-06
    内蒙古
  • 本文字数:3011 字

    阅读完需:约 10 分钟

引言

深度神经网络(DNN)在机器学习领域越来越受欢迎,其在一系列任务中展现出最先进的性能。为了达到最佳结果,通常需要大量的训练数据和大型模型,从而使得训练和推理过程变得复杂。尽管图形处理单元(GPU)在许多应用中被用于提供并行计算能力,但较低能耗的平台有可能实现一系列新的应用。目前,一个趋势是降低权重和激活精度的能力,以前的研究表明,在某些情况下,权重和激活可以二值化(即二值化神经网络,BNN),从而显著减小模型尺寸。利用这一特点可以减少计算能量和数据传输能量。

内存计算体系结构

内存访问在能量和吞吐量方面是一个关键的瓶颈,无法通过传统的数字加速方法来解决。深度神经网络受到严重影响,因为其涉及到大模型尺寸,需要在内存中存储权重。这促使了内存计算方法的发展。尽管已经提出了各种方法,但它们的原理通常是通过对许多存储位访问来计算结果,从而逐个分摊访问原始数据的成本。

例如,传统内存一次只访问一行,而内存计算一次可以访问许多行(可能是所有行)。然而,这种平衡需要在许多位上进行计算,这通常会增加所需的动态范围。在现有的内存受限结构中,拟合计算通常需要模拟操作,从而降低计算的信噪比(SNR)。

下图,我们保留了一个标准的 6T SRAM 位单元,以最大限度地提高归一化效率和吞吐量,同时探索如何通过训练方法解决深度神经网络的计算 SNR 问题。通过修改存储位单元并采用电荷域运算,我们大幅提高了模拟计算的 SNR,从而实现了最先进的规模和能源效率。


目前挑战主要有两个方向:(1)将权重值重置为 1-b 值;(2)针对位元变化和 BL/BLB 放电非线性的模拟 MAC 操作,产生各种非理想的因素。使用了增强的线性分类器,并在训练过程中采用约束分辨率回归(CRR)算法来适应 1-b 权重值。同时,他们利用错误自适应分类器增强(EACB)算法来克服模拟非理想。进一步发展到深度神经网络推理模型,以实现更高的精度。以上所采用的训练方法能够容忍有限的精度和模拟非理想。最近的内存计算架构进一步实现了 1-8 位的值和激活精度的可扩展性

深度神经网络(DNN)

深度神经网络的训练过程与其它机器学习算法类似,通常采用一种称为随机梯度的优化算法。

深度神经网络的结构如图 2 所示,每个“神经元”都是一个计算单元,接收 N 个输入 x/n 并在输入和可调权重 w 之间执行 MAC 操作。在这里,nr,re1,…R,其中 R 代表第 1 层的神经元总数,因此该层的输出维数也是 R。值得注意的是,每一层的 N 必须等于前一层的 N。在每个神经元中求和后,应用非线性函数·)产生输出激活 al。对于下一层,激活作为输入,因此 a→xn=r)。尽管图示了三层,但最终的输出层生成的激活.1 通常对应于输出分类决策,例如,基于最高值的输出实现多类推理。



随机梯度的优化算法


随机梯度下降(SGD)是一种用于训练深度学习和机器学习模型的优化算法。其核心思想是通过计算模型参数的梯度,并乘以一个学习率来更新参数。SGD 包括以下步骤:

  1. 向前传播:将训练数据输入到模型中,计算输出。

  2. 计算误差:通过代价函数表示输出与真实标签之间的差距。

  3. 向后传播:计算误差的梯度,以调整模型参数。

  4. 权重更新:根据梯度值更新模型参数。

SGD 通常在处理大量训练样本(称为“批处理”)之前进行权重更新,以避免由于随机噪声导致的稳定性问题。可以通过控制批处理的大小来调整更新策略。此外,SGD 可以采用多种随机方式进行更新,称为“epoch”,以实现增量权重更新。在推理阶段,只需执行前向传播以获得决策结果。

二值化神经网络(BNN)

二值化神经网络(BNN)是一种在深度学习模型中使用二进制权重和激活值的网络。在 BNN 的训练过程中,权重和激活值都是在正向传播过程中进行二值化的。然而,如果将梯度存储为二进制值,更新过程将变得困难,因此我们存储全精度的梯度。

在 BNN 中,由于激活函数的不连续性,需要使用新的导数函数。常用的成本函数有铰链损失等。为了进一步提高稳定性,提高收敛速度,并减少由于精度降低而导致的协方差偏移,建议在 MLP 训练过程中加入批归一化(batchnorm)。


BNN 架构

我们考虑了一个二值化神经网络(BNN),其中每个神经元被视为一个函数,计算隐藏层的激活值。虽然重和激活值在隐藏层和输入层都是二值化的,但输入层并未二值化,而是使用 5-b 表示。

这个 BNN 架构使用 MATLAB 将 MNIST 图像从 28x28 缩小到 10x10,并量化到 5b,然后将其馈送到 DNN 的第一层。DNN 包括两个隐藏层,每个隐藏层由 96 个神经元组成。每个神经元都是由一个 SRAM 列实现的,用于内存计算。

在 BNN 中,使用 ReLU 激活函数,并通过 Theano 库进行反向传播和重更新。使用基于平方铰链函数的损失函数,并使用 ADAM 自适应学习进行最小化。

在训练过程中,利用片上前向传播来获得一组可用于内存计算系推理的模型重。这不仅允许表示由于精度降低而导致的误差,还允许表示和通过重调优来解决由于模拟非理想而导致的误差。



基于 sram 的内存计算系统中各列偏移的硬件补偿,


首先,我们提出了一种基于硬件的补偿方法,用于减轻由比较器失配引起的每列偏移。这种方法已经在文献[6]中使用。如上图,我们使用 8 行 SRAM 进行补偿,尽管实际使用的系统具有 32 行。通过存储在这些行中的数据来对 BIBLB 放电进行偏置,其中偏置可以通过为该列存储的位单元值对每列进行完成。所有列的最优值可以使用二叉搜索算法高效且并行地确定。

在算法的开始,每列中的补偿位单元格的一半被设置为 1,另一半被设置为 0。当断言单词行时,补偿行名义上导致相等的 BL/BL 放电,因此比较器可以决定每列中的偏移量。补偿位单元的值被相应地调整,以抵消如图所示的偏移量,并重复此过程,调整存储值的数量是以前的一半,直到仅调整一行中的值。

最后,最终的偏移量对应于一个补偿行引入的放电偏置量。通过选择补偿行数和用于补偿行的字线电压,可以在补偿范围和补偿粒度之间实现平衡。因此,补偿字线电压与其他字线电压有选择地不同。

归一化

第二种方法涉及对 5-b 输入图像数据进行归一化,以确保模拟偏置的某些一致性,从而减轻非线性的影响。例如,位单元电流和比较器偏置电压都是 BL/BLB 值的强函数。


系统演示

为进行系统演示,构建下图所示的 4 芯片系统。该系统与[27]中使用的系统类似,但设置和配置不同。在这个应用中,三层只需要四个芯片中的三个。在片上 BNN 系统中,硬件只用于前向传播,无论是在训练还是测试中。如第三节所述,反向传播和权重更新由 Theano 处理。芯片和 Theano 之间的数据通过 matlab 控制的 DAO 交换。在此过程中,计算第 III-D 节中提到的批量归一化,从芯片获得的激活值 a 在发送到后续芯片之前被归一化并转换为 5 位数字。


总结

基于二值化值和激活的 MNIST 分类的 BNN 实现,利用标准 6T SRAM 位单元进行内存计算。通过使用这种方法,将神经网络中通常需要的 MAC 操作减少为逐位操作,从而大大减小了模型的大小,节约了能量,同时保持了存储在内存中的重量不变

随着人工智能和大数据时代的到来,深度神经网络(DNN)在计算机领域中得到了广泛应用。DNN 具有较高的准确度和广泛的应用领域,如语音识别、图像识别等。然而,DNN 的计算成本较高,需要大量的标记样本和计算时间。为了解决这一问题,随机梯度优化算法被提出,用于加快 DNN 的训练速度。同时,二值化神经网络(BNN)也被提出,通过减少神经网络中的权重和激活值的数量,降低计算和存储成本。在内存计算体系结构中,基于 SRAM 的内存计算系统可以提供高效的计算和存储能力,但需要对各列偏移进行硬件补偿。归一化操作也是 DNN 中不可或缺的一部分,能够有效提高模型的收敛速度和准确度。


说明:本文来自 CSDN 存内社区,原文作者:雪碧有白泡泡

发布于: 刚刚阅读数: 7
用户头像

申公豹

关注

申公豹本豹 2023-06-05 加入

InfoQ签约作者

评论

发布
暂无评论
深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率_存内计算_申公豹_InfoQ写作社区