基于忆阻器的近似计算方法
季宇, 张悠慧, 郑纬民    
清华大学 计算机科学与技术系, 北京信息科学与技术国家研究中心, 北京 100084
摘要:忆阻器是一种非易失性存储器件,目前主要有两种方法用忆阻器实现通用计算:通过忆阻器交叉开关阵列支持神经网络来逼近任意函数;用忆阻器构造基础的门电路,再进一步实现任意Boole逻辑计算。前者存在误差难以控制的问题,后者相比传统数字电路优势不显著。该文设计了一种针对忆阻器的通用近似计算范式,基于忆阻器的硬件架构通用现场可编程突触阵列(GP-FPSA),结合了两种方法的优点来实现基于忆阻器的高效且误差可控的通用近似计算。在具体设计上,充分考虑了神经网络近似能力的限制,通过万能近似器来解决直接训练神经网络误差过大且不可控的问题,并结合控制流实现了复杂函数的拆分,降低近似构造的开销,最后通过基于忆阻器的架构设计,使得通用计算能力大幅提升。
关键词近似计算    神经网络    万能近似器    忆阻器    
Approximate computing method based on memristors
JI Yu, ZHANG Youhui, ZHENG Weimin    
Beijing National Research Center for Information Science and Technology, Department of Computer Science and Technology, Tsinghua University, Beijing 100084, China
Abstract: Memristors are non-volatile memory devices that are also capable of colocation computations. General-purpose computations can use memristors to approximate arbitrary functions with neural networks or can use memristors to model basic gate circuits that then perform arbitrary Boolean logic calculations. However, the use of memristors to approximate arbitrary functions does not have controllable errors and the use of memristors to model basic gate circuits is slower than conventional digital circuits. This paper presents a general-purpose approximate computing paradigm for memristors and a memristor based hardware architecture, general-purpose field programmable synapse array (GP-FPSA), that combines the advantages of these two methods for efficient general-purpose approximate computing with controllable errors. A universal approximating construction method is used to resolve the large, uncontrollable error of directly training a neural network for approximations. Then, the model control flow splits complicated functions to reduce the construction cost. The memristor-based architecture significantly improves the computational power for general-purpose computing.
Key words: approximate computing    neural network    universal approximator    memristor    

随着Moore定律的放缓和失效,基于数字电路实现的高精度通用计算平台已经遇到存储墙、功耗墙等瓶颈,体系结构的进一步发展需要在计算范式上和Moore定律之外的改进[1]。忆阻器因为其存算一体的能力和极高的密度,成为一种具有潜力的硬件平台[2]。忆阻器组成的交叉开关阵列可以高效完成矩阵向量乘法运算,而该运算是神经网络的主要运算,因此目前基于忆阻器的硬件架构主要围绕神经网络加速展开[3-5]。在基于忆阻器的通用计算方面,目前的研究比较少,主要包括两类方法:1) 通过忆阻器阵列实现逻辑门,再以逻辑门为基础实现任意函数的计算,与数字电路的现场可编程门阵列(field programmable gate array,FPGA)相似[6]。2) 通过神经网络来近似任意函数,再通过忆阻器在硬件上支持神经网络的高效执行[7-9]。前者的优势在于易于扩展,能灵活支持较为复杂的函数计算,并且计算是通过Boole逻辑实现的,精确可靠,但由于上层计算范式仍然采用传统FPGA的范式,其性能提升主要来源于基础门电路层面的改善;而后者则是一种新型计算范式,性能提升的潜力更大,但通过训练简单的多层感知机(multi-layer perceptron,MLP)神经网络来近似任意函数往往存在较大误差,甚至无法有效收敛,且很难扩展到大规模复杂函数上。

本文将两类方法结合起来,提出了一种基于忆阻器的通用近似计算范式,将MLP的近似能力和精确计算能力相结合,从而既可以在计算范式层面获得性能提升,又可以扩展到规模较大的复杂函数上。为了使MLP近似小规模函数的误差损失可控且收敛,本文提出了一种MLP的构造性权重初始化方法,即使在不训练的情况下也可以实现所逼近的函数;如果继续辅之以训练优化,则可以显著降低构造的资源开销。基于上述计算范式,本文进一步以基于忆阻器的现场可编程突触阵列(field programmable synapse array, FPSA)[5]为基础,设计了的通用近似计算架构GP-FPSA(general-purpose FPSA),以高效实现通用近似计算。

本文提出的基于忆阻器的通用近似范式,在计算形式上包括了控制流和MLP所需的基础算子。因此,要实现任意给定函数,该计算范式有两个主要的途径:1) 通过MLP直接逼近;2) 按照实现该函数的算法,以控制流的方式逐步计算得到,而计算的每一个步骤则利用MLP逼近来实现。这两种途径可以相互结合,先以一个合适的粒度逼近算法中的各个部分,再通过控制流将各个部分连接起来。FPSA架构本身提供了控制流,且用忆阻器高效支持了MLP所需的算子,但直接利用FPSA作为该范式的硬件平台会产生较为严重的利用率问题,本文进一步根据该范式的计算特点,基于FPSA设计了GP-FPSA,从而改善该范式的利用率。

1 研究背景和相关工作 1.1 忆阻器

忆阻器是一种非易失性存储器件,具有非易失性、高密度、低功耗、存算一体等特点[2]。忆阻器本身是阻值器件,可以通过电阻值来存储数据,其电阻值可以在较高的外电压下修改。此外,忆阻器也可以进行计算。如图 1所示,在交叉开关阵列的每一个交点处放置一个忆阻器器件,并在阵列的一端输入模拟电压信号,阵列另一端产生的模拟电压信号即电压向量和电导矩阵相乘的结果。该电路具有极高的密度和极低的延迟,单个器件的面积为4F2,其中F是工艺尺寸,而常见的晶体管面积通常超过100F2。100×100规模的忆阻器阵列达到稳定的延迟通常只要10 ps[10]

图 1 忆阻器阵列示意图

目前,很多研究以上述忆阻器阵列为基础,构建高效的芯片架构。由于忆阻器阵列可以实现矩阵向量乘运算,即神经网络的主要运算,因此基于忆阻器的架构研究大多数是围绕神经网络加速器展开的,用数模转换器(digital-to-analog converter,DAC)和模数转换器(analog-to-digital converter,ADC)将阵列和数字电路连接起来,并增加外围数字电路来实现神经网络中除矩阵向量乘运算之外的其他运算,例如线性整流函数(rectified linear unit,ReLU),从而构成计算单元。大量计算单元通过片上互连系统连接起来构成神经网络加速器,典型的加速器包括PRIME[4]、ISAAC[3]和FPSA[5]。也有一部分工作探索了基于忆阻器的通用计算,例如Liquid Silicon[6]通过忆阻器的周边电路设计,使得忆阻器阵列可以实现基本的门电路,再进一步构建复杂的数字逻辑电路,其工作原理与FPGA相似。此外,由于神经网络具有万能逼近的特点,也有部分工作探索了基于忆阻器的近似计算架构[7, 9],通过忆阻器阵列实现了一个2层的MLP,通过配置MLP的权重来逼近不同函数。相比基于门电路的方案,这种方法对于特定函数的计算更加高效,但对于很多复杂函数,逼近的结果误差较大,且无法有效训练MLP逼近较为复杂的函数。

1.2 MLP神经网络

MLP是一种早期的神经网络,也是现代深度学习的基础。MLP已经被证明是一种通用逼近器[11],包含一个输入层、多个隐藏层和一个输出层,从输入到输出按照链状连接起来,相邻层之间的运算包括加权求和运算(即矩阵向量乘运算)和非线性激活函数操作。对于一个n层的多层感知机,其第l层的具体计算见式(1)。

$ \left.\boldsymbol{y}_{i}^{(l+1)}=\sigma\left(\sum\limits_{j} \boldsymbol{w}_{i j}^{(l)} \boldsymbol{y}_{j}^{(l)}+\boldsymbol{b}_{i}^{(l)}\right)\right). $ (1)

