论文部分内容阅读
卷积神经网络(CNNs或ConvNets)在计算机视觉中的作用越来越大,并被广泛应用于许多领域,如物体检测和分类、自动驾驶汽车、医院的磁共振成像、人脸检测等等。但其高度依赖输入数据集大小,大量的数据集会导致更多的计算开销。因为神经网络的计算依赖于矩阵向量乘法运算,又称为点积运算。从忆阻器被发现以来,研究表明忆阻器作为神经网络的突触,有强大的点积运算能力和巨大的应用潜力。由忆阻器作为基本单元组成的阻变存储器(ReRAM)交叉开关阵列能够在常数时间内并行计算完成点积运算,即O(1)时间复杂度且与输入数据的大小无关。然而作为点积运算的基本部件,忆阻器面临许多故障,比如其电阻值固定在高阻值(SA-0)或固定在低阻值(SA-1)、深写、快读、快写、慢读、慢写和耦合故障等等。这些故障都是由于不成熟的制造加工工艺造成的。
该研究旨在通过将忆阻器区域分成更小的4×6子区域来容忍SA-0和SA-1故障,即容忍故障的子区域为两对权重和一对冗余列。原因有以下两点:1,SA-0和SA-1故障占ReRAM交叉开关阵列中总故障的27%以上;2,在ReRAM交叉开关阵列中,许多研究者已经使用march测试算法对潜行路径问题和故障识别进行了大量的研究。
为了降低内部容错映射算法(MAO)中单元调整的复杂度,本文研究克服忆阻器的故障方法如下:在不考虑现有忆阻器单元的情况下,根据不同的故障百分比加入不同大小的冗余列来解决忆阻器的各类故障问题。在MAO算法中,如果一个忆阻器单元出现故障,将会调整附近的其他所有忆阻器单元。但本文更倾向于使用冗余对(redundant pairs)去解决故障。如果给定忆阻器单元的故障为SA-0,冗余列中没有故障则可以随机选择冗余对,并将该值写入相同极性的冗余单元。假设该单元不是故障单元,也没有相应的调整以减少故障,并且该单元卡在1的情况,随机选择的冗余列中极性相反的单元是用于克服该故障的。但是,随着故障率的增加,会有少数冗余列需要用来克服多个故障,同时克服SA-0与SA-1故障会导致冲突,从而降低了器件的容错性能。第二种实验方法为即采用现有单元(MAO算法中实现的方式)提高容错性又采用可调列数的冗余列来进行实验的。这主要归因于降低了复杂性和使用多个冗余的需求,就像独立冗余列(IRC)和冗余交叉开关(RX)中实现的那样。相比较MAO算法中使用独立冗余列方法来恢复故障,本文采用的冗余列方法可以容许比MAO算法更多的故障。与MAO仅使用冗余列算法相比,本文所提出的方法有更高的分类精度。
同时本文还提出了一种对交叉开关阵列进行分块的方法,利用了分块子区域单元数少的特点。整列中4个忆阻器单元完全无故障的概率很高,并且在子区域中的故障也很少。对于有SA-1故障某个单元,如果其极性相反的单元没有故障,可以通过写入一个产生足够接近目标值的值来调整SA-1故障,或者如果冗余列中没有故障则可利用冗余列种的单元。当忆阻器单元是SA-0故障时,克服它的最简单方法是调整冗余列中具有与该单元相同极性单元的电导值。与MAO算法实现相比,故障更容易恢复并且花费的时间更少,同时还比使用RX,IRX或者两者的组合考虑了更多的故障。
本文方案在Lenet-5上进行了测试,对Lenet-5在MNIST数据集上训练了20轮,对前人的方案与提出方案进行了评估和比较。本文方案能够有效克服忆阻器故障,在有10%忆阻器单元发生固定故障的较差场景下没有重训练时带缺陷忆阻器交叉开关阵列Lenet-5的识别率从35.4%提高到48.88%,在重新训练的情况下将精确度从98.16%提高到98.35%。这里的98.16%为前人方法考虑了现有单元的组合和冗余列可获得的最佳识别率。本文提出的方案在相同识别精度的前提下平均容许有多2%的故障发生。换句话说,本文所提出的忆阻器开关阵列分块方法比前人提出的容错方案多2%的故障处理能力。
尽管当故障率为10%时,本文提出的方案在没有重训练情况下只有48.88%的较低精度。相比较MAO算法的84.62%的精度,添加两个冗余列IRC算法的96.13%的精度和添加两个冗余交叉开关阵列RX算法的97.3%的精度,本文提出方案的计算可行性更好。因为与MAO,IRC和RX相比调整与故障单元相邻的全部八个单元,本文提出的方案仅考虑了四个单元(故障对和冗余列对)。此外,用一轮重训练本文提出的方案精度即可提升为97.71%。
本文还设计了一个的应用程序编程接口(API),通过给定忆阻器故障的百分比等输入信息获得忆阻神经网络的识别率等输出信息,进而让我们来洞察容错方案的好坏。输入分别为故障百分比、决定故障分布的随机种子、网络模型、基于软件的预训练权重文件和其他网络参数,例如重训练选项,忆阻器的逻辑电平数和使用的容错方案等。该API还显示了网络模型中每层的故障分布,并且可以使用基于忆阻器的容错权重对图像进行预测。对于图像预测,人们还能对忆阻器权重中的学习结果进行可视化进而获得用来标明区分图像重要程度的热图。
该研究旨在通过将忆阻器区域分成更小的4×6子区域来容忍SA-0和SA-1故障,即容忍故障的子区域为两对权重和一对冗余列。原因有以下两点:1,SA-0和SA-1故障占ReRAM交叉开关阵列中总故障的27%以上;2,在ReRAM交叉开关阵列中,许多研究者已经使用march测试算法对潜行路径问题和故障识别进行了大量的研究。
为了降低内部容错映射算法(MAO)中单元调整的复杂度,本文研究克服忆阻器的故障方法如下:在不考虑现有忆阻器单元的情况下,根据不同的故障百分比加入不同大小的冗余列来解决忆阻器的各类故障问题。在MAO算法中,如果一个忆阻器单元出现故障,将会调整附近的其他所有忆阻器单元。但本文更倾向于使用冗余对(redundant pairs)去解决故障。如果给定忆阻器单元的故障为SA-0,冗余列中没有故障则可以随机选择冗余对,并将该值写入相同极性的冗余单元。假设该单元不是故障单元,也没有相应的调整以减少故障,并且该单元卡在1的情况,随机选择的冗余列中极性相反的单元是用于克服该故障的。但是,随着故障率的增加,会有少数冗余列需要用来克服多个故障,同时克服SA-0与SA-1故障会导致冲突,从而降低了器件的容错性能。第二种实验方法为即采用现有单元(MAO算法中实现的方式)提高容错性又采用可调列数的冗余列来进行实验的。这主要归因于降低了复杂性和使用多个冗余的需求,就像独立冗余列(IRC)和冗余交叉开关(RX)中实现的那样。相比较MAO算法中使用独立冗余列方法来恢复故障,本文采用的冗余列方法可以容许比MAO算法更多的故障。与MAO仅使用冗余列算法相比,本文所提出的方法有更高的分类精度。
同时本文还提出了一种对交叉开关阵列进行分块的方法,利用了分块子区域单元数少的特点。整列中4个忆阻器单元完全无故障的概率很高,并且在子区域中的故障也很少。对于有SA-1故障某个单元,如果其极性相反的单元没有故障,可以通过写入一个产生足够接近目标值的值来调整SA-1故障,或者如果冗余列中没有故障则可利用冗余列种的单元。当忆阻器单元是SA-0故障时,克服它的最简单方法是调整冗余列中具有与该单元相同极性单元的电导值。与MAO算法实现相比,故障更容易恢复并且花费的时间更少,同时还比使用RX,IRX或者两者的组合考虑了更多的故障。
本文方案在Lenet-5上进行了测试,对Lenet-5在MNIST数据集上训练了20轮,对前人的方案与提出方案进行了评估和比较。本文方案能够有效克服忆阻器故障,在有10%忆阻器单元发生固定故障的较差场景下没有重训练时带缺陷忆阻器交叉开关阵列Lenet-5的识别率从35.4%提高到48.88%,在重新训练的情况下将精确度从98.16%提高到98.35%。这里的98.16%为前人方法考虑了现有单元的组合和冗余列可获得的最佳识别率。本文提出的方案在相同识别精度的前提下平均容许有多2%的故障发生。换句话说,本文所提出的忆阻器开关阵列分块方法比前人提出的容错方案多2%的故障处理能力。
尽管当故障率为10%时,本文提出的方案在没有重训练情况下只有48.88%的较低精度。相比较MAO算法的84.62%的精度,添加两个冗余列IRC算法的96.13%的精度和添加两个冗余交叉开关阵列RX算法的97.3%的精度,本文提出方案的计算可行性更好。因为与MAO,IRC和RX相比调整与故障单元相邻的全部八个单元,本文提出的方案仅考虑了四个单元(故障对和冗余列对)。此外,用一轮重训练本文提出的方案精度即可提升为97.71%。
本文还设计了一个的应用程序编程接口(API),通过给定忆阻器故障的百分比等输入信息获得忆阻神经网络的识别率等输出信息,进而让我们来洞察容错方案的好坏。输入分别为故障百分比、决定故障分布的随机种子、网络模型、基于软件的预训练权重文件和其他网络参数,例如重训练选项,忆阻器的逻辑电平数和使用的容错方案等。该API还显示了网络模型中每层的故障分布,并且可以使用基于忆阻器的容错权重对图像进行预测。对于图像预测,人们还能对忆阻器权重中的学习结果进行可视化进而获得用来标明区分图像重要程度的热图。