CN113887714A - 用于在硬件中运行动态循环神经网络的方法和系统 - Google Patents
用于在硬件中运行动态循环神经网络的方法和系统 Download PDFInfo
- Publication number
- CN113887714A CN113887714A CN202110753352.4A CN202110753352A CN113887714A CN 113887714 A CN113887714 A CN 113887714A CN 202110753352 A CN202110753352 A CN 202110753352A CN 113887714 A CN113887714 A CN 113887714A
- Authority
- CN
- China
- Prior art keywords
- rnn
- neural network
- hardware
- derivative
- inputs
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
- Logic Circuits (AREA)
Abstract
用于在硬件中运行动态循环神经网络的方法和系统。循环神经网络的每个步骤用于对序列的不同输入进行运算,方法包括:接收RNN的表示;将RNN的表示变换为用于在输入序列的预先确定的多个输入上进行运算的导数神经网络,导数神经网络具有一个或多个状态输入和一个或多个状态输出,并且在RNN的预先确定的多个步骤上等同于RNN;以及通过以下方式将导数神经网络迭代地应用于输入序列:在硬件中实施导数神经网络的实例序列;以及将来自硬件处的导数神经网络的每一个实例的一个或多个状态输出作为一个或多个状态输入提供给硬件处的导数神经网络的后续实例,以便在比预先确定的多个输入长的输入序列上运算RNN。
Description
技术领域
本公开涉及用于实施循环神经网络(RNN)的方法和数据处理系统。
背景技术
循环神经网络(RNN)是一种用于对输入序列进行运算的人工神经网络,其中提供对序列中的输入的处理期间生成的状态以用于处理序列中的一个或多个后续输入。因此,RNN的输出不仅受到网络输入的影响,而且还受到表示序列中的先前点处的网络上下文的状态的影响。以此方式,RNN的运算受到网络执行的历史处理的影响,并且相同的输入可产生不同的输出,具体取决于提供给RNN的序列中的先前输入。
RNN可用于机器学习应用程序。特别地,RNN可以应用于表示时间序列的输入,该时间序列可能是无限长度的时间序列。例如,RNN用于语音识别和合成、机器翻译、手写识别和时间序列预测。
发明内容
提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
提供了一种在硬件中实施用于对输入序列进行运算的循环神经网络(RNN)的方法,该循环神经网络的每一个步骤用于对序列的不同输入进行运算,该方法包括:
接收RNN的表示;
将RNN的表示变换为用于在输入序列的预先确定的多个输入上进行运算的导数神经网络,该导数神经网络具有一个或多个状态输入和一个或多个状态输出,并且在RNN的预先确定的多个步骤上等同于RNN;以及
通过以下方式将导数神经网络迭代地应用于输入序列:
在硬件中实施导数神经网络的实例序列;以及
将来自硬件处的导数神经网络的每个实例的一个或多个状态输出作为一个或多个状态输入提供给硬件处的导数神经网络的后续实例,以便在比预先确定的多个输入长的输入序列上运算RNN。
预先确定的多个步骤在数量上可等于预先确定的多个输入。
来自导数神经网络的每个实例的一个或多个状态输出可以作为一个或多个状态输入提供给导数神经网络实例序列中的导数神经网络的后续实例。
实施导数神经网络的实例序列可以包括实施导数神经网络的实例,并且在完成该实例后,使序列中导数神经网络的下一个实例在硬件中实施。
变换可包括在预先确定的多个步骤上展开循环神经网络,以便形成用于在输入序列的预先确定的多个输入上进行运算的导数神经网络。
硬件及其控制逻辑可适于执行前馈神经网络。
硬件及其控制逻辑可能无法执行所接收的RNN的表示。
硬件及其控制逻辑可能无法执行动态神经网络。
导数神经网络可以为前馈神经网络。
RNN可包括一个或多个元胞(cell),每个元胞被布置成接收在前一个步骤生成的元胞状态输入,并且变换RNN的表示还包括在每个元胞处:
标识用于不依赖于元胞状态输入而执行的非因果运算;以及
在导数神经网络中,将预先确定的多个步骤中的至少一些步骤上的元胞的多个实例处的至少一些非因果运算分组在一起,以供在硬件处并行处理。
元胞可包括根据元胞状态输入执行的因果运算。
元胞状态输入的至少一部分可以在前一个步骤在元胞的先前实例处生成。
分组在一起可以包括对至少一些非因果运算进行组合,以作为导数神经网络中的元胞的多个实例的单个卷积运算执行。
变换RNN的表示还可以包括将至少一些非因果运算与因果运算分离。
在硬件中实施导数神经网络的实例序列可以包括,对于每一个实例,使硬件并行地处理一组或多组非因果运算。
硬件包括加速器,该加速器可具有用于执行神经网络的多个处理元件,并且每一组非因果运算在多个处理元件中的至少一些处理元件上并行处理。
变换RNN的表示还可以包括选择预先确定的多个输入的数量,使该数量为在加速器处的处理元件的数量的整数倍数。
处理元件可适于执行卷积运算,多个预先确定的输入的非因果运算包括将权重与多个预先确定的输入进行组合,并且变换RNN可包括将多个预先确定的输入表示为第一维度的张量并且将权重集合表示为第二维度的张量,第一维度和第二维度被选择为使得每一组非因果运算能够作为处理元件处的卷积运算并行执行。
变换RNN还可以包括配置导数神经网络,使得在元胞处相对于来自输入序列的输入执行的非因果运算的结果与在元胞处相对于该相同输入执行的因果运算进行组合。
循环神经网络可包括多个元胞。
输入序列可以表示时间序列。
提供了一种用于实施用于对输入序列进行运算的循环神经网络(RNN)的数据处理系统,该系统包括:
变换单元,该变换单元被配置为接收RNN的表示,并且将RNN的表示变换为用于在输入序列的预先确定的多个输入上进行运算的导数神经网络,该导数神经网络具有一个或多个状态输入和一个或多个状态输出,并且在RNN的预先确定的多个步骤上等同于RNN;
硬件加速器,该硬件加速器用于处理神经网络;以及
迭代逻辑,该迭代逻辑被配置为通过以下方式迭代地将导数神经网络应用于输入序列:
使导数神经网络的实例序列在硬件加速器处实施;以及
将来自硬件加速器处的导数神经网络的每个表示的一个或多个状态输出作为一个或多个状态输入提供给硬件加速器处的导数神经网络的后续表示,以便使硬件加速器在比预先确定的多个输入长的输入序列上运算RNN。
数据处理系统还可以包括控制逻辑,该控制逻辑被配置为在硬件加速器处实施导数神经网络的每个实例。
控制逻辑可包括驱动程序、硬件加速器的固件和用于配置硬件加速器的硬件中的一个或多个。
硬件和控制逻辑可适于执行前馈神经网络。
硬件加速器和控制逻辑可能无法执行所接收的RNN的表示。
硬件加速器和控制逻辑可能无法执行动态神经网络。
RNN可包括一个或多个元胞,每个元胞被布置成接收在前一个步骤生成的元胞状态输入,并且变换单元被配置为通过在每个元胞处执行以下操作来变换RNN的表示:
标识用于不依赖于元胞状态输入而执行的因果运算;以及
在导数神经网络中,将预先确定的多个步骤中的至少一些步骤上的元胞的多个实例处的至少一些非因果运算分组在一起,以供在硬件处并行处理。
元胞可包括根据元胞状态输入执行的因果运算。
迭代逻辑可被配置为使硬件加速器并行处理每一组非因果运算。
硬件加速器可包括多个处理元件,并且每一组非因果运算在多个处理元件中的至少一些处理元件上并行处理。
变换单元可被配置为将预先确定的多个输入的数量选择为硬件加速器处的处理元件的数量的整数倍数。
处理元件可适于执行卷积运算,预先确定的多个输入的非因果运算包括将权重与预先确定的多个输入进行组合,并且变换单元可被配置为在导数神经网络中将预先确定的多个输入表示为第一维度的一个或多个张量并且将权重集合表示为第二维度的一个或多个张量,第一维度和第二维度被选择为使得每一组非因果运算能够作为处理元件处的卷积运算并行执行。
变换单元可以被配置为将RNN变换为导数神经网络,其中相对于来自输入序列的输入执行的非因果运算的结果与相对于相同输入执行的因果运算进行组合。
数据处理系统可包括硬件加速器本地的被布置成接收与预先确定的多个输入进行组合的权重的存储器,该存储器被布置成在每一组非因果运算在硬件加速器处作为卷积运算并行执行之前,从硬件加速器可通过数据总线访问的系统存储器接收一组非因果运算的权重。
迭代逻辑可被配置为使来自导数神经网络的每个表示的一个或多个状态输出存储在硬件加速器本地的存储器处,以用作硬件加速器处的导数神经网络的后续表示的一个或多个状态输入。
提供了一种在硬件中实施循环神经网络(RNN)的方法,该方法包括:
接收用于在输入序列上进行迭代的RNN的表示,RNN的每一次迭代包括一个或多个元胞,每一个元胞被布置成从前一次迭代接收状态输入,并且生成状态输出用于后续迭代;
针对每个元胞,标识用于不依赖于在元胞处接收的状态输入而执行的非因果运算;
将RNN变换为导数神经网络,该导数神经网络包括一个或多个元胞的多个实例,并且在RNN的预先确定的多次迭代上等同于RNN;
在导数神经网络中,针对每个元胞,将元胞的多个实例处的至少一些非因果运算分组在一起,以在RNN的预先确定的多次迭代中的至少一些迭代上并行处理;以及
在硬件中实施导数神经网络以用于对输入序列进行运算,使得在硬件处并行处理导数神经网络的每个元胞的至少一些非因果运算的群组。
RNN的每次迭代可用于对序列的不同输入进行运算。
导数神经网络可以包括一个或多个网络状态输入和一个或多个网络状态输出,并且在硬件中实施导数神经网络可包括通过以下方式将导数神经网络迭代地应用于输入序列:
在硬件中实施导数神经网络的实例序列;以及
将来自硬件处的导数神经网络的每个实例的一个或多个网络状态输出作为一个或多个网络状态输入提供给硬件处的导数神经网络的后续实例,以便在比预先确定的多个输入长的输入序列上运算RNN。
提供了一种用于实施循环神经网络(RNN)的数据处理系统,该系统包括:
变换单元,该变换单元被配置为:
接收用于在输入序列上进行迭代RNN的表示,RNN的每一次迭代包括一个或多个元胞,每个元胞被布置成从前一次迭代接收状态输入,并且生成状态输出用于后续迭代;
针对每个元胞,标识RNN中的用于不依赖于在元胞处接收的状态输入而执行的非因果运算;
将RNN变换为导数神经网络,该导数神经网络包括一个或多个元胞的多个实例,并且在RNN的预先确定的多次迭代上等同于RNN;以及
在导数神经网络中,针对每个元胞,将元胞的多个实例处的至少一些非因果运算分组在一起,以在RNN的预先确定的多次迭代中的至少一些迭代上并行处理;
硬件加速器,该硬件加速器用于处理神经网络;以及
控制逻辑,该控制逻辑被配置为在硬件加速器处实施用于对输入序列进行运算的导数神经网络,使得在硬件处并行处理导数神经网络的每个元胞的至少一些非因果运算的群组。
可以提供一种图形处理系统,该图形处理系统被配置为执行本文所述的任何方法。可以提供用于执行如本文所述的方法的计算机程序代码。可以提供上面存储有计算机可读指令的非暂态计算机可读存储介质,所述计算机可读指令当在计算机系统处执行时,使计算机系统执行如本文所述的方法。
附图说明
参考附图以举例的方式描述本发明。在附图中:
图1是包括三个堆叠的RNN元胞的循环神经网络(RNN)的示例。
图2是RNN元胞的示意图。
图3是用于实施RNN的数据处理系统的示意图。
图4示出了在三个时间步骤中展开以形成静态(即,前馈)导数神经网络的图1的动态RNN。
图5示出了迭代地运算输入序列的图4的展开的RNN。
图6是图2的RNN元胞的实现方式的示意图,其中分别执行因果计算和非因果计算。
图7是多个时间步骤上实施图6的单个RNN元胞的示意图,其中在每个时间步骤中分别执行因果计算和非因果计算,在多个时间步骤中并行执行非因果计算。
图8是示出将RNN变换为适合在能够执行静态图形的加速器上实施的方法的流程图。
图9示出了包括被配置为根据本文中所述的原理实施RNN的神经网络加速器的计算机系统。
图10是集成电路制造系统的示意图。
图11示出了针对RNN执行数字格式选择的方法。
具体实施方式
通过举例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于本领域的技术人员而言将是显而易见的。仅通过举例的方式描述实施方案。
图1示出了将根据本文所述的原理用于示出RNN在硬件中的实施的循环神经网络(RNN)100的示例。网络包括三个堆叠的RNN元胞RNN1、RNN2和RNN3(图中的102至104)。每个元胞可以包括一个或多个网络运算。每个RNN元胞以由包括元胞和一个或多个网络参数(在本文中可称为“权重”)的运算限定的方式处理由该RNN元胞相对于输入序列的先前时间步骤生成的状态。RNN元胞是可以用作RNN中的部件的子图(子网络)。它采用一个或多个输入数据张量、一个或多个状态输入张量(元胞状态输入),并且可针对该时间步骤生成一个或多个状态输出张量和/或一个或多个输出数据张量。由元胞传输的输出数据张量中的一些输出数据张量可以与由元胞传输的输出状态张量相同。
RNN被配置为对时间序列x(t)101进行运算,该时间序列可以是例如RNN将执行语音识别的一系列音频样本。图1中的RNN的表示代表在一般时间步骤t处的RNN。在每个时间步骤t处,RNN提供输出o(t)105。通过在输入序列x(t)的每个时间步骤对输入运算RNN,RNN生成相应的输出序列o(t)。输入序列和输出序列的长度可以是无限的。因此,RNN可用于处理时间序列,其中时间序列的长度或内容在处理开始时未知,例如,可出于实现对设备的语音控制目的而捕获的实时语音的音频样本。更一般地,RNN可以对任何输入序列进行运算,该输入序列可以不是时间序列。本公开中对时间序列的提及,例如“时间步骤”应被理解为同等地适用于任何输入序列,包括但不限于时间序列。RNN相对于序列的每个输入的运算表示RNN的步骤,每个运算是RNN的单次迭代,即,以原始形式表示的RNN的单次应用。
应当理解,尽管在本文所述的示例中,RNN生成与输入序列中的每一个输入相对应的单个输出,但所描述的方法同样适用于具有其他配置的RNN,包括例如:在输入序列结束时生成单个输出的RNN(例如,适于执行分类的RNN);生成的输出少于网络所接收的输入的RNN;包括为相同的输入提供不同的输出,例如与输入序列以1:1对应的2个输出序列的分支的RNN。
实际上,每个RNN元胞可以包括多个运算,每个运算被布置成执行一组不同的计算,例如,RNN元胞可以包括一个或多个矩阵乘法运算、卷积运算、激活运算和串接运算(concatenation operation),这些运算被布置到RNN元胞,该RNN元胞对输入(该输入可以来自网络中的前一个RNN元胞)和在先前时间步骤处理RNN元胞时生成的状态进行运算。
第一RNN元胞102在时间步骤t接收来自时间序列x(t)101的输入数据,并且根据为该元胞预定义的计算集合处理输入。第一元胞处的处理还根据在第一元胞处的前一个输入x(t-1)的处理期间生成的状态h1(t-1)来执行。在附图中,被前向传递以供在下一个时间步骤的处理期间使用的状态被示出为状态h1(t)106,该状态经受延迟109,使得状态h1(t)被提供给具有输入x(t+1)的第一元胞。
图1中的第二RNN元胞和第三RNN元胞以与第一RNN元胞类似的方式运算,但是第二RNN元胞接收第一RNN元胞的输出作为其输入,并且第三RNN元胞接收第二RNN元胞的输出作为其输入。第三RNN元胞o(t)105的输出为RNN的输出。第二RNN元胞和第三RNN元胞中的每一者对其相应的输入执行其自身的预定义的计算集合。关于第一RNN元胞,第二RNN元胞和第三RNN元胞接收来自在一个或多个先前的时间步骤执行的处理的状态输入。在附图中,第二RNN元胞103输出状态h2(t)107,在时间步骤t+1将该状态作为状态输入提供给第二RNN元胞,并且第三RNN元胞104输出状态h3(t)108,在时间步骤t+1将该状态作为状态输入提供给第三RNN元胞。针对t=0时的第一时间步骤,通常使用预定义的初始状态值来初始化RNN。初始状态值可以是例如常数、学习的初始状态或全部为零。
在附图中,RNN元胞在时间步骤t的输出在时间步骤t+1作为状态输入提供给该RNN元胞,但一般来讲,状态可包括在第一RNN元胞处生成的一个或多个张量和/或第一RNN元胞的输出。一般来讲,对元胞的状态输入可包括来自一个或多个先前的时间步骤的状态,例如,状态可另外或替代地包括来自处理时间步骤t-2的状态。在一些网络中,对元胞的状态输入可另外或替代地包括在网络的其他RNN元胞处生成的状态数据,例如,提供给第一RNN元胞的状态数据可包括来自第二RNN元胞的状态数据。
图1中所示的RNN是简单示例。一般来讲,RNN可以包括一个或多个RNN元胞,并且可以对RNN的输入、来自RNN的输出和/或在RNN的元胞之间执行一个或多个其他处理步骤。例如,RNN还可以包括一个或多个卷积运算,激活运算,处理元胞之间的输入、输出或中间输出的全连接运算。输入x(t)和状态hi(t)是具有适合应用程序的任何维度的张量。
图2是简单RNN元胞200的示意图。图1中的RNN元胞102至104中的一个或多个RNN元胞可具有RNN元胞200的结构。以关于图1所述的方式,RNN元胞200接收来自RNN元胞200对先前的时间步骤x(t-1)的输入的运算的输入x(t)212(对于较高元胞可以是较低元胞的输出)和状态h(t-1)210。RNN元胞本身包括多个运算。输入和状态在串接运算202处组合(例如,沿信道维度串接),该串接运算将张量输入提供给矩阵乘法运算204。矩阵乘法运算接收权重张量作为矩阵W 218,用于与串接运算202生成的串接张量进行乘法运算。矩阵乘法运算204的输出然后由激活运算206进行运算,该激活运算将激活函数应用于矩阵乘法运算的输出。激活函数可以是适合于应用RNN的任何函数,例如,激活函数可以为tanh、ReLU函数或S型函数。
RNN元胞200的输出作为输出o(t)214提供,并且还作为状态h(t)216提供,以供RNN元胞在下一个时间步骤使用。在其他示例中,状态可不同于RNN元胞的输出(例如,状态可包括在RNN元胞处执行的运算期间生成的中间张量),以及/或者状态可包括多个张量。
在激活函数为tanh的情况下,RNN元胞200对输入张量x(t)的运算可以表示为:
RNN元胞200是RNN元胞的简单示例。应当理解,存在可根据本文所述的原理实施的许多不同种类的RNN元胞。例如,如本领域中已知的,如本文所述实施的RNN的RNN元胞可以为LSTM(长短期记忆)元胞或GRU(门控循环单元)元胞。不同类型的RNN元胞具有不同特征,并且应当理解,对任何特定类型的RNN元胞的选择可以由RNN专用的特定应用程序来确定。
用于实施RNN的数据处理系统300在图3中示出。数据处理系统包括用于执行神经网络的张量运算的加速器302。加速器可被称为神经网络加速器(NNA)。加速器包括多个可配置资源,所述多个可配置资源使得能够在加速器处实施各种类型的前馈神经网络,诸如各种卷积神经网络和多层感知器。
将相对于图3的特定示例中所示的数据处理系统来描述RNN在硬件中的实施,其中加速器302包括多个处理元件314,每个处理元件包括卷积引擎,但应当理解,除非另有说明,否则本文中所描述的用于在硬件中实施RNN的原理通常适用于包括能够执行神经网络的张量运算的加速器的任何数据处理系统。
在图3中,加速器包括输入缓冲器306、多个卷积引擎308、多个累加器310、累积缓冲器312和输出缓冲器316。每个卷积引擎308与其相应的累加器310及其在累积缓冲器312的资源中的份额一起表示硬件处理元件314。图3中示出了三个处理元件,但通常可以存在任何数量的处理元件。每个处理元件从系数缓冲器330接收一组权重,并且从输入缓冲器306接收输入值(例如,输入张量)。系数缓冲器可设置在加速器处,例如在相同的半导体管芯上以及/或者在相同的集成电路封装中。通过组合权重和输入张量,处理元件可操作为执行神经网络的张量运算。
一般来讲,加速器302可包括任何合适的张量处理硬件。例如,在一些示例中,加速器可包括池化单元(例如,用于实施最大池化和平均池化运算),或用于执行每个元素的数学运算的元素处理单元(例如,将两个张量相加)。为了简单起见,图3中未示出此类单元。
加速器的处理元件是加速器的可并行操作的独立处理子系统。每个处理元件314包括卷积引擎308,该卷积引擎被配置为在权重和输入值之间执行卷积运算。每个卷积引擎308可包括多个乘法器,每个乘法器被配置为将权重和对应的输入数据值相乘以产生乘法输出值。乘法器之后可以是例如被布置成计算乘法输出的总和的加法器树。在一些示例中,可以将这些乘积累加计算流水线化。
通常必须在加速器处执行大量的硬件操作,以便执行神经网络的每个张量运算。这是因为输入张量和权重张量通常非常大。由于可能采用卷积引擎的多次硬件传递来生成卷积运算的完整输出(例如,因为卷积引擎可能只接收和处理权重和输入数据值的一部分),因此加速器可以包括多个累加器310。每个累加器310接收卷积引擎308的输出,并且将该输出相加到与相同的运算相关的先前的卷积引擎输出。取决于加速器的实现方式,卷积引擎可以不在连续周期中处理相同的运算,因此可以提供累积缓冲器312来存储给定运算的部分累加的输出。适当的部分结果可以由累积缓冲器312在每个周期提供给累加器。
加速器可以包括被布置成存储加速器(例如,卷积引擎)所需的输入数据的输入缓冲器306和系数缓冲器330,该系数缓冲器被布置成存储加速器(例如,卷积引擎)所需的用于根据神经网络的运算与输入数据组合的权重。输入缓冲器可包括与在给定周期上在加速器处执行的一个或多个运算相关的输入数据中的一些或全部。系数缓冲器可包括与在给定周期上在加速器处处理的一个或多个运算相关的权重中的一些或全部。图3中所示的加速器的各种缓冲器可以任何合适的方式实施,例如,作为加速器本地的(例如,在相同的半导体管芯上以及/或者设置在相同的集成电路封装内)或加速器可通过数据总线或其他互连件访问的任何数量的数据存储库。
存储器304可以是加速器可访问的,例如,存储器可以是加速器可通过数据总线访问的系统存储器。可提供片上存储器328以用于存储权重和/或其他数据(诸如输入数据、输出数据等)。片上存储器可以在加速器的本地,使得存储在片上存储器中的数据可以由加速器访问,而不消耗存储器304的存储器带宽(例如,通过系统总线可访问的系统存储器)。可以将数据(例如,权重、输入数据)周期性地从存储器304写入片上存储器。加速器处的系数缓冲器330可被配置为从片上存储器328接收权重数据,以便减少存储器与系数缓冲器之间的带宽。输入缓冲器306可被配置为从片上存储器328接收输入数据,以便减少存储器与输入缓冲器之间的带宽。存储器可以耦合到输入缓冲器和/或片上存储器,以便将输入数据提供给加速器。
累积缓冲器306可以耦合到输出缓冲器316,以允许输出缓冲器接收在加速器处运算的神经网络的运算的中间输出数据,以及结束运算(即,在加速器处实施的网络的最后的运算)的输出数据。输出缓冲器316可以耦合到片上存储器328,用于将中间输出数据和结束运算的输出数据提供给片上存储器328,例如用于在以下文所述的方式在加速器处实施RNN时用作状态。
通常,需要将大量数据从存储器传输至处理元件。如果无法高效地完成该传输,这可导致用于向处理元件提供输入数据和权重的高存储器带宽要求和高功耗。当存储器为“片外”存储器时,即在与处理元件不同的集成电路或半导体管芯中实施时,尤其如此。一个此类示例为加速器可通过数据总线访问的系统存储器。为了减少加速器执行神经网络时的存储器带宽要求,在加速器处提供片上存储器是有利的,在加速器处可以存储在加速器处实施神经网络所需的至少一些权重和/或输入数据。当存储器设置在相同的半导体管芯上以及/或者在相同的集成电路封装中时,此类存储器可以是“片上”的(例如,片上存储器328)。
在图3的示例中单独示出了各种示例性连接,但在一些实施方案中,
其中的一些或全部连接可以由一个或多个共享数据总线连接提供。还应当理解,可提供其他连接,作为图3所示连接的替代或补充。例如,输出缓冲器314可被耦合到存储器304,用于将输出数据直接提供给存储器304。同样,在一些示例中,并非图3所示的所有连接都是必需的。例如,存储器304不必耦合到输入缓冲器306,该输入缓冲器可以直接从输入数据源获得输入数据,例如,音频子系统被配置为对来自麦克风的信号进行采样,该麦克风专用于捕获来自包括数据处理系统的设备的用户的语音。
在硬件中实施RNN
在适于执行无循环的神经网络的数据处理系统上在硬件中实施RNN通常不可能在硬件诸如上述加速器上实施,因为此类系统需要可由完整静态图形表示的神经网络。为了准许在适于执行非循环神经网络的硬件上执行RNN,发明人提出在预先确定的数量的时间步骤上展开RNN,以便产生具有固定的状态输入集合和固定的状态输出集合的静态神经网络。该方法将RNN的动态图形变换为非循环神经网络的静态图形,该静态图形适合根据常规实施和优化算法在加速器处实施。通过迭代静态展开的RNN,并且将展开的RNN的第一迭代的状态输出作为状态输入提供给展开的RNN的下一次迭代,可以在无限长度的输入序列上执行RNN。
静态神经网络为前馈神经网络,可以由静态图形表示。动态神经网络包括一个或多个反馈环,并且不能由静态图形表示。给定步骤处的动态神经网络的输出取决于在神经网络的一个或多个先前步骤执行的处理。因此,包含一个或多个反馈环的计算图形或神经网络可被称为动态图形或神经网络。相反,不包括反馈环的计算图形或神经网络可被称为静态或前馈图形或神经网络。本文所述的导数神经网络为前馈神经网络。
例如,图4示出图1的三元胞RNN在三个时间步骤t、t+1和t+2上展开,以便形成展开的RNN 400。从图4可以看出,第一RNN元胞102在时间步骤t的状态输出h1(t)在下一个时间步骤t+1作为状态输入提供给该第一RNN元胞102的相同实例。并且时间步骤t+1的第一RNN元胞的状态输出h1(t+1)在下一个时间步骤t+2作为状态输入提供给第一RNN元胞102的相同实例。类似地,第二RNN元胞103和第三RNN元胞104中的每一者的状态输出在下一个时间步骤作为状态输入提供给第二RNN元胞和第三RNN元胞的相同实例。展开的RNN生成相对于输入序列x(t)中的每一个输入的输出o(t)。
三个RNN元胞102至104在展开的RNN 400的最后的时间步骤t+2的三个状态输出hi(t+2)被提供为展开的RNN的状态输出404。展开的RNN 400具有三个状态输入402,这三个状态输入是在第一时间步骤t对三个RNN元胞102至104的状态输入hi(t-1)。通过将展开的RNN400的第一实例的状态输出404作为展开的RNN 400的下一个实例的状态输入402,由展开的RNN执行的处理可以在无限长的输入序列x(t)上迭代。
由于所有的第一RNN元胞相同,因此所有的第二RNN元胞也相同,并且所有的第三RNN元胞也相同,但应当理解,在数学上,图4中所示的展开的RNN 400等同于在三个输入的序列上运算图1中所示的RNN。一般来讲,RNN可以在任何的多个时间步骤上展开。图4中所示的示例示出RNN仅在三个步骤上展开,但在实际系统中,时间步骤的数量通常更大,例如,RNN可以在16个时间步骤上展开。
图5中示出了展开的RNN 400的迭代,其中将展开的RNN的第一实例502的状态输出(网络状态输出)作为状态输入(网络状态输入)提供给展开的RNN的第二实例504。迭代的展开的RNN对输入序列506进行运算,其中展开的RNN的每个实例对来自输入序列的三个输入进行运算,例如,第一实例可以对输入x(t)至x(t+2)进行运算,并且第二实例可以对输入x(t+3)至x(t+5)进行运算。展开的RNN的每个实例所运行的输入集合可被称为输入序列的“部分”,因此,展开的RNN的每个迭代在输入序列的对应分区上运算,每个分区包括预先确定的数量的时序。
迭代展开的RNN生成输出序列508。为简单起见,在图5中,通过简单的箭头示意性地示出连续时间步骤处RNN元胞的实例之间的状态值的传递,但应当理解,例如在第二元胞实例510在时间步骤t+1处理输入时生成的状态对于第二元胞实例512在时间步骤t+2处理输入时不可用,直到在第二元胞实例510处的相关处理完成为止。
现在将参考图3的数据处理系统描述RNN在硬件中的实施。一般来讲,本文所述的原理可应用于在能够执行神经网络的张量运算的任何加速器处实施RNN。例如,加速器可以是图形处理单元(GPU)、张量加速器、数字信号处理器(DSP)或神经网络加速器(NNA)。加速器302可能无法独立执行,并且可能需要(例如,通过控制逻辑324)管理和配置以便执行代码。
为了在加速器302上实施RNN 338,变换单元326被配置为在预先确定的时间步数(输入序列的分区)上执行RNN的展开,以便以相对于图4和图5所述的方式生成展开的RNN。与其尝试将加速器302配置为执行需要加速器实施RNN的动态图形的循环形式的RNN,变换单元提供展开的RNN以供在加速器302处实施。由于展开的RNN可以由静态图形表示,因此可以在加速器处实施,否则无法在硬件中执行RNN。因此,相同的加速器可以用于实施循环或非循环神经网络,从而扩展其效用。本文所述的方法包括在加速器处执行展开的RNN,以便执行原始定义的RNN。
控制逻辑324被配置为在加速器处实施神经网络。控制逻辑将加速器的处理元件314配置为例如通过设置适当的加速器参数、在存储器304和片上存储器328处定义适当的数据结构以及将对这些数据结构的引用连同定义待执行的张量运算的指令来执行神经网络的张量运算。控制逻辑可以(例如,经由片上存储器328)使张量运算所需的权重被读取到系数缓冲器330中,并且将输入提供给输入缓冲器306。通常必须在加速器处执行大量的硬件操作,以便执行神经网络的每个张量运算。这是因为输入张量和权重张量通常非常大。一般来讲,处理元件314将花费一个以上的硬件遍次来生成完整的输出用于运算。控制逻辑可被配置为将权重和输入数据的提供同步到加速器的处理元件,使得在许多遍次中,每次运算的输出在累积缓冲器312处累积。
使用控制逻辑来配置和管理加速器处的神经网络的处理在本领域中是已知的,并且合适的控制逻辑通常设置有用于实施神经网络的加速器。控制逻辑324可包括以下各项中的一种或多种:在数据处理系统300(例如,CPU)的处理器处执行的软件(例如,驱动程序);(例如,在加速器301自身处的)固件;专用处理器,诸如可以在位于加速器302处或耦合到该加速器的片上系统(SoC)中实施。在一些示例中,控制逻辑可包括在数据处理系统的通用处理器处运行的驱动程序和在加速器302的SoC处运行的固件。通常,加速器将包括配置由加速器执行的运算的方面的设备上的寄存器,并且控制逻辑将设置这些寄存器,以便适当地配置加速器以实施给定的神经网络。
数据处理系统还包括变换单元326,以将RNN变换为静态神经网络以供在加速器处实施。在一些示例中,可在控制逻辑处提供变换单元326,但其他布置也是可能的,例如,变换单元可以是在数据处理系统处的软件、硬件或固件中体现的单独的逻辑部件。在一些示例中,变换单元为软件,该软件被配置为在RNN被提交给控制逻辑以在加速器处的硬件中实施之前处理该RNN。
现在将参考图8中所示的流程图800来描述变换单元326的运算,该流程图示出了在硬件中实施RNN的方法。在801处,在变换单元处接收将在硬件中实施的RNN338的表示。RNN表示可以任何合适的方式来表示,诸如数学表示,或变换单元被配置为运算的RNN的任何其他表示。针对神经网络的高级定义存在若干标准,其中的任一个可以作为算法的合适输入。深度学习框架API趋于接近纯数学定义,并且有一些跨框架“标准”在类似的级别上起作用(例如,ONNX)。准备好在特定加速器处执行的代码通常将更靠近硬件并且包括特定于该硬件的特征。还存在广泛使用的中间表示诸如中继器,中继器通常用于深度神经网络(DNN)编译器中。
变换单元被配置为通过预先确定的步骤展开802RNN。可以使用本领域中已知的用于展开(有时称为铺展)RNN的各种方法中的任一种方法。例如,在Ian Goodfellow、YoshuaBengio和Aaron Courville的《深度学习》(麻省理工学院出版社,2016年)的第10章(特别是参见10.1)中描述了展开RNN的数学方法,该文献全文以引用方式并入本文。
根据加速器的特定特性来选择预先确定数量的步骤是有利的,以便优化展开的RNN在加速器上的执行,同时保持可接受的延迟。例如,在加速器处的硬件中实施的静态展开的RNN的实例通常将需要分区的所有输入(即,数量等于由展开的RNN处理的时间步骤的数量的输入)在该实例的执行开始之前可用。因此,虽然增加预先确定的步骤数量通常将提高执行效率,但这还将具有增加RNN的延迟的效果。这在许多应用中非常明显,特别是在那些执行实时处理的应用诸如语音识别应用中。
变换单元326使RNN在预先确定的数量的步骤中展开以便导出803静态神经网络,该静态神经网络表示在数学上等同于所接收的RNN的表示的完全展开的RNN的一部分。对导数神经网络的第一时间步骤的状态输入作为导数神经网络本身的状态输入提供,并且来自导数神经网络的最后的时间步骤的状态输出作为来自导数神经网络本身的状态输出提供。这使导数神经网络能够以图5中所示的方式迭代,其中来自导数神经网络的第一实例的状态输出被提供为导数神经网络的下一个实例的状态输入。
控制逻辑326被配置为在加速器302处的硬件中实施804导数神经网络。如上所述,这可以根据在加速器上实施神经网络的常规方法来执行,例如通过使用用于加速器的驱动程序和在加速器处执行的固件。
数据处理系统还包括迭代逻辑342,该迭代逻辑被配置为将导数神经网络迭代地应用于输入序列805,并且使来自导数神经网络的每个实例的状态输出(例如,图4中的404)作为对导数神经网络的下一个实例的状态输入(例如,图4中的402)。迭代逻辑可以通过在每次在加速器处实施的导数神经网络的当前实例完成其处理时向控制逻辑提供相同的导数神经网络以在加速器处实施来在加速器302处实施导数神经网络的每个实例。当然,导数神经网络的连续实例将对来自RNN将运算的输入序列的连续输入进行运算。
可以任何合适方式在导数神经网络的实例之间传递状态张量。例如,迭代逻辑342可以使状态写入片上存储器328,以便保持导数神经网络的迭代实例之间的状态张量。典型地,在加速器处执行的导数神经网络的每个新实例上,加速器的缓冲器的内容将被重写。状态被配置为在导数神经网络的实例之间维持,例如通过将状态写入加速器可访问的受保护的数据存储库,诸如片上存储器328。在其他示例中,状态可被写出到存储器304,并且当在加速器处初始化导数神经网络的新实例时回读。
通过在被接收用于在加速器处进行处理的输入序列上迭代导数神经网络,数据处理系统300可被配置为通过对无限长度的输入序列以图5所示的方式重复应用加速器处的静态导数神经网络来在硬件中实现完整RNN 338的运算。特别地,通过将RNN重新转换为用于对输入序列的固定长度的分区进行运算的静态导数神经网络,本文所述的方法使得能够在不能执行以动态图形表示的RNN的硬件处实施RNN。
因果/非因果的分离
用于执行神经网络运算的硬件诸如神经网络加速器(NNA),通常被优化以并行执行大量的张量计算。硬件加速器的并行性质在运行卷积神经网络时特别有用,每个卷积层可以并行处理,例如跨越多个处理元件314并行处理。然而,当引入循环时,并且在给定的时间步骤在神经网络的元胞处执行的计算取决于在神经网络的元胞处相对于先前的时间步骤执行的计算,现有方法可导致性能不佳。这是若干因素导致的结果,包括用于执行神经网络的加速器典型的并行架构利用率低、现有优化算法不太适合在硬件中执行RNN,以及由于在每个时间步骤读取权重和输入数据到加速器中的效率低下而消耗的高存储器带宽。
发明人已经认识到,可通过将RNN元胞(例如,在图4或5中所示的RNN元胞中的一个或多个处)中执行的运算分成一组非因果运算和一组因果运算来实现对在硬件中实施的RNN的性能的实质性改进。RNN元胞的因果运算是根据作为该元胞的状态输入而接收的状态来执行的运算。RNN元胞的非因果运算是可以在不依赖于作为该元胞的状态输入而接收的状态的情况下执行的运算,即,一旦该元胞的输入数据已知就可以执行的元胞运算。因此,一旦相应的输入数据可用于这些运算,就可以同时执行非因果运算。由于非因果部分不需要遵守严格的执行顺序,因此可能并行执行多个时间步骤以更有效地使用硬件,从而带来更高的利用率和更快的推断时间等益处。特别地,在包括多个处理实例314的硬件诸如加速器302中,与非因果计算的分离使得多个时间步骤能够跨处理实例并行执行。
应当理解,当如上所述对运算进行分离时,因果运算可包括一个或多个非因果计算,例如,因为将这些非因果计算与因果运算一起执行是有利的。然而,该组非因果运算不能包括任何因果计算,因为非因果运算将在硬件中并行执行。因此,应当理解,本文对因果运算的提及是指一组运算,其中包括RNN元胞的所有因果运算,但还可以包括RNN元胞的一些非因果运算;并且本文对非因果运算的提及是指一组运算,其中包括RNN元胞的至少一些非因果运算以供并行执行,并且没有RNN元胞的因果运算。
变换单元326被配置为将非因果运算与因果运算进行分离,并且形成静态神经网络以用于在加速器302处实施,该静态神经网络表示展开的RNN,但其中分区的非因果运算被分组在一起以供并行执行。现在将描述如何将RNN元胞的因果运算与非因果运算进行分离的示例。针对RNN的每个元胞可以采用相同的方法。应当理解,根据RNN的特定运算和硬件中的可用并行处理元件,可以并行地执行非因果运算,而不是通过卷积来执行。
返回图2将观察到,权重218与串接输入212和状态210的组合作为矩阵乘法204执行。图2示出了RNN元胞的一个简单示例,但更复杂的RNN元胞诸如LSTM或GRU元胞也可以表示为对一组输入和状态张量的一个或多个矩阵运算,以及各种激活函数和其他函数。其他类型的元胞可以包括其他类型的数学运算,所述其他类型的数学运算也可以根据本文阐述的原理被分成因果部分和非因果部分。可以使用不同技术来对其他类型的运算进行分离。例如,在串接后进行逐元素相乘可重构为在串接之后进行两次逐元素相乘。在一些示例中,可根据本文所述的原理进行处理的RNN可被定义为使得因果运算和非因果运算(例如,在不同的矩阵乘法中)单独执行,但先前的方法不会加速非因果运算的执行。
在元胞包括一个或多个矩阵乘法的示例中,张量x和W的每个矩阵乘法y=Wx(其″
中x和W为矩阵)可以等效地表示为两个矩阵乘法的总和y=Wx=W x+W″x″,其中W’和W”为W元素的子集,x’和x”为x元素的子集。因此,图2中所示的RNN元胞可以等效地表达为图6中所示的RNN元胞600,其中元胞计算的因果部分和非因果部分作为单独的矩阵乘法612和614执行,其中的每一个矩阵乘法接收图2中所示的权重W的对应的子集。假设两者都使用激活函数tanh,则RNN元胞200和600的等同物可以使用图2和图6的符号书写如下:
其中顶线表示RNN元胞200并且底线表示RNN元胞600。Wx 610是与输入x(t)组合(例如,用于处理)的权重W的元素,并且Wh 608是与状态h(t-1)组合(例如,用于处理)的权重W的元素。在矩阵乘法612处执行的非因果计算的结果在加法运算606处与在矩阵乘法614处执行的因果计算的结果进行组合。例如,加法运算606可以包括执行非因果计算的结果与因果计算的结果的逐元素相加运算。然后,因果计算和非因果计算的总和受到激活函数206的影响,以生成输出o(t)214和输出状态h(t)216。
通过对RNN元胞的因果部分和非因果部分进行分离,可以单独优化包括一个或多个此类元胞的RNN的硬件实施中的因果运算和非因果运算的执行。特别地,由于非因果运算不需要等待在前一个时间步骤生成状态值,因此有可能将要对多个输入执行的非因果运算分组在一起,并且在多个处理元件处并行执行这些运算。这使得能够利用适于在硬件中实施神经网络的加速器的并行处理能力。特别地,用于实施神经网络的加速器通常包括适于有效地执行卷积运算的并行处理元件,例如,加速器302的卷积引擎308。在没有非因果计算的并行执行的情况下,将顺序地执行神经网络的元胞的组成运算,通常仅充分利用单个硬件实例(例如,单个处理元件314),从而导致较低的利用和较慢的推断。
图7是图6的RNN元胞中的三个元胞的实现方式的示意图,其中在每个时间步骤分别执行因果运算和非因果运算,其中针对这三个时间步骤并行执行非因果运算。针对展开的RNN的每个元胞可以采用相同的方法。以此方式,上文所述的导数神经网络的一些或全部非因果运算可针对导数神经网络的实例对输入序列的分区并行执行。
变换单元326被配置为将非因果运算与因果运算分离,以便导出静态神经网络以在加速器302处实施。在图8的流程图中通过因果/非因果分离分支对此进行说明。在步骤802处,根据上述原理,变换单元326通过预先确定的数量的步骤展开RNN。在806处,变换单元将至少一些非因果运算与因果运算分开。变换单元对的展开RNN的至少一些非因果运算进行分组807,以便使得能够在加速器302处并行执行这些运算。变换单元可相对于展开的RNN的非因果运算形成一组或多组非因果运算,即,RNN的给定单元的输入可被组合在一起,以便对这些输入并行执行一组非因果运算。
根据上文相对于步骤803描述的原理,变换单元形成静态导数神经网络808,但是在神经网络的一个或多个元胞处的非因果运算被分组在一起以用于并行执行。导数神经网络由控制逻辑324以上述方式在处理器302处实施804。以此方式,在加速器处运行的导数神经网络处对输入的每个分区进行处理包括在一个或多个并行运算中执行导数神经网络的一个或多个元胞的非因果运算。
一般来讲,可以在展开步骤802之前或之后执行步骤806处的因果/非因果分离。例如,在展开之前,可以用其中对非因果运算和因果运算进行分离的分解元胞替换RNN的适当元胞。
并行执行非因果运算的一种方法是将所有矩阵运算转换成卷积,以在加速器302的并行卷积引擎308处执行。由于卷积引擎是针对执行卷积而优化的,因此这可基本上改进在硬件中运行导数神经网络的性能,并且因此改进由导数神经网络表示的RNN的性能。在具有被优化为并行执行除卷积以外的计算的处理元件的数据处理系统中,可以将导数神经网络的元胞的运算重新转换为优化处理元件的计算。
图7提供了关于如何在加速器302的卷积引擎308处并行执行非因果运算的说明。在图7中,输入张量702的分区的所有输入张量在非因果元胞710处串接以形成张量X。例如,输入张量xt包括512个输入值xt∈R1×512(例如,包括表示语音的音频样本序列的输入音频流的音频样本)和权重张量Wx∈R512×1024。输入张量和权重张量两者都相加有附加的空间维度(例如,高度和宽度),以便成为x′t∈R1×1×1×512和权重张量W′x∈R1×1×512×1024。在该示例中,W'的维度分别表示内核高度、内核宽度、输入信道的数量和输出信道的数量,并且X'的维度分别表示批处理大小、数据高度、数据宽度和输入信道的数量。然后分区的所有可用输入可以在串接单元712处在宽度维度上串接以获得张量X′∈R1×1×T×512,其中T表示分区中可用时间步骤的总数。在本发明的示例中,T=3,因为导数神经网络在三个时间步骤的分区上运算(即,在三个时间步骤上展开的RNN的导数)。
可以根据硬件加速器的特定特性来选择执行串接的维度。例如,一些硬件加速器的卷积引擎可被配置为使得在特定维度(例如,“宽度”或“高度”)上串接是有利的,以便优化对串接结果执行的卷积运算的性能。
将附加的空间维度相加到输入张量将改变它们的形状,但不改变下面的值,因为新维度的大小为‘1’。改变张量形状可能是有利的,因为神经网络中的卷积运算通常期望数据作为4D张量。举一个简单的例子,一个维度为(1,3)的2D张量[[0,9,4]]可以被重新成形为维度为(1,1,1,3)的4D,并且张量将被表示为[[[[0,9,4]]]]。
张量X′然后可以在卷积单元714处与W′x进行卷积以获得中间输出用于非因果计算Y′=W′x*X′,其中*表示权重W′x和分区X′的输入之间的卷积运算,高度维度和宽度维度的步幅均为1。卷积的输出可被书写为Y′∈R1×1×T×1024。卷积运算在数学上等同于针对每个时间步骤分别进行xt与Wx的矩阵乘法,但是将这些计算作为卷积执行能够并行地利用加速器302处的多个卷积引擎308。这减小了存储器带宽,因为权重可以在卷积开始时被复制到系数缓冲器中,而不是在每个单独的时间步骤处的计算之前,并且延迟是因为在加速器处的导数神经网络的性能显著提高。对于被配置为在音频样本的时间序列中执行语音识别的更典型的RNN,其中每个分区包括16个时间步骤,并且RNN包括五个RNN元胞的堆叠加上两个预处理卷积层和全连接层,该方法将延迟减少了四分之一。
硬件加速器通常可以在卷积运算中使用一组通用权重(滤波器)来处理并行输入数据流。这在处理卷积层时特别有用,卷积层例如处理图像,其中相同的滤波器作为滑动窗口应用于整个图像。通过在空间上对输入数据进行分组,可以按与卷积运算的输入的特征图类似的方式处理输入数据,因此使得能够在硬件加速器处并行处理输入数据。在其他示例中,非因果运算可以作为除卷积运算之外的运算并行执行。
在多个处理元件处并行地进行非因果计算以三种方式提高性能。首先,这样提高了硬件利用率,因为计算可以在与处理元件一样多的并行流上运行。其次,减少存储器带宽消耗,因为执行并行计算的多个处理元件可以(例如,在系数缓冲器330处)使用相同的权重系数,而不是需要从存储器中读取相对于分区的每个输入的相同权重系数,以便对该输入执行非因果计算。最小化带宽还具有减少从存储器读取/写入所花费的周期数的优点,这改善了模型的整体延迟。另外,该方法减少了因果计算序列中所需的处理,因为已经将非因果计算分离出去,而不是与因果计算一起执行。
在分离单元716处,中间输出Y′被分成三个时间步骤中的每一个时间步骤的输出y其中y∈R1×1024。每个y作为输入704提供给相应的因果元胞604。因果元胞对二维张量分量进行运算,而不是对提供给卷积运算的4D张量进行运算。
由于在每个时间步骤执行的因果计算需要在先前的时间步骤生成的状态,因此无法并行执行因果计算。为分区的每个时间步骤提供了因果元胞604,因此在图7中存在三个因果元胞。每个因果元胞接收来自非因果元胞710的对应的张量输出y和由因果元胞相对于前一个时间步骤生成的状态706作为输入。每个因果元胞604可以具有与图6中所示的因果元胞604相同的功能结构,其中每个因果元胞例如通过矩阵乘法614,在所接收的状态706上对相同的一组权重608进行运算。例如,通过加法运算606,将权重608对所接收的状态706的运算结果与来自非因果元胞的相应的输出进行组合。然后,因果计算和非因果计算的组合经过激活函数206运算以提供输出708,在本发明的示例中,该输出也是下一个因果元胞的状态。如上文所述,在其他实施方案中,可相对于时间步骤生成可以或可以不包括相对于该时间步骤的输出的一个或多个状态值(例如,张量或单个值)。
返回图3中所示的数据处理系统,为了分离出导数神经网络的非因果计算以便能够并行执行这些计算,变换单元可被配置为处理导数神经网络的每个元胞,以便将那些不依赖于状态的计算与先前的元胞计算分开,并且使非因果计算在加速器的处理元件处并行执行。例如,在图3中,变换单元可被配置为从RNN表示338形成导数神经网络,然后进一步处理导数神经网络,以便以本文所述的方式将因果计算和非因果计算进行分离,在加速器302的处理元件314处并行执行非因果计算。
控制逻辑324和/或非因果710和/或因果604元胞本身可被配置为将输入和权重转换为适合并行处理的形式以及从适合并行处理的形式转换为不适合并行处理的形式,例如,相对于图7,非因果元胞710(例如,其卷积单元714)可以将附加的空间维度相加到输入和权重中,以便将这些张量转换为适合卷积的形式。在一些示例中,不需要将附加的空间维度相加到输入和权重中,并且可以在计算期间进行推断。
当通过在预先确定的数量的时间步骤上展开RNN并且以本文所述的方式分离因果计算和非因果计算而从RNN表示导出神经网络时,将预先确定的数量的步骤选择为加速器处的处理元件的数量的整数倍是更有利的。这有助于在执行导数神经网络期间最大化处理元件的使用,因为并行的非因果计算可以跨系统的处理元件均匀地分散,从而将性能最大化。
图9示出了可以在其中实施本文所述的数据处理系统的计算机系统。数据处理系统包括CPU 902、加速器302(在附图中标记为神经网络加速器,NNA)、系统存储器304和其他设备914,诸如显示器916、扬声器918和相机922。计算机系统的部件可经由数据总线920彼此通信。可以在CPU 902处支持控制逻辑324和/或迭代逻辑342和/或变换单元326中的至少一些。
数字格式选择
图1中所示的RNN的示例定义了将在每个时间步骤t对输入序列的元素x(t)和状态变量h(t-1)执行的运算,以生成状态变量h(t)和输出o(t)。由这些运算定义的函数随时间推移是固定的:对于输入和状态变量的相同值,无论时间指数如何,输出都将相同。该期望的特性可被称为时间不变性。出于效率的原因,可如下所述针对网络中的值定义块可配置数字格式。这些数字格式应该随时间推移而相同以保持时间不变性,并且在选择数字格式时需要考虑这一点,使得所选择的格式适用于所有时间步骤。
RNN与前馈(静态)神经网络的不同之处在于,在输入序列(例如,时间序列)上重复相同的图形。此外,RNN元胞接收在RNN的先前步骤处生成的状态张量,该状态张量在设计时是未知的。为了确保网络的行为随时间推移一致,在给定相同输入的情况下,导数神经网络的展开的RNN中的每个步骤应该以相同方式操作,而不管展开的RNN的长度(即,展开RNN的步骤的数量)如何,或者RNN的展开步骤的序列中的步骤的位置如何。网络的行为是否为时不变部分地由RNN所执行的运算中涉及的数据值的数字格式决定。
RNN的值可以包括网络的任何张量中的元素,例如,输入值(例如,作为表示时间序列的输入张量的元素,或RNN的元胞堆叠中的较低元胞的输出);权重值(例如,作为表示网络参数的权重张量的元素);状态值(例如,作为在RNN的前一个时间步骤生成的状态张量的元素);以及表示网络运算之间的值的中间张量。RNN的值在本文中可被称为网络值。在RNN的硬件实施中,需要针对网络的所有值选择合适的数字格式。可以预定义一些值的数字格式或数字格式的至少一些参数。网络的一些或所有值的数字格式可以根据本文所述的数字格式选择方法来确定。
RNN的每个迭代包括网络的每一个值的实例(例如,RNN的张量的元素)。因此,将RNN迭代N次来生成其网络值的N个实例。为了确保时间不变性,网络中的值的所有实例应该具有相同的数字格式。现在将描述选择数字格式的一种方法,以在硬件中实施RNN时使用,特别是在根据上述原理在硬件(例如,在图3中所示的数据处理系统)中实施RNN时使用。
如本领域的技术人员所知,对于处理一组值的硬件,这些值必须以数字格式表示。两种类型的数字格式是定点数格式和浮点数格式。如本领域的技术人员所知,定点数格式在基数点(例如,小数点或二进制点)之后具有固定数量的数位。相反,浮点数格式没有固定的基数点(即,可以是“浮点型”)。换句话讲,基数点可放置在表示中的任何位置。虽然以浮点数格式表示输入数据值和权重可允许产生更准确或更精确的输出数据,但在硬件中以浮点数格式处理数字很复杂,与以定点数格式处理值的硬件相比,这往往会增加芯片的面积和硬件的复杂性。因此,硬件实施可被配置为以定点数格式处理输入数据值和权重,以减少表示网络的值所需的位数,从而减少硬件实施的硅面积、功耗和存储器带宽。
数字格式类型定义形成这种类型的数字格式的参数以及参数的解释方式。例如,一种示例性数字格式类型可以指定数字或值由b位尾数m和指数exp表示,并且该数字等于m*2exp。如下文更详细地描述的,一些数字格式类型可以具有可配置参数,这些可配置参数也可以被称为定量参数,可以在该类型的数字格式之间变化。例如,在上述示例性数字格式中,位宽b和指数exp可以是可配置的。因此,该类型的第一数字格式可以使用位宽b4和指数exp6,并且该类型的第二不同数字格式可以使用位宽b8和指数exp-3。
量化的RNN(即,其中网络值的至少一部分由非浮点数格式表示的RNN的型式)的准确度可以通过响应于输入数据而将此类RNN的输出与基线或目标输出进行比较来确定。基线或目标输出可以是响应于相同的输入数据或用于输入数据的地面实况(ground truth)输出的RNN的未量化型式(即,其中所有网络值由浮点数格式表示的RNN的型式,在本文中可称为RNN的浮点型式或浮点RNN)的输出。来自基线或目标输出的定量RNN的输出越多,定量RNN的准确度就越低。量化的RNN的大小可以由用于表示RNN的网络值的位的数量来确定。因此,用于表示RNN的网络值的数字格式的位深度越低,RNN越小。
虽然可以使用单个数字格式来表示RNN的所有网络值(例如,输入数据值、权重、偏差和输出数据值),但这通常不会产生小且准确的RNN。这是因为RNN的不同运算往往对具有不同范围的值进行运算,并生成具有不同范围的值。例如,一个运算可以具有介于0和6之间的输入数据值,而另一个运算可以具有介于0和500之间的输入数据值。因此,使用单个数字格式可能不允许有效或准确地表示任一组输入数据值。因此,可以将RNN的网络值分成两个或更多个网络值的集合,并且可以为每个集合选择数字格式。优选地,每一组网络值包括相关或类似的网络值。
每一组网络值可以是用于运算的特定类型的网络值的全部或一部分。例如,每组网络值可以是运算的输入数据值的全部或一部分;运算的权重的全部或一部分;运算的偏差的全部或一部分;或运算的输出数据值的全部或一部分。一组网络值是否针对元胞包括特定类型的网络值的全部或仅一部分可取决于例如实施RNN的硬件和RNN的应用,例如,在卷积权重张量中基于每个滤波器标识数字格式在一些情况下可以提高输出准确度。例如,可用于实施RNN的某些硬件在每次运算中只能支持每一种网络值类型的单个数字格式,而其他可用于实施RNN的硬件在每次运算中可支持每一种网络值类型的多个数字格式。
用于实施RNN的硬件诸如加速器302,可以支持网络值的一种类型的数字格式。例如,用于实施RNN的硬件可以支持其中数字由b位尾数和指数exp表示的数字格式。为了允许使用不同的数字格式表示不同的网络值集合,用于实施RNN的硬件可以使用具有一个或多个可配置参数的数字格式类型,其中参数在两个或更多个值的集合中的所有值之间共享。这些类型的数字格式在本文中可以被称为块可配置类型的数字格式或集合可配置类型的数字格式。因此,非可配置格式,诸如INT32和浮点数格式,不是块可配置类型的数字格式。示例性块可配置类型的数字格式如下所述。可以执行本文所述的方法以标识针对RNN的两个或更多个值的适当的可块配置类型的数字格式。
可以用来表示RNN的网络值的一种示例性块可配置类型的数字格式为Q类型格式,其指定预先确定的数量的整数位a和小数位b。因此,数字可以表示为Qa.b,这总共需要a+b+1位(包括符号位)。下面的表1中示出了示例性Q格式。Q类型格式的量化参数是整数位数a和小数位数b。
表1
Q格式 | 描述 | 示例 |
Q4.4 | 4个整数位和4个小数位 | 0110.1110<sub>2</sub> |
Q0.8 | 0整数位和8个小数位 | .01101110<sub>2</sub> |
然而,Q格式的缺点在于,用于表示数字的一些位可被认为是多余的。在一个示例中,数字范围[-0.125,0.125)将以3位的精度表示。该示例性范围和精度所需的Q格式为Q0.5。然而,如果假定值的范围是预先已知的,则该数字的前两位将永远不会用于确定以Q格式表示的值。例如,表示的前两位对最终数字没有贡献,因为它们分别表示0.5和0.25,并且因此不在所需范围之内。然而,它们用于指示第三位的位置的值(即,由于相对的位位置而导致的0.125及更高值)。因此,上述Q格式是用于神经网络的硬件实施中的效率低下的定点数格式,因为一些位可能无法传达有用信息。
可用于表示RNN的网络参数的另一个示例性块可配置类型的数字格式是一种这种类型的数字格式由固定的整数指数exp和b位尾数m定义,使得值u等于u=2expm的数字格式。在某些情况下,尾数m可以用二进制补码格式表示。然而,在其他情况下,可以使用其他经签名或未签名的整数格式。在这些情况下,指数exp和尾数位数b只需要为以该数字格式表示的两个或多个值的集合存储一次。这种类型的不同数字格式可以具有不同的尾数位长度b和/或不同的指数exp,因此这种类型的数字格式的量化参数包括尾数位长度b(在本文中还可以称为位宽度、位深度或位长度)和指数exp。
可以用于表示RNN的网络参数的另一个示例性块可配置类型的数字格式为8位不对称固定点(Q8A)类型格式。在一个示例中,这种类型的数字格式包括最小可表示数rmin、最大可表示数rmax、零点z和集合中的每个值的8位数字dQ8A,标识最小可表示数和最大可表示数之间的线性内插因子。在其他情况下,可以使用这种类型的格式的变体,其中用于存储内插因子dQbA的位数是可变的(例如,用于存储内插因子的位数b可以是多个可能的整数中的一个整数)。在该示例中,Q8A类型格式或Q8A类型格式的变体可以近似于浮点值d浮点型,如等式(1)所示,其中b为量化表示所使用的位数(即,针对Q8A格式为8),并且z为总是准确映射回0的量化零点。该示例性类型的数字格式的量化参数包括最大可表示数或值rmax、最小可表示数或值rmin、量化零点z,以及可选地,尾数位长度b(即,当位长度不固定为8时)。
在另一个示例中,Q8A类型格式包括始终精确映射到0.f的零点z、比例因子scale和集合中每个值的8位数字dQ8A。在该示例中,这种类型的数字格式近似于如等式(2)中所示的浮点值d浮点型。类似于第一示例性Q8A类型格式,在其他情况下,整数或尾数分量的位数可以是可变的。该示例性类型的数字格式的量化参数包括零点z、比例scale以及可选地,尾数位长度b。
d浮点型=(dQ8A-z)*scale (4)
确定特定的块可配置类型的数字格式可描述为标识该类型的数字格式的一个或多个量化参数。例如,确定由b位尾数和指数exp定义的数字格式类型的数字格式可以包括标识尾数和/或指数exp的位宽b。可针对给定的网络值预定义特定类型的块可配置数字格式。
为了减小RNN的硬件实施的大小并且提高效率,硬件实施可以被配置为以块可配置数字格式处理数据值。一般来讲,用于表示RNN的网络值(例如,其输入数据值、权重和输出数据值)的位越少,RNN在硬件中实施的效率越高。然而,通常用于表示RNN的网络值的位越少,RNN就变得越不准确。因此,期望标识用于表示RNN的网络值的平衡用于表示网络值的位的数量和RNN的准确度的数字格式。此外,由于输入、权重和状态数据值的范围可以变化,当用于表示数据值的块可配置数字格式可以针对每组值(例如,网络的每个张量)变化时,硬件实施能够更有效地处理RNN。例如,通过使用由指数2和尾数位长度6定义的块可配置数字格式来表示网络中的一组值,以及使用由指数4和尾数位长度4定义的块可配置数字格式来表示网络中的另一组值,硬件实施可能能够更有效和/或更准确地实施RNN。
现在将描述用于确定RNN的两个或更多个值的集合的块可配置类型的数格式的方法。RNN的两个或更多个值的集合可以包括一个或多个张量的一部分或全部。例如,本文的方法可用于确定张量的一些或所有值的数字格式,其中针对两个或多个值的不同集合(例如,不同的张量或张量的部分)标识不同的数字格式。不同的数字格式选择算法可用于标识两个或更多个值的不同集合的数字格式。
本文所述的方法可以与任何合适的数字格式选择算法一起使用,包括,例如:反向传播格式选择、贪婪行搜索和端到端格式选择、正交搜索格式选择、最大范围(或“MinMax”)格式选择、异常值拒绝格式选择、基于误差的启发式格式选择(例如,基于带有或不带有离群值加权的平方误差的总和)、加权离群值格式选择,或者梯度加权格式选择算法。特别地,本文所述的方法可以与公布号为2568083、2568084、2568081或英国专利申请号2009432.2的英国专利申请中公开的特定格式的选择算法一起使用,这些专利申请中的每一个专利申请的全文以引用方式并入本文。
为了选择RNN的网络值的数字格式,对样本输入数据执行RNN,以便为两个或更多个值中的每个实例提供数字格式选择算法的统计数据。此类统计数据可以是网络值、网络值的平均值/变量、最小/最大网络值、汇总网络值的直方图、相对于网络输出计算的梯度或基于网络输出的误差度量,以及格式选择算法所需的由神经网络或监视神经网络的逻辑(例如,格式选择单元344)使用或生成的任何其他数据。在一些示例中,使用网络值的浮点数格式来执行RNN。例如,RNN可以在软件中执行,对网络中的输入数据、权重、状态和输出数据值使用浮点数格式。32位或64位浮点数格式表现良好,因为数字格式通常应该尽可能接近无损以尽可能获得最佳结果,但可能使用具有大范围/大量的位的块可配置数字格式。
RNN可以任何合适的方式来执行,以便执行数字格式选择。例如,RNN可以在软件中执行(例如,使用深度学习框架,例如TensorFlow,其中软件支持执行动态图形,或作为静态图形执行,所述静态图形表示在序列中针对每个时间步骤运行的单个时间步骤,其中基于在每次运行时收集的统计数据来选择网络值的数字格式)或在硬件中(例如,在加速器诸如加速器302处)执行。
在一些示例中,RNN可以上文相对于图4和图5所述的方式展开以形成测试神经网络,该测试神经网络用于为其变量和参数选择适当的数字格式。当展开RNN时,相同的张量将作为该张量的实例出现在每个时间步骤处。为了实现时间不变性并且使基于展开的RNN的导数神经网络等同于原始RNN,相同的两个或多个值的所有实例都需要在展开的RNN上具有相同的格式。例如,在图4中所示的展开图形中,在块可配置数字格式对应于张量的情况下,第一RNN元胞102的所有输入张量x(t)具有相同的数字格式,并且所有状态张量h1(t)具有相同的数字格式。不同的状态张量(例如,h1和h2)可以具有不同的数字格式,并且不同的RNN元胞(例如,RNN元胞102和103)的输入可具有不同的数字格式。
针对RNN的两个或更多个值执行数字格式选择的方法示出于图11。两个或更多个值可包括RNN的一个或多个张量的一些或全部元素。该方法可在接收用于在硬件中实施RNN1101时执行,例如在图3中的数据处理系统的加速器302处。该方法可在根据本文所述的原理或以其他方式在硬件中实施RNN之前在设计阶段1108中执行。图11中标识的设计阶段1108的格式选择可在图3中所示的格式选择单元344的控制下执行。在一些示例中,格式选择单元344可以与变换单元326是同一个单元或者相同。
在第一步骤1102处,RNN作为测试神经网络在硬件或软件中实施,以便使得能够收集统计数据用于数字格式选择算法。RNN可以任何合适的方式实施为测试神经网络。RNN在多个时间步骤上对样本输入数据执行,以便捕获数字格式选择算法所需的统计数据。通常只需执行少量的时间步骤就可以获得良好的性能。例如,已发现执行四个时间步骤的一些应用程序提供良好的数字格式选择。RNN可以任何功能正确的方式运行,并且输出格式选择方法所需的数据。
在一些示例中,RNN可以在软件中实施为测试神经网络,例如在CPU(例如,图9中所示的计算机系统的CPU 902)处运行的格式选择单元344处包括的软件处实施。例如,网络可以在TensorFlow或PyTorch中运行,并且可以输出两个或更多个值的所有集合的最大绝对值以供MinMax格式选择算法使用。设计阶段1108中的数字格式选择不需要在最终将在硬件中实施RNN的相同的计算系统处执行。在一些示例中,RNN在硬件中实施为测试神经网络以选择适当的数字格式,例如在数据处理系统300中的加速器302处实施。硬件(及其相关联的逻辑,诸如控制逻辑324)应该能够以足够高的精度执行网络,以避免严重的量化错误(例如,呈32位浮点)并且提供合适的统计数据。在一些示例中,RNN可以在硬件加速器302处实施,以便根据本文所述的原理选择网络值的数据格式。RNN可以在测试数量的步骤上展开,以便以上文相对于图8中的步骤803所述的方式导出测试神经网络。在一些示例中,这可以在变换单元326处执行。测试神经网络表示在数学上等同于所接收的RNN的表示的完全展开的RNN的全部或一部分。此类测试神经网络的第一时间步骤的状态输入可以作为测试神经网络本身的状态输入提供,并且来自测试神经网络的最后的时间步骤的状态输出可以作为来自测试神经网络本身的状态输出提供。这使得测试神经网络能够以图5中所示的方式迭代,其中来自测试神经网络的第一实例的状态输出被提供为测试神经网络的下一个实例的状态输入。然而,如果测试神经网络跨越足够多的时间步骤使得能够根据所使用的选择算法标识数字格式,则不需要执行测试神经网络的迭代,并且可以从测试神经网络的单个实例的应用标识可接受的数字格式。在根据本文所述原理将RNN实施为导数神经网络的示例中,测试网络的步骤的数量可以或可以不等于展开RNN以导出导数神经网络的步骤的预先确定的数量。如果展开RNN以形成测试神经网络的测试步骤的数量至少是将执行以便执行由测试神经网络表示的RNN的数字格式选择的测试步骤的数量,则是有利的。这避免了以图5中所示的方式对测试神经网络进行迭代的需要,并且通常可以通过应用测试神经网络的单个实例来标识可接受的数字格式。
在1103处初始化所实施的测试神经网络的输入状态张量。这是必要的,因为不存在测试神经网络的前一个实例供测试神经网络的第一实例可以从中接收状态张量。神经网络的初始状态张量一般与后续时间步骤的典型状态张量不同。由于测试神经网络的第一时间步骤是例外的,因此通常不能仅基于第一时间步骤来选择合适的数字格式。初始状态张量优选地是当在硬件中将RNN实施为例如上文所述的导数神经网络时使用的相同的初始状态张量。然而,同样重要的是,数字格式对于第一时间步骤和后续时间步骤都起作用。因此,在包括第一时间步骤的多个测试时间步骤上执行数字格式选择是有利的。状态张量的初始化在网络进入其稳态行为之前的前几个时间步骤中产生瞬态效应。初始化步骤1103通常将与实施步骤1102一起执行,作为测试神经网络的实施的一部分。
为了执行数字格式选择,对合适的样本输入数据执行1104实施RNN的测试神经网络,以便能够捕获合适的统计数据用于数字格式选择算法。RNN针对预先确定的数量的一个或多个时间步骤执行,以便在每个时间步骤处生成数字格式选择算法所需的统计数据。合适的样本输入数据可以包括选择为表示将在硬件中实施的RNN的典型或预期输入范围的示例性数据。在一些示例中,样本输入数据可以是来自将应用RNN的实际源的输入数据,例如,将执行语音标识的音频信号。从神经网络捕获统计数据是本领域众所周知的,并且应当理解,统计数据的特定性质将取决于神经网络的性质、其应用以及正在使用的数字格式选择算法的要求。可以任何合适的方式捕获在RNN处以及/或者与RNN相关联的逻辑处(例如,在格式选择单元344处)生成的统计数据(例如,数据值、最大值/最小值、直方图数据)。例如,在RNN在图9中的CPU 902处运行的软件中实施的情况下,统计数据可以存储在存储器304处,以供(也可以在CPU处运行的)格式选择单元344同时处理或随后处理。在一些示例中,至少一些统计数据包括在RNN处(例如,在堆叠的RNN元胞和/或RNN元胞的运算之间)生成的中间数据值。
在步骤1105处,将数字格式选择算法应用于从RNN的运算收集的统计数据。数字格式选择算法可以与RNN同时运行以及/或者随后可以对所捕获的统计数据执行。设计阶段1108的格式选择可以在格式选择单元344处执行。数字格式选择算法可以是用于标识两个或更多个网络值集合的块可配置数字格式的任何算法。算法的特定选择通常由以下各项中的一种或多种决定:应用RNN的应用程序;张量所运算的两个或多个值所属的张量的性质;以及运行算法所需的时间和/或计算资源量(更复杂的算法可能提供更好的结果,但可能需要更多倍的时间来运行)。
在本发明的示例中,数字格式选自块可配置类型的数字格式,指数的位数可以是固定的(例如,经签名的6个位)。因此,指数长度不必与每个数据值一起存储,而是可以针对数据值的群组来定义,例如,针对RNN的每个张量、针对每个张量的两个或更多个元素的集合、针对每种类型的张量(例如,针对输入和/或权重和/或输出的不同指数长度)、针对张量群组,或者针对RNN的所有张量,可以预定义指数长度。与存储网络值的实际尾数所需的位数相比,存储指数和尾数长度所需的数据量(例如,存储数字格式所需的位数)可以是固定的并且可以忽略不计。因此,尾数位数是表示网络值的数字格式所需的位数的主要决定因素。
数字格式选择算法可以确定块可配置类型的数字格式的尾数的长度(例如,以位为单位)。例如,RNN用来表示数据值的每个块可配置数字格式都包括指数和尾数位长度,可以减少归因于量化误差最低部分的元胞所使用的块可配置数字格式的尾数位长度,或者可以增加归因于量化误差的最高部分的元胞所使用的块可配置数字格式的尾数位长度。数据值的量化误差是原始浮点数格式的数据值(即,出于数字格式选择的目的用于的RNN实施)与块可配置数格式的数据值(即,建议用于RNN的硬件实施)之间的差。
已开发出用于标识表示RNN的网络值的数字格式的若干方法。一种用于选择用于表示RNN的一组网络参数的数字格式的简单方法(本文中可称为全范围法或最小值/最大值或MinMax方法)可包括,针对给定的尾数位深度n(或给定的指数exp),选择覆盖预期的网络值集合x的范围的最小指数exp(或最小尾数位深度n)用于运算。例如,对于给定的尾数位深度b,可以根据等式(3)选择指数exp,使得数字格式覆盖x的整个范围,其中是上限函数:
然而,此类方法对异常值敏感。具体地,在网络值集合x有异常值的情况下,牺牲精度来覆盖异常值。这可导致大的量化错误(例如,第一数字格式(例如,浮点数格式)的网络值集合与所选择的数字格式的网络值集合之间的误差)。因此,由量化引起的运算和/或RNN的输出数据中的误差可大于数字格式涵盖较小范围时的误差,但更精确。
在其他示例中,可使用具有异常值加权的平方误差算法的总和。在相对重要的值通常是在给定的两个或多个值的集合的值范围的较高端的值的情况下,该算法可能是合适的。对于通过惩罚量值进行正则化的权重张量尤其如此,因此可期望具有较高值的元素比具有较低值的元素具有更大的相对重要性。另外,钳位是特别具有破坏性的噪声形式,可在所得的两个或更多个值的量化集合中引入强偏置。因此,在一些应用中,将误差偏置成保留大值,同时避免以牺牲定量误差为代价保留全范围的极端(例如,如在“MinMax”方法中)是有利的。例如,如下式(4)中所示的加权函数α(x)与误差的平方度量组合可用于平方误差算法的总和。
其中SAT是定义为2exp+n-1的饱和点,exp是定点数格式的指数,n是尾数的位数,δe是2exp(即,一个量化级别),并且γ是根据经验选择的梯度。对于一些神经网络,20的梯度可以良好地起作用。
在申请人的英国专利申请号1718293.2中描述了一种加权异常值方法,该专利申请的全文以引用方式并入本文。在加权异常值的方法中,当使用特定的数字格式时,基于定量误差的加权总和,从多个潜在数字格式中选择网络值集合的数字格式,其中将恒定权重应用于落入数字格式的可表示范围内的网络值的定量误差,并且将线性增加的权重应用于落入可表示范围之外的值的定量误差。
申请人的英国专利申请号1821150.8中描述了另一种方法(可被称为反向传播方法),该专利申请的全文以引用方式并入本文。在反向传播方法中,产生最佳成本的量化参数(例如,RNN准确度和RNN大小(例如,位数)的组合)通过使用反向传播迭代地确定相对于每个量化参数的成本的梯度来选择,并且调整定量参数直到成本收敛。该方法可以产生良好的结果(例如,(在位数方面)小且准确的RNN),但是它可能需要很长时间才能收敛。
一般来讲,数字格式的选择可被设想为优化问题,该优化问题可以对RNN中的数字格式中的一个、一些或全部参数执行。在一些示例中,可以同时优化数字格式的多个参数;在其他示例中,可以依次优化格式选择方法的一个或多个参数。在一些示例中,网络值的位深度可以用所应用的格式选择算法来预定义,以便为RNN的网络值选择合适的指数。位深度可以是固定的,或者在一些示例中可以是待优化的参数。在一些示例中,应用1105数字格式选择算法可包括标识RNN的适当的位深度。为了确保测试神经网络的每个时间步骤是相同的,RNN的不同时间步骤的两个或更多个值的实例被约束为具有相同的位深度。例如,状态张量h1(t)的每个实例具有相同的位深度,并且输入张量x(t)的每个实例具有相同的位深度。
如已经描述的,在步骤1104处,在预定义数量的时间步骤上对样本输入数据运算RNN,而不对其网络值进行任何(或最小)量化,以便在每个时间步骤捕获格式选择方法所需的统计数据。将格式选择方法应用于1105在RNN的每个时间步骤捕获的统计数据,以便为RNN的网络值选择最佳数字格式。可以选择和/或配置数字格式选择算法,以标识要确定数字格式的每个网络值的块可配置类型的数字格式。如上文所解释的,由算法标识的块可配置数字格式通常将表示为定义块可配置数字格式所属的块可配置数字格式的类型的一个或多个参数的集合。
可以对在一个或多个时间步骤捕获的统计数据针对两个或更多个网络值集合执行数字格式选择。可以对在一个以上的时间步骤序列上捕获的统计数据针对两个或更多个网络值的集合执行数字格式选择,例如通过将RNN应用于第一样本输入序列,然后应用于第二样本输入序列。数字格式选择算法可以应用于在多个时间步骤序列上捕获的所有统计数据,以便以本文所述的方式标识两个或更多个网络值的集合的单个通用数字格式,或数字格式选择算法可独立地应用于在不同的时间步骤序列上捕获的统计数据,其中相对于根据本文所述的方法组合的每个序列标识数字格式,以便针对两个或更多个网络值的集合标识单个通用数字格式。这有助于确保为每组两个或更多个网络值标识的通用数字格式的一般性。
在一些示例中,将格式选择算法独立地应用于(1105)在每个时间步骤(或捕获统计数据的时间步骤的子集)捕获的统计数据,以便在每个(或那些)时间步骤标识每个网络值实例的数字格式;然后对这些实例的数字格式进行组合以便为所有时间步骤上的网络值产生通用的数字格式(1106)。在其他示例中,格式选择算法(例如,同时)应用于在执行RNN的所有预定义时间步骤上捕获的统计数据(1105),以便在执行RNN的所有时间步骤(即,网络值的每个实例)上标识网络值的通用数字格式(1106)。在此类示例中,当在硬件中实施RNN时,格式选择算法标识1106在RNN中的相应网络值的所有实例上使用的通用数字格式。
当格式选择算法同时应用于执行RNN的所有预定义数量的时间步骤上捕获的统计数据时,格式选择算法的输出可以是网络值的单个通用数字格式。例如,在对样本输入数据运行RNN时捕获的统计数据可以包括在每个时间步骤捕获RNN的两个或更多个值的集合的最大绝对值。格式选择算法然后可包括通过在每个时间步骤采用所捕获的最大绝对值的最大值并且对该最大值执行MinMax算法来组合最大绝对值,以便标识该组值的通用的块可配置数字格式的参数。
如上文所解释的,为了确保在RNN的硬件实施中执行的时间步骤期间的时间不变性,网络值的每个实例(即,每个时间步骤的网络值)应该具有相同的数字格式。在格式选择算法对在预定义数量的时间步骤捕获的统计数据执行多次(例如,格式选择算法独立地应用于在每个时间步骤或时间步骤的子集捕获的统计数据)的情况下,格式选择算法可以标识每个网络值的一个以上的数字格式。换句话讲,可以在不同的时间步骤针对同一组值的实例标识不同的数字格式。在这种情况下,将所得数字格式组合1106,以便标识1106RNN的每个网络值的通用数字格式。当在硬件中实施(例如,根据上述原理实施为导数神经网络)时,这种通用数字格式可用于RNN中相应的网络值的所有实例。例如,参考图4,输入张量x(t)、x(t+1)、x(t+2)中的每一个输入张量都是RNN在特定时间步骤的输入张量的实例,第一状态张量h1(t)、h1(t+1),h1(t+2)中的每一个状态张量都是RNN在特定时间步骤的第一状态张量的实例,第二状态张量h2(t),h2(t+1),h2(t+2)是RNN在特定时间步骤的第二状态张量的实例,等等。组合针对给定张量标识的数字格式可以适合于特定数字格式的任何方式执行。可以在格式选择单元344处组合数字格式。
块可配置数字格式可以表示为定义数字格式的一组一个或多个参数,例如,第一整数值可表示指数,并且第二整数值可表示尾数位深度。每个参数可以独立地组合,以便形成通用数字格式。例如,表示为张量实例建立的数字格式的整数参数可以通过标识中值、最小值、最大值或平均值(例如,最接近平均值的整数值)整数值来组合,然后可以用作通用数字格式的相应参数。已发现,使用每组实例的数字格式的指数的中值提供良好的准确度。
考虑特定示例,其中为网络值的实例建立的数字格式由定义块可配置数字格式的指数的整数参数定义。在该示例中,在RNN的四次迭代中的每一次迭代,数字格式可由网络值的格式选择算法独立地标识。如果所标识的数字格式具有指数5、6、5、4,那么中值指数为5,并且通用数字格式可以被标识为具有指数5的数字格式。
一旦已建立通用数字格式,就可以在RNN的硬件实施中使用1107通用数字格式。例如,可以将通用数字格式提供给图3中所示的数据处理系统的变换单元326以用于导数神经网络。针对RNN的网络值标识的相同的通用数字格式用于导数神经网络中的该网络值的所有实例。例如,针对测试神经网络的输入张量x建立的通用数字格式用作导数神经网络的输入张量的所有实例的数字格式,并且针对测试神经网络的第一状态张量h1建立的通用数字格式用作导数神经网络的第一状态张数的所有实例的数字格式。
使用根据本发明的方法建立的数字格式实施的导数神经网络可以表示RNN在与执行数字格式选择的预定义数量的步骤不同数量的步骤上展开。在被执行以生成用于数字格式选择算法的统计数据的RNN根据上述原理被实施为导数神经网络的情况下,由测试神经网络表示的RNN的步骤的数量可以与导数神经网络所表示的步骤的数量不同。
除了随时间推移提供一致的行为之外,本文所述的方法还使所选择的格式更稳健,因为从RNN的多个时间步骤汇集信息。例如,如果某个张量在给定时间步骤的行为与先前时间步骤的行为不同,从而导致这些时间步骤的数字格式不同,这种方法有可能在展开图中将这种格式推广到给定时间步骤之前和之后的所有其他时间步骤,这意味着如果异常行为发生在序列中的不同点,则可以正确地处理这些张量值。
针对RNN执行数字格式选择的本发明的方法可以应用于其中根据上述原理对因果部分和非因果部分进行分离的神经网络。由于因果运算和非因果运算分开执行,因此对可以根据本发明的方法独立地选择通用数字格式的不同张量执行这些运算。这允许将不同数字格式用于因果运算和非因果运算,这样可以改进性能(例如,推断速度)并且/或者使得能够用较低的存储器和处理开销来实现给定的性能水平。
为了对以不同数字格式定义的值的组合执行运算,可以对组合的一个或多个值的数字格式进行转换,以确保组合的值具有相同的数字格式。例如,参考图7,如果非因果元胞的输出704具有第一数字格式,并且状态输入706具有第二数字格式,则因果元胞604处的加法运算可被配置为将输出704和/或状态输入706转换为相同的(可能是第三)数字格式。可以在硬件处,例如在数据处理系统300中的加速器302处执行转换。
技术人员将了解如何在数字格式之间转换数据值。例如,从具有尾数m1和指数e1的一种数字格式转换为具有尾数m2和指数e2的具有相同位深度的另一种数字格式可以如下执行,其中数字格式的指数不同:
此类转换受到饱和与量化误差的影响,具体取决于e2是低于还是高于e1。
由于本发明的方法允许针对RNN的两个或更多个值(例如,张量、张量的部分、张量群组)的集合选择不同的数字格式,因此可针对所有实现方式优化RNN在硬件中的性能,尤其是那些使用本文所述的原理基于在预先确定的数量的步骤上展开的RNN来形成导数神经网络的实现方式。当在硬件中执行RNN时,相对于不同网络值独立地执行数字格式选择可以通过为格式选择提供更大的灵活性而提供更好的结果。
一般性评论
图3的数据处理系统被示出为包括许多功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文所述的由计算机系统形成的中间值不需要由计算机系统在任何时间点物理地生成,并且可以仅表示方便地描述由计算机系统在其输入与输出之间执行的处理的逻辑值。
本文所述的加速器以硬件体现,例如,加速器可包括一个或多个集成电路。本文所述的数据处理系统可被配置为执行本文所述的任何方法。除非另行指出,否则上文所述的功能、方法、技术或部件可以在软件、固件、硬件(例如,固定逻辑电路系统)或它们的任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文所述的软件可以由执行代码的一个或多个处理器执行,该代码使一个或多个处理器执行由该软件体现的算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指处理器的任何类型的可执行代码,包括以机器语言、解释语言、脚本语言和编译的高级语言中的一种或多种表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,这些软件、固件、脚本、模块或库当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,使处理器执行由代码指定的任务。
处理器可以是任何种类的设备、机器或专用电路,或它们的集合或一部分,它具有处理能力从而可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如片上系统、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA),等等。计算系统可以包括一个或多个处理器。
本发明还旨在涵盖限定如本文所述的硬件的配置的软件(诸如,HDL(硬件描述语言)软件),该软件用于设计集成电路或用于配置可编程芯片,以执行所需功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,该计算机可读程序代码当在集成电路制造系统中被处理时,将该系统配置为制造被配置为执行本文所述的任何方法的计算机系统,或者制造如本文所述的计算机系统。集成电路定义数据集可以是例如集成电路描述。
可以提供一种在集成电路制造系统中制造如本文所述的计算机系统的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时,使得制造计算机系统的方法被执行。
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传送级(RTL)代码、作为高级电路表示诸如Verilog或VHDL,以及作为低级电路表示诸如OASIS(RTM)和GDSII。在逻辑上定义集成电路的更高级表示法(诸如RTL)可以在配置为在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便生成由表示定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成集成电路的制造定义的码。
现在将参考图10描述在集成电路制造系统处对集成电路定义数据集进行处理以便将该系统配置为制造计算机系统的示例。
图10示出了集成电路(IC)制造系统1002的示例,该集成电路制造系统被配置为制造如本文中任何示例中描述的计算机系统。特别地,IC制造系统1002包括布局处理系统1004和集成电路生成系统1006。IC制造系统1002被配置为接收IC定义数据集(例如,限定如本文的任何示例中所述的计算机系统),处理IC定义数据集,并且根据IC定义数据集(例如,其体现如本文的任何示例中所述的计算机系统)来生成IC。IC定义数据集的处理将IC制造系统1002配置为制造体现如本文的任何示例中所述的计算机系统的集成电路。
布局处理系统1004被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到IC生成系统1006。电路布局定义可以是例如电路布局描述。
如本领域中已知的,IC生成系统1006根据电路布局定义来生成IC。例如,IC生成系统1006可实施生成IC的半导体设备制造工艺,该半导体设备制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可以在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1006的电路布局定义可呈计算机可读代码的形式,IC生成系统1006可使用该计算机可读代码来形成用于生成IC的合适掩模。
由IC制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1002可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,通过在集成电路制造系统处对集成电路定义数据集的处理,可以将系统配置为制造计算机系统,而无需对IC定义数据集进行处理以确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对该数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文所述的设备。例如,通过集成电路制造定义数据集,以上面参考图10描述的方式对集成电路制造系统进行配置,可以制造出如本文所述的设备。
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图10中所示的示例中,IC生成系统还可以由集成电路定义数据集进一步配置,以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实现方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一种或多种。在制造此类设备、装置、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以与性能提高之间进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
与已知的实现方式相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中实施的方法中)的实现方式可以引起性能改进。性能改进可以包括计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一种或多种。在制造此类设备、装置、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以与性能提高之间进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文所述的每个单独的特征以及两个或更多个此类特征的任何组合,公开程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文的描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.一种用于在硬件中实施用于对输入序列进行运算的循环神经网络(RNN)的方法,所述循环神经网络的每个步骤用于对所述序列的不同输入进行运算,所述方法包括:
接收所述RNN的表示;
将所述RNN的所述表示变换为用于在所述输入序列的预先确定的多个输入上进行运算的导数神经网络,所述导数神经网络具有一个或多个状态输入和一个或多个状态输出,并且在所述RNN的预先确定的多个步骤上等同于所述RNN;以及
通过以下方式将所述导数神经网络迭代地应用于所述输入序列:
在硬件中实施所述导数神经网络的实例序列;以及
将来自所述硬件处的所述导数神经网络的每个实例的所述一个或多个状态输出作为所述一个或多个状态输入提供给所述硬件处的所述导数神经网络的后续实例,以便在比所述预先确定的多个输入长的输入序列上运算所述RNN。
2.如权利要求1所述的方法,其中所述预先确定的多个步骤在数量上等于所述预先确定的多个输入。
3.如权利要求1或2所述的方法,其中来自所述导数神经网络的每个实例的所述一个或多个状态输出作为所述一个或多个状态输入提供给所述导数神经网络的所述实例序列中的所述导数神经网络的所述后续实例。
4.如权利要求1或2所述的方法,其中所述实施所述导数神经网络的实例序列包括实施所述导数神经网络的实例,并且在所述实例完成之后,使所述序列中的所述导数神经网络的下一个实例在硬件中实施。
5.如权利要求1或2所述的方法,其中所述变换包括在所述预先确定的多个步骤上展开所述循环神经网络,以便形成用于在所述输入序列的所述预先确定的多个输入上进行运算的所述导数神经网络。
6.如权利要求1或2所述的方法,其中所述硬件及其控制逻辑适于执行前馈神经网络。
7.如权利要求1或2所述的方法,其中所述硬件及其控制逻辑无法执行所接收的所述RNN的表示。
8.如权利要求1或2所述的方法,其中所述硬件及其控制逻辑无法执行动态神经网络。
9.如权利要求1或2所述的方法,其中所述导数物神经网络为前馈神经网络。
10.如权利要求1或2所述的方法,其中所述RNN包括一个或多个元胞,每个元胞被布置成接收在前一个步骤生成的元胞状态输入,并且所述变换所述RNN的所述表示还包括在每个元胞处:
标识用于不依赖于所述元胞状态输入而执行的非因果运算;以及
在所述导数神经网络中,将所述预先确定的多个步骤中的至少一些步骤上的所述元胞的多个实例处的至少一些非因果运算分组在一起,以供在所述硬件处并行处理。
11.如权利要求10所述的方法,其中所述元胞包括用于依赖于所述元胞状态输入而执行的因果运算。
12.如权利要求10所述的方法,其中所述元胞状态输入的至少一部分在前一个步骤在所述元胞的前一个实例处生成。
13.如权利要求10所述的方法,其中所述分组在一起包括对所述至少一些非因果运算进行组合,以作为所述导数神经网络中的所述元胞的所述多个实例的单个卷积运算执行。
14.如权利要求10所述的方法,其中所述变换所述RNN的所述表示还包括将所述至少一些非因果运算与所述因果运算分离。
15.如权利要求11所述的方法,其中所述在硬件中实施所述导数神经网络的实例序列包括,对于每一个实例,使所述硬件并行地处理一组或多组非因果运算。
16.如权利要求11所述的方法,其中所述硬件包括加速器,所述加速器具有用于执行神经网络的多个处理元件,并且每一组非因果运算在所述多个处理元件中的至少一些处理元件上并行处理。
17.如权利要求11所述的方法,其中所述变换所述RNN还包括配置所述导数神经网络,使得在所述元胞的实例处执行的所述非因果运算的结果与相对于相同实例执行的所述因果运算进行组合。
18.如权利要求1或2所述的方法,其中所述循环神经网络包括多个元胞。
19.一种用于实施用于对输入序列进行运算的循环神经网络(RNN)的数据处理系统,所述系统包括:
变换单元,所述变换单元被配置为接收所述RNN的表示,并且将所述RNN的所述表示变换为用于在所述输入序列的预先确定的多个输入上进行运算的导数神经网络,所述导数神经网络具有一个或多个状态输入和一个或多个状态输出,并且在所述RNN的预先确定的多个步骤上等同于所述RNN;
硬件加速器,所述硬件加速器用于处理神经网络;以及
迭代逻辑,所述迭代逻辑被配置为通过以下方式将所述导数神经网络迭代地应用于所述输入序列:
使所述导数神经网络的实例序列在所述硬件加速器处实施;以及
将来自所述硬件加速器处的所述导数神经网络的每个表示的所述一个或多个状态输出作为所述一个或多个状态输入提供给所述硬件加速器处的所述导数神经网络的后续表示,以便使所述硬件加速器在比所述预先确定的多个输入长的输入序列上运算所述RNN。
20.一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使所述计算机系统执行在硬件中实施用于对输入序列进行运算的循环神经网络(RNN)的方法,所述循环神经网络的每个步骤用于对所述序列的不同输入进行运算,所述方法包括:
接收所述RNN的表示;
将所述RNN的所述表示变换为用于在所述输入序列的预先确定的多个输入上进行运算的导数神经网络,所述导数神经网络具有一个或多个状态输入和一个或多个状态输出,并且在所述RNN的预先确定的多个步骤上等同于所述RNN;以及
通过以下方式将所述导数神经网络迭代地应用于所述输入序列:
在硬件中实施所述导数神经网络的实例序列;以及
将来自所述硬件处的所述导数神经网络的每个实例的所述一个或多个状态输出作为所述一个或多个状态输入提供给所述硬件处的所述导数神经网络的后续实例,以便在比所述预先确定的多个输入长的输入序列上运算所述RNN。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2010281.0 | 2020-07-03 | ||
GB2010281.0A GB2596607B (en) | 2020-07-03 | 2020-07-03 | Methods and systems for running dynamic recurrent neural networks in hardware |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113887714A true CN113887714A (zh) | 2022-01-04 |
Family
ID=72050469
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110753352.4A Pending CN113887714A (zh) | 2020-07-03 | 2021-07-02 | 用于在硬件中运行动态循环神经网络的方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20220044098A1 (zh) |
EP (2) | EP3933704A1 (zh) |
CN (1) | CN113887714A (zh) |
GB (1) | GB2596607B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2619919A (en) * | 2022-06-17 | 2023-12-27 | Imagination Tech Ltd | Hardware implementation of an attention-based neural network |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2568081B (en) | 2017-11-03 | 2022-01-19 | Imagination Tech Ltd | End-to-end data format selection for hardware implementation of deep neural network |
GB2568083B (en) | 2017-11-03 | 2021-06-02 | Imagination Tech Ltd | Histogram-based per-layer data format selection for hardware implementation of deep neutral network |
GB2568084B (en) | 2017-11-03 | 2022-01-12 | Imagination Tech Ltd | Error allocation format selection for hardware implementation of deep neural network |
US10423828B2 (en) * | 2017-12-15 | 2019-09-24 | Adobe Inc. | Using deep learning techniques to determine the contextual reading order in a form document |
US11526728B2 (en) * | 2018-04-09 | 2022-12-13 | Microsoft Technology Licensing, Llc | Deep learning model scheduling |
-
2020
- 2020-07-03 GB GB2010281.0A patent/GB2596607B/en active Active
-
2021
- 2021-07-01 EP EP21183303.3A patent/EP3933704A1/en active Pending
- 2021-07-01 EP EP21183304.1A patent/EP3933705A1/en active Pending
- 2021-07-02 CN CN202110753352.4A patent/CN113887714A/zh active Pending
- 2021-07-06 US US17/368,384 patent/US20220044098A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3933704A1 (en) | 2022-01-05 |
GB2596607A (en) | 2022-01-05 |
US20220044098A1 (en) | 2022-02-10 |
EP3933705A1 (en) | 2022-01-05 |
GB202010281D0 (en) | 2020-08-19 |
GB2596607B (en) | 2024-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112418391B (zh) | 用于对深度神经网络的权重进行转换的方法和系统 | |
CN110033079B (zh) | 深度神经网络的硬件实现的端到端数据格式选择 | |
CN113887710A (zh) | 循环神经网络中的数字格式选择 | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
GB2568082A (en) | Hierarchical mantissa bit length selection for hardware implementation of deep neural network | |
GB2608591A (en) | Implementation of pooling and unpooling or reverse pooling in hardware | |
US20240111990A1 (en) | Methods and systems for performing channel equalisation on a convolution layer in a neural network | |
CN115545175A (zh) | 在硬件中运行双向递归神经网络 | |
EP4113385A1 (en) | Number format selection for bidirectional rnns | |
CN113887714A (zh) | 用于在硬件中运行动态循环神经网络的方法和系统 | |
EP4345692A1 (en) | Methods and systems for online selection of number formats for network parameters of a neural network | |
EP4293576A1 (en) | Hardware implementation of an attention-based neural network | |
US20230177320A1 (en) | Neural network accelerator with a configurable pipeline | |
GB2611520A (en) | Methods and devices for configuring a neural network accelerator with a configurable pipeline | |
GB2611521A (en) | Neural network accelerator with a configurable pipeline | |
GB2611522A (en) | Neural network accelerator with a configurable pipeline | |
GB2619919A (en) | Hardware implementation of an attention-based neural network | |
CN114662649A (zh) | 训练神经网络 | |
GB2603647A (en) | End-to-end data format selection for hardware implementation of deep neural network | |
GB2603582A (en) | End-to-end data format selection for hardware implementation of deep neural network |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |