利用网络中的路径来表示神经网络以提高神经网络的性能的制作方法

文档序号:18942960发布日期:2019-10-23 01:18阅读:261来源:国知局
利用网络中的路径来表示神经网络以提高神经网络的性能的制作方法

本申请要求2018年3月26日提交的,题为“线性神经网络(linearneuralnetworks)”的申请号为62/648,263(卷号:nvidp1217+/18br0082us01)的美国临时申请的权益,其全部内容通过引用合并于此。

本发明涉及人工神经网络,并且更具体地,涉及使用网络内的路径表示神经网络。



背景技术:

人工神经网络(ann)是一种常用的计算系统,其可以处理各种各样的任务,例如分类、图像识别、回归、函数逼近、根据经学习的分布的数据样本等。然而,目前的全连接ann的实现本质上是二次型的,而且实现、训练和操作在计算上是昂贵和耗时的。此外,当前的硬件处理单元必须利用线性算法以提高效率。因此,需要在时间和存储器空间上实现带有线性复杂度的ann。

附图说明

图1示出了根据一个实施例的、用于实施线性神经网络的方法的流程图。

图2示出了根据一个实施例的并行处理单元。

图3a示出了根据一个实施例的、在图2的并行处理单元中的通用处理集群。

图3b示出了根据一个实施例的、图2的并行处理单元的存储器分区单元。

图4a示出了根据一个实施例的、图3a的流多处理器。

图4b是根据一个实施例的、使用图2中的ppu实现的处理系统的概念图。

图4c示出了示例性的系统,其中可以实现前面各种实施例的各种体系架构和/或功能。

图5是根据一个实施例的、由图2中的ppu实现的图形处理管线的概念图。

图6示出了根据一个实施例的、人工神经网络的示例性的有向图。

图7示出了根据一个实施例的、对到作为relu神经单元的半空间的投射的示例性的解释。

图8示出了根据一个实施例的、两个丢弃(dropout)实例与一个分区实例的示例性的比较。

图9示出了根据一个实施例的、在人工神经网络中的示例性的选中路径。

图10示出了根据一个实施例的、对在推理(和训练)期间在线的整个特征层的激活进行子采样。

图11示出了根据一个实施例的、用于生成连接人工神经网络中的一组神经单元的路径的方法的流程图。

图12示出了根据一个实施例的、用于压缩人工神经网络的方法的流程图。

图13示出了根据一个实施例的、用于执行网络归一化的方法的流程图。

详细描述

人工神经网络(ann)是一种计算系统,其通过考虑例子学习执行任务从而模拟人脑。这些ann通常是通过使用连接来连接多个神经单元层来创建的,其中每个神经单元直接或间接地连接到其他每个神经单元,从而在ann中创建全连接层。然而,与在ann中的全连接层相比,通过利用从ann的输入到ann的输出的路径来表示人工神经网络,可降低ann的复杂度,并且ann可以被训练并以快得多的方式来实现。

图1示出了根据一个实施例的、实现线性神经网络的方法100的流程图。虽然方法100是在处理单元的上下文中描述的,但是方法100也可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法100可以由gpu(图形处理单元)、cpu(中央处理单元)、fpga(现场可编程门阵列)或任何能够执行对ann的评估和/或训练的处理器或可重新配置处理器执行。进一步地,本领域技术人员将理解,执行方法100的任何系统都在本发明实施例的范围和精神之内。

如操作102所示,人工神经网络(ann)被创建,该人工神经网络由多个路径表示,每个路径将该ann的至少一个输入连接到该ann的至少一个输出。此外,所述多个路径中的每个路径包含多个顶点以及多个边,每个顶点表示所述ann内的神经单元,每个边表示所述ann内的加权连接。

在一个实施例中,输入数据由ann处理以产生输出数据。在另一个实施例中,输入数据可以包括一个或更多个图像数据、文本数据、音频数据、视频数据、随机数、伪随机数或准随机数等。在另一个实施例中,可以使用嵌入函数将输入数据映射到由ann处理的浮点值向量。在另一个实施例中,嵌入可以由人工神经网络本身表示。在另一个实施例中,输出数据可以包括一个或更多个分类(classification)、归类(categorization)、概率、回归、函数逼近(functionapproximation)、根据经学习的分布的数据样本(例如生成式对抗网络(gan))等。在另一个实施例中,输入数据可以包括环境数据(例如,对汽车周围环境的已记录的图像数据等),输出数据可以包括环境数据中一个或更多个对象的识别/分类(例如汽车、骑自行车者、行人等)。

在另一个实施例中,使用标记的输入训练数据对ann进行训练。例如,该训练可以是半监督的、未监督的等。在另一个实施例中,ann是增强学习机器的核心,用于采取行动并近似一个值。在这种情况下,通过对马尔可夫链的仿真,以半监督的方式训练ann。另一方面,ann被用来预测下一项数据,并通过提供包含将被预测的下一数据的训练数据,以一种无监督的方式进行训练。

此外,在一个实施例中,所述多个路径中的每一个都可以包括路径序列。在另一个实施例中,可将路径序列划分为多个相邻块,以创建由路径序列表示的一系列人工神经网络。在另一个实施例中,通过执行一个或更多个随机采样、伪随机采样和准随机采样,可以生成多个路径中的每一个。在另一个实施例中,可以在硬件中执行伪随机采样和准随机采样。在另一个实施例中,可以给定路径的部分,并且缺失的部分可以像前面描述的那样生成。在另一个实施例中,路径可以逐路径生成,也可以逐代生成,即每次对所有路径同时生成一个步骤。

进一步地,在一个实施例中,可以在另一个ann上执行采样。在另一个实施例中,可以在ann的全连接层上执行采样,以确定多个路径。在另一个实施例中,所述多个路径可以包括所述ann的全连接层或所述ann的卷积层内的所有可能的路径的子集的一个或更多个。

例如,另一个ann可以包含多个层,其中每个层包括一组神经单元(例如顶点)。如果另一个ann是全连接的,则该另一个ann的一层内的每个神经单元(顶点)(通过边)连接到前一层内的所有神经单元以及后一层内的所有神经单元。这些连接称为边。以这种方式,全连接的ann的所有神经单元都直接或间接地相互连接。

此外,这些路径可以通过采样另一个ann中神经单元层之间的所有连接(边)的子集来生成。例如,在另一个ann中的一个输入层和第一层之间,可以采样连接输入层中的一个顶点和第一层顶点的一条边。然后可以对连接另一ann中的第一层顶点与第二层顶点的边进行采样。这可以一直进行下去,直到完整的路径被采样,该路径利用ann的每个中间层中的一个顶点经由边将输入层中的顶点连接到ann的输出层的顶点。这可以针对输入层的所有顶点和输出层的所有顶点执行,并且另一ann的输入层的每个顶点经由一个边的完整的路径经由ann的中间层连接到输出层的唯一的顶点。

此外,在一个实施例中,可以使用任意网络图,通过均匀地采样路径创建网络。在另一个实施例中,任意网络图可以包括未经训练的ann。在另一个实施例中,可从未经训练的ann中选择多个路径,并可用于创建表示未经训练的ann的另一个ann。在另一个实施例中,接着可以训练该另一个ann。

同样,在一个实施例中,加权连接可以确定地初始化。例如,ann中的每个加权连接都可以用一个常数值初始化。在另一个实施例中,加权连接可以用来自低差异序列的值初始化。

此外,在一个实施例中,可以通过对与该ann层的多个给定权重成比例的多个路径进行采样来创建该ann。在另一个实施例中,可以单独地或整体地对层的权重进行子采样。在另一个实施例中,对多个路径的采样可以包括子采样卷积权重。在另一个实施例中,可以每个滤波器单独地或整体地对卷积权重进行子采样。在另一个实施例中,可以选择多个路径,以便在不执行任何权重乘法的情况下计算得到的网络。

此外,在一个实施例中,ann是通过对与所述ann层的多个给定激活成比例的多个路径进行采样而创建的。在另一个实施例中,在对ann的训练和利用ann执行的推理中的至少一个期间,选择与所述多个给定激活成比例的所述多个路径。在另一个实施例中,可以以与反向传播过程中的错误成比例的方式选择多个路径。在另一个实施例中,可以选择多个路径,以便在不执行任何激活乘法的情况下计算得到的网络。

此外,在一个实施例中,可以选择多个路径,而不执行与权重的任何乘法,或不执行与激活的任何乘法。在另一个实施例中,可以通过对与所述ann层的多个给定权重和所述ann层的多个给定激活二者成比例的多个路径进行采样来创建所述ann。在另一个实施例中,ann可以是递归网络。

在另一个实施例中,可以使用图2中的并行处理单元(ppu)200来创建、训练和/或实现ann。

以这种方式,神经网络就可以用路径来表示。此外,神经网络的复杂度可以从二次型降低到线性型。进一步地,采样可与ann中的离散密度/权重成比例地进行。更进一步说,采样可以与ann中的激活成比例进行。此外,还可以对神经网络的权重进行归一化,并将归一化的权重进行传播。此外,还可以执行网络划分,并可以从全连接/卷积神经网络中对权重进行子采样。

现在,根据用户的需要,将对可用于实现上述框架的各种可选架构和特征提供更多的说明信息。应该特别注意的是,下列信息是为了说明目的而提出的,并且不应被解释为以任何方式加以限制。下列任何特性都可以与所描述的其他特性合并,或者不排斥其它特征。

并行处理架构

图2示出了根据实施例的并行处理单元(ppu)200。在一个实施例中,ppu200是在一个或更多个集成电路装置上实现的多线程处理器。ppu200是一种延迟隐藏架构,设计用于并行处理多个线程。一个线程(即,执行线程)是一组指令的实例化,这些指令配置为由ppu200执行。在一个实施例中,ppu200是图形处理单元(gpu),配置为实现用于处理三维(3d)图形数据的图形渲染管线,以便生成二维(2d)图像数据,以便在诸如液晶显示器(lcd)装置之类的显示装置上显示。在其他实施例中,ppu200可用于执行通用计算。虽然本文提供了一个示例并行处理器用于说明,但是应该强烈指出,这样的处理器仅出于说明目的进行阐述,并且可以使用任何处理器来补充和/或替代相同的处理器。

一个或更多个ppu200可以配置为加速数千个高性能计算(hpc)、数据中心和机器学习应用程序。ppu200可以配置为加速多个深度学习系统和应用程序,包括自主车辆平台、深度学习、高精度的演讲、图像、以及文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人、工厂自动化、实时语言翻译、在线搜索优化、以及个性化的用户推荐等等。

如图2所示,ppu200包括输入/输出(i/o)单元205、前端单元215、调度器单元220、工作分配单元225、集线器230、交叉开关(xbar)270、一个或更多个通用处理集群(gpc)250和一个或更多个分区单元280。ppu200可以通过一个或更多个高速nvlink210互连连接到主机处理器或其他ppu200。ppu200可以通过互连202连接到主机处理器或其他外围装置。ppu200也可以连接到由多个存储器装置204组成的本地存储器。在一个实施例中,本地存储器可以包括若干动态随机存取存储器(dram)装置。dram装置可以配置为高带宽存储器(hbm)子系统,每个装置中都堆叠有多个dram裸晶(die)。

nvlink210互连使系统能够扩展并包含结合了一个或更多个cpu的一个或更多个ppu200,支持ppu200与cpu之间的高速缓存一致性,以及cpu主控。数据和/或指令可以由nvlink210通过集线器230传输到ppu200的其他单元或自ppu200的其他单元接收,如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确地显示)。图4b对nvlink210进行了更详细的描述。

i/o单元205配置为通过互连202从主机处理器(未显示)发送和接收通信(即指令、数据等)。i/o单元205可以通过互连202直接与主机处理器通信,或通过一个或更多个中间装置(如内存桥)与主机处理器通信。在一个实施例中,i/o单元205可以通过互连202与一个或更多个其他处理器通信,例如一个或更多个ppu200。在一个实施例中,i/o单元205实现用于在pcie总线上通信的外围组件互连高速(pcie)接口,并且该互连202是pcie总线。在可选的实施例中,i/o单元205可实现用于与外部装置通信的其他类型的已知接口。

i/o单元205解码通过互连202接收到的数据分组。在一个实施例中,数据分组表示配置为使ppu200执行各种操作的指令。i/o单元205根据命令所指定的将解码后的命令传输到ppu200的其他单元。例如,一些命令可以被传输到前端单元215。其他命令可以传输到集线器230或ppu200的其他单元,如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,i/o单元205配置为在ppu200的各个逻辑单元之间和之中路由通信。

在一个实施例中,由主机处理器执行的程序在缓冲区中编码命令流,该缓冲区将工作负载提供给ppu200进行处理。工作负载可以包含多个指令和将由这些指令处理的数据。缓冲区是存储器中可由主机处理器和ppu200访问(即,读/写)的区域。例如,i/o单元205可以配置为通过在互连202上传输的存储器请求来访问连接到互连202的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后将指向命令流起点的指针传输到ppu200。前端单元215接收指向一个或更多个命令流的指针。前端单元215管理一个或更多个流,从流中读取命令并将命令转发到ppu200的各个单元。

前端单元215耦连到调度器单元220,后者配置各种gpc250来处理由一个或更多个流定义的任务。调度器单元220被配置为追踪与调度器单元220管理的各种任务相关的状态信息。状态可以指示任务指派给哪个gpc250、任务是活动的还是非活动的、与任务相关联的优先级,等等。调度器单元220管理在一个或更多个gpc250上的多个任务的执行。

调度器单元220耦连到工作分配单元225,后者配置为分派用于在gpc250上执行的任务。工作分配单元225可以追踪从调度器单元220接收到的多个预定的任务。在一个实施例中,工作分配单元225为每个gpc250管理待定(pending)任务池和活动任务池。待定任务池可以包括若干个时隙(例如,32个时隙),其包含指派给特定gpc250处理的任务。活动任务池可以包括一些时隙(例如,4个时隙),用于gpc250正在主动处理的任务。当gpc250完成任务的执行时,将从gpc250的活动任务池中逐出该任务,并且待定任务池中其他任务中的一个被选中和调度,以在gpc250上执行。如果gpc250上的活动任务已经空闲,比如在等待数据依赖关系得到解决时,那么该活跃任务可以从gpc250中逐出,并返回到待定任务池,同时待定任务池中的另一任务被选中并调度,以在gpc250上执行。

工作分配单元225通过xbar270与一个或更多个gpc250通信。xbar270是将ppu200的许多单元耦连到ppu200的其他单元的互连网络。例如,xbar270可以配置为将工作分配单元225与特定的gpc250耦连。虽然没有明确地显示,但ppu200的一个或更多个其他单元也可以经由集线器230连接到xbar270。

任务由调度器单元220管理,并由工作分配单元225分配到gpc250。gpc250配置为处理任务并生成结果。结果可以由gpc250中的其他任务使用,经由xbar270路由到不同的gpc250,或者存储在存储器204中。结果可以经由分区单元280写入存储器204,其实现了存储器接口,用于从存储器204读取数据/将数据写入存储器204。结果可以经由nvlink210传输到另一个ppu200或cpu。在一个实施例中,ppu200包括u个分区单元280,该数量等于与ppu200耦连的独立且不同的存储装置204的数量。下面将结合图3b更详细地描述分区单元280。

在一个实施例中,主机处理器执行实现应用程序编程接口(api)的驱动器核心,其使能在主机处理器上执行的一个或更多个应用程序以调度用于在ppu200上执行的操作。在一个实施例中,多个计算机应用程序由ppu200同时执行,并且ppu200针对多个计算应用程序提供隔离、服务质量(qos)和独立的地址空间。应用程序可生成指令(即,api调用),其使驱动器核心生成用于由ppu200执行的一个或更多个任务。驱动器核心将任务输出到由ppu200处理的一个或更多个流。每个任务可以包含一个或更多个相关线程的组,在这里称为线程束(warp)。在一个实施例中,线程束包括可并行执行的32个相关线程。协作线程可以指多个线程,包括执行任务的指令和可以通过共享存储器交换数据的指令。图4a对线程和协作线程进行了更详细的描述。

图3a示出了根据一个实施例的图2的ppu200中的gpc250。如图3a所示,每个gpc250包含用于处理任务的多个硬件单元。在一个实施例中,每个gpc250包括管线管理器310、预光栅操作单元(prop)315、光栅引擎325、工作分配交叉开关(wdx)380、存储器管理单元(mmu)390和一个或更多个数据处理集群(dpc)320。可以理解的是,图3a中的gpc250可以包括其他硬件单元来代替或补充图3a中所示的单元。

在一个实施例中,gpc250的操作由管线管理器310控制。管线管理器310管理一个或更多个dpc320的配置,以用于处理分配给gpc250的任务。在一个实施例中,管线管理器310可以配置一个或更多个dpc320中的至少一个,以实现图形渲染管线的至少一部分。例如,可以将dpc320配置为在可编程流多处理器(sm)340上执行顶点着色程序。管线管理器310还可以配置为将从工作分配单元225接收到的数据分组路由到gpc250中的适当的逻辑单元。例如,一些数据分组可以路由到prop315和/或光栅引擎325中的固定功能硬件单元,而其他分组可以路由到dpc320,以由图元引擎335或sm340进行处理。在一个实施例中,管线管理器310可以配置一个或更多个dpc320中的至少一个,以实现神经网络模型和/或计算管线。

prop单元315被配置为将光栅引擎325和dpc320生成的数据路由到光栅操作(rop)单元,结合图3b中有更详细的描述。prop单元315还可以配置为执行针对颜色混合、组织像素数据、执行地址转换等的优化。

光栅引擎325包括若干固定功能硬件单元,其被配置为执行各种光栅操作。在一个实施例中,光栅引擎325包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和图块合并引擎。设置引擎接收转换后的顶点,并生成与顶点定义的几何图元相关联的平面方程。该平面方程被传输到粗光栅引擎,为图元生成覆盖信息(例如,用于图块的x、y覆盖掩码)。粗光栅引擎的输出被传输到剔除引擎,在此引擎中剔除与未通过z测试的图元相关的片段,并传输到裁剪引擎,在此引擎中位于视锥体外部的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递给精细光栅引擎,根据设置引擎生成的平面方程为像素片段生成属性。光栅引擎325的输出包括要由例如在dpc320中实现的片段着色器处理的片段。

gpc250中包含的每个dpc320包括m管线控制器(mpc)330、图元引擎335和一个或更多个sm340。mpc330控制dpc320的操作,将从管线管理器310接收的分组路由到dpc320中的适当单元。例如,与顶点关联的分组可以路由到图元引擎335,该引擎配置为从存储器204中取回与顶点相关联的顶点属性。相反,与着色器程序相关联的分组可以被传输到sm340。

sm340包括可编程的流处理器,其配置为处理由多个线程表示的任务。每个sm340都是多线程的,并配置为同时执行来自一组特定的线程的多个线程(例如,32个线程)。在一个实施例中,sm340实现simd(单指令、多数据)架构,其中一组线程(即线程束)中的每个线程配置为基于相同指令集处理不同的数据集。线程组中的所有线程执行相同的指令。在另一个实施例中,sm340实现simt(单指令,多线程)架构,其中一组线程中的每个线程配置为基于相同的指令集处理一组不同的数据,但是其中一组线程中的各个线程在执行期间可以发散。在一个实施例中,针对每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使能线程束之间和线程束内的串行执行的并发性。在另一个实施例中,针对每个单独的线程维护程序计数器、调用栈和执行状态,使能所有线程之间、线程束内部和线程束之间的相等的并发性。当为每个线程维护执行状态时,可以将执行相同指令的线程收敛并并行执行,以获得最大的效率。下面将结合图4a更详细地描述sm340。

mmu390提供了gpc250和分区单元280之间的接口。mmu390可以提供将虚拟地址转换为物理地址、存储器保护和对存储器请求的仲裁。在一个实施例中,mmu390提供一个或更多个转换后备缓冲器(tlb),用于将虚拟地址转换为存储器204中的物理地址。

图3b示出了根据一个实施例的图2的ppu200中的存储器分区单元280。如图3b所示,存储器分区单元280包括光栅操作(rop)单元350、二级(l2)高速缓存单元360和存储器接口370。存储器接口370与存储器204耦连。存储器接口370可以实现32位、64位、128位、1024位数据总线或类似的用于高速数据传输的数据总线。在一个实施例中,ppu200包含u个存储器接口370,每对分区单元280有一个存储器接口370,其中每对分区单元280连接到相应的存储器装置204。例如,ppu200可以连接到最多y个存储器装置204,例如高带宽存储器堆叠或图形双数据速率、版本5、同步动态随机访问存储器或其他类型的永久存储。

在一个实施例中,存储器接口370实现hbm2存储器接口,并且y等于u的一半。在一个实施例中,hbm2存储器堆叠与ppu200位于相同的物理封装上,与传统的gddr5sdram系统相比,节省了大量的电能和面积。在一个实施例中,每个hbm2堆叠包括4个存储器裸晶,并且y等于4,hbm2堆叠的每个裸晶包括两个128位通道,共8个通道,并且数据总线宽度为1024位。

在一个实施例中,存储器204支持单错校正双错检测(secded)纠错码(ecc)以保护数据。ecc为对数据损坏敏感的计算应用程序提供了更高的可靠性。可靠性在大型集群计算环境中尤其重要,其中,ppu200处理非常大的数据集和/或长时间运行应用程序。

在一个实施例中,ppu200实现了多级存储器层次结构。在一个实施例中,存储器分区单元280支持统一存储器,为cpu和ppu200存储器提供单个统一的虚拟地址空间,使虚拟存储器系统之间能够共享数据。在一个实施例中,追踪ppu200对位于其他处理器上的存储器的访问频率,以确保将存储器页移动到正在更频繁地访问这些页面的ppu200的物理存储器中。在一个实施例中,nvlink210支持地址转换服务,其允许ppu200直接访问cpu的页表,并提供ppu200对cpu存储器的完全访问。

在一个实施例中,复制引擎在多个ppu200之间或ppu200与cpu之间传输数据。复制引擎可以为没有映射到页表中的地址生成页面错误。存储器分区单元280可以服务于页面错误,将地址映射到页表中,然后复制引擎可以执行传输。在传统的系统中,用于多个处理器之间的多个复制引擎操作的存储器是固定的(即非可分页的),极大地减少了可用存储器。当存在硬件页面错误时,可以将地址传递给复制引擎,而不必担心存储器页面是否是常驻的,而且复制过程是透明的。

来自存储器204或其他系统存储器的数据可以由存储器分区单元280取回并存储在l2高速缓存360中,其位于芯片上并在不同的gpc250之间共享。如图所示,每个存储器分区单元280包括l2高速缓存360的一部分,该部分与相应的存储器装置204相关联。较低级别的高速缓存可以在gpc250中的不同单元中实现。例如,每个sm340都可以实现一级(l1)高速缓存。l1高速缓存是专用于特定sm340的专用存储器。来自l2高速缓存360的数据可以被取回并存储在l1高速缓存中的每个高速缓存中,以便在sm340的功能单元中进行处理。l2高速缓存360与存储器接口370和xbar270耦连。

rop单元350执行与像素颜色相关的图形光栅操作,例如颜色压缩、像素混合等。rop单元350还与光栅引擎325一起实现深度测试,从光栅引擎325的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过了样本位置的深度测试,那么rop单元350将更新深度缓冲区,并将深度测试的结果传输到光栅引擎325。可以领会的是,分区单元280的数量可能与gpc250的数量不同,并且因此,每个rop单元350可以与gpc250中的每一个相耦连。rop单元350追踪来自不同gpc250的分组,并确定由rop单元350生成的结果通过xbar270路由到了哪个gpc250。虽然rop单元350包括在图3b中的存储器分区单元280中,但在其他实施例中,rop单元350可以位于存储器分区单元280之外。例如,rop单元350可以驻于gpc250或其他单元中。

图4a示出了根据实施一个例的图3a的流多处理器340。如图4所示,sm340包括指令缓存405、一个或更多个调度器单元410(k)、寄存器文件420、一个或更多个处理核心450、一个或更多个特殊功能单元(sfu)452、一个或更多个加载/存储单元(lsu)454、互连网络480、共享存储器/l1高速缓存470。

如上所述,工作分配单元225将任务分派到ppu200中的gpc250上执行。任务分配给gpc250中的特定的dpc320,并且,如果任务与着色器程序相关联,则任务可以被分配给sm340。调度器单元410(k)从工作分配单元225接收任务,并管理指派给sm340的一个或更多个线程块的指令调度。调度器单元410(k)将用于执行的线程块调度为并行线程的线程束,其中每个线程块分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元410(k)可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期内将来自多个不同协作组的指令分派给各个功能单元(即,核心450,sfu452和lsu454)。

协作组是用于组织通信线程组的编程模型,其允许开发人员表示线程通信的粒度,从而使能对并行分解的更丰富、更高效的表达。协作启动api支持线程块之间的同步,以执行并行算法。传统的编程模型为同步协作线程提供了一种单一的、简单的构造:跨越线程块的所有线程之间的屏障(即,syncthreads()函数)。然而,程序员常常希望在比线程块粒度更小的粒度定义线程组,并在定义的组中同步,以通过集体的全组功能接口的形式来实现更强的性能、设计灵活性和软件复用。

协作组允许程序员明确地在子块上定义线程组(即与单一的线程一样小)和多块粒度,并在协作组中的线程上执行诸如同步之类的集体操作。编程模型支持跨软件边界的干净组合,这样函数库和实用程序函数就可以在其本地上下文中安全地同步,而不必对收敛性做任何假设。协作组图元支持新的协作并行模式,包括生产者-消费者并行、机会并行和跨整个线程块网格的全局同步。

分派单元415配置为向一个或更多个功能单元传输指令。在一个实施例中,调度器单元410(k)包括两个分派单元415,使来自同一线程束的两个不同指令能够在每个时钟周期内被分派。在可选实施例中,每个调度器单元410(k)可包括单个分派单元415或附加的分派单元415。

每个sm340包括寄存器文件420,其为sm340的功能单元提供一组寄存器。在一个实施例中,寄存器文件420在每个功能单元之间划分,使得每个功能单元分配寄存器文件420的专用部分。在另一个实施例中,寄存器文件420在由sm340执行的不同线程束之间被划分。寄存器文件420针对连接到功能单元的数据路径的操作数提供临时存储。

每个sm340包括l个处理核心450。在一个实施例中,sm340包括大量(如128个等)不同的处理核心450。每个核心450可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点算术逻辑单元和整数算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现ieee754-2008浮点算术标准。在一个实施例中,核心450包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核。

张量核配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核包括在核心450中。具体地,张量核被配置成执行深度学习矩阵运算,例如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核运算于4x4矩阵上,并执行矩阵乘法和累加运算d=a×b+c,并且a、b、c和d为4x4矩阵。

在一个实施例中,矩阵乘法输入a和b为16位浮点矩阵,而累加矩阵c和d可以为16位浮点矩阵或32位浮点矩阵。张量核对16位浮点数输入数据进行运算,并与32位浮点数累加。16位浮点数乘法需要64次运算,并产生全精度的积,然后使用32位浮点数与4×4×4矩阵乘法的其他中间积相加来进行累加。实际上,张量核被用来执行更大的二维或高维矩阵运算,其由这些更小的元素构成。api,例如cuda10c++api,公开了专门的矩阵负载、矩阵乘法和累加,以及矩阵存储运算,以有效地使用cuda-c++程序中的张量核。在cuda级,线程束级接口假定16×16大小的矩阵跨越线程束的所有32个线程。

