本发明涉及人工智能技术领域,尤其涉及一种应用于神经网络的处理器和处理方法。
背景技术:
人工智能技术在近些年来得到了迅猛的发展,在全世界范围内得到了广泛的关注,无论是工业界还是学术界都开展了人工智能技术的研究工作,目前,人工智能技术已经渗透至视觉感知、语音识别、辅助驾驶、智能家居、交通调度等各个领域。
深度学习技术是人工智能技术发展的助推器,深度学习采用深度神经网络的拓扑结构进行训练、优化及推理等,深度神经网络包括卷积神经网络、深度置信网络、循环神经网络等。以图像识别应用为例,经过反复训练、迭代,深度学习算法通过深度神经网络可以自动地获得隐藏的图像的特征数据,并且产生优于传统的基于模式识别分析方法的效果。
然而,实现深度学习技术依赖于极大的计算量。在训练阶段,需要在海量数据中通过反复迭代计算得到神经网络中的权重数据;在推理阶段,同样需要神经网络在极短的响应时间(通常为毫秒级)内完成对输入数据的运算处理,这需要所部署的神经网络运算电路(包括cpu、gpu、fpga和asic等)达到每秒千亿次甚至万亿次的计算能力。随着神经网络运算电路的规模越来越大、数据吞吐量越来越高,运行功耗成为一个严重问题。
因此,神经网络处理器如何在保证高性能的同时保证高能效,是目前亟待解决的技术问题。
技术实现要素:
本发明的目的在于克服上述现有技术的缺陷,提供一种神经网络的处理器及处理方法,尤其适用于存在大量接近零的计算元素的稀疏神经网络。
根据本发明的第一方面,提供了一种用于神经网络的处理器。该处理器包括:存储单元,其用于存储数据和指令;控制单元,其用于获得保存在所述存储单元的指令并发出控制信号;计算单元,其用于从所述存储单元获得神经网络中的一层的节点值和对应的权重值以获得下一层的节点值,其中,当至少待计算元素之一小于阈值时,该计算单元不执行该计算元素的乘法操作,所述待计算元素包括节点值和权重值。
在本发明的一个实施例中,所述计算单元包括:乘法单元,用于完成节点值和权重值的乘法操作;加法单元,用于对乘法单元的计算结果进行累加;比较单元,用于将所述计算元素与阈值进行比较,当所述计算元素小于阈值时,该比较单元输出第一控制信号以指示所述乘法单元不执行该计算元素的乘法操作,当所述计算元素大于等于阈值时,该比较单元输出第二控制信号以指示所述乘法单元执行该计算元素的乘法操作。
在本发明的一个实施例中,所述计算单元还包括:数据选择器,其控制端与所述比较单元的输出连接,第一输入端接入零值,第二输入端接入所述乘法单元的输出,当该数据选择器接收到所述第一控制信号时,选择将所述零值接入到所述加法单元,当该数据选择器接收到所述第二控制信号时,选择将所述乘法单元的输出接入至所述加法单元。
在本发明的一个实施例中,所述数据选择器是二选一的数据选择器。
在本发明的一个实施例中,所述第一控制信号是“0”,所述第二控制信号是“1”。
在本发明的一个实施例中,所述阈值的范围是10-8至10-2。
在本发明的一个实施例中,所述阈值基于神经网络中计算元素的统计来动态调整。
根据本发明的第二方面,提供了一种用于神经网络的处理方法。该方法包括:获得神经网络中的一层的节点值和对应的权重值;对所述一层的节点值和对应的权重值执行卷积操作以获得下一层的节点值,其中,在所述卷积操作中,当节点值或对应的权重值中任一项小于阈值时,不执行对该节点值和其对应的权重值的乘法操作。
在本发明的处理方法中,所述阈值的范围是10-8至10-2。
在本发明的处理方法中,所述阈值基于神经网络中计算元素的统计来动态调整。
与现有技术相比,本发明的优点在于:通过在神经网络处理器的计算单元中引入新的电路结构,使得当存在接近0的特殊计算元素时,跳过针对该元素的乘法运算,以加快计算速率并节省计算功耗,从而提高了神经网络处理器的计算效率。
附图说明
以下附图仅对本发明作示意性的说明和解释,并不用于限定本发明的范围,其中:
图1示出了现有技术中神经网络的拓扑示意图;
图2示出了现有技术中神经网络的处理过程示意图;
图3示出了现有技术中通用的卷积层的处理示意图;
图4示出了根据本发明一个实施例的神经网络处理器的示意框图;
图5示出了根据本发明一个实施例的神经网络处理器中的计算单元的示意框图。
具体实施方式
为了使本发明的目的、技术方案、设计方法及优点更加清楚明了,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示的现有技术中神经网络的通用拓扑图,神经网络是对人脑结构和行为活动进行建模形成的数学模型,通常分为输入层、隐藏层和输出层等结构,每一层均由多个神经元节点构成,本层的神经元节点的输出值,会作为输入传递给下一层的神经元节点,逐层连接。神经网路本身具有仿生学特征,其多层抽象迭代的过程与人脑及其他感知器官有着类似的信息处理方式。
神经网络多层结构的第一层输入值为原始图像(在本发明中的“原始图像”指的是待处理的原始数据,不仅仅是狭义的通过拍摄照片获得的图像),典型地,对于神经网络的每一层,可通过对该层的神经元节点值和其对应的权重值进行计算来得到下一层的节点值。例如,假设
具体地,深度神经网络具有多层神经网络的拓扑结构,并且每层神经网络具有多个特征图层。以卷积神经网络为例,参见图2所示,其处理数据的过程由卷积层、池化层、归一化层、非线性层和全连接层等多层结构组成。与传统神经网络相比,卷积神经网络在结构上增加了卷积层和池化层,每层内又包含多个特征图。卷积层和池化层之间均采用部分连接的方式,体现出了局部感知的思想。在网络末端,通常采用全连接层,即当前层内神经元与下一层神经元一一相连。
卷积层完成卷积操作,具体操作过程是:将一个k*k大小的二维权重卷积核对特征图进行扫描,在扫描过程中权重与特征图内对应的特征元素求内积,并将所有内积值求和,得到一个输出层特征元素。当每个卷积层具有n个特征图层时,会有n个k*k大小的卷积核与该卷积层内特征图进行卷积操作,n个内积值求和得到一个输出层特征元素,如图3所示。
池化层又称为下采样层,具体操作过程是:将一个p*p大小的二维窗口对特征图层进行扫描,在扫描过程中计算窗口在图层对应数据中的最大值或平均值,得到输出层特征元素点。池化层一方面可以消除部分噪声信息,有利于特征提取,另外一方面也可以减少下一层特征元素的数量,减小网络规模。
归一化层对局部输入区域进行归一化,常用的归一化方法为局部相应归一化,即在多个相邻特征图中相同位置的元素经过标准化归一操作后得到输出特征图中的特征元素。归一化层通常在卷积层后,归一化层的使用可以加快神经网络收敛速度。
非线性层用于完成非线性计算,神经网络中常用的非线性函数包括sigmoid函数、tanh函数和relu函数等,特征图内每个特征像素均需要经过非线性处理后输出到下一层特征图。
全连接层在卷积神经网络模型的末端,当前层神经元与下一层神经网络中所有神经元均连接,即n-1层的任意一个节点,都和第n层所有节点有连接,数学上的计算方式为当前层特征元素与对应的权重元素进行内积运算。全连接是一种不错的模式,但是网络很大的时候,训练速度会很慢
由上述神经网络中的数据处理过程可知,神经网络的训练过程中包括大量卷积和内积计算,即乘法和加法运算,为了提高神经网络的训练速度,降低能耗,可采用硬件的方式来实现神经网络中的大部分功能。
图4示出了根据本发明一个实施例的适用于神经网络模型的处理器。
概括而言,该实施例中的神经网络处理器400基于存储-控制-计算的结构。存储结构用于存储参与计算的数据、神经网络权重及处理器的操作指令;控制结构用于解析操作指令,生成控制信号,该信号用于控制处理器内数据的调度和存储以及神经网络的计算过程;计算结构用于参与该处理器中的神经网络计算操作,保证数据在计算单元中能够正确地与相应权重进行计算。
具体而言,存储单元用于存储神经网络处理器外部传来的数据(例如,原始特征图数据)或用于存储处理过程中产生的数据,包括处理过程中产生的处理结果或中间结果,这些结果可以来自于神经网络处理器内部的运算部件或其他外部运算部件。此外,存储单元还可用于存储参与计算的指令信息(例如,载入数据至计算单元、计算开始、计算结束、或将计算结果存储至存储单元等)。在图4的实施例中,存储单元进一步细分为输入数据存储单元411、权重存储单元412、指令存储单元413和输出数据存储单元414,其中,输入数据存储单元411用于存储参与计算的数据,该数据包括原始特征图数据和参与中间层计算的数据;权重存储单元412用于存储已经训练好的神经网络权重;指令存储单元413用于存储参与计算的指令信息,指令可被控制单元420解析为控制流来调度神经网络的计算;输出数据存储单元414用于存储计算得到的神经元响应值。通过将存储单元进行细分,可将数据类型基本一致的数据集中存储,以便于选择合适的存储介质并可以简化数据寻址等操作。本发明所使用的存储单元可以是静态随机存储器(sram)、动态随机存储器(dram)、寄存器堆等常见存储介质,也可以是3d存储器件等新型的存储类型。
控制单元420用于获取保存在存储单元的指令并进行解析,进而根据解析得到的控制信号来控制计算单元进行神经网络的相关运算。控制单元完成指令译码、数据调度、过程控制等工作。
在图4的实施例中,采用多个并行的计算单元1-n,以提高神经网络的计算速度。计算单元用于根据从控制单元420获得的控制信号来执行相应的神经网络计算,计算单元与各存储单元相连,以获得数据进行计算并将计算结果写入到存储单元。在该实施例中,计算单元是该处理器的核心运算部件,可完成神经网络中的大部分计算,即向量乘加操作,例如,卷积操作、池化操作等,因此,提高计算单元的计算速度对提升整个神经网络处理器的速度至关重要。
针对稀疏神经网络存在大量接近零的权重值和节点值的特点,由于这些计算元素的乘积也几乎等于零,通过在计算单元中跳过这些计算元素的乘法操作能够提升神经网络处理器的能量效率。在本发明中,接近零的计算元素指的是计算元素的绝对值小于某个阈值,例如,小于0.0001。
图5示出了图4的神经网络处理器中计算单元的一个实施例。在该实施例中,计算单元包括乘法单元510、加法单元520、比较单元530和数据选择器540。
乘法单元510,用于完成节点值和权重值的乘法操作,乘法单元的输入值为数据(即神经元的节点值)、权重和门控信号,用于数据和权重的乘法操作。门控信号为乘法单元的工作时钟的控制信号,当门控信号为0时,乘法器时钟关断,不执行操作。在此实施例中,比较单元530的输出作为乘法单元510的门控信号。
加法单元520,用于对乘法单元的计算结果进行累加。
比较单元530,用于将节点值或权重值等计算元素与阈值进行比较(图5仅示出了将权值与阈值进行比较的示意),当计算元素小于某一阈值时,该比较单元向乘法单元输出第一控制信号,例如,“0”,以控制乘法单元510对该计算元素不进行乘法操作,当计算元素大于阈值时,比较单元向530输出第二控制信号,例如,“1”,指示对该计算元素执行乘法运算。比较单元530可采用比较器实现,阈值可预先设定,对于存在大量接近0的稀疏神经网络,例如,该阈值从10-8至10-2范围内选取,或者设置为更低。在另一实施例中,该阈值也可以通过实时统计神经网络中接近0的计算元素的数量并结合神经网络的训练精度要求来动态调整,例如,如果接近0的元素过多,则设置相对小的阈值,以在保证神经网络训练精度的前提下加快处理器的计算速度。本发明的比较单元可采用比较器芯片实现,也可利用fpga设计专用电路来实现。
数据选择器540,其一输入端连接乘法单元510的输出,另一输入端接入特殊值,在该实施例中,接入的特殊值是“0”,输出端接入至所述加法单元520,比较单元530的输出用于控制数据选择器540选通特殊值“0”还是选通乘法单元510的输出。当比较单元530的输出为0时,数据选择器540的输出是0,当比较单元530的输出是1时,数据选择器540将乘法单元510的输出接入至加法单元520中。数据选择器540可以采用通用芯片实现。
在一个实施例中,本发明提供的计算单元的工作过程如下:
步骤s1,比较单元判断输入数据或权重是否小于阈值。
步骤s2,当权重值或数据小于阈值时,比较单元输出0,指示乘法单元跳过乘法运算,用数值0代替乘法计算结果;否则,权重值或数据大于等于阈值时,比较单元输出1指示乘法单元进行运算,以获得数值和权重的乘积;
步骤s3,加法单元对乘法计算结果进行累加。
本发明的神经网络处理器可应用了各种电子设备,例如、移动电话、嵌入式电子设备等。
需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。