其中:yj(l)是第l层的第j个节点,yi(l+1)是第l+1层的第i个节点,wij(l)是连接两者的权重参数,bi(l)是偏置参数。σ是非线性激活函数,常见的激活函数有sigmoid函数、tanh函数和ReLU函数。

在现有设计中,MLP的参数wij(l)bi(l)是通过梯度下降和反向传播算法来训练得到的。通过训练得到的参数具有更好的泛化能力,但也存在很大的局限性。现有工作通过单个隐藏层的多层感知机和梯度下降算法来逼近任意函数,只能在少数函数上训练出比较小的误差,很多函数的逼近无法有效收敛,且收敛的误差不可控,因此基于多层感知机的方案仍然面临巨大挑战。本文提出的方法仍然是以构造性方法为主,同时混合精确计算和通用逼近,通过复杂度分析提取出复杂函数中开销较小的部分进行近似,可以有效解决上述问题。

2 针对忆阻器的通用近似计算范式

本文首先提出了一种针对忆阻器的通用近似计算范式。由于忆阻器阵列能够以极高的效率完成矩阵向量乘运算,但其他形式的计算则难以用忆阻器实现,而需要用传统数字电路来实现,效率不高。因此,在本文所提出的通用近似计算范式中,同样以矩阵向量乘运算为计算主体,充分发挥忆阻器在矩阵向量乘运算方面的巨大优势,而非线性项则仅引入了简单的ReLU激活函数。

在本文的通用近似计算范式中,仅包含式(2)和(3)所示的两种计算:

$ {y = \sum\limits_i {{\mathit{\boldsymbol{w}}_i}} {\mathit{\boldsymbol{x}}_i} + {b_i},} $ (2)
$ {y = {\rm{max}}(x,0).} $ (3)

其中:矩阵向量乘运算中的wi为权重系数,b为偏置,均为常数。当这两种计算部署到忆阻器硬件上时,权重系数和偏置会写入到忆阻器的电导值上。ReLU激活函数中,当x≤0时,返回值是0,否则返回x

为了解决训练不收敛的问题,本文提出了一种权值构造方法,可以在不进一步训练的情况下就足够逼近需要逼近的函数。相比随机初始化权重再训练的方法,该方法可以有效解决训练不收敛带来的误差问题。此外,在权值构造的基础上进一步训练也可以进一步利用数据冗余,减少误差和计算量。

此外,单纯依靠2层的MLP去逼近复杂函数时,计算量往往随着函数复杂程度指数上升。因此,本文计算范式中引入了控制流,可以实现算法逻辑,从而将复杂函数通过算法拆分成若干更易于实现的子函数,再进一步对这些子函数进行权值构造来逼近复杂函数。

2.1 权值构造

考虑通用的情况,对于任意给定的n元函数y=f(X),其中X$\mathbb{R}$n,仅依靠矩阵向量乘运算和ReLU函数构造一个逼近器F,使得对于f取值范围Ω内的任意输入XΩ,均有‖f(X)-F(X)‖≤ε,其中ε≥0为任意给定常数。

假设该函数的取值集合为I={X1, …, Xm},可以用归纳法来构造函数F(X)使其在集合I上与f(X)足够逼近。

首先定义一个集合序列$\hat I$1⊂…⊂$\hat I$m=I,其中$\hat I$1仅包含一个元素,而$\hat I$m中包含m个元素,就是集合I。该集合序列中任意一个$\hat I$i均满足以下条件:任意一个X∈(I-$\hat I$i)均不在$\hat I$i的凸包内。依次构造F1(X), …, Fm(X)使其分别在$\hat I$1, …, $\hat I$m上拟合函数f(X)。

显然,任取X(1)I使得$\hat I$1={X(1)},满足上述条件,对应的F1(X)=f(X(1))为常函数。

假设已经构造了$\hat I$i={X(1), …, X(i)}和对应的Fi(X),为了构造$\hat I$i+1Fi+1(X),首先找出X(i+1)∈(I-$\hat I$i),使得任意X∈(I-$\hat I$i-{X(i+1)})均不在$\hat I$i+{X(i+1)} 的凸包内,令$\hat I$i+1=$\hat I$i+{X(i+1)}。