每个sm340还包括执行特殊函数(例如,属性评估、平方根倒数等)的m个sfu452。在一个实施例中,sfu452可以包括配置为遍历分层树数据结构的树遍历单元。在一个实施例中,sfu452可以包括配置为执行纹理映射过滤操作的纹理单元。在一个实施例中,纹理单元配置为从存储器204加载纹理映射(例如,二维纹理像素阵列),并对纹理映射进行采样,以产生采样纹理值,以用于在sm340执行的着色器程序中使用。在一个实施例中,纹理映射存储在共享存储器/l1高速缓存370中。纹理单元实现纹理操作,诸如使用mip-map(即,不同细节水平的纹理映射)的过滤操作。在一个实施例中,每个sm240包括两个纹理单元。

每个sm340还包括n个lsu454,其实现共享存储器/l1高速缓存470和寄存器文件420之间的加载和存储操作。每个sm340包括互连网络480,其将每个功能单元连接到寄存器文件420,并将lsu454连接到寄存器文件420、共享存储器/l1高速缓存470。在一个实施例中,互连网络480是交叉开关,其可被配置为将任何功能单元连接到寄存器文件420中的任何寄存器,并将lsu454连接到寄存器文件和共享存储器/l1高速缓存中的存储器位置。

共享存储器/l1高速缓存470是片上存储器的阵列,其允许数据存储和sm340和图元引擎335之间以及sm340中的线程之间的通信。在一个实施例中,共享存储器/l1高速缓存470包括128kb的存储容量,并且位于从sm340到分区单元280的路径中。共享存储器/l1高速缓存470可用于高速缓存读和写。共享存储器/l1高速缓存470、l2高速缓存360和存储器204中的一个或更多个是后备存储器。

将数据高速缓存和共享存储器功能结合到单独的存储器块中,可以为这两种类型的存储器访问提供最佳的总体性能。对于不使用共享存储器的程序,该容量可用作高速缓存。例如,如果将共享存储器配置为使用一半的容量,则纹理和加载/存储操作可以使用剩余的容量。共享存储器/l1高速缓存470内的集成使共享存储器/l1高速缓存470能够作为流化数据的高吞吐量通道,同时为频繁重用的数据提供高带宽和低延迟访问。

当配置为通用并行计算时,可以使用比图形处理更简单的配置。具体来说,图2中所示的固定功能图形处理单元被绕过,从而创建了简单得多的编程模型。在通用并行计算配置中,工作分配单元225将线程块直接指派和分发给dpc320。块中的线程执行相同的程序,在计算中使用独特的线程id以确保每个线程生成独特的结果,使用sm340以实施程序和执行计算,使用共享的存储器/l1高速缓存470以在线程之间通信,以及使用lsu454以通过共享存储器/l1高速缓存470和存储器分区单元280读写全局存储器。当配置为通用并行计算时,sm340还可以写调度单元220可用于发动dpc320上的新工作的命令。

ppu200可以包括在台式电脑、笔记本电脑、平板电脑、服务器、超级计算机、智能手机(例如无线手持装置)、个人数字助理(pda)、数码相机、车辆、头戴显示器、手持电子装置等之中。在一个实施例中,ppu200包含在单个半导体衬底上。在另一个实施例中,ppu200与一个或更多个其他装置(如附加的ppu200、存储器204、精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数模转换器(dac)等)一起包括在片上系统(soc)中。

在一个实施例中,ppu200可以包括在包括一个或更多个存储装置204的图形卡上。图形卡可配置为与台式计算机主板上的pcie插槽接口。在另一个实施例中,ppu200可以是包含在主板芯片组中的集成图形处理单元(igpu)或并行处理器。

示例性的计算系统

随着开发人员在人工智能计算等应用中公开和利用更多的并行性,具有多个gpu和cpu的系统被用于各种行业。具有数十到数千个计算节点的高性能gpu加速系统被部署在数据中心、研究机构和超级计算机中,以解决更大的问题。随着高性能系统中处理装置数量的增加,通信和数据传输机制需要扩展以支持增加的带宽。

图4b是根据一个实施例的,使用图2中的ppu200实现的处理系统400的概念图。示例性的系统465可以配置为实现图1中所示的方法100。处理系统400包括cpu430、交换机410,并且分别具有多个ppu和各自的存储器204。nvlink210在每个ppu200之间提供高速通信链路。尽管图4b中示出了具体数量的nvlink210和互连202连接,但是到每个ppu200和cpu430的连接的数量可以不同。交换机410在互连202和cpu430之间接口。可以将ppu200、存储器204和nvlink210设置在单个半导体平台上,以形成一个并行处理模块425。在一个实施例中,交换机410支持两个或更多个协议,用于在各种不同的连接和/或链接之间接口。

在另一个实施例中(未显示),nvlink210在每个ppu200和cpu430之间提供一个或更多个高速通信链路,以及在互连202和每个ppu200之间提供交换机410接口。ppu200、存储器204和互连202可以位于单个半导体平台上,以形成并行处理模块425。在另一个实施例中(未显示),互连202在每个ppu200和cpu430之间提供一个或更多个通信链接,并在每个ppu200的通信接口之间提供交换机410,使用nvlink210以在ppu200之间提供高速通信链路。在另一个实施例中(未显示),nvlink210通过交换机410在ppu200和cpu430之间提供一个或更多个高速通信链路。在另一个实施例中(未显示),互连202在每个ppu200之间直接提供一个或更多个通信链接。一个或更多个nvlink210高速通信链路可以实现为物理nvlink互连,也可以使用与nvlink210相同的协议实现片上(on-chip)或裸晶上(on-die)互连。

在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的单一的基于半导体的集成电路。需要注意的是,术语“单个半导体平台”也可以指具有增强的连接性的多芯片模块,该模块模拟芯片上的操作,并且比使用常规总线实现有很大的改进。当然,根据用户的需要,各种电路或器件也可以单独安装或以各种半导体平台的组合形式安装。可选地,并行处理模块425可以实现为电路板基板,而每个ppu200和/或存储器204可以是封装的装置。在一个实施例中,cpu430、交换机410和并行处理模块425位于单个半导体平台上。

在一个实施例中,每个nvlink210的信令速率为20到25gb/秒,每个ppu200包含六个nvlink210接口(如图4b所示,每个ppu200包含五个nvlink210接口)。每个nvlink210在每个方向上提供25千兆字节/秒的数据传输速率,其中6个链接提供300千兆字节/秒的数据传输速率。当cpu430还包含一个或更多个nvlink210接口时,nvlink210可以专门用于如图4b所示的ppu到ppu通信,或者是ppu到ppu和ppu到cpu的某种组合。

在一个实施例中,nvlink210允许从cpu430直接加载/存储/原子访问每个ppu的200存储器204。在一个实施例中,nvlink210支持一致性操作,允许从存储器204读取的数据存储在cpu430的高速缓存层级中,从而降低cpu430的高速缓存访问延迟。在一个实施例中,nvlink210包括对地址转换服务(ats)的支持,允许ppu200直接访问cpu430中的页表。nvlink210中的一个或更多个也可以配置为在低功耗模式下运行。

图4c示出了示例性的系统465,其中可以实现前面各种实施例的各种架构和/或功能。示例性的系统465可以配置为实现图1中所示的方法100。

如图所示,系统465包括连接到通信总线475的至少一个中央处理单元430。可以使用任何合适的协议实现通信总线475,例如pci(外围组件互连)、pci-express、agp(加速图形端口)、超传输或任何其他总线或点对点通信协议。系统465还包括主存储器440。控制逻辑(软件)和数据存储在主存储器440中,其可以采用随机存取存储器(ram)的形式。

系统465还包括输入装置460、并行处理系统425和显示装置445,即传统的crt(阴极射线管)、lcd(液晶显示器)、led(发光二极管)、等离子显示器等。可以从输入装置460接收用户输入,例如键盘、鼠标、触摸板、麦克风等。上述每一个模块和/或装置甚至可以位于单个半导体平台上以形成系统465。此外,根据用户的需要,各模块还可以单独设置或以半导体平台的各种组合的形式设置。

进一步地,系统465可出于通信目的通过网络接口435耦连到网络(例如电信网络、局域网(lan)、无线网络、广域网(wan),如因特网、对等网络、有线网络等)。

系统465还可以包括辅助存储器(未显示)。辅助存储器包括,例如,硬盘驱动器和/或可移除存储驱动器,其表示软盘驱动器、磁带驱动器、光盘驱动器、数字多功能磁盘(dvd)驱动器、记录装置、通用串行总线(usb)闪存。可移除存储驱动器以众所周知的方式读取和/或写入可移除存储单元。

计算机程序或计算机控制逻辑算法可以存储在主存储器440和/或辅助存储器中。这种计算机程序在实施时使系统465能够执行各种功能。存储器440、存储器和/或任何其他存储器都是计算机可读介质的可能例子。

前面各种图形的架构和/或功能可以在通用计算机系统、电路板系统、娱乐专用游戏机系统、特定于应用程序的系统和/或任何其他所需系统的上下文中实现。例如,系统465可以采取台式电脑、笔记本电脑、平板电脑、服务器、超级计算机、智能手机(例如,无线手持装置)、个人数字助理(pda)、数码相机、车辆、头戴式显示器、手持电子装置、移动电话装置、电视、工作站、游戏机、嵌入式系统和/或任何其他类型的逻辑的形式。

