本申请涉及人工智能领域,具体涉及一种神经网络电路和一种神经网络系统。
背景技术:
神经网络是实现人工智能的工具,其在处理输入数据时具有计算量大、访问内存密集等特点。一种提高神经网络的处理效率的方法是利用存算一体架构部署神经网络,该方法利用神经网络在计算时权重不变的特点,预先将权重写入计算存储介质,同时完成了权重的存储和计算,能够降低数据交换和计算所带来的时间消耗和能量消耗。
在存算一体架构中,神经网络计算阵列是神经网络电路的核心模块。神经网络计算阵列也可称为计算阵列,通常由非易失性存储介质构建的乘加计算阵列,包含若干行和列,行也可以称为字线(wordline),列也可以称为位线(bitline),行和列的交叉点为计算阵列的计算存储单元,简称为单元(cell)。神经网络计算时,权重预先以电导的形式存储在单元中;输入数据经过数字模拟转换器(digitaltoanalogconverter,dac)的处理后以电压的形式进入计算阵列;随后,电压经过对应的电导形成电流在同一列上汇聚,得到的电流总和可以用于表示输入数据与权重的乘积的累加结果,其中,电流还需要通过模拟数字转换器(analogtodigitalconverter,adc)的处理还原为数字信号。
由于dac和adc的精度固定,无法适应神经网络的计算精度的变化,因此,现有的神经网络电路会出现精度较低不能满足计算精度或者精度较高导致功耗浪费等问题。
技术实现要素:
本申请提供了一种神经网络电路和一种神经网络系统,能够根据神经网络的计算精度调整神经网络电路的输出精度,使得神经网络电路的输出精度适应神经网络的计算精度的变化。
第一方面,提供了一种神经网络电路,包括:第一神经网络计算阵列,包括第一组计算单元,所述第一组计算单元用于根据权重对第一部分输入数据进行神经网络计算,获得第一输出电流;第一采样保持电路,连接所述第一组计算单元,用于根据所述第一输出电流生成第一模拟电压;参考电压生成电路,用于根据第一控制信号生成参考电压,所述第一控制信号根据第一计算精度确定,其中,所述第一控制信号随所述第一计算精度的变化而变化;第一比较电路,分别连接所述第一采样保持电路以及所述参考电压生成电路,用于根据所述第一模拟电压以及所述参考电压输出第一电平信号;第一输出电路,用于根据第二控制信号对所述第一电平信号进行采样并输出第一计算结果,其中,所述第一计算结果为满足所述第一计算精度的计算结果,所述第二控制信号用于控制所述第一输出电路对所述第一电平信号进行采样的频率。
当第一输出电流的值发生变化时,第一计算精度也随之变化。例如,第一输出电流越大,神经网络的精度需求越大,神经网络电路可以通过提高第一输出电路的采样频率以及增大第一电平信号的持续时间来提高第一计算结果的精度,以满足神经网络的精度需求,避免精度较低不能满足计算精度或者精度较高导致功耗浪费等问题。
可选地,所述神经网络电路还包括:参数调整电路,用于根据所述第一计算精度生成所述第一控制信号和所述第二控制信号。
可选地,当所述第一模拟电压高于所述参考电压时,所述第一电平信号为高电平信号;当所述第一模拟电压低于所述参考电压时,所述第一电平信号为低电平信号。
可选地,所述第一神经网络计算阵列还包括第二组计算单元,所述第二组计算单元用于根据权重对第二部分数据进行神经网络计算,获得第二输出电流;所述神经网络电路还包括:第二采样保持电路,连接所述第二组计算单元,用于根据所述第二输出电流生成第二模拟电压;第二比较电路,分别连接所述第二采样保持电路以及所述参考电压生成电路,用于根据所述第二模拟电压以及所述参考电压输出第二电平信号;第二输出电路,用于根据所述第二控制信号对所述第二电平信号进行采样并输出第二计算结果,其中,所述第二计算结果为满足所述第一计算精度的计算结果,所述第二控制信号用于控制所述第二输出电路对所述第二电平信号进行采样的频率。
多组计算单元可以共用一个参数调整电路和一个参考电压生成电路,从而节省了器件和功耗。
可选地,所述神经网络电路还包括第二神经网络计算阵列,所述第一输出电路连接所述第二神经网络计算阵列的输入端,所述第二神经网络计算阵列用于基于权重对输入所述第二神经网络计算阵列的数据进行计算,其中,所述输入所述第二神经网络计算阵列的数据包括所述第一计算结果,所述第一计算结果为脉冲信号。
当第一计算结果为脉冲信号时,第一计算结果无需做转换处理即可供其它计算阵列使用,无需使用寄存器和移位累加器等器件,从而节省了转换处理所需的器件和功耗。
可选地,所述参考电压为斜坡电压。
可选地,所述参考电压的起始电压由所述第一控制信号控制。
当斜坡电压的起始电压与第一模拟电压的起始电压相同时,第一比较电路输出的第一电平信号(comp_out)与第一采样保持电路的输入电流(current_in)保持relu函数关系,使得第一比较电路具有relu函数的功能,因此,本实施例无需额外器件即可实现relu函数的功能。
可选地,所述参数调整电路还用于:根据所述第一计算精度生成第三控制信号,所述第三控制信号用于控制所述第一采样保持电路中的运算放大器opa的基准电流,以控制所述第一模拟电压的精度和所述第一采样保持电路的功耗。
opa能够在参数调整电路生成的控制信号的作用下工作。该控制信号用于控制opa的基准电流,在满足第一采样保持电路的输出电压的精度要求的前提下降低功耗。
可选地,所述参数调整电路还用于:控制所述第一输出电路的起始采样时刻。
当第一输出电路的起始采样时刻不偏移时,第一输出电路的输出结果与第一采样保持电路的输出电流呈现正常relu函数关系;当第一输出电路的起始采样时刻偏移时,第一输出电路的输出结果与第一采样保持电路的输出电流呈现偏置relu函数关系;因此,本实施例无需额外器件即可实现正常relu函数的功能或偏置relu函数的功能。
第二方面,提供了一种神经网络系统,包括:如第一方面中任意一种实现方式所述的神经网络电路;存储器,用于存储输入数据;处理器,用于从所述存储器中读取所述输入数据,并将所述输入数据输入所述神经网络电路,以使所述神经网络电路对所述输入数据进行神经网络计算。
当第一输出电流的值发生变化时,第一计算精度也随之变化。例如,第一输出电流越大,神经网络的精度需求越大,神经网络电路可以通过提高第一输出电路的采样频率以及增大第一电平信号的持续时间来提高第一计算结果的精度,以满足神经网络的精度需求,因此,包含该神经网络电路的神经网络系统能够避免精度较低不能满足计算精度或者精度较高导致功耗浪费等问题。
可选地,所述存储器还用于存储计算机程序。所述处理器还用于从所述存储器中调用所述计算机程序,对所述神经网络电路中的神经网络计算阵列进行编程,所述编程用于配置神经网络的权重。
附图说明
图1是本申请提供的一种神经网络系统的结构示意图;
图2是本申请提供的一种神经网络中的部分神经网络层的示意图;
图3是本申请提供的一种神经网络电路的结构示意图;
图4是本申请提供的一种计算阵列的结构示意图;
图5是本申请提供的一种神经网络电路的工作时序的示意图;
图6是本申请提供的另一种神经网络电路的结构示意图;
图7是本申请提供的一种生成电平信号的方法的示意图;
图8是本申请提供的另一种生成电平信号的方法的示意图;
图9是本申请提供的再一种生成电平信号的方法的示意图;
图10是本申请提供的一种比较电路的输出结果的示意图;
图11是本申请提供的一种输出电路的输出结果的示意图;
图12是本申请提供的一种包含多组计算单元的神经网络电路的结构示意图;
图13是本申请提供的一种适用于多层神经网络的神经网络电路的结构示意图;
图14是本申请提供的另一种神经网络电路的工作时序的示意图。
具体实施方式
为了便于理解本申请的技术方案,首先对本申请涉及的概念做简要介绍。
人工神经网络(artificialneuralnetwork,ann),简称为神经网络(neuralnetwork,nn)或类神经网络,在机器学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。人工神经网络可以包括卷积神经网络(convolutionalneuralnetwork,cnn)、深度神经网络(deepneuralnetwork,dnn)、多层感知器(multilayerperceptron,mlp)等神经网络。图1为本发明实施例提供的一种神经网络系统的结构示意图。如图1所示,神经网络系统100可以包括主机105以及神经网络电路110。神经网络电路110通过主机接口与主机105连接。主机接口可以包括标准的主机接口以及网络接口(networkinterface)。例如,主机接口可以包括快捷外设互联标准(peripheralcomponentinterconnectexpress,pcie)接口。如图1所示,神经网络电路110可以通过pcie总线106与主机105连接。因此,数据可以通过pcie总线106输入至神经网络电路110中,并通过pcie总线106接收神经网络电路110处理完成后的数据。并且,主机105也可以通过主机接口监测神经网络电路110的工作状态。
主机105可以包括处理器1052以及内存1054。需要说明的是,除了图1所示的器件外,主机105还可以包括通信接口以及作为外存的磁盘等其他器件,在此不做限制。
处理器(processor)1052是主机105的运算核心和控制核心(controlunit)。处理器1052中可以包括多个处理器核(core)。处理器1052可以是一块超大规模的集成电路。在处理器1052中安装有操作系统和其他软件程序,从而处理器1052能够实现对内存1054、缓存、磁盘及外设设备(如图1中的神经网络电路)的访问。可以理解的是,在本发明实施例中,处理器1052中的core例如可以是中央处理器(centralprocessingunit,cpu),还可以是其他特定集成电路(applicationspecificintegratedcircuit,asic)。
内存1054是主机105的主存。内存1054通过双倍速率(doubledatarate,ddr)总线和处理器1052相连。内存1054通常用来存放操作系统中各种正在运行的软件、输入和输出数据以及与外存交换的信息等。为了提高处理器1052的访问速度,内存1054需要具备访问速度快的优点。在传统的计算机系统架构中,通常采用动态随机存取存储器(dynamicrandomaccessmemory,dram)作为内存1054。处理器1052能够通过内存控制器(图1未示出)高速访问内存1054,对内存1054中的任意一个存储单元进行读操作和写操作。
神经网络电路110是由多个神经网络芯片(chip)组成的芯片阵列。例如,如图1所示,神经网络电路110包括多个进行数据处理的神经网络芯片(chip,c)115和多个路由器(router,r)120。为了描述方便,本发明实施例将申请中的神经网络芯片115简称为芯片115。多个芯片115通过路由器120相互连接。例如,一个芯片115可以与一个或多个路由器120连接。多个路由器120可以组成一种或多种网络拓扑。芯片115之间可以通过所述多种网络拓扑进行数据传输。
图1所示的神经网络系统100是本申请提供的神经网络系统的一个示例,而不应被理解为对本申请的保护范围的限制,适用于本申请的神经网络系统还可以包含更多的电路或更少的电路,如各个神经网络芯片之间可以直接连接而无需通过路由器连接。
本领域技术人员可以知道,神经网络可以包括多个神经网络层。在本发明实施例中,神经网络层为逻辑的层概念,一个神经网络层是指要执行一次神经网络操作。每一层神经网络计算均是由计算节点来实现。神经网络层可以包括卷积层、池化层等。如图2所示,神经网络中可以包括n个神经网络层(又可以被称为n层神经网络),其中,n为大于或等于2的整数。
图2示出了神经网络中的部分神经网络层。如图2所示,神经网络200可以包括第一层202、第二层204、第三层206、第四层208、第五层210至第n层212。其中,第一层202可以执行卷积操作,第二层204可以是对第一层202的输出数据执行池化操作,第三层206可以是对第二层204的输出数据执行卷积操作,第四层208可以对第三层206的输出结果执行卷积操作,第五层210可以对第二层204的输出数据以及第四层208的输出数据执行求和操作等等。可以理解的是,图2只是对神经网络中的神经网络层的一个简单示例和说明,并不对每一层神经网络的具体操作进行限制,例如,第四层208也可以是池化运算,第五层210也可以是做卷积操作或池化操作等其他的神经网络操作。
在部分神经网络中,当神经网络中的第i层计算完成后,会将第i层的计算结果暂存在预设的缓存中,在执行第i 1层的计算时,计算单元需要重新从预设的缓存中加载第i层的计算结果和第i 1层的权重进行计算。其中,第i层为神经网络中的任意一层。在本发明实施例中,由于神经网络系统的神经网络电路(如图1中的神经网络芯片c)中采用了非易失性存储介质构建的计算阵列,因此,权重可以在计算之前配置到计算阵列的单元上,而计算结果可以直接发送给下一层进行流水线计算。因此,每层神经网络只用缓存很少的数据,例如,每层神经网络只需要缓存够一次窗口计算的输入数据即可。
包含计算阵列的神经网络电路如图3所示。神经网络电路300包括:
输入电路301,用于存储神经网络的输入数据,并发送给驱动电路302;
驱动电路302,与输入电路301连接,用于将输入数据转换为可以施加在第一计算阵列303上的电压信号;
第一计算阵列303,与驱动电路302连接,用于根据驱动电路302输入的电压信号和预先存储的权重生成输出电流;
第一采样保持电路305,与第一计算阵列303的第一组计算单元连接,用于根据第一输出电流生成第一模拟电压;其中,第一组计算单元可以属于一列计算单元,也可以属于多列计算单元。
参数调整电路304,与输入电路301和第一采样保持电路305连接,用于通过控制信号调整神经网电路300中各个电路的参数,例如,生成下文所述的第一控制信号和第二控制信号;
参考电压生成电路306,与参数调整电路304连接,用于根据第一控制信号生成参考电压(例如,斜坡电压),所述第一控制信号根据第一计算精度确定,其中,所述第一控制信号随所述第一计算精度的变化而变化;
第一比较电路307,分别连接第一采样保持电路305和参考电压生成电路306,用于根据所述第一模拟电压以及所述参考电压输出第一电平信号;
第一输出电路308,分别连接第一比较电路307和参数调整电路304,用于根据第二控制信号对所述第一电平信号进行采样并输出第一计算结果,其中,所述第一计算结果为满足所述第一计算精度的计算结果,所述第二控制信号用于控制所述第一输出电路308对所述第一电平信号进行采样的频率。
神经网络电路300中除输入电路301、驱动电路302和第一计算阵列303之外的电路可以称为神经元核心电路。
需要说明的是,本申请中对电路模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。上述各个电路以及电路之间的连接关系是示例而非限定,本领域技术人员能够在不付出创造性劳动的情况下对神经网电路300进行改造。
在一些情况下,一个电路可能集成于另一个电路,这时,连接关系也随之改变。例如,驱动电路302可以集成于输入电路301,则第一计算阵列303与输入电路301连接;第一比较电路307可以集成于第一采样保持电路305,则第一输出电路308和参考电压生成电路306分别于第一采样保持电路305连接。
在另一些情况下,一些电路可能会被去除。例如,参数调整电路304可以被去除,神经网电路300中的其它电路可以根据外部输入的控制信号或者内部预设的信息工作。
此外,在本申请中,“第一”、“第二”等词语用于表示属于同一类对象的不同个体,例如,第一比较电路307和下文所述的第二比较电路表示两个不同的比较电路,除此之外,不存在其它限定。
神经网络电路300可以是图1所示的神经网络系统100中神经网络电路110的一个子模块(即,神经网络电路300为图1中的神经网络芯片c),神经网络系统100在执行神经网络计算时,可以先编程第一计算阵列303,即,完成神经网络的权重到电导值的映射。
随后,输入电路301可以将输入数据分时发送给驱动电路302,每个时钟周期发送1比特(bit)信息,例如,输入数据为10,则输入电路301可以连续10个时钟周期均发送1,然后均发送0,这种输出方法称为速率编码(rate-coding)。
驱动电路302可以将1和0转换为电压信号,并把电压信号加载到第一计算阵列303上。同时,第一采样保持电路305对第一计算阵列303的第一组计算单元输出的电流进行时间累加,一直持续到输入数据输入完毕。
第一计算阵列303可以与驱动电路302同时工作。下面,结合图4说明第一计算阵列303根据神经网络权重和输入数据进行运算的工作过程。
权重通常用于表示输入数据对于输出数据的重要程度。在神经网络中,权重通常用一个矩阵表示。如表1所示,表1所示的j行k列的矩阵可以是一个神经网络层的一个权重,该矩阵中的每一个元素代表一个权重值。
表1
在本实施例中,权重可以事先配置在第一计算阵列上。例如,一个矩阵中的元素被配置在计算阵列的单元中,每一个单元配置一个元素,从而,可以通过计算阵列实现输入数据与表示权重的矩阵进行乘加运算。
计算阵列的结构如图4所示。一个计算阵列可以包括多个单元,如g1,1、g2,1等。单元位于行列交叉点,若一个计算阵列包括1000行和1000列,则该计算阵列的单元的数量为一百万。在本发明实施例中,可以在配置神经网络的过程中,将表1所示的权重从图4所示的计算阵列的位线(如图4中输入端口402所示)输入计算阵列中,使得权重中的每个权重值被配置到相应的单元中。例如,表1中的权重值w0,0被配置到图4的g1,1中,表1中的权重值w1,0被配置到图4的g2,1中。每一个权重值对应一个单元,并且,每一个权重值以电导的形式存储在单元中。在执行神经网络计算时,输入数据通过计算阵列的字线(如图4所示的输入端口404)输入计算阵列。输入数据可以通过电压(如v1、v2、v3和v4)表示,从而使得输入数据与单元中存储的权重值实现点乘运算,得到的计算结果以电流的形式从计算阵列的每一列的输出端(如图4所示的输出端口406)输出。
可以通过公式i=gv计算每一列输出的电流值,例如,第一列输出的电流值记为i1,i1=v1*g1,1 v2*g2,1 v3*g3,1 v4*g4,1。
存储有权重的计算阵列也可以称为突触阵列。图4所示的计算阵列为1t1r的阵列,1t1r指的是每个单元有一个发送端和一个接收端。可选地,适用于本申请的计算阵列还可以是1t2r、2t2r或者其它类型的阵列。
第一采样保持电路305对第一计算阵列303的输出电流处理完毕后,第一比较电路307和参考电压生成电路306开始工作。与此同时,第一输出电路308也在工作。
神经网络电路300中各个电路的工作时序如图5所示。
神经网络的精度需求随着第一组计算单元输出的电流的大小变化而变化。第一组计算单元输出的电流越大,神经网络的精度需求越大,参数调整电路304可以通过控制信号提高第一输出电路308的采样频率以及增大第一电平信号的持续时间来提高第一计算结果的精度,以满足神经网络的精度需求。
例如,当神经网络的精度需求由计算精度a变为计算精度b(计算精度b高于计算精度a)时,参数调整电路304可以根据计算精度b生成控制信号x1和控制信号x2;控制信号x1控制参考电压生成电路306生成参考电压,使得第一比较电路307在比较第一模拟电压和参考电压后,生成持续时间更长的电压信号,这样,第一输出电路308能够采样到更多信息;控制信号x2可以控制第一输出电路308提高采样频率,在单位时间内采样到更多信息。
又例如,当神经网络的精度需求由计算精度a变为计算精度c(计算精度c低于计算精度a)时,参数调整电路304可以根据计算精度c生成控制信号x3和控制信号x4;控制信号x3控制参考电压生成电路306生成参考电压,使得第一比较电路307在比较第一模拟电压和参考电压后,生成持续时间更短的电压信号,这样,能够在第一输出电路308采样到足够信息的前提下降低神经网络电路300的功耗;控制信号x4控制第一输出电路308减小采样频率,在单位时间内采样到足够信息的同时降低神经网络电路300的功耗。
因此,神经网络电路300能够适应神经网络的计算精度的变化,避免精度较低不能满足计算精度或者精度较高导致功耗浪费等问题。
图6是神经网络电路300的一种可选的结构示意图。
图6中,输入电路601除了向第一计算阵列发送输入数据之外,还向参数调整电路604发送用于参数控制的信息,例如,输出范围信息、起始电压信息和精度信息。参数调整电路604包含各种功能电路,如输出范围调整电路、起始电压控制电路和精度调整电路。
输出范围信息例如是第一计算阵列打开的行数及算法需求,输出范围调整电路从输出电路获取输出范围信息后,生成控制开关电容的控制信号k,控制信号k用于控制第一采样保持电路中的开关组(ki0、ki1和ki2),开关组中的开关分别与积分电容连接。
第一采样保持电路605可以包括运算放大器(operationalamplifier,opa)和积分电容。积分电容如图6中的ci0、ci1和ci2所示。积分电容对输入电流(即,第一计算阵列的第一输出电流)进行积分,其输出电压与该输入电流是线性关系,即,s&h_out=a*current_in;其中,s&h_out是第一采样保持电路605的输出电压(第一模拟电压),current_in是第一采样保持电路605的输入电流,a是线性系数。当开关组中的开关闭合和断开时,第一采样保持电路605的积分电容的大小发生变化,开关组控制的积分电容可以对第一采样保持电路605的输入电流和输出电压的比值进行缩放,线性系数a即第一采样保持电路605的输入电流和输出电压的缩放倍数。
opa能够在精度调整电路生成的控制信号l的作用下工作。控制信号l用于控制opa的基准电流,在满足第一采样保持电路605的输出电压的精度要求的前提下降低功耗。基准电流减小后,通过电流镜的镜像作用,opa的放大器的电流会减小,从而降低了第一采样保持电路605的功耗。
图6中的rst_integ为重置开关,en_integ为使能开关,vclp为钳位电压。这三个特征均为可选的实施方式。
上文所述的精度信息用于参数调整电路604生成控制信号,该控制信号例如是opa电流控制器生成的控制信号l以及频分器(frequencydivider)对神经网络系统的时钟信号(clk)调频后生成的时钟控制信号(clk_ramp和clk_out)。opa电流控制器和频分器可以称为精度调节模块。控制信号l的作用上文已经介绍过,下面将详细描述时钟控制信号的作用。
时钟控制信号k用于对斜坡电压生成电路606生成的斜坡电压进行控制,斜坡电压生成电路606即上文所述的参考电压生成电路306的一个示例。斜坡电压生成电路606输出的斜坡电压以及第一采样保持电路605输出的第一模拟电压用于第一比较电路607生成第一电平信号。
第一比较电路607的工作原理如下:
当第一模拟电压高于斜坡电压时,第一电平信号为高电平信号;
当第一模拟电压低于斜坡电压时,第一电平信号为低电平信号。
图7至图9为第一比较电路基于斜坡电压和第一模拟电压生成第一电平信号的几个示例。其中,v表示电压,t表示时间,s&h_out表示第一采样保持电路605输出的第一模拟电压,ramp_out表示斜坡电压生成电路606输出的斜坡电压,comp_out表示第一比较电路607输出的第一电平信号,neuron_out表示第一输出电路608对第一电平信号采样得到的第一计算结果。图7至图9中,第一模拟电压的值都是相同的。
图7中ramp_out的斜率小于图8中ramp_out的斜率,在s&h_out相同的情况下,图7中comp_out的持续时间长于图8中comp_out的持续时间;在第一输出电路608对comp_out进行采样的频率相同的情况下,图7中neuron_out的信息量大于图8中neuron_out的信息量。斜坡电压的斜率由时钟控制信号clk_ramp控制,由此可见,参数调整电路604能够控制图6所示的神经网络电路的输出精度。此外,高电平信号的持续时间越长,功耗越大,因此,参数调整电路604还能够通过控制斜坡电压的斜率控制图6所示的神经网络电路的功耗。
图7中的ramp_out的斜率与图9中的ramp_out的斜率相同,因此,图7中comp_out的持续时间与图9中comp_out的持续时间相同;图7中第一输出电路608对comp_out进行采样的频率大于图9中第一输出电路608对comp_out进行采样的频率,因此,图7中neuron_out的信息量大于图9中neuron_out的信息量。第一输出电路608的采样频率由时钟控制信号clk_out控制,由此可见,参数调整电路604能够控制图6所示的神经网络电路的输出精度。此外,采样频率越高,功耗越大,因此,参数调整电路604还能够通过控制采样频率控制图6所示的神经网络电路的功耗。
参数调整电路604可以通过clk_ramp和clk_out共同控制图6所示的神经网络电路的输出精度和功耗,也可以通过clk_ramp或clk_out控制该神经网络电路的输出精度和功耗,能够在满足该神经网络电路的输出精度的前提下降低功耗。
可选地,参数调整电路604除了可以控制神经网络电路的输出精度之外,还可以控制第一输出电路608的起始采样时刻。
如图6所示,起始电压控制电路从输入电路601获取起始电压信息后,起始电压控制电路输出电压信号施加到斜坡电压生成电路606的dac上,控制斜坡电压的起始电压,该dac为分段电容型dac,用于生成斜坡电压,c0~c9为该dac中的分段电容,c1~c9在开关的控制下可以与地(gnd)连接。斜坡电压生成电路606还包括计数器,该计数器的位宽例如是8bit,可以在clk_ramp的控制下输出256种控制信号,如s1~s8所示,s1~s8用于控制c1~c9对应的开关,以调整斜坡电压的斜率。
当斜坡电压的起始电压与第一模拟电压的起始电压相同时,第一比较电路607能够输出如图10所示的comp_out,即,comp_out与第一采样保持电路605的输入电流current_in保持relu函数关系,第一比较电路605具有relu函数的功能。
当第一输出电路608在参数调整电路604的控制下延后起始采样时刻时,第一输出电路608生成的neuron_out与current_in的关系如图11所示,呈现正向偏置的relu函数关系。上述延后指的是收到参数调整电路604的控制信号后开始进行采样,不对该控制信号之前的第一电平信号进行采样。可选地,第一输出电路608还可以在参数调整电路604的控制下提前起始采样时刻,以使neuron_out与current_in呈现负向偏置的relu函数关系。
图6所示的神经网络电路还包括第一输出电路608,第一输出电路608能够输出两种结果,一种是计数器输出的数据信号y1,另一种是脉冲信号y0,y0可以基于y1生成。当计数器的位宽为8bit时,y1可以有8种可选的精度,如图6中的<0:7>所示。
第一计算阵列的输入信号通常是脉冲信号,当第一输出电路608输出的结果作为其它计算阵列的输入信号时,第一输出电路608可以输出y0,这样,无需对第一输出电路608输出的结果做转换处理即可供其它计算阵列使用,因此,无需使用寄存器和移位累加器等器件,从而节省了转换处理所需的器件和功耗。该实施例如图13所示,当第一输出电路1308输出y0时,y0可以直接由第二神经网络电路的驱动电路1313加载到第二计算阵列13114上,因此,图13中第二神经网络电路的输入电路1312是可选的模块。
若第一输出电路608输出的结果不再作为其它计算阵列的输入信号,则第一输出电路608可以输出y1。
上文详细介绍了第一计算阵列在输出一个输出电流(即,第一输出电流)时的处理过程,当第一计算阵列可以输出多个输出电流时,本申请提供的神经网络电路如图12所示。
图12中,第一计算阵列1203包括多组计算单元,如第一组计算单元和第二组计算单元。第一组计算单元和第二组计算单元根据权重对不同的输入数据进行计算,输出不同的输出电流,其中,第二组计算单元向第二采样保持电路1209输出第二输出电流,第二采样保持电路1209在控制信号l和控制信号k的控制下将第二输出电流转变为第二模拟电压,第二比较电路1210基于第二模拟电压和参考电压(如,斜坡电压)输出第二电平信号,第二输出电路1211对第二电平信号进行采样生成第二计算结果。
图12中,第一计算阵列1203中不同组的计算单元使用不同的采样保持电路、比较电路和输出电路,而参数调整电路1204和参考电压生成电路1206是各组计算单元共用的,从而节省了器件和功耗。
图12所示的神经网络电路为适用于单层神经网络的电路,可选地,还可以在图12所示的神经网络电路上连接其它电路,以满足多层神经网络的需求。
图13示出了一种适用于多层神经网络的电路。第一神经网络电路例如是图12所示的电路,第一神经网络电路的输入位宽为m,第一计算阵列的规模为m*n,有n个输出神经元(即,n个输出电路);第二神经网络电路的输入位宽为n,第二计算阵列的规模为n*k,有k个输出神经元(即,k个输出电路)。第二神经网络电路的输出神经元还可以连接其它神经网络电路。
图13所示的电路的工作时序如图14所示。第一神经网络电路的参考电压生成电路、比较电路和输出电路工作时,第二神经网络电路的输入电路、驱动电路、计算阵列和采样保持电路也在工作。一种可选的工作流程如下:
1-s1,第一神经网络电路的第一步,第一神经网络电路的输入电路1301将输入数据以速率编码方式输出,所需时间由数据量和信号位宽决定;
1-s2,第一神经网络电路的第二步,第一神经网络电路的驱动电路1302、第一计算阵列1303和各个采样保持电路开始工作,第一计算阵列1303将输入数据与第一计算阵列1303存储的权重进行乘加运算,运算结果经过各个采样保持电路的处理后输出;
1-s3,第一神经网络电路的第三步,参考电压生成电路1306、各个比较电路和各个输出电路开始工作,输出第一计算结果;
2-s1,第二神经网络电路的第一步,第二神经网络电路的输入电路1312对第一神经网络电路的第一计算结果进行采样,输出采样结果;
2-s2,第二神经网络电路的第二步,第二神经网络电路的驱动电路1313将上一步的采样结果转换为模拟电压信号,施加于第二计算阵列1314,第二计算阵列1314将输入数据与第二计算阵列1314存储的权重进行乘加运算,运算结果经过各个采样保持电路的处理后输出;1-s3,2-s1和2-s2的时间重合;
2-s3,第二神经网络电路的第三步,第二神经网络电路的参考电压生成电路1317、各个比较电路和各个输出电路开始工作,输出第二计算结果;
随后,神经网络系统输出最终计算结果。
图13所示的电路中,第一神经网络电路和第二神经网络电路的精度可以用n1和n2表示。第一神经网络电路可以输出2n1个脉冲,其中,每个脉冲作为第二神经网络电路的一个输入量;对于每个输入量,第二神经网络电路可以输出2n2个脉冲,因此,第二神经网络电路的输出精度为(n1 n2)bit。例如,第一神经网络电路和第二神经网络电路的斜坡电压的精度均为8bit,则n1和n2都是1~8bit,第二神经网络电路的输出精度的范围为2~16bit。
上文详细介绍了本申请提供的神经网络电路和神经网络系统的示例,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的几个实施例中,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的方法实施例的一些特征可以忽略,或不执行。以上所描述的装置实施例仅仅是示意性的,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,多个单元或组件可以结合或者可以集成到另一个系统。另外,各单元之间的耦合或各个组件之间的耦合可以是直接耦合,也可以是间接耦合,上述耦合包括电的、机械的或其它形式的连接。
应理解,在本申请的各种实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请的实施例的实施过程构成任何限定。
总之,以上所述仅为本申请技术方案的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。