由于Fi(X)已经在$\hat I$i范围内与f(X)拟合,因此只需要额外增加一项,使其在$\hat I$i范围内取值为0,而在X(i+1)处进行修正即可。由于X(i+1)不在$\hat I$i的凸包内,因此可以找到一个平面Wi+1X+Bi+1=0使得$\hat I$iX(i+1)位于其两侧。假设Wi+1X(i+1)+Bi+1>0,那么可以按照式(4)构造Fi+1(X)。用Fi(X)加上单独的一项,该项在$\hat I$i内为0,通过调节分界平面另一侧可以在X(i+1)拟合f(X)。

$ \begin{aligned} F_{i+1}(\boldsymbol{X})=& F_{i}(\boldsymbol{X})+\frac{f\left(\boldsymbol{X}_{(i+1)}\right)-F_{i}\left(\boldsymbol{X}_{(i+1)}\right)}{\boldsymbol{W}_{i+1} \boldsymbol{X}_{(i+1)}+B_{i+1}} \cdot \\ & \max \left(\boldsymbol{W}_{i+1} \boldsymbol{X}+B_{i+1}, 0\right). \end{aligned} $ (4)

以此类推,可以得到F(X)=Fm(X)在I上与f(X)拟合。

此外,权值构造方法核心在于对取值范围内的点进行排序X(1), …, X(m),使得X(i+1)不在X(1), …, X(i)的凸包内,并且找到X(i+1)与前面的点构成的凸包之间的分界面方程Wi+1X+Bi+1=0。为了高效得到相应排序,本文设计了构造算法,见图 2

图 2 权重构造伪代码

具体步骤和思路如下:

步骤1  首先求出集合Im=I的凸包convex(Im),并任取一个极点作为X(m),剩下的点构成的集合作为Im-1。显然X(m)不在convex(Im-1)内,取任意convex(Im-1)中朝向X(m)的极边作为方程WmX+Bm=0,且确保WmX(m)+Bm>0。

步骤2  重复步骤1,依次取出X(m-1), …, X(n+1)并得到相应的分界面方程。

步骤3  此时集合中剩余的点数量不超过空间维度n,因此按任意顺序取出均可满足条件,此时仅需求出最佳的分界面即可。最佳分界面WnX+Bn=0满足距离X(n)最远,同时又经过X(n-1), …, X(1)这些点。因此,分界面法向量Wn应当落在X(n-1), …, X(1)张成的线性空间内,即$\boldsymbol{W}_{n}=\sum\limits_{i=1}^{n-1} \alpha_{i} \boldsymbol{X}_{(i)}$,再代入WnX(i)+Bn=0,可以得到

$ ({\mathit{\boldsymbol{\hat X}}^{\rm{T}}}\mathit{\boldsymbol{\hat X}})\mathit{\boldsymbol{\alpha }} + {B_n} = 0. $ (5)

其中:$\hat{\boldsymbol{X}}=\left(\boldsymbol{X}_{(1)}, \cdots, \boldsymbol{X}_{(n-1)}\right)$为已知数,是一个n×(n-1)的矩阵; α=(α1, …, αn-1)T可通过求解式(5)得到,并进一步求解得到分界面方程。

步骤4  重复步骤3,求出X(n-1), …, X(2)对应的分界面方程。

步骤5  代入式(4)依次构造出函数F1(X), …, Fm(X),F(X)=Fm(X)即为所求函数。

可以看到,F(X)是一个具有m-1个隐藏节点的2层MLP,其权重系数和偏置均可通过上述构造方法求出。F(X)在给定的m个点处的取值均与f(X)相同,且在不同点之间线性过渡。

2.2 控制流

从计算的角度来看,通过上述权值构造方法来实现一个数学函数,是一种与通过算法控制流来精确计算截然不同的方式,在复杂度上也有很大差异。因此,在本文所提出的通用近似计算范式中引入了控制流来充分结合两者的优势。