虽然上面已经描述了各种实施例,但是应该理解,它们只是作为示例而不是限制来提供的。因此,优选实施例的宽度和范围不应受上述示例性实施例中的任何一个的限制,而应仅根据以下权利要求及其等同来定义。

图形处理管线

在一个实施例中,ppu200包括图形处理单元(gpu)。ppu200配置为接收指定用于处理图形数据的着色器程序的指令。图形数据可以定义为一组图元,如点、线、三角形、四边形、三角形条等。通常,图元包括为该图元指定若干顶点的数据(例如,在模型空间坐标系中),以及与图元的每个顶点相关联的属性。ppu200可以配置为处理图形图元来生成帧缓冲器(即,用于显示的每个像素的像素数据)。

应用程序将用于场景的模型数据(即顶点和属性的集合)写入存储器,如系统存储器或存储器204。模型数据定义了显示器中可能可见的每个对象。然后,应用程序对驱动器核心进行api调用,该调用请求渲染和显示模型数据。驱动器核心读取模型数据并向一个或更多个流写入命令,以执行处理模型数据的操作。这些指令可以引用不同的着色器程序,这些程序将在ppu200的sm340上实现,包括顶点着色器、外壳着色器、域着色器、几何着色器和像素着色器中的一个或更多个。例如,可以将sm340中的一个或更多个配置为执行顶点着色器程序,该程序处理由模型数据定义的多个顶点。在一个实施例中,不同的sm340可以配置为并发地执行不同的着色器程序。例如,sm340的第一子集可以配置为执行顶点着色器程序,而sm340的第二子集可以配置为执行像素着色器程序。sm340的第一子集处理顶点数据以生成处理过的顶点数据,并将处理过的顶点数据写入l2高速缓存360和/或存储器204。在处理后的顶点数据被光栅化(即从三维数据转换为屏幕空间中的二维数据)以产生片段数据之后,sm340的第二子集执行像素着色器以生成处理过的片段数据,然后将其与其他处理过的片段数据混合,并写入存储器204中的帧缓冲器。顶点着色器程序和像素着色器程序可以并发地执行,以管线方式处理来自同一场景的不同数据,直到场景的所有模型数据都渲染到帧缓冲器为止。然后,将帧缓冲区的内容传输到显示器控制器,以便在显示装置上显示。

图5是根据一个实施例的、图2的ppu200所实现的图形处理管线500的概念图。图形处理管线500是描述了从三维几何数据生成二维计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作划分为多个阶段来更有效地执行长延迟操作,其中每个阶段的输出与下一个连续阶段的输入耦连。因此,图形处理管线500接收从图形处理管线500的一个阶段传输到下一个阶段的输入数据501,以生成输出数据502。在一个实施例中,图形处理管线500可以表示由api定义的图形处理管线。作为一个选项,图形处理管线500可以在前面的图和/或任何后续图的功能和架构上下文中实现。

如图5所示,图形处理管线500包含管线架构,其包含多个阶段。该阶段包括但不限于数据装配阶段510、顶点着色阶段520、图元装配阶段530、几何着色阶段540、视口缩放、剔除和裁剪(scc)阶段550、光栅化阶段560、片段着色阶段570和光栅操作阶段580。在一个实施例中,输入数据501包括配置处理单元以实现图形处理管线500的各阶段、以及各阶段要处理的几何图元(如点、线、三角形、四边形、三角形条或扇形等)的指令。输出数据502可包括像素数据(即,颜色数据),它被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。

数据装配阶段510接收输入数据501,该输入数据501针对高阶曲面、图元等指定顶点数据。数据装配阶段510收集临时存储或队列中的顶点数据,例如通过接收来自主机处理器的命令,其包括指向存储器中缓冲器的指针,并从缓冲器中读取顶点数据。然后将顶点数据传输到顶点着色阶段520进行处理。

顶点着色阶段520通过对每个顶点每次执行一组操作(即,顶点着色器或程序)来处理顶点数据。顶点可以,例如,被指定为与一个或更多个顶点属性(如颜色,纹理坐标,表面法线等)相关联的4坐标向量(即,<x,y,z,w>)。顶点着色阶段520可以操纵各个顶点属性(如位置、颜色、纹理坐标等)。换句话说,顶点着色阶段520对顶点坐标或与顶点相关联的其他顶点属性执行操作。这些操作通常包括照明操作(即,修改顶点的颜色属性)和转换操作(即,修改顶点的坐标空间)。例如,顶点可以使用对象坐标空间中的坐标指定,通过将坐标乘以一个矩阵来转换该矩阵,该矩阵将对象坐标空间中的坐标转换为世界空间或归一化的装置坐标(ncd)空间。顶点着色阶段520生成转换后的顶点数据,这些数据被传输到图元装配阶段530。