控制流即传统的精确计算算法,即通过特定算法步骤实现具体函数的方法。在本文提出的近似计算范式中,控制流中的每一个步骤都是通过权值构造实现的一个相对简单的函数,即将复杂函数通过算法拆分为简单函数,再通过权值构造来实现简单函数,从而实现复杂函数。拆分粒度具有很大的灵活性,可以将整个复杂函数看作一个整体进行权值构造,也可以将复杂函数拆成最细粒度的算法,再通过权值构造实现算法的基本原语。权值构造和控制流算法具有截然不同的复杂度。

控制流算法的复杂度即算法的步骤数量。因此,对于复合函数z=g(f(x)),按照精确算法需要先计算y=f(x),再进行z=g(y)的计算,而相应的复杂度为两者之和,

$ C(g \circ f)=C(g)+C(f). $ (6)

其中: C(f)表示函数f的计算复杂度,g$ \circ $f表示复合函数。

权值构造的复杂度取决于取值范围大小。复合函数g$ \circ $f的输入和函数f的输入相同,因此其复杂度也一致,

$ A(g \circ f)=A(f). $ (7)

其中A(f)表示函数f的逼近复杂度。

可见,控制流算法和权值构造对于同样一个函数,具有截然不同的复杂度增长规律。一方面,对比式(6)和(7)可以发现,权值构造在复合函数的情况下复杂度增长会比控制流算法要更有优势,但另一方面,如果复合函数存在多个操作数,例如z=h(f(x), g(y)),控制流算法的复杂度为三者之和,

$ C(h \circ(f, g))=C(h)+C(f)+C(g). $ (8)

但权值构造由于可能的输入变成了xy的组合,因此相应的复杂度也变成两者的乘积,

$ A(h \circ(f, g))=A(f) A(g). $ (9)

从这个角度看,权值构造的复杂度反过来比控制流算法要提高得更快。

由式(9)的特点也可以看出,近似计算范式在很多情况下的开销是指数级的。但对于一元函数和二元函数而言,其权值构造复杂度仍比较小,且由于权值构造可以通过忆阻器电路高效实现,相比数字电路的晶体管具有显著的性能和密度优势。因此,在本文所提出的通用计算范式中,权值构造主要用于实现简单的一元函数和二元函数,再通过控制流算法进一步组合出更加复杂的函数。

2.3 近似优化

权值构造的复杂度取决于构造时所需经过的点的数量,在线性较好的区间减少点的数量可以有效降低构造复杂度,而大多数直接进行权值构造的简单函数都具有一定的平滑性,因此往往很低的复杂度就可以获得很小的构造误差。

这部分构造误差可以进一步通过权重微调来降低。该步骤与通常训练MLP类似,用F(x)和f(x)的均方差作为损失函数,

$ L=\frac{1}{2} \sum\limits_{x}[f(x)-F(x)]^{2}. $ (10)

再通过反向传播求出L对各个权值的导数,并结合梯度下降算法更新权值来降低L

由于权值构造方法已经给F(x)提供了一个误差较小的初始化,因此训练的收敛性比随机初始化要好得多,通常可以在权值构造方法的基础上进一步降低误差,而构造所选的点是通过在取值范围内随机采样得到的。

3 GP-FPSA架构设计

基于以上的近似计算范式,本文进一步提出了基于忆阻器的GP-FPSA架构来高效实现通用近似计算。如图 3所示,GP-FPSA为可重构架构,片上包含大量基于忆阻器的矩阵向量乘处理单元(processing element, PE),通过可重构路由架构将大量PE连接起来实现高效的数据传输。

图 3 (网络版彩图)GP-FPSA架构

该架构的PE参考了FPSA的PE设计,使用脉冲编码来实现高效的矩阵向量乘和ReLU激活函数运算。但由于近似计算范式中利用权值构造方法逼近简单函数,产生的大量2层MLP均为具有少量输入和输出、大量中间层的结构,因此矩阵向量乘法的矩阵规模的特点通常是一个矩阵维度极小、一个矩阵维度极大。因此,在GP-FPSA架构中,本文引入了两种类型的PE:R-PE和C-PE。R-PE的尺寸为4×256,输入较少,输出较多;C-PE的尺寸为256×4,输入较多,输出较少。通常一个2层MLP同时包含了两种类型PE的矩阵,因此在GP-FPSA架构中,R-PE和C-PE的比例为1∶1,且交错排布,从而更好地匹配近似计算范式的特点。

脉冲编码是一种可以有效降低忆阻器架构周边电路的编码方式。用一个长度为2n的1比特信号序列当中1的数量,来表示一个n比特的数,虽然需要更多时钟周期来处理该序列,但仅需处理1比特输入输出信号,且序列中每个比特均等,因此处理电路大幅简化。如图 3所示,PE主要包含4个模块:

1) 充电门控:输入信号为1比特的序列,因此数模转换可以简化为一个简单的门控电路,仅当信号为1时允许将固定的模拟电压输入到忆阻器阵列中。

2) 忆阻器阵列:由于忆阻器无法表示负数,因此用阵列中的两列之差表示逻辑上的一列。R-PE的忆阻器阵列实际尺寸为4×512,表示逻辑上的4×256;C-PE的忆阻器阵列实际尺寸为256×8,表示逻辑上的256×4。此外,阵列的每个交点并联了8个忆阻器来降低模拟噪声的影响。

3) 神经元电路:包含一个精简的脉冲神经元电路,用电容器累积忆阻器阵列输入的电流,在达到特定阈值电压时重置,并在当前周期输出1,其他周期输出0。

4) 脉冲减法器:由于忆阻器阵列用两列电导值之差来表示一列权值,因此将相邻两列的神经元单元产生的脉冲信号进行频率相减。当右侧神经元单元输出1时,脉冲减法器会屏蔽掉左侧神经元单元的下一个1的输出,从而减少最终输出的1的数量,实现脉冲编码下的减法。同时,当右侧输出的1多于左侧时,脉冲减法器输出为0,从而等效于ReLU激活函数。

片上大量PE通过类似于FPGA的可重构路由架构实现相互通信,GP-FPSA采用了mrFPGA的路由架构设计,利用忆阻器实现路由配置,可以堆叠在逻辑层之上,节省面积开销。

除了两种PE外,片上也包含了FPGA中常见的可编程逻辑块(configurable logic block,CLB)来生成控制逻辑和块存储以缓存数据。由于GP-FPSA采用了脉冲编码,存储器外围配备了编码解码器用于处理脉冲编码数据的存储,该单元称为脉冲存储块(spike memory block, SMB)。

4 案例研究与结果评估

作为案例研究,本文实现了上述近似计算构造算法和GP-FPSA的仿真器,并以此来评估所提出的方法。

4.1 权值构造算法与仿真器的实现

权重构造算法的核心计算是关于凸包的计算,可以利用qhull库的凸包计算接口高效实现权重构造算法。本文方法对于所有函数的权重构造均可在1 min左右完成,远小于直接训练神经网络的时间。

本文基于NVSim[12]和Synopsis Design Compiler评估了GP-FPSA的PE延迟和面积,再利用mrFPGA的布局布线工具mrVPR评估应用部署到该架构上的通信延迟[13]。mrVPR的数据包含一个架构描述文件和一个网表,架构描述文件包含了PE、CLB和SMB的黑盒参数,网表则是根据近似计算范式的构造和拆分算法,将任意复杂函数转换为矩阵向量乘和控制流,进而得到PE、CLB和SMB的连接关系。基于上述参数,本文作者根据GP-FPSA的性能模型构建了相应的仿真器。架构的参数细节如表 1所示。

表 1 GP-FPSA架构配置参数(45 nm工艺)
组件 功耗/mW 面积/μm2 延迟/ns
忆阻器阵列 0.006 7 132.7 0.0
充电门控 0.003 7 2.3 18.1
神经元电路 0.015 9 19.2 374.8
脉冲减法器 0.014 3 12.1 232.8
R-PE (4×256) 11.823 1 13 069.9 625.7
C-PE (256×4) 1.138 3 923.5 625.7
CLB (128LUT) 13.588 9 5 998.3 0.2
SMB (16 kb) 1.991 3 5 421.9 0.6