图元装配阶段530收集由顶点着色阶段520输出的顶点,并将顶点分组为几何图元,以便由几何着色阶段540进行处理。例如,图元装配阶段530可以配置为每三个连续的顶点组成一个几何图元(即三角形),用于传输到几何着色阶段540。在一些实施例中,特定的顶点可以针对连续的几何图元重用(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元装配阶段530传输几何图元(即,关联顶点的集合)到几何着色阶段540。

几何着色阶段540通过对几何图元执行一组操作(即,几何着色器或程序)来处理几何图元。曲面细分操作可以从每个几何图元生成一个或更多个几何图元。换句话说,几何着色阶段540可以将每个几何图元细分为两个或更多几何图元的更细网格,以便由图形处理管线500的其余部分进行处理。几何着色阶段540将几何图元传输到视口scc阶段550。

在一个实施例中,图形处理管线500可在流多处理器内运行,并且顶点着色阶段520、图元装配阶段530、几何着色阶段540、片段着色阶段570以及与之相关联的硬件/软件可顺序执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口scc阶段550可以利用数据。在一个实施例中,由图形处理管线500中的一个或更多个阶段处理的图元数据可以被写入高速缓存(例如l1高速缓存、顶点高速缓存等)。在这种情况下,在一个实施例中,视口scc阶段550可以访问高速缓存中的数据。在一个实施例中,视口scc阶段550和光栅化阶段560实现为固定功能电路。

视口scc阶段550执行几何图元的视口缩放、剔除和裁剪。每个被渲染的表面都与一个抽象的摄像机位置相关联。摄像机位置表示观看者观看场景的位置,并定义一个包围场景对象的视锥体。所述视锥体可包括一个视平面、一个后平面和四个裁剪平面。任何完全在视锥体之外的几何图元都可以被剔除(即丢弃),因为该几何图元不会对最终渲染的场景做出贡献。任何部分位于视锥体内部和部分位于视锥体外部的几何图元都可以被裁剪(即,转换为一个新的几何图元,该几何图元被包围在视锥体内。此外,每个几何图元可以根据视锥体的深度进行缩放。然后,将所有可能可见的几何图元传输到光栅化阶段560。

光栅化阶段560将三维几何图元转换为二维片段(例如,能够用于显示等)。光栅化阶段560可以配置为利用几何图元的顶点来设置一组平面方程,从中可以对各种属性进行插值。光栅化阶段560还可以为多个像素计算覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试,以确定几何图元是否被已光栅化的其他几何图元遮挡。光栅化阶段560生成片段数据(即,与每个覆盖像素的特定样本位置相关联的插值顶点属性),其被传输到片段着色阶段570。

片段着色阶段570通过对每个片段执行一组操作(即,片段着色器或程序)来处理片段数据。片段着色阶段570可生成用于片段的像素数据(即,颜色值),例如通过对片段执行光照操作或使用经插值的纹理坐标采样纹理映射。片段着色阶段570生成像素数据,这些像素数据被传输到光栅操作阶段580。

光栅操作阶段580可以对像素数据执行各种操作,如执行阿尔法测试、模板测试、以及将像素数据与其他像素数据混合,该其他像素对应于与该像素相关的其他片段。当光栅操作阶段580完成对像素数据(即,输出数据502)的处理后,像素数据可以被写入渲染目标,如帧缓冲器、颜色缓冲器等。

可以理解的是,图形处理管线500还可包括一个或更多个额外阶段,以代替或补充上述的一个或更多个阶段。抽象图形处理管线的各种实现可以实现不同的阶段。此外,在一些实施例(例如几何着色阶段540)中,上述一个或更多个阶段可以被排除在图形处理管线之外。其他类型的图形处理管线被认为在本披露的范围内。进一步地,图形处理管线500的任何阶段都可以由图形处理器(如ppu200)中的一个或更多个专用硬件单元实现。图形处理管线500的其他阶段可以由可编程硬件单元实现,如ppu200的sm340。

图形处理管线500可以经由主机处理器(如cpu)执行的应用程序来实现。在一个实施例中,装置驱动器可以实现应用程序编程接口(api),其定义应用程序可以使用的各种函数,以便生成图形数据以供显示。该装置驱动器是包括控制ppu200操作的多个指令的软件程序。api为程序员提供了抽象,其允许程序员使用专用的图形硬件(如ppu200)来生成图形数据,而不需要程序员使用ppu200的特定指令集。应用程序可以包含api调用,其被路由到ppu200的装置驱动器。装置驱动器解释api调用并执行各种操作来响应api调用。在一些实例中,装置驱动器可以通过在cpu上执行指令来执行操作。在其他情况下,装置驱动器可以至少部分通过使用cpu和ppu200之间的输入/输出接口在ppu200上启动操作来执行操作。在一个实施例中,装置驱动器被配置为利用ppu200的硬件实现图形处理管线500。

为了实现图形处理管线500的各个阶段,可以在ppu200中执行各种程序。例如,装置驱动器可以在ppu200上启动核心,以在一个sm340(或多个sm340)上执行顶点着色阶段520。装置驱动器(或由ppu300执行的初始核心)也可以在ppu300上启动其他核心,以执行图形处理管线500的其他阶段,如几何着色阶段540和片段着色阶段570。此外,图形处理管线500的一些阶段可以在固定的单元硬件上实现,例如在ppu300中实现的光栅器或数据汇编器上。可以理解的是,在由sm340上的后续核心处理之前,一个核心的结果可以由一个或更多个介入的固定功能硬件单元处理。

机器学习

在处理器(如ppu200)上开发的深度神经网络(dnn)已被用于各种不同的用例,从自动驾驶汽车到更快的药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用程序中的智能实时语言翻译。深度学习是一种模拟人类大脑神经学习过程的技术,其不断学习,不断地变得更聪明,并随着时间的推移更快地提供更准确的结果。儿童最初是由成人教他们正确地识别和分类各种形状,最终能够在没有任何指导的情况下识别形状。同样,深度学习或神经学习系统也需要在对象识别和分类方面进行训练,使其在识别基本对象、被遮挡对象等方面变得更加智能和高效,同时也为对象指派上下文。

在最简单的层面上,人类大脑中的神经元负责观察接收到的各种输入,并为这些输入中的每个输入指派重要级别,然后将输出传递给其他神经元进行动作。神经单元或感知器是神经网络最基本的模型。在一个例子中,感知器可以接收到一个或更多个表示对象的各种特征的输入,感知器被训练以识别和分类这些特征,并根据这些特征在定义对象形状时的重要性为每个特征指派一定的权重。

深度神经网络(dnn)模型包含多个层次的许多相连接的感知器(如节点),其可以用大量的输入数据进行训练,以快速、高精度地解决复杂问题。在一个例子中,dnn模型的第一层将汽车的输入图像分解成不同的部分,并寻找基本的图案,如线条和角度。第二层将线条装配起来,以寻找更高层次的图案,如车轮、挡风玻璃和镜子。下一层标识车辆的类型,最后几层为输入图像生成一个标签,用于标识特定汽车品牌的模型。

一旦训练了dnn,就可以部署dnn,并在称为推理的过程中使用它来识别和分类对象或模式。推理的例子(从给定输入中提取有用信息的过程)包括识别存入atm机的支票上的手写号码,识别照片中的朋友的图像,向5000多万用户提供电影推荐,识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险,或实时翻译人类语言。

在训练过程中,数据在前向传播阶段流经dnn,直到产生表明与输入对应的标签的预测为止。如果神经网络不能正确地标记输入,则分析正确的标签和预测的标签之间的错误,并在反向传播阶段针对每个特征调整权重,直到dnn正确地标记训练数据集中的输入和其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括ppu200支持的浮点乘法和加法。推理比训练的计算强度小,是一种对延迟敏感的过程,训练后的神经网络应用于它以前从未见过的新输入,以分类图像,翻译语言,并且一般地推断新信息。

神经网络严重依赖于矩阵数学运算,并且复杂的多层网络在效率和速度上都需要大量的浮点性能和带宽。ppu200拥有数千个处理核心,针对矩阵数学操作进行了优化,并提供了数十到数百次tflops性能,是一个能够提供基于深度神经网络的人工智能和机器学习应用程序所需性能的计算平台。

具有线性复杂度的人工神经网络

综述

人类大脑平均有大约1011个神经细胞,其中每个神经细胞可能与多达104个其他神经细胞相连。因此,我们研究的问题是,是否存在人工神经网络的算法,其神经单元的数量是线性的。将人工神经网络、蒙特卡罗方法和准蒙特卡罗方法结合起来,就可以导出一般的基于采样的推理、训练、压缩和量化算法,这些算法具有线性复杂度并具有最先进的性能的状态。

介绍

人工神经网络由意图模仿生物神经元的神经单元组成。这种神经单元计算输入信号加权和的非线性函数。如果每个所述神经单元都与其他神经单元相连接,计算量将是二次复杂度。然而,我们知道并不是每个神经元都与大脑中的每个其他神经元相连。更重要的是,到神经元的输入的数量受一个比神经元的实际数量小得多的常数的限制。

人工神经网络可以包含所谓的全连接层,其中一层的每个神经单元都连接到下一层的每个神经单元。大量的实验表明,大量的连接对最终结果的贡献很小,并且可以被修剪而不影响人工神经网络的功能。

神经单元中心的加权和可以看作是标量积或求积规则。将神经单元解释为数值积分算法,可以应用蒙特卡罗方法和准蒙特卡罗方法的原理来推导具有线性复杂度的算法。

应用离散密度仿真原理,可以推导出人工神经网络的具有线性复杂度的算法。用路径表示人工神经网络,可以比传统的表示方法训练得更快,而且还可以从头开始进行稀疏训练。由于稀疏性,确定性初始化成为可能。此外,还可以推导出一种算法,其对人工神经网络进行子采样,使权重仅为{-1,0,1},并且其复杂度在时间和空间上与神经单元的数量成线性关系。此外,在线稀疏性可以通过对激活进行子采样来得到。

模拟离散密度

标量积是希尔伯特空间的定义运算,并且是线性算法的基础。它们是机器学习的核心,并且在神经单元中尤其突出,在神经单元中计算输入的加权和,然后将其作为参数传递给非线性函数(例如,参见下面的方程2)。

在下文中,我们回顾了如何使用随机和确定性采样来评估标量积,这是提高人工神经网络效率的基础。例如,参见binder等人的“用于高效采样离散概率分布的大规模并行构建基数森林(massivelyparallelconstructionofradixtreeforestsfortheefficientsamplingofdiscreteprobabilitydistributions)”,其中讨论了用于采样离散概率分布的高级算法,并且其整体通过引用合并于此。

在不失一般性的前提下,我们假设一组归一化的权重,使得权重的绝对值之和为1,即:

如果权重没有被归一化,我们使用权重来代替,并假设||w||1≠0。

权重的绝对值构成单位区间的划分,其中

并且0=p0<p1<…<pn-1=1:

给定n个均匀分布的样本xi∈[0,1),这个过程允许近似一个标量积

其中指数ji∈{0,...,n-1}由唯一确定,因为这满足ji以概率被选择.a=(a0,...,an-1)是给定的输入向量。

如果xi为随机数,则通过模拟由归一化权重绝对值给出的离散密度,对标量积进行蒙特卡罗积分。它相当于将权重量化为{-1,0,+1}中的值。

通过选择具有改进的均匀分布的样本xi,可以提高近似的质量。确定性的选择是低差异序列,并且简单的随机选择是抖动等距采样,其中:

是用于随机变量ξ∈[0,1)的一种实现。在取绝对值之前对权重进行排序可以提高近似质量。

注意,较大的权重可以被采样多次。这种情况可以通过计算引用的数量并将相应的激活乘以引用的数量来优化,而不是对引用进行循环。

另一方面,除非权重变化很大,否则很少会出现重复引用。在这种情况下,忽略多个引用的粗略近似可能很有效。可选地,可以搜索大量的样本,以便得到的量化结果是真正的三元(或二进制),而没有重复。在另一个实施例中,计数重复数的最大位的数量可以是固定的,并且可以添加样本,直到达到该最大可表示计数为止。在另一个实施例中,计数可以通过接受由此产生的截断错误而在最大可表示计数之外继续进行。

根据分布的采样也可以在并行系统上实现,并且如果权重只是按顺序可用的。由于取消和四舍五入,浮点数的实现可能并不一定会产生||w||=1,而且必须小心捕捉这种情况。一个实际的解决方法是取实际的和来缩放随机变量。

人工神经网络

图6给出了一个人工神经网络的示例有向图600。如图所示,给定输入向量ao602a-n,输出向量al604a-n由神经单元al,i606a-n和608a-n确定。层l中的每个神经单元计算前一层l-1中激活的加权和,并应用一个固定其输出的激活函数。

有l层,其第l层中含有nl个神经单元。给定权重wl,k,i和输入激活a0,k,神经单元的输出计算如下:

因此,一个神经单元计算输入激活的加权和,并对加权和应用非线性函数。与激活的加权和相比,术语bl,i被称为偏差,并与relu一起可以理解为阈值。

整流线性单元(relu)的性质

尽管神经单元的非线性输出函数有多种选择,我们主要关注:

relu(x):=max{0,x},

并利用整流线性单元函数(relu)对神经单元的一些性质进行了讨论。事实上,relu激活函数可能是用于人工神经网络的许多函数的核心。

带泄露的relu

例如,带泄露的relu定义为:

relu(x)-α·relu(-x).

最大池化

对于α=-1,带泄露的relu结果是取绝对值

|x|=relu(x)+relu(-x),

可依次用来表示以下两个值的最大值:

通过归纳,可以将两个值的最大值推广到任意数量的值的最大值。更重要的是,这些恒等式表明,计算最大值可以用relu激活函数表示,从而可以表示不需要学习的人工神经网络中的优化。这种表示的第二个结果是引入了跳过链接,即通过神经网络的一层传递输入。

残差层

神经单元和投影方法之间有很强的联系。给定由法向量定义的半空间h+和与原点b的垂直距离,点x在半空间上的投影定义为

这在图7中示出,其是对投射到半空间的relu神经单元的解释700。如图所示,半空间h+702照常由权重704的向量以及偏差项b706定义其代表了平面距原点o708的距离。由于x1710沿着唯一定义的最短距离向量被移动到h+702的边界,即沿着方向704。对于x2不需要做任何事,因为已经有x2∈h+并且因此ph+(x2)=x2。

该方法可应用于自适应投影子梯度法求解分类问题。事实上,如果标量积大于阈值b,术语转换为执行投影的if-子句(如果-子句)。

注意,通常偏差项是被添加的(比较式2)。然而,将偏差项解释为到原点的距离时,减法更自然。半空间的解释也提供了一些关于零和非零偏差的直觉:非零偏差允许构造有限凸集,而零偏差意味着半空间的所有平面必须在原点相交,并且因此可表示的凸集是无限的。注意,一个恒定的非零偏差意味着所有的平面与原点的垂直距离相同。

给出了残差层与常微分方程的强烈关系。引入因子h,残差层可表示为:

并且在等价变换之后,立即看起来就像步长为h的欧拉方法的一个阶。随着跃迁h→0,左边变成使得残差层成为常微分方程。这导致尝试不同的常微分方程来确定在右侧,并使用经典的常微分方程求解器进行推理和训练。

网络归一化

给定正因子具有relu激活函数的神经单元具有缩放特性:

具有这种缩放特性的激活函数的神经单元可以通过选择线性因子来归一化

使绝对值之和为1。使用以下方程

将权重的绝对值标准化,使其形成离散的概率分布。整个网络可以被归一化,从第一层开始将线性因子以前馈方式通过网络进行传播:将下一层的权重与前一层的相应线性因子相乘以进行更新。最后一层需要存储输出神经单元的终端线性因子。这种网络归一化转换是确定性的。将人工神经网络看作为逼近算子,网络归一化可以允许用户控制算子范数。

如上所示,带泄露的relu、绝对值和最大池化具有正线性因子特性。因此,由它们构建的人工神经网络可以按照描述进行归一化。注意,对于方程3中投影方法的例子,我们将使用欧几里德范数

来得到垂直于所描述平面的法向量。欧几里德范数也被用来将权重向量的长度与方向分离开来,以加速训练。它是批归一化的替代品。

人工神经网络的线性算法

在全连接人工神经网络中,权重的个数

等于连接数,其中nl为第l层的神经单元数。然而,在大脑中,到目前为止,不是每个神经元都连接到所有其他神经元。一种实现多个神经单元复杂度线性化

的方法为将连接到神经单元的连接数限定为一个常数。在第一组实验中,我们将经训练的人工神经网络的连接采样为与神经单元的权重分布成正比,如上所述:

全连接层

可以通过根据每个神经单元的权重进行采样,选择全连接网络的一部分连接,建立稀疏人工神经网络。在一个例子中,仅使用12%的最重要权重,就可以达到整个模型精度的97.52%。这个简单的方法已经说明了子采样神经网络的强大功能。对于这个实验,我们使用等距抖动采样,每个神经单元有一个随机偏移量。

注意,独立地采样神经单元可能导致未连接的神经单元或输入。此外,对权重的一小部分进行采样还不是线性算法,尽管它已经强调了采样方法的潜力。

卷积层

对于cifar-10上的lenet架构,我们的模型的最佳测试精度为69.12%。对卷积权重进行子采样,在采样权重仅为50%的情况下,我们可以得到整个模型88%的精度。与子采样全连接层相比,增益要小得多,因为权重的数量要小得多,并且实际上已经被一个常数所限制,这个常数就是滤波器的核心大小。因此,对各个滤波器核心进行子采样可能只对较大的滤波器核心有好处。

然而,不是一个接一个地对每个滤波器的权重进行采样,而是对卷积层中所有滤波器的所有权重进行采样,这大大改善了这种情况。以这种方式,选中的全连接层更好地表示卷积层的所有滤波器的集合,其允许增加稀疏性。

划分,而非丢弃(dropout)

丢弃被用于将人工神经网络的训练规则化。给定概率如果对于均匀分布的随机数ξ,我们有则在训练时不考虑神经单元。例如,用线性反馈移位寄存器发生器可以有效地模拟这种随机数。

然而,这个过程并不能保证覆盖所有的神经单元。将一个神经单元精确地指派到在划分以外的一个划分使用较少的伪随机数生成器调用并确保考虑了所有神经单元。例如,请参见图8,它将丢弃802和804的两个实例与划分806的一个实例进行了比较。

除了算法效率的提高,没有任何变化,如表1所示:

表1

通过路径代表人工神经网络

使用丢弃或丢弃连接时,可能会发生神经单元的输出不被使用,或者神经单元可能不连接到任何输入。这对于仅采样神经单元的连接也一样是正确的。然而,人工神经网络从输入到输出的路径构造中,不可能存在悬空的神经单元,因为路径上的所有神经单元都使用至少一个输入并传播它们的输出。因此,复杂性受人工神经网络深度乘以路径数的限制,因此在空间和时间上都是线性的。

图9示出了根据一个示例性实施例的人工神经网络900中的示例性的所选路径902-908。如图所示,所选路径902-908在时间和空间上的计算复杂度均受所选路径902-908的个数乘以层数l(如人工神经网络深度900)的限制。

表2示出了由路径表示的人工神经网络变量的示例性c++声明和初始化。层偏移是激活和错误阵列中第l层的第一个元素的索引。这些路径要么是由伪随机数生成器选择的连接神经单元的随机游走生成的,要么是由确定性序列生成的,其中p[i][l]是低差异序列的第i个向量的第l个分量。

表2

表3示出了根据一个实施例的、由使用relu激活函数的路径来定义的人工神经网络的推理(前馈)步骤的示例性的线性复杂度c++实现。该实现显示了relu激活函数的显式执行。省略该循环并取消if-语句的注释将隐式地以更适合硬件的形式实现relu激活函数,因为激活的符号位足以屏蔽累加操作。

表3

仍然有可能发生某些神经单元从未被触及或某些连接被多次采样的情况。虽然无法避免使用随机方法来追踪路径,但是存在一些数字理论构造,其允许人们创建具有覆盖、扇入和扇出保证的连接模式。

在这一精神中,可以引入稀疏人工神经网络的硬件架构。管线架构的一个阶段对应于人工神经网络的一个层,并负责该层的前馈、反向传播和权重更新。人工神经网络由每层的神经单元数以及一层的所有神经单元的扇入和扇出来指定。层间的连接是使用确定性置换建立的,其允许人们避免重复连接,并保证覆盖所有神经单元。该架构并不是为卷积神经网络设计的。对于足够小的扇入和扇出,由此产生的人工神经网络暴露了结构的稀疏性。较大的稀疏神经网络可能胜过较小但同样复杂的密集网络。

同样,基于扩展图的人工神经网络将保证从每个输入到每个输出至少有一条可能的路径。对于从m个输入特征层计算n个输出特征层,可以为每个n个卷积选择d<m个输入特征层的子集,以降低卷积层的复杂度。然而,该实现是基于不保证连接属性的随机采样方法。

在一个实施例中,扇入和扇出取决于路径的数量和每层神经单元的数量nl。如果神经单元的数量和层间连接的数量是2的幂次方,则sobol序列保证每层的每个神经单元的扇入和扇出是整数和常数。使用sobol的序列生成的层之间的任意两个边的幂次都保证了相同的路径数,而不是在层之间选择相同数量的路径。此外,扇入和扇出可以通过轨迹分裂来适应。例如,参照亚历山大·凯勒的《壳内的拟蒙特卡罗图像合成(quasi-montecarloimagesynthesisinanutshell)》,其全部内容通过引用合并于此。

利用确定性的低偏差序列,p[l][i]可以理解为该序列的第i个向量的第l个分量的函数估计,也就是说,对于许多低偏差序列,可以用硬件有效地实现地址生成器。特别是对于像sobol序列这样的序列,由一个分量生成的连续地址块是置换,并且因此在并行连接层时保证了无冲突路由。

渐进式稀疏训练

子图可以由路径序列中相邻的路径块(例如,参见图9)所接触的神经单元的联合来生成,而不是通过丢弃或划分来生成人工神经网络的子集。然后对每批训练重复此过程。除了丢弃、丢弃连接(dropconnect)或划分之外,子图保证是连接的。这样,每次迭代都保证训练复杂度是线性的。

除了网络图上的随机游走外,还可以采用低差序列通过网络对路径进行渐进式采样。这种结构是基于基底b中的所谓的(t,s)-序列,其实际上是在基底b中的(t,m,s)-网的序列。

例如,确定性sobol的低偏差序列是以b=2为底的a(t,s)-序列,它在单位超立方体[0,1)s中创建了均匀分布的s维点。这些点可以被非常有效地计算出来。硬件实现很简单,因为算法完全基于具有2的幂次方元素的有限域。现在,sobol序列的组件具有这样的特性,即2的幂次方元素的每个相邻块都构成一个置换,这就保证了使用sobol序列的准随机游走连接的神经网络中的各个层都由一系列置换连接起来。

利用表2算法中的低差分支,生成确定性准随机游走与用s维点代替伪随机数生成器评估表2中的p[l][i]一样简单。给定路径的层l和索引i,可以通过一个简单的布尔逻辑特定电路计算sobol序列及其扰乱的变体的对应组件,其允许使用序列而不显式地存储其点。

由于这些置换是渐进式的,所以由sobol序列生成的准随机游动的连续块可以用于对神经网络进行子采样,而不是使用丢弃。

注意,低差异序列可以是随机的和/或扰乱的,其可以保留它们的置换特性。注意,当使用伪随机数生成器而不是低差异序列时,不一定能保证这一点。

与计算机图形学类似,通过网络追踪路径可以从输入开始,从输出开始往回追踪,或者从两端开始并连接路径片段。

从头开始训练稀疏

参见图9,可以使用一组路径来修复稀疏架构,而不是渐进式地对神经网络进行子采样。训练稀疏从头开始,推理和训练二者的复杂度在路径所接触的神经单元数方面是线性的。

均匀初始化

在训练之前,需要初始化人工神经网络的权重。通常采用高斯分布随机变量或小尺度均匀随机变量,其在初始训练阶段产生不可预测的输出。在从数据进行学习之前,可以通过训练神经网络近似均匀分布来避免这种情况。

对于递归人工神经网络,针对隐藏到隐藏的权重,从一个均匀缩放的对角单位矩阵开始是可行的。

然而,当我们对如上所示的人工神经网络进行子采样时,用一个小的正常数初始化权重矩阵是非常有效的。乍一看,这似乎违反直觉,但请注意,只选择了连接的一个子集。因此,所选连接的权重被初始化为一个常数(例如,为了归一化,神经单元的连接数的倒数),而未选连接的权重隐式地设置为零。因此,在全连接层中,相应的权重向量将由随机或准随机选择的带有零和非零值的索引组成。这种配置是充分均匀分布的,以允许在训练期间收敛。

训练后通过量化而稀疏化

给定一个经训练的人工神经网络,只需按上面所述的对每个神经单元的权重成比例地采样,就可以简单地使用{-1,0,1}中的权重压缩该网络。从输出开始,对路径进行反向采样,并与沿路径访问的每个神经单元的权重成比例。这对应于加权图中的重要采样路径。

然后,所得的网络只使用加法和减法,不再与权重进行乘法。注意,连接可以被采样不止一次,因此可以被具有总计的权重的一个连接替换。

事实上,给出了三元权重的推导,同时解释了为什么只有{-1,1}或{0,1}的二元权重不一定有效:它们不能作为离散密度近似导出。一个示例性的方案可以被认为是一个编译器,它将经训练的人工神经网络转换成三元神经网络。对于重复连接,有一个有趣的观察:在我们的方案中,如果它们对于给定样本数量足够重要,则可以对连接进行不止一次采样。当不允许多次引用时,这种重复连接不能在权重量化期间出现,但是,它们可以作为重复的滤波器核心出现。

稀疏推理

虽然子采样权重提高了大型滤波器的效率,但如果权重的数量很小,则不会有太大的帮助。相反,整个特征层的激活可以在推理(和训练)期间被在线子采样,如图10所示。更具体地说,在稀疏推理中,神经单元的选择与它们的激活成正比。这个原则适用于任何类型的层,例如全连接层1002或卷积层1004。通过这种方式,计算可以急剧减少,因为在前馈过程中只选择了一小部分或恒定数量的连接。

这通常适用于任何类型的层,对于卷积层尤其有用,并且在静态量化不够有效时可以有所帮助。

在我们的实现中,我们在推理过程中对层的激活在线进行成比例的采样,并计数激活(即神经单元)被选中的频率。然后,这些计数器被除以||a||1,并且其结果被前馈。与方程1相比,我们现在的采样量与激活度ak的分布成正比,而在relu的情况下,激活度的分布是非负的。

如果激活被量化为{0,1},我们将只对权重求和而不进行任何乘法运算。子采样可以看作是另一种正则化。在极限情况下,固定输入并按照描述类似于网络重复子采样激活,其中神经单元的峰值与其激活成正比。

以类似的方式,误差可以通过与层的误差成比例的采样在网络中传播回来。

上面介绍的技术可以应用于递归连接。尽管不适用于递归权重的量化,我们可以有从头开始的稀疏的递归连接和稀疏的激活。

在推理过程中,除了与层的激活度成比例的采样外,我们还可以与激活度和权重的乘积成比例的采样。这与蒙特卡罗方法中所谓的重要采样最对应。所考虑的神经单元将负权重的采样连接的-1进行累加并将正权重的采样连接的+1进行累加。这种方法的效率取决于离散概率密度中的项数。显然,只有当这个数字不是二次的时候才会有回报。

结论

我们证明了丢弃划分只在以前使用的伪随机数的一小部分上实现了丢弃。与神经单元权重成比例的采样提供了三元权重的推导,并产生简单的算法以创建只使用加法和减法、而不使用权重乘法的人工神经网络。因此,将神经网络量化为整数权重是很简单的,而无需再训练。将去连接和丢弃替换为随机和准随机游走以通过人工神经网络生成路径来保证在推理和训练过程中在空间和时间上不存在悬空神经单元和线性复杂度。在训练前生成路径会导致人工神经网络从头开始稀疏。构造具有线性复杂度的稀疏人工神经网络具有无最大池化(即无分辨率降低)的人工神经网络的潜力,并且因而具有更高的精度。

图11示出了根据一个实施例的、用于生成连接人工神经网络中的神经单元组的路径的方法1100的流程图。虽然方法1100是在处理单元的上下文中描述的,但是方法1100也可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法1100可以由gpu(图形处理单元)、cpu(中央处理单元)、fpga(现场可编程门阵列)或任何能够执行ann的评估和/或训练的处理器或可重构处理器执行。此外,本领域技术人员将理解,执行方法1100的任何系统都在本发明实施例的范围和精神内。

如操作1102所示,为人工神经网络选择了数量为的层。

此外,如操作1104所示,对于每个层l∈{0,...,l-1},数量的神经单元al,j被选中,其中0≤j<nl。

进一步地,如操作1106所示,均匀分布在[0,1)l上的若干路径n和l维序列xi=(xi,0,…xi,l-1)被选中。

进一步地,如操作1108所示,对于每个i∈{0,...,n-1}神经单元被连接,以创建连接人工神经网络中的神经单元组的路径。

以这种方式,连接人工神经网络内的神经单元组所生成的路径就是确定的低偏差序列所生成的人工神经网络内的随机游走。

图12示出了根据一个实施例的、用于压缩人工神经网络的方法1200的流程图。虽然方法1200是在处理单元的上下文中描述的,但是方法1200也可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法1200可以由gpu(图形处理单元)、cpu(中央处理单元)、fpga(现场可编程门阵列)或任何能够执行ann的评估和/或训练的处理器或可重新配置处理器执行。此外,本领域技术人员将理解,任何执行方法1200的系统都在本发明实施例的范围和精神内。

如操作1202所示,人工神经网络(ann)通过对多个边进行子采样进行压缩,每个边表示ann内的加权连接。在一个实施例中,该ann可以包括全连接层。在另一个实施例中,ann可以包括卷积层。在另一个实施例中,通过执行一个或更多个随机采样、伪随机采样和准随机采样,可以对多个边中的每条边进行子采样。

例如,ann可以包括多个层,其中每个层包含一组神经单元。如果ann是全连接的,则一层内的每个神经单元(经由边)连接到ann内前一层内的所有神经单元以及后一层内的所有神经单元。这些连接称为边。以这种方式,全连接ann的所有神经单元都直接或间接地相互连接。

此外,ann可以通过采样(例如选择等)神经单元层之间所有连接(边)的子集来压缩。在一个实施例中,可以随机采样边缘。在另一个实施例中,可以以伪随机方式采样边。在另一个实施例中,可以以准随机的方式采样边。采样的结果可以包括包含一个或更多个被采样的边的压缩ann、与被采样的边关联的神经单元以及利用一个或更多个被采样的边创建的一条或多条路径。

图13示出了根据一个实施例的、执行网络归一化的方法1300的流程图。虽然方法1300是在处理单元的上下文中描述的,但是方法1300也可以由程序、定制电路或定制电路和程序的组合来执行。例如,方法1300可以由gpu(图形处理单元)、cpu(中央处理单元)、fpga(现场可编程门阵列)或任何能够执行ann的评估和/或训练的处理器或可重新配置处理器执行。此外,本领域技术人员将理解,执行方法1300的任何系统都在本发明实施例的范围和精神内。

如操作1302所示,通过对具有线性因子的人工神经网络(ann)的第一层的多个权重进行归一化,来执行网络归一化。此外,如操作1304所示,通过将连续层的权重乘以线性因子,将归一化的多个权重传播到ann的连续个层。此外,ann的最后一层存储生成的权重,以缩放ann的输出。在一个实施例中,ann包括relu激活函数、带泄露的relu激活函数、最大池化(maxpool)激活函数和绝对值激活函数中的一个或更多个。

虽然上面已经描述了各种实施例,但是应该理解,它们只是以示例的方式表示而非限制。因此,优选实施例的广度和范围不应受上述示例性实施例中的任何一个的限制,而应仅根据以下的权利要求及其等同来定义。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1