可以看到,R-PE的面积要比C-PE大很多,这是因为R-PE的输出较多,而输出电路的神经元电路和脉冲减法器都相对比较复杂。GP-FPSA架构可以任意组合表 1中的4种功能单元。在本文的仿真中采用了1 024个R-PE、1 024个C-PE、256个CLB以及64个SMB的配置,总面积为16.2 mm2

4.2 仿真结果的评估 4.2.1 误差分析

首先通过对比展示了本文提出的通用近似计算范式和现有工作在误差控制上的优势。测试了sin(x)、tan(x)、1/xx2、sqrt(x)、xy、sin(x+y)和softmax(x1, …, x12)等函数在本文所提出的通用近似计算范式和直接训练一个MLP去逼近该函数的误差。在实验中,函数的取值范围设置为-10到10,隐藏层节点的数量以64作为默认值。评估结果如表 2所示。

表 2 通用近似计算范式与直接训练的相对误差对比
函数 直接训练 通用近似计算范式
sin(x) 0.146 6 0.003 1
tan(x) 3.526 6 0.100 5
1/x 0.168 6 0.015 5
x2 0.029 5 0.019 2
sqrt(x) 0.001 1 0.000 4
xy 0.024 5 0.018 3
sin(x+y) 5.090 3 0.003 1
softmax(x1, …, x12) 3.411 4 0.003 4
k-means 0.001 1

表 2可以看到,直接训练会造成显著的误差,对于复杂多元函数,直接训练的误差甚至达到了300%以上,而本文所提出的通用近似计算范式由于有权重构造和控制流,无论是简单函数还是复杂函数,误差都很低,其中最后两个函数包含控制流,避免了误差或复杂度增大,而其他函数则是直接由权重构造实现。可见,这两部分都起到了降低误差的作用。

此外,本文也评估了误差和隐藏层大小的关系。在表 2中,隐藏层大小固定为64。图 4则展示了通用近似计算范式在不同隐藏层大小下的误差变化情况。可以看到,本文方法误差降低非常迅速,仅需较小的隐藏层即可达到很低的误差。

图 4 (网络版彩图)误差与隐藏层大小的关系

除了上述简单函数,本文还测试了常见算法k-means的运行效果。对3 000个点进行了4轮迭代,得到的结果如图 5所示,图 5a是通过近似计算范式运行的结果,图 5b是精确计算的结果,两者并无显著区别。其他函数通过控制流实现在近似计算范式下简化为一个隐藏层大小为64的MLP,充分利用了k-means算法对误差的容忍性。表 2中也展示了k-means的评估结果。k-means的误差指的是3个中心点与精确计算得到的中心点坐标的误差,通用近似计算范式的误差约为0.11%,而如果直接构造神经网络进行训练,需要输入大量点的坐标并返回迭代后的中心点坐标,基本无法收敛。

图 5 (网络版彩图)k-means聚类结果对比

4.2.2 性能测试

本文也测试了上述样例在GP-FPSA的运行性能,并与RRAM-ACU[9]和Intel i7-8690 CPU进行了对比。结果如表 3所示,GP-FPSA的几乎所有函数的吞吐率都有两三个数量级的提升。这里评估所采用的GP-FPSA配置在45 nm工艺下仅占据16.2 mm2。softmax在RRAM-ACU上的性能比GP-FPSA要高,但误差达到300%,而GP-FPSA误差仅为0.34%。k-means的复杂程度已经超过RRAM-ACU可以适用的范围。

表 3 GP-FPSA与Intel i7-8690 CPU、RRAM-ACU的运行性能对比
函数 吞吐率/(Mb·s-1)
CPU RRAM-ACU GP-FPSA
sin(x) 17.6 312.6 6 500
tan(x) 15.9 312.6 6 500
1/x 91.2 312.6 6 500
x2 1.0 312.6 6 500
sqrt(x) 285.6 312.6 6 500
xy 1 000 312.6 3 300
softmax(x1, …, x12) 1.7 312.6 196.3
k-means 23.3×10-6 101.7×10-3

表 3中前5个函数均为直接构造得到,没有引入控制流,均为1-64-1的结构,仅权值不同,因此吞吐率一致。CPU在执行不同的一元函数时,由于不同函数的算法所涉及的指令长度不同,吞吐率相差较大,这也是由于通用近似计算范式遵循的复杂度规律与精确计算不同导致的。

5 结论

本文提出了一种适用于忆阻器的通用近似计算范式,并设计了相应的硬件架构GP-FPSA。该计算范式确保了通用近似计算的精度在软件层面可控,且对硬件需求简单,尤其适合发挥出忆阻器等的优势。该近似框架利用权值构造法实现任意函数的通用逼近,避免了训练带来的准确率不可控等问题。另外,通过引入控制流将近似计算扩展到任意复杂函数上,有效解决了基于忆阻器的通用近似计算误差大且不可控的问题,并具有很高的灵活性,架构性能也得以充分发挥。

致谢

该工作得到北京智源人工智能研究院的资助。

参考文献
[1]
ANTHES G. Inexact design: Beyond fault-tolerance[J]. Communications of the ACM, 2013, 56(4): 18-20. DOI:10.1145/2436256.2436262
[2]
WONG H S P, LEE H Y, YU S M, et al. Metal-oxide RRAM[J]. Proceedings of the IEEE, 2012, 100(6): 1951-1970. DOI:10.1109/JPROC.2012.2190369
[3]
SHAFIEE A, NAG A, MURALIMANOHAR N, et al. ISAAC: A convolutional neural network accelerator with in-situ analog arithmetic in crossbars[C]//2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture (ISCA). Seoul, South Korea, 2016: 14-26.
[4]
CHI P, LI S C, XU C, et al. PRIME: A novel processing-in-memory architecture for neural network computation in ReRAM-based main memory[C]//2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture (ISCA). Seoul, South Korea, 2016: 27-39.
[5]
JI Y, ZHANG Y Y, XIE X F, et al. FPSA: A full system stack solution for reconfigurable ReRAM-based NN accelerator architecture[C]//Proceedings of the 24th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS). New York, USA: ACM, 2019: 733-747.
[6]
ZHA Y, LI J. Liquid silicon-Monona: A reconfigurable memory-oriented computing fabric with scalable multi-context support[C]//Proceedings of the 23rd International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS). New York, USA: ACM, 2018: 214-228.
[7]
ESMAEILZADEH H, SAMPSON A, CEZE L, et al. Neural acceleration for general-purpose approximate programs[C]//2012 45th Annual IEEE/ACM Annual International Symposium on Microarchitecture. Vancouver, Canada, 2012: 449-460.
[8]
PENG Z H, CHEN X Y, XU C W, et al. AXNet: Approximate computing using an end-to-end trainable neural network[C]//International Conference on Computer-Aided Design (ICCAD). San Diego, USA, 2020: 1-8.
[9]
LI B X, GU P, SHAN Y, et al. RRAM-based analog approximate computing[J]. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2015, 34(12): 1905-1917. DOI:10.1109/TCAD.2015.2445741
[10]
GU P, LI B X, TANG T Q, et al. Technological exploration of RRAM crossbar array for matrix-vector multiplication[C]//The 20th Asia and South Pacific Design Automation Conference. Chiba, Japan, 2015: 106-111.
[11]
HORNIK K, STINCHCOMBE M, WHITE H. Multilayer feedforward networks are universal approximators[J]. Neural Networks, 1989, 2(5): 359-366.
[12]
DONG X Y, XU C, XIE Y, et al. NVSim: A circuit-level performance, energy, and area model for emerging nonvolatile memory[J]. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2012, 31(7): 994-1007. DOI:10.1109/TCAD.2012.2185930
[13]
CONG J, XIAO B J. mrFPGA: A novel FPGA architecture with memristor-based reconfiguration[C]//2011 IEEE/ACM International Symposium on Nanoscale Architectures. San Diego, USA, 2011: 1-8.