本发明的实施例涉及通过机器学习的人工智能(ai)领域。特别地,本发明的实施例涉及使用神经网络的深度学习。
背景技术:
:人工神经网络,或简称为“神经网络”,是一种计算机模型,类似于通过机器学习训练的神经元生物网络。传统的神经网络具有输入层,多个中间层或隐藏层以及输出层。每层具有多个(例如100至1000)人造“神经元”。层(n)中的每个神经元可以通过人工“突触”连接到先前(n-1)层和随后(n 1)层中的一些或全部神经元,以形成“部分连接”或“完全连接”神经网络。每个突触连接的强度由权重表示。因此,神经网络可以由网络中所有权重的集合表示。基于学习数据集训练神经网络(nn)以解决或学习指示该连接强度的每个突触的权重。例如,突触的权重通常是随机地初始化的。通过将样本数据集迭代输入到神经网络、输出应用于该数据集的神经网络的结果、计算预期(例如目标)输出和实际输出之间的误差以及使用纠错算法(例如反向传播)调整神经网络权重来进行训练以最大程度地减少错误。可以重复训练,直到误差最小化或收敛为止。通常,执行训练集的多次(例如数十或数百次)传递(例如,每个样本被多次输入到神经网络中)。整个训练集中的每一次完整传递都称为一个“时期”。最先进的神经网络通常具有数百万至数十亿的权重,并且因此需要用于训练和运行(预测)阶段的专用硬件(通常是gpu)。因此,即使在预测模式下,在大多数端点设备(例如,lot设备、移动设备、甚至是没有专用加速器硬件的笔记本电脑和台式机)上运行深度学习模型也是不切实际的。在具有有限处理速度和/或有限存储器可用性的设备上有效运行深度学习模型仍然是当今的严峻挑战。为了解决硬件容量有限的问题,当今,大多数深度学习预测是在远程服务器或云上进行的。例如,智能助手(例如alexa)将信息(例如语音信号)发送到云端,深度学习预测是在云端在专用硬件上远程执行的,并将响应发送回本地设备。因此,如果这些端点设备与云断开连接,如果输入速率太高以至于无法与云连续通信,或者如果即使在现今专用硬件还不够快的情况下也需要非常快速的预测(例如,用于高频交易的深度学习),则这些端点设备将无法提供基于深度学习的结果。因此,在本领域中需要在训练和/或预测模式下提高效率并降低用于神经网络的深度学习的存储器需求。技术实现要素:根据本发明的一些实施例,提供了在训练阶段期间用于修剪神经网络(例如,消除突触连接)或进化神经网络(例如,使用进化计算,例如遗传算法或遗传编程,或使用强化学习)以生成稀疏神经网络的设备、系统和方法,以及用于稀疏神经网络的新的紧凑数据表示,消除了存储和处理断开的突触的过程。根据本发明的一些实施例,提供了用于存储稀疏神经网络的设备、系统和方法。可以获得稀疏神经网络的多个权重。每个权重可以表示多个神经元层的不同层中的一对多个人工神经元之间的唯一连接。相邻神经元层中的少数对神经元在稀疏神经网络中连接。稀疏神经网络的多个权重中的每个权重可以与唯一索引相关联地存储。唯一索引可以唯一地识别一对具有由权重表示的连接的人工神经元。可以仅存储表示神经元对之间的连接的非零权重(并且可以不存储表示神经元对之间的无连接的零权重)。附图说明在说明书的结论部分中特别指出并明确要求保护被视为本发明的主题。然而,当结合附图阅读以下详细描述时,可以最好地理解本发明的组织和操作方法以及其目的、特征和优点,其中:图1是根据本发明的一些实施例的密集神经网络的示意图;图2是根据本发明的一些实施例的例如是通过修剪图1的神经网络的神经元连接而生成的稀疏神经网络的示意图;图3是根据本发明的一些实施例的具有跳过连接和循环连接的稀疏神经网络的示意图;图4是根据本发明的一些实施例的用于生成稀疏卷积神经网络的系统的示意图;图5是根据本发明的一些实施例的用于生成稀疏神经网络的系统的示意图;以及图6是根据本发明的一些实施例的用于生成稀疏神经网络的方法的流程图。将会意识到,为了图示的简单和清楚起见,图中所示的元件未必按比例绘制。例如,为了清楚起见,一些元件的尺寸可能相对于其他元件被放大。此外,在认为适当的情况下,可以在附图之间重复附图标记以指示相应或相似的元件。具体实施方式当前,修剪仅在训练后阶段中使用,而不在训练阶段期间使用。例如,仅在以常规方式训练神经网络(无修剪)之后,后处理步骤才会分析所得的神经网络,以确定在不会产生不利影响的情况下(不会降低神经网络的准确性的情况下)可以移除哪些权重。这种方法有几个缺点,例如,由于神经网络是固定的,并且由于大多数修剪会导致错误(如果在训练过程中未纠正),因此只能进行适度的修剪,需要在后期处理阶段进行大量的反复试验(例如,测试修剪各个权重或权重组合的错误效果),具体取决于特定的神经网络架构(例如,只能用于卷积神经网络(cnn),因为它使用了特定于cnn的启发式修剪方法),以及通常不会显著降低网络的存储器需求(例如,将修剪后的权重存储为零,这与非零权重占用相同(或近似相同)的存储器空间)。本发明的实施例提供一种新颖的系统和方法,其通过在训练阶段(而不是仅在训练后处理期间)修剪弱的突触连接或通过发展稀疏神经网络(例如,使用进化计算)来生成稀疏神经网络。本发明的实施例还提供用于稀疏神经网络的新颖的紧凑数据表示,其独立地索引每个权重以消除存储修剪的突触权重的需要。这些实施例提供了几个重大改进:·与训练后的修剪相比(仅限于在固定的经训练的网络中不会引起错误的修剪,例如通常占网络权重的百分之几),在神经网络中实现大量的稀疏性,例如,修剪多达90-99.9%的网络权重。·预测模式和训练模式下的结果都具有与神经网络中引起的稀疏程度成正比的线性加速。例如,50%的稀疏神经网络(保持其权重的少于50%或一小部分)使预测和训练速度提高两倍(或200%),而90%的稀疏神经网络(保持其权重的10%)使预测和训练速度提高10倍(或1000%)。通常,神经网络的稀疏性越大,预测和训练时间就越快。·在预测模式和训练模式下导致存储器使用率线性下降。例如,独立索引权重消除了存储修剪权重的需要,但是每个非修剪权重都使用两倍的存储器(例如,存储索引一节值),结果对于90%的稀疏神经网络的存储器,消耗减少10/2或5倍(80%)。·导致任何硬件的线性加速。例如,无论计算设备是例如运行在慢速cpu还是快速专用gpu上,与非稀疏网络相比,90%的稀疏神经网络引起10倍的加速。换句话说,虽然本发明的实施例可以提供对效率的改进,以允许在cpu或受存储器限制的设备(不能有效地处理或存储常规神经网络)上深度学习稀疏神经网络,但是相同的实施例可以通过快速硬件来实现,从而导致加速和存储量减少几个数量级(这在诸如实时导航的领域(即使在最快的专用硬件上也无法使用深度学习)是至关重要的)。·该方法与神经网络的类型无关,并且可以应用于任何神经网络架构,例如,包括但不限于完全连接、部分连接、卷积、递归等,并导致显著的稀疏性而不会造成影响网络准确性的不利影响。如今,所有常规神经网络都表示将一层连接到另一层的权重作为密集矩阵。例如,为了存储连接两层大小为10和20的神经元的权重,并假设网络已完全连接,网络由包含浮点数的10×20矩阵表示。此表示对于激活的正向和反向传播也很有用,例如,在上述示例中给定10个值的输入,通过将值向量(大小=10)乘以权重矩阵(大小=10×20)并获得输出向量(大小=20),可以计算出下一层中20个神经元的输出值。矩阵表示的另一个附加好处是可以使用快速矩阵乘法方法来加快运算速度(例如blas库,或专用gpu库,例如cublas或cudnn)。矩阵表示也用于其他类型的神经网络,例如卷积、递归等。尽管矩阵表示对于实现密集神经网络(具有许多或多数的主动突触)非常方便且有效,但是对于稀疏神经网络(具有很少或少数的连接突触)不是有效的表示。神经网络预测的速度与神经网络中权重的数量成正比。使用上面的10×20权重矩阵示例,通过将多数权重的值设置为零,该矩阵将表示稀疏神经网络。但是,将矩阵权重清零不会减少矩阵中的条目数量,并且因此不会减少通过神经网络执行的计算数量。因此,对于稀疏神经网络和密集神经网络,矩阵表示中的存储器和计算要求是相同的(零值被存储并相乘,就像矩阵乘法中的非零值一样)。换句话说,在矩阵表示中将权重设置为零不会从存储器中消除这些权重,也不会减少关联计算的数量。因此,在矩阵表示中的修剪权重不会改善神经网络的存储器或性能。根据本发明的一些实施例,提供了神经网络的新的紧凑表示,其独立地索引每个权重(独立地定义权重所表示的突触),其允许跳过或丢弃被修剪的突触的权重。在常规矩阵表示中,每个权重通过其在矩阵中的位置来索引(例如,行i列j中的权重表示将第一层中的第i个神经元连接到第二层中的第j个神经元的突触)。可以使用其他矩阵来存储每对层的权重。由于索引基于矩阵位置,因此权重无法消除,因为它们会移动矩阵中其他权重的位置。这导致稀疏神经网络由几乎为零的条目的稀疏矩阵表示,这既浪费了用于存储大部分零权重的存储器,又浪费了用于将零权重相乘的计算。通过根据本发明的实施例独立地索引每个权重,权重的索引彼此不依赖,并且因此每个修剪的权重可以被完全丢弃而不影响其他权重的索引。因此,这种独立的索引消除了为断开的突触存储条目的需求(减少了存储器消耗),并且消除了基于断开的突触执行的计算(提高处理速度)。因为运行神经网络的速度与其中的权重数量成正比,与完全连接的神经网络一样,只有一小部分相邻神经元通过权重连接的根据本发明的实施例的稀疏神经网络将在一小部分时间内运行。该紧凑表示进一步提供了识别“跳过连接”(例如,非相邻或远层神经元之间的连接)的权重的有效方式。通常,常规神经网络仅对相邻层之间的局部连接权重进行建模,因为连接的数量随相互关联的层的数量呈指数增长。这导致矩阵大小呈指数增长(添加的权重通常为零或近似为零),并且计算数量呈指数增长(添加的结果多数为零),而对神经网络的影响均很小。因此,常规的神经网络通常避免跳过或跨层连接,而仅对局部连接建模。然而,根据本发明的实施例,因为每个权重都被单独索引,所以可以将一个或多个非零权重分别添加到神经网络中,以表示任何不相邻或远层之间的连接,而无需添加几乎不表示跨层连接的大多数零权重。因此,本发明的实施例通过增加跳过连接权重来提高神经网络的准确性,而没有存储的大量增加的典型损害。一些实施例可以生成稀疏卷积神经网络(cnn)。cnn由将输入层的通道连接到卷积层的通道的多个滤波器表示。滤波器扫描在神经元的每个渐进区域(例如,表示n×n像素图像区域)上操作的输入通道,并将每个区域的卷积或其他变换映射到卷积通道中的单个神经元。通过将多个神经元的整个区域连接到每个单个卷积神经元,滤波器形成具有多对一神经元连接的突触,与标准nn中的一对一神经元连接相比,这减少了cnn中的突触数量。一些实施例可以通过修剪或归零具有表示通道之间的弱卷积关系的所有权重为零或接近零的整个滤波器来生成稀疏的cnn。使用了新的cnn索引,该索引可独立且唯一地标识cnn中的每个滤波器,因此不会存储经过修剪的滤波器,从而减少了卷积操作和存储器使用量。参考图1,其示意性地示出了根据本发明的一些实施例的密集神经网络100。神经网络100包括多个人工神经元102。人工神经元102可布置在多层的层次结构中。神经网络100可以包括输入层(神经元1-4),一个或多个中间层或隐藏层(神经元5-8)和输出层(神经元9-12)。每一层中的每个神经元102通过人工突触连接104连接到相邻层中的一些神经元(部分连接)或所有神经元(完全连接)。输入层中的神经元(1-4)连接到随后更高层的神经元,中间层的神经元(5-8)连接到先前层和随后层的神经元,且输出层的神经元(9-12)连接到先前较低层的神经元。神经网络100可以由表示各个多个突触连接104的强度的多个权重表示。神经网络100是“密集”神经网络,其中,连接了相邻层中的大多数多数或大于或等于阈值百分比的神经元102(例如,具有非零的连接权重)。阈值可以是大于50%(多数已连接)到100%(“完全连接”)范围内的任何百分比,并且通常为90-99%连接。在图1所示的示例中,相邻层中的所有神经元102彼此连接,因此神经网络100是完全连接的神经网络。在该示例中,四个神经元的每对相邻层具有16个可能的连接,而在两对相邻层中,存在32个神经元连接和相关联的权重。参考图2,其示意性地示出了根据本发明的一些实施例的稀疏神经网络200。如图1所示,神经网络200包括布置在多层的层次结构中的多个人工神经元202。然而,神经网络200是稀疏的。“稀疏”神经网络可以指这样的神经网络,其中,相邻层中的少数或小于或等于阈值百分比的神经元通过突触连接204连接(或相邻层中的多数或超过阈值百分比的神经元未连接)。阈值可以是小于50%(少数连接)范围内的任何百分比,并且可以是1-10%的连接。在图2所示的示例中,神经网络200仅具有32个可能的神经元连接中的10个连接(例如31.25%)。通过修剪图1的密集神经网络100的连接104的多数或阈值百分比以上的或它们的相关联的权重,可以将图1的密集神经网络100转换为生成图2的稀疏神经网络200。可以通过断开先前连接的神经元对来修剪权重。另外,稀疏神经网络200可以使用诸如进化神经网络的遗传算法、遗传编程、强化学习等方法来训练。稀疏神经网络200可以具有各种连接类型的混合混合物,例如具有稀疏表示的本地连接、循环连接、跳过连接等。只有通过本发明实施例的紧凑表示,才能有效地发展具有这种连接混合的神经网络。附加地或可替代地,稀疏神经网络200可以首先作为稀疏网络生成或接收(没有修剪)。稀疏神经网络200可以由多个连接权重204表示。在常规矩阵中,将修剪或省略的权重设置为零,并与连接权重进行相同的处理,这不会给修剪带来明显的存储或处理益处。根据本发明的实施例,提供了新的数据结构206,其中多个权重中的每个权重(数据结构206的列3)与唯一索引(数据结构206的列1-2)相关联。因为权重在每个数据条目中被显式索引,所以表示206中的数据条目的顺序不再用作其隐式索引,并且可以对权重条目进行改组或重新排序而不会丢失信息。特别地,没有理由像矩阵表示那样将零的权重存储为占位符以保持索引。因此,当两个神经元断开连接(通过修剪)或首先不连接时,数据结构206简单地完全删除或省略该连接的条目(例如,没有权重记录或存储的该连接的任何信息)。通过仅存储表示神经元对102之间的活动连接204的非零权重(并且不存储表示神经元对之间的断开、非活动连接或无连接的零权重),数据结构206可以将用于存储稀疏神经网络200的存储器减少与网络的稀疏度成正比的量。如果x%的突触被删除或省略,仅留下(100-x)%的突触,并且索引使用的比特数与权重相同,则与完全连接的神经网络所占用的存储空间相比,权重条目可能占用2×(100-x)%(例如,99%的稀疏性导致稀疏表示,只需要2%的存储器用于密集表示,即存储器使用量减少50倍)。运行神经网络的速度与神经网络中权重的数量成正比。稀疏神经网络200中的修剪或省略连接可导致与稀疏程度成比例的直接预测加速(例如,如果x%的突触被删除或省略,仅留下(100-x)%的突触,则最终的神经网络将比完全连接的神经网络快100/(100-x)倍)。参考图3,其是根据本发明的一些实施例的具有跳过连接302和循环连接304的稀疏神经网络300的示意图。连接通常发生在相邻层中的神经元之间(参见例如图1和图2)。允许层与非相邻层之间的连接(跳过连接)或允许层与自身之间的连接(循环连接)将成倍地增加神经元连接的组合数量。由于矩阵表示存储神经元所有组合(无论是零还是非零)的条目,因此跳过连接和循环连接会极大地增加存储器使用量和处理时间。在图3的示例中,增加跳过连接和循环连接将使矩阵表示从48个独立权重条目增长到128个(例如,每六对不同层的权重为16个,而两个隐藏层的循环连接权重为16个)。根据本发明的一些实施例,通过独立地索引(或以其他方式标识)由每个权重连接的神经元对,可以从数据表示306中删除或省略零权重。因此,仅记录非零权重的可能连接的子集(省略零权重的可能连接的其余子集)。将跳过连接302和循环连接304添加到神经网络300,从而仅将与非零权重相关联的条目添加到数据表示306(306中的突出显示的行)。当那些非零跳过连接和循环连接稀疏时(例如,进行所有可能的跳过连接和循环连接中的少数连接),仅稍微增加了存储器使用量和计算量。在图3的示例中,添加跳过连接302和循环连接304仅向数据表示306添加九个条目(对于要在矩阵表示中添加的所有可能的跳过和重复,显著地少于80个条目)。因此,本发明的一些实施例提供了足够紧凑的数据表示306,以允许神经网络包括跳过连接302和/或循环连接304,这可以提高神经网络的准确性。此外,神经网络越大,可以实现的稀疏百分比就越大。对于包含数十万个连接的神经网络,稀疏度通常低至90%,而对于具有数十亿连接的神经网络,稀疏度通常为99.9%(即,神经网络越大,由于表示稀疏而带来的好处越大)。参考图4,其是根据本发明的一些实施例的稀疏卷积神经网络(cnn)400的示意图。cnn400可以包括多个层402,每个层402包括一个或多个通道403,每个通道403包括多个人工神经元。例如,cnn400可以具有表示彩色图像并具有三个颜色通道(例如,红色、绿色和蓝色通道)的输入层。cnn400可以由多个卷积滤波器404表示。每个滤波器404表示一组权重,其是一个通道的神经元区域(例如,表示n×n像素图像区域)到(相邻或不相邻)卷积层的通道中的神经元的卷积或变换。示例性2d卷积滤波器404包括一组n×n个权重(例如,a、b、c,...),使得它可以在输入通道(例如1a 2b 3c ...)中对每个n×n组神经元(例如1、2、3、...nn)进行卷积,以等于卷积通道中的单个连接的卷积神经元。具有n×n个权重的相同的单个卷积滤波器404用于对整个输入通道的神经元的所有n×n组进行卷积。通常,卷积滤波器404可以具有各种尺寸,包括一维(id)(例如,在神经元的列或行上运行的1×n行滤波器或n×l列滤波器),二维(2d)(例如,在神经元的2d网格上运行的n×m滤波器),三维(3d)(例如,在层中多个通道上的网格上运行的n×m×p滤波器)或n维(nd)(例如,在多个通道和多层上的网格上运行)。尽管为简单起见仅示出了几个滤波器,但是通常每个层402可以由成百上千个滤波器404表示。计算成百上千个卷积滤波器的权重是复杂且耗时的任务。根据本发明的实施例,弱或接近零的滤波器可以被修剪和删除,以避免它们相关联的卷积操作以及cnn400的加速训练和/或预测。尽管常规的cnn以与非零滤波器相同的方式存储零滤波器并在零滤波器上操作,这对修剪没有明显的存储或处理益处,但是根据本发明的实施例,提供了仅存储非零滤波器404的新数据结构406。常规的cnn用4维矩阵(不包括一批训练样本)表示每一层,其中,每个滤波器均由2d矩阵(例如3×3或5×5)表示,并位于矩阵的其他两个维度中,以定义应用了滤波器的输入/输出通道。相反,新数据结构406使用具有两个通道索引(列1-2)的三元组表示,该两个索引唯一地定义了滤波器404所应用的输入/输出通道,以及定义了滤波器的权重的一个滤波器表示(列3)。因为滤波器404在每个数据条目中被显式索引,所以数据条目的矩阵位置不再用作其隐式索引,并且滤波器404条目可以被改组、重新排序或删除而不会丢失信息。特别是,没有理由将零滤波器(权重全为零的滤波器)存储为占位符,以保持矩阵表示中的索引。因此,当神经元的通道首先被断开(通过修剪)或未连接时,数据结构406简单地完全删除或省略了相关滤波器的条目(例如,不存储该滤波器的任何权重记录或任何信息)。在各个实施例中,数据结构406可以例如作为预定义或作为完全归零的最高维度来省略1d、2d、3d或nd滤波器。通过仅存储表示神经元之间的主动卷积的非零滤波器(并且不存储表示神经元之间的无卷积或可忽略的卷积的零滤波器),数据结构406可以将用于存储稀疏卷积神经网络400的存储器减少与在cnn中删除的滤波器的数量成比例的数量。运行卷积神经网络的速度与cnn中的滤波器数量成正比。稀疏卷积神经网络400中的修剪或省略滤波器可能导致直接预测与cnn中省略的滤波器数量成正比的加速。本领域普通技术人员将认识到,图1至图4中的数据结构的布置仅是示例,并且可以使用其他数量、大小、尺寸和配置的神经元、连接、滤波器、通道和层。三元组表示代替矩阵表示:在本发明的实施例中,权重的常规矩阵表示(表1)在神经网络(表2)中被权重的“三元组表示”代替。下面的示例说明了在矩阵表示中将12个权重表示为大小为4×3的矩阵与在三元组表示中将12个权重表示为12个独立条目之间的区别:表1.密集矩阵表示1.5-0.5-0.10.20.6-1.20.4-0.40.9-0.61.31.0表2.密集三元组表示行列值001.501-0.502-0.1100.2110.612-1.2200.421-0.4220.930-0.6311.3321.0矩阵表示(表1)包括每个权重的单个值。矩阵表示基于权重在矩阵中的位置来标识由权重连接的一对神经元。例如,行索引表示第一层中的神经元id或索引,而列索引表示第二层中的神经元id或索引。三元组表示还列出了权重值(表2,第3列),此外,分别使用两个值(例如“从(from)”和“至(to)”神经元id)索引每个权重,以标识通过权重连接的一对神经元(表2,第1列和第2列)。通过用通道索引替换神经元索引(列1和2),并用多个权重滤波器替换单个神经元权重(列3),标准nn的三元组表示可以针对卷积nn进行修改。三元组表示是违反直觉的,因为从表面上看,三元组表示效率低下且浪费,与矩阵表示(例如12个条目)相比,需要三倍多的存储器(例如36个条目)。实际上,当神经网络密集时(速度保持相同或更差),三元组表示的确比矩阵表示使用更多的存储器。但是,尽管密集神经网络效率低下,但神经网络越稀疏,三元组表示的优势就越大。在一个示例中,存在50%稀疏性的临界点,在该临界点之上,三元组表示更为紧凑,而在其下方,矩阵表示更为紧凑(为了提高处理速度,无论稀疏程度如何,使用这种表示的稀疏神经网络总是比密集神经网络更快)。在一个实施例中,可以根据稀疏度级别使用矩阵表示和三元组表示,以使用对该级别最紧凑的表示。在其他实施例中,三元组表示可以专门用于表示神经网络。在下面的表3和表4中示出了对于稀疏神经网络的三元组表示相对于矩阵表示的益处的示例。下表3和表4列出了表1和表2中的权重修剪,将其20个值中的18个设置为零。生成的稀疏神经网络的矩阵表示和三元组表示分别如下所示:表3.稀疏矩阵表示0000.200000.9000表4.稀疏三元组表示行列值100.2220.9在以上情况下,三元组表示需要矩阵表示的一半存储器(如下所述,实际上,三元组的存储器减少量更大)。此外,神经网络的三元组表示在计算上比矩阵表示快十倍,因为三元组表示仅存储两个权重(导致2个计算),而矩阵表示存储二十个权重(导致20个计算)。对于每个单独的权重,尽管三元组的值(索引i,索引j,值)比矩阵表示中相应的单个权重值多三倍,但是在一个示例中,每个索引值仅需要一半的信息作为权重值,导致总存储器仅增加两倍。例如,三元组可以表示为:·权重值的32位浮点·“从”神经元id的16位整数·“至”神经元id的16位整数此三元组每权重总共有64位,这是矩阵表示(每权重32位)所需存储器空间的两倍。通常,在此示例中,与使用矩阵表示相比,使用此示例三元组表示的神经网络,权重减少m倍的神经网络可以使计算速度提高m倍,而存储器使用量减少m/2倍。可以理解,“三元组”表示仅仅是独立索引权重的示例,并且可以使用连接的神经元的任何其他索引或表示。在另一个示例中,可以使用包括单个权重值和单个索引值的“双元组”表示,其中,所有神经元对(或cnn中的滤波器)都具有作为唯一标识符(例如图1至图2中的1-12)的单个索引值。在另一示例中,可以使用“四元组”或“五元组”表示来添加值来索引“从”和/或“至”层索引或通道索引(用于cnn)。针对稀疏数据表示(例如206、306、406)进行了优化的新存储系统可以在神经网络的训练和预测性能中提供显著的益处。常规的稀疏矩阵存储在主(例如长期)存储器中,其在非零值之间具有较大的间隙,从而导致存储器召回跳转到存储器中的不同点(例如,从存储器位置1到100到1,000,000)。存储器访问通常要比nn计算本身花费更多的时间,因此存储器访问中的这么大的跳转通常非常慢。根据本发明的实施例,提供了新的存储系统,其根据nn的稀疏模式将值从主存储器预取到更快的辅助(例如,高速缓存)存储器中。nn的稀疏模式是仅nn非零值子集的索引模式。稀疏模式本身并没有定义非零值,而是仅标识与非零值相关联的索引(忽略与零值关联的索引),并因此标识访问以操作稀疏nn的存储器位置。基于nn的稀疏模式预取非零值,预识别需要访问的索引,并跳过零值权重的索引或不需要访问的滤波器。由于非零权重的稀疏模式在训练过程中发生更改,因此可以在每个稀疏模式更新后执行索引重新排序,以通过矩阵中的连续行最大化共享索引的数量。这允许仅缓存与矩阵相乘的密集向量中的非零值(例如,当前层的输入,先前层的输出)。与密集矩阵乘法不同,大多数稀疏矩阵运算会导致许多存储器地址跳转,从而导致大量的计算延迟。为了缓解存储器跳转和缓存未使用的(零)值的效率低下的问题,这通常是nn操作的瓶颈,根据稀疏模式预缓存数据确保所有缓存的数据都是处理器操作的非零值(例如,没有零值被缓存),从而提高了存储效率并加速了存储器访问。附加的稀疏数据表示:作为三元组表示的补充或替代,以下表示可以代替低效的常规稀疏矩阵表示。压缩的稀疏行(csr)数据表示可用于减少稀疏矩阵的存储。csr可以使用三个(一维)数组以行形式表示矩阵,第一个数组定义矩阵的非零值,而其余数组表示矩阵的稀疏模式。对于稀疏卷积神经网络,本发明的实施例可以使用修改的三元组来表示4维(或更高)矩阵(例如,如图4所示)或基于csr的索引方法,或者例如针对矩阵的不同维数两者的组合。映射表示可以用其中“从”和“至”神经元id(或滤波器id)映射到权重w的映射代替常规矩阵。这需要与三元组表示相似的存储量,但允许更快地访问各个权重(零和非零均相同),以较慢地增加新的非零权重为代价。列表表示可以用成对的列表<“从”,内部_列表>代替常规矩阵,而内部列表包括<“至”,w>形式的对,其中“至”,“从”和w与上面相同。上面的一种变体是保存稀疏向量的列表,例如,将矩阵表示为行数大小列表,其元素是<j,w>对的列表(如果此索引处的神经元没有连接,则可能为空)。列表表示可以与例如,如下的任何稀疏矢量表示一起使用。稀疏向量表示包括,例如:<索引,值>对的列表,其按索引排序或无序。字典或映射,其中,非零元素的索引被映射到该元素。丢失的索引可被视为零。两个数组,一个数据数组保存所有非零元素,以及一个索引数组,其保存原始向量中匹配数据元素的索引。多个稀疏向量中的一个稀疏向量可以在可能的稀疏向量表示之一中用稀疏向量代替常规矩阵,其中每个数据元素是另一个稀疏向量。这对于具有多个零行/列的矩阵可能特别有用。压缩稀疏行(又名压缩行存储)表示可以用三个数组代替常规矩阵:(1)保持所有非零权重的第一数据数组(例如,按行优先顺序排列,即从左到右,然后从上到下)。(2)第二个数据数组按行表示递增元素数(因此第一个元素始终为零,第二个是第一行中非零元素的数量,第三个是前两行中非零元素的数量,依此类推,直到最后一个元素,它始终是整个矩阵中非零元素的总数)。(3)第三个数据数组包含每个非零元素的匹配它们在数据数组中的顺序的列索引j(即神经元的“至”标识符)。压缩的稀疏列(又名压缩列存储,又名harwell-boeing稀疏矩阵)表示可以用三个数组代替常规矩阵:(1)就像在“压缩稀疏行”中一样,所有非零权重的第一数据数组(例如,按列优先顺序排列,即从上到下,然后从左到右)。(2)第二个数据数组表示与这些值相对应的行索引的列表。(3)第三个数据数组包含每个新列开始的数据数组的索引列表。例如,[1,2,4]表示数据数组中的第一个元素属于矩阵的第一列,第二个和第三个元素属于第二列,而第四个元素则从第三列开始。修改的压缩稀疏行:改进的csr表示可以用两个数组代替常规矩阵:(1)第一个数据数组首先保存对角线值(例如,包括零,如果对角线上有零),然后按行优先顺序保持剩余的非零元素(与常规csr相同的方式)。(2)第二个(索引)数据数组的长度与第一个相同。与第一个数组中的对角线元素匹配的元素指向数据数组中该行的第一个元素(因此,第一个元素始终是对角线的大小加1),而与其余数据匹配的元素指定矩阵中该数据元素的列索引。例如,具有以下值的4×4矩阵:[[1,2,0,3],[0,4,5,0],[0,0,0,6],[0,0,0,7]],将成为第一个数据数组:[1,4,0,7,2,3,5,6]和第二个索引数组:[4,6,7,7,1,3,2,3]。修改的压缩稀疏列表示可以用两个数组代替常规矩阵:(1)第一个数据数组首先保存对角线值(包括零,如果对角线上有零),然后按列优先顺序保留其余的非零元素(与常规csc相同的方式)。(2)第二个(索引)数组的长度与第一个相同。与第一个数组中的对角线元素匹配的元素指向数据数组中该列的第一个元素(因此,第一个元素始终是对角线的大小加1),而与其余数据匹配的元素指定矩阵中该数据元素的行索引。例如,具有以下值(与上面相同的值)的4×4矩阵:[[1,2,0,3],[0,4,5,0],[0,0,0,6],[0,0,0,7]]将成为第一个数据数组:[1,4,0,7,2,5,3,6]和第二个索引数组:[4,4,5,6,1,2,3,3]。稀疏张量表示:张量是向量和矩阵到更高维度的概括。例如,三维张量具有三个索引(而不是矩阵的两个,向量的一个索引),并且可以被认为是向量,其元素是矩阵。稀疏张量表示可分为两类:(1)低维张量的组合,或对指定方法之一的概括。例如,可以使用上述任何一种格式将3d张量表示为矩阵向量,其中每个矩阵都是稀疏矩阵。(2)替代地或附加地,3d张量可以通过压缩稀疏行的概括来表示,其中,数据、索引和列数组与以前一样,但是索引数组维护索引对,而不仅仅是行索引。可以使用这些或其他数据表示的任何组合。在训练期间诱导稀疏性:提供了几种在训练期间引起稀疏的实施例,包括以下一种或多种的任何组合:l1正则化、lp正则化、阈值保持、随机归零、新的权重生成、使用遗传算法的权重变化以及基于偏置的修剪。l1正则化:本发明的一些实施例可以在一个或多个迭代中的每个迭代中(例如,除了诸如反向传播的权重校正更新之外),在神经网络训练期间使用l1正则化来修剪神经元连接。在每次训练迭代中,神经网络的权重wij可以更新为权重wij′,例如,如下所示:w′ij=wij-sgn(wij)*d其中d是“权重衰减”参数(通常是一个非常小的数字),而sgn是符号函数。换句话说,在每次权重更新时,权重的值逐渐衰减或趋向于零。上式中的衰减参数(d)越大,权重将接近零的速度越快,并且权重将变为绝对零的部分越大,绝对零的权重表示神经元之间的断开(连接的修剪)。在一个实施例中,可以使用带有修改的l1正则化来执行修剪:在权重变为零(或更改符号)的那一刻,权重的存储器条目被从存储中(从三元组表示表)物理地移除或删除,并且无法在将来(例如,在任何将来的时间或在设置的锁定时间段或迭代次数内)重新增长或重新生成为非零值。lp正则化:lp正则化是l1正则化的扩展,其可以改善将网络中的权重“推”到零的期望行为,例如,如下所示:其中,d表示驱动或推动为零的速度,而p表示lp归一化中归一化因子的乘方,lp归一化有效地表示应用该驱动的值的分布(例如,p为正值)。在此示例中,较高的p会使驱动向较高的权重移动至更多零,从而对较低的权重施加较小的压力。在对卷积层进行正则化时,可以将整个滤波器作为一个单元一起进行正则化,在这种情况下,可以对上述lp正则化进行如下修改:其中p在0到1之间,并且其中r是核的半径(卷积层中的滤波器),例如,核是大小为2*r 1的矩阵。在此修改的lp正则化中,相邻滤波器的零值越多的滤波器达到零的压力就越大。lp正则化允许灵活的动态压力,其中,可以例如基于稀疏性百分比来动态地修改p,以将权重的导数/范数推为零。上面的等式基于权重本身的值鼓励权重为零,对于卷积滤波器,也基于同一滤波器中相邻权重的权重鼓励权重为零。阈值:当权重(尽管不为零)低于接近零的阈值时,可以物理删除权重及其条目:if(wij<threshold)→wij=0该阈值可以被平衡为足够低以至于在训练期间不会消除纠错(例如,反向传播),同时又足够高,可以以相当快的速度修剪,并防止该错误校正将值拉离零。示例阈值包括但不限于0.1、0.001、0.0001、0.00001等。舍入:在浮点之后的预定位数后移除值。例如,给定5位舍入,值0.12345678设置为0.12345。当权重值小于舍入允许的最小值,则舍入会将权重归零。否则,当舍入不能直接将权重归零时,由于反向传播干扰了一些权重的更新,可能导致额外的总体稀疏性。用于舍入的预定数字位数同样可以被平衡为足够少以至于不能撤消纠错,同时又要足够多以防止该错误校正将值拉离零。可以使用将权重取整到浮点后的任何位数的整数。随机归零:可以以固定的小概率(完全随机归零)或以与它们的当前值成比例的概率(部分随机归零)将权重设置为零。在后一种部分随机归零的情况下,权重越小,则归零的可能性越大。通常,此处可以使用将权重设置为零或将权重衰减为接近零的任何附加或替代修剪方法,包括随机地、概率地(例如,概率与其当前值成正比)和/或使用数学或统计启发式修剪。新权重生成:除了或者作为替代,将权重设置为零并将它们从存储器中删除(修剪)之外,本发明的一些实施例可以随机地生成(创建)新的权重或先前不存在的连接。新的权重可以随机地、概率地(例如,两个神经元“一起发射”的次数越多,它们将被连接的可能性就越大,和/或该连接的权重就越高),和/或使用数学或统计启发式生成。不断发展的稀疏神经网络:遗传算法(ga)可用于训练神经网络。ga表示作为人工“染色体”的神经网络的权重集,例如,其中每个染色体表示一个神经网络。遗传算法可以通过执行以下步骤来进化此类染色体的种群:(a)测量每个染色体的适应度或准确性(例如,训练集上的平均损失越低,适应性越好),(b)选择合适的染色体进行繁殖,(c)在成对的父母染色体之间进行重组或杂交(例如,从父母中随机选择权重以创建后代),以及(d)突变后代。虽然ga在训练期间通常会遭受太多的可变性和波动性,但是本文所公开的稀疏神经网络的紧凑和快速表示可以提供平衡以有效地进化神经网络。替代地或附加地,也可以使用基因编程(gp)。gp与ga的工作方式类似,不同之处在于,它不是将神经网络表示为染色体,而是将其表示为“树”。因此,神经网络架构(各层及其连接)可以表示为并演变为gp树。虽然ga通常假定层和神经元的数量固定(并且仅演化连接),但是gp会演化层的数量,神经元数量和/或其连接。作为用于发展神经网络架构的另一种附加或替代方法,也可以应用强化学习,其中,随机地修改神经网络架构的单个实例以使总体准确性最大化。基于偏置的神经元修剪:偏置单元可以通过在神经元的所有权重上添加恒定值来“偏置”训练期间神经元的权重。如果偏置值足够低(例如,较大的负值),则偏置单元可以将所有神经元的权重变换为负值。偏置单元可以例如利用诸如整流线性单元(relu)的激活函数消除来自神经元的任何输出,其中所有负值或低于阈值被清零。实际上,这会关闭整个神经元,从网络中修剪整个神经元,包括其所有传入和传出权重。这可以通过例如本文公开的正则化方法来实现,但是在这种情况下,将值推到负值或低于阈值目标而不是零。参考图5,其示意性地示出了根据本发明的实施例的用于生成和/或存储稀疏神经网络的系统500。系统500可以存储和/或生成数据结构,并实现参照图1至图4描述的神经网络的训练和预测。系统500可以包括一个或多个本地端点设备550和经由网络520或计算云可被本地设备访问的一个或多个远程服务器510。典型地,神经网络由远程服务器510训练并在一个或多个本地端点设备550处运行以进行预测,尽管根据本发明的实施例,远程服务器510和/或本地端点设备550可以使用稀疏神经网络进行训练和/或预测。特别地,为稀疏神经网络提供数据表示(例如,图2的206),该数据表示足够紧凑以允许通常具有非常有限的存储器和处理能力的本地端点设备550基于稀疏神经网络来训练和/或预测。当本地端点设备550执行训练和运行预测时,远程服务器510可以被移除。远程服务器510可以具有用于存储神经网络的存储器515和用于基于神经网络进行训练和/或预测的处理器516。远程服务器510可以修剪密集神经网络(例如,图1的100)以生成稀疏神经网络(例如,图1的200),或者可以最初生成或接收稀疏神经网络。在一些实施例中,例如当使用密集神经网络时,远程服务器510可以具有专用硬件,该专用硬件包括用于存储神经网络的大存储器515和专用处理器516(例如,gpu)。存储器515可以存储包括训练数据集的数据517和表示神经网络的多个权重的数据。数据517还可以包括例如代码(例如,软件代码)或逻辑,例如,以使得能够根据本发明的实施例存储和检索数据517。本地端点设备550可以各自包括一个或多个存储器558,用于存储根据本发明的一些实施例中提供的数据表示(例如,图2的206,图3的306或图4的406)的稀疏神经网络。存储器558可以存储具有唯一索引(例如,数据表示206、306和406的第1列和第2列)(或与唯一索引相关联)的稀疏神经网络的多个权重中的每一个(例如,数据表示206、306和406的列3)。唯一索引可以唯一地标识一对具有由该权重表示的连接的人工神经元。在一个实施例中,可以由三元组表示的每个权重定义:(1)第一索引值,其标识由权重连接的第一或“从”层中的神经元,(2)第二索引值,其标识通过权重连接的第二或“至”层中的神经元,以及(3)权重的值。通过独立地索引权重,存储器558可以仅存储用于具有非零权重的连接的条目(例如,删除或忽略用于断开连接或没有与零权重相关联的连接的条目)。与完全连接的神经网络相比,用于存储稀疏神经网络的存储器558的使用率可以降低到用于密集神经网络的,用于x%稀疏度,且每个权重条目的大小为两倍的存储器的2×(100-x)%,(例如,99%的稀疏神经网络仅使用用于密集表示的存储器量的2%,即存储器使用量减少50倍)。本地端点设备550可各自包括一个或多个处理器556,该处理器556用于基于存储在存储器558中的稀疏神经网络的权重训练和/或执行预测。在预测期间,神经网络向前运行一次。在训练期间,神经网络运行两次,一次向前运行以生成输出,而一次向后运行以进行纠错(例如反向传播)。每次运行神经网络时,计算数量都会减少,并且速度与神经网络中权重数量的减少成比例地增加。对于具有x%稀疏度的稀疏神经网络,处理器556可以运行神经网络(速度提高100/(100-x)倍,计算量减少x%)。本地端点设备550可以包括智能设备、个人计算机、台式计算机、移动计算机、膝上型计算机和笔记本计算机或任何其他合适的设备,例如蜂窝电话、个人数字助理(pda)、视频游戏控制台等,并且可以包括有线或无线连接或调制解调器。本地端点设备550可以包括一个或多个输入设备552,用于从用户接收输入(例如,神经网络参数,例如神经元的数量、大小、尺寸和配置、突触和层、准确性或训练阈值等)。本地端点设备550可以包括一个或多个输出设备554(例如,监视器或屏幕),用于通过计算机550或数据库510生成的数据显示给用户。在各种应用中,本地端点设备550是用于图像识别、计算机视觉、虚拟或增强现实、语音识别、文本理解或深度学习的其他应用的系统的一部分。在面部识别的应用中,设备可以使用稀疏神经网络有效地执行面部识别,以在检测到匹配时触发设备解锁自身或物理门。在安全性的应用中,安全相机系统可以使用稀疏神经网络来有效地检测安全漏洞并发出警报或其他安全措施。在自动驾驶的应用中,车辆计算机可以使用稀疏神经网络来控制驾驶操作,例如,转向以避开被检测到的物体。连接本地端点设备550和远程服务器510的网络520可以是任何公共或专用网络,例如互联网。可以通过有线、地面无线、卫星或本领域众所周知的其他系统来访问网络520。本地端点设备550和远程服务器510可以包括分别用于执行根据本发明的实施例的操作的一个或多个控制器或处理器556和516以及分别用于存储数据517和/或可由处理器执行的指令(例如,用于应用根据本发明实施例的方法的软件)的一个或多个存储器单元558和515。处理器556和516可以包括,例如,中央处理单元(cpu)、图形处理单元(gpu)、现场可编程门阵列(fpga)、专用集成电路(asic)、数字信号处理器(dsp)、微处理器、控制器、芯片、微芯片、集成电路(ic)或任何其他合适的多用途或专用处理器或控制器。存储器单元558和515可以包括:例如,随机存取存储器(ram)、动态ram(dram)、闪存、易失性存储器、非易失性存储器、高速缓存存储器、缓冲器、短期存储器单元、长期存储器单元,或其他合适的存储器单元或存储单元。可以使用其他设备和配置,例如,数据517可以存储在存储器558中,并且不使用单独的服务器510。参考图6,其是根据本发明的一些实施例的用于生成稀疏神经网络的方法的流程图。处理器(例如,图5的一个或多个处理器556)可以使用存储在存储器(例如,图5的一个或多个存储器单元558)中的数据来执行图6的操作。在操作600中,处理器可以生成或接收密集神经网络并将其存储在存储器中。密集神经网络可以在彼此连接的相邻层中具有多数或高于阈值百分比的神经元。参照图1描述密集神经网络的示例。在操作602中,处理器可以生成、训练或接收稀疏神经网络。在一个实施例中,处理器可以通过修剪操作600的密集神经网络的权重来生成稀疏神经网络,或者可以从头生成稀疏神经网络。处理器可以在神经网络的训练阶段期间和/或之后修剪神经网络。处理器可以使用l1正则化、阈值化、舍入和/或随机归零来修剪权重。处理器可以随机地、概率地和/或启发地修剪权重。处理器可以通过连接创建在稀疏神经网络中生成一个或多个新权重。新的权重可以随机地、概率地和/或启发地产生。在一些实施例中,可以使用进化计算(遗传算法或遗传编程)或使用强化学习来进化稀疏神经网络。在操作602中的稀疏神经网络可以由多个权重表示。每个权重可以表示多个神经元层的不同层中的一对多个人工神经元之间的唯一连接。可以在相邻层(局部连接)、非相邻层(跳过连接)和/或同一单层内(循环连接)的神经元之间建立连接。稀疏神经网络可能具有少数或低于阈值百分比的相邻神经元层中连接的神经元对。参照图2至图4描述了稀疏神经网络的示例。在操作604中,处理器可以存储与唯一索引相关联的稀疏神经网络的多个权重中的每个权重。唯一索引可以唯一地识别一对具有由权重表示的连接的人工神经元。处理器可以仅在存储器中存储表示神经元对之间的连接的非零权重,并且可以不存储表示神经元对之间的无连接的零权重。在一个实施例中,每个非零权重可以由三元组值(例如,图2中206、图3中306、或图4中406中的三元组行)表示,该值包括(1)索引的第一值,其标识不同层中的第一层中的所述对的第一神经元(列1),(2)索引的第二值,其标识不同层中的第二层中的所述对的第二神经元(列2),以及(3)重量的值(列3)。在操作606中,例如在预测模式下,处理器可以从存储器中检索并运行操作604的稀疏神经网络,仅基于稀疏神经网络的非零权重(而不基于零权重)计算输出。为了进行预测,处理器可以将源数据输入到稀疏神经网络的输入层中,通过仅通过将该层的神经元连接到后续层的非零权重来对每一层中的数据进行迭代操作,从而通过稀疏神经网络的多个神经元层传播数据,并输出稀疏神经网络最后一层的结果。例如,在训练模式下,处理器可以将稀疏神经网络的最后一层输出的结果与训练数据集的结果进行比较,并基于该比较来修改一个或多个权重。可以使用其他操作或操作顺序。例如,代替在操作600中从密集神经网络开始并修剪密集神经网络以生成稀疏神经网络,一些实施例可以跳过操作600,并通过重新生成或获得稀疏神经网络来在操作502处开始处理。结果:将本发明的实施例应用于几个深度学习基准导致神经网络中权重数量减少90至99.9%,而准确性没有任何(或基本上没有)下降。这相当于神经网络的计算速度提高了10到1000倍(在预测模式下,而且在训练模式下,因为网络在每次训练迭代中变得稀疏),并且存储器使用量减少了5到500倍。因此,深度学习网络可以在具有最小数量的cpu能力和存储器可用性的设备(例如,图5的本地终结点设备550)上高效运行,而不仅仅是云或网络端服务器(例如,图5的远程服务器510)中的专门硬件,这是迄今为止无法实现的。另外,权重的紧凑(例如,三元组)表示可以容易地在任何硬件(cpu、gpu等)上并行化,以进一步提高处理速度。所公开的紧凑(例如,三元组)表示进一步允许容易地添加“跳过连接”(例如,图3的302)和“循环连接”(例如,图3的304)。在神经网络中,通常来自层n的神经元仅连接到相邻层n 1中的神经元。但是,几种方法(例如“resnet”)表明,通过添加跳过连接(从n层到n x层,其中x>1),可以显著改善预测。但是,使用矩阵表示很难实现跳过连接(例如,需要从n层到n x层的密集连接,这会激增模型中的权重数量)。使用根据本发明的一些实施例的紧凑的(例如,三元组)表示,可以容易地添加跳过连接(例如,由三元组的表示=从神经元id、至神经元id、权重,其中“从神经元”和“至神经元”可以是非相邻或较远的层),而不会造成任何性能损失。使用紧凑的(例如,三元组)表示,本发明的实施例可以从稀疏神经网络开始。也就是说,代替从密集神经网络开始然后修剪,这样的实施例可能已经从稀疏神经网络开始。由于使用矩阵表示的实现困难,目前尚未积极研究这些有前途的稀疏网络。根据本发明的实施例,现在提供了用于存储和运行稀疏神经网络的紧凑且快速的机制。此外,稀疏神经网络的这些紧凑表示可以提供足够的效率来发展稀疏神经网络。为了加快卷积nn的训练和预测,卷积运算(例如,通常相对较慢和复杂)可以等效地通过对重新排列和重复的项执行的矩阵乘法运算来执行(例如,与卷积运算相比,通常相对较快且较不复杂)。此转换称为“img2col”函数。一些实施例提供了适用于稀疏cnn的新的和更紧凑的img2col函数。在常规img2col函数中,构造了两个自定义矩阵以表示由层执行的每个卷积运算,从而每个行和列的乘法都表示卷积运算。本发明的实施例可以提供修改的img2col函数,其中一些核被清零,并且可以修改相关联的矩阵以省略或删除这些行和列。与标准img2col运算相比,这导致与较少的乘法运算关联的更紧凑的矩阵,以实现相同的卷积结果。在前面的描述中,描述了本发明的各个方面。为了说明的目的,阐述了特定的配置和细节以便提供对本发明的透彻理解。然而,对于本领域普通技术人员而言,显然可以在没有本文所呈现的具体细节的情况下实践本发明。此外,可以省略或简化众所周知的特征,以免模糊本发明。除非另有特别说明,从以下讨论中显而易见,应理解,在整个说明书讨论中,利用诸如“处理”、“计算”、“计量”、“确定”等的术语的讨论是指计算机或计算系统或类似电子计算设备的操作和/或过程,其将表示为计算系统的寄存器和/或存储器中的物理(例如电子)量的数据处理和/或转换为类似表示为计算系统的存储器、寄存器或其他此类信息存储、传输或显示设备中的物理量的其他数据。前述流程图和框图示出了根据本发明的各种实施方式的系统和方法的可能的实现的架构,功能和操作。就这一点而言,流程图或框图中的每个框可以表示代码的模块、段或部分,其可以包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方式中,方框中指出的功能可以不按图中指出的顺序发生或由不同的模块发生。除非明确说明,否则本文描述的方法实施方式不限于特定顺序或序列。另外,所描述的方法实施方式中的一些或其元素可以在相同的时间点发生或执行。框图和/或流程图说明的每个方框以及框图和/或流程图说明中的方框的组合,可以通过执行特定功能或动作的基于专用硬件的系统,或专用硬件和计算机指令的组合来实现。本发明的实施方式可以包括诸如非暂时性计算机或处理器可读介质的物品,或计算机或处理器非暂时性存储介质,诸如存储器(例如,图5的存储器单元515或558)、磁盘驱动器、或usb闪存、编码,包括或存储指令,例如计算机可执行指令,其在由处理器或控制器(例如,图5的处理器556)执行时执行本文公开的方法。在以上描述中,实施方式是本发明的示例或实施方式。“一个实施方式”,“实施方式”或“一些实施方式”的各种外观不一定都指相同的实施方式。尽管可以在单个实施方式的上下文中描述本发明的各种特征,但是也可以单独地或以任何合适的组合来提供实施方式的特征。相反,尽管为了清楚起见在本文中可以在单独的实施方式的上下文中描述本发明,但是本发明也可以在单个实施方式中实现。说明书中对“一些实施方式”,“实施方式”,“一个实施方式”或“其他实施方式”的引用是指结合实施方式描述的特定特征、结构或特性包括在本发明的至少一些实施方式中,但不一定是所有实施方式中。还将认识到,在本发明的实施方式中,以上描述的本发明的方面可以被组合或以其他方式共存。权利要求书和说明书中提出的描述,示例、方法和材料不应解释为限制性的,而仅是示例性的。尽管本文已经图示和描述了本发明的某些特征,但是本领域普通技术人员可以想到许多修改、替换、改变和等同物。因此,应理解,所附权利要求书旨在涵盖落入本发明的真实精神的所有此类修改和改变。尽管已经针对有限数量的实施方式描述了本发明,但是这些不应被解释为对本发明范围的限制,而是作为一些优选实施方式的示例。其他可能的变化、修改和应用也在本发明的范围内。本文公开了不同的实施方式。某些实施方式的特征可以与其他实施方式的特征相结合;因此,某些实施方式可以是多个实施方式的特征的组合。当前第1页1 2 3 
技术特征:1.一种有效地存储稀疏神经网络的方法,所述方法包括:
获得多个权重的稀疏神经网络,每个权重表示多个神经元层的不同层中的一对多个人工神经元之间的唯一连接,其中,相邻神经元层中的少数神经元对通过权重在所述稀疏神经网络中连接;以及
将所述稀疏神经网络的所述多个权重中的每个权重与唯一索引相关联地存储,所述唯一索引唯一地标识一对具有由所述权重表示的连接的人工神经元,其中,仅存储表示神经元对之间的连接的非零权重并且不存储表示神经元对之间的无连接的零权重。
2.根据权利要求1所述的方法,包括存储标识每个权重的三元组值,所述三元组值包括:
所述索引的第一值,标识所述不同层中的第一层中的对的第一神经元,
所述索引的第二值,标识所述不同层中的第二层中的对的第二神经元,以及
所述权重的值。
3.根据权利要求1所述的方法,包括:
根据所述稀疏神经网络中与非零权重相关联的所述索引的非顺序模式,从主存储器中获取存储在所述主存储器中非顺序位置中的权重;以及
将从所述主存储器中非顺序位置获取的所述权重存储到高速缓存存储器中的顺序位置。
4.根据权利要求1所述的方法,包括使用选自由以下项构成的组中的一种或多种数据表示来存储所述稀疏神经网络的权重值:压缩稀疏行(csr)表示、压缩稀疏列(csc)表示、稀疏张量表示、映射表示、列表表示和稀疏矢量表示。
5.根据权利要求1所述的方法,包括:
接收包括多个权重的密集神经网络,其中,相邻神经元层中的多数神经元对通过权重在所述密集神经网络中连接;以及
通过修剪所述密集神经网络的权重,将所述密集神经网络转换为所述稀疏神经网络。
6.根据权利要求5所述的方法,其中,所述修剪在所述神经网络的训练阶段期间执行。
7.根据权利要求6所述的方法,包括使用选自由l1正则化、lp正则化、阈值化、随机归零和基于偏置的修剪构成的组中的一种或多种修剪技术来修剪。
8.根据权利要求5所述的方法,其中,所述修剪在所述神经网络的训练阶段之后执行。
9.根据权利要求5所述的方法,其中,所述多个权重中的一个或多个权重被随机地、概率地或启发式地修剪。
10.根据权利要求1所述的方法,包括仅缓存由相关联的唯一索引标识的所述非零权重,从而连续地存储具有非连续索引的权重,跳过与所述零权重相关联的索引。
11.根据权利要求1所述的方法,包括在所述稀疏神经网络中生成一个或多个新权重。
12.根据权利要求1所述的方法,其中,所述多个权重中的一个或多个权重表示非相邻层中的成对人工神经元之间的跳过连接。
13.根据权利要求1所述的方法,其中,所述神经网络是循环神经网络,并且所述多个权重中的一个或多个权重表示相同层内的成对人工神经元之间的循环连接。
14.根据权利要求1所述的方法,包括使用进化算法或强化学习来训练所述稀疏神经网络。
15.一种用于有效地存储稀疏卷积神经网络的方法,所述方法包括:
获得一个或多个神经元层中包括多个神经元通道的稀疏卷积神经网络,每个神经元通道包括多个人工神经元,所述稀疏卷积神经网络由多个卷积滤波器表示,每个卷积滤波器包括多个权重,所述权重表示输入层的输入通道的神经元与卷积层的卷积通道的神经元之间的唯一连接,其中,相邻神经元层中的少数通道对通过所述稀疏神经网络中的卷积滤波器连接;
存储与唯一索引相关联的所述稀疏神经网络的所述多个卷积滤波器中的每个卷积滤波器,所述唯一索引唯一地标识一对通道,所述一对通道具有由所述卷积滤波器的权重表示的连接,其中,仅存储表示通道之间的连接的具有非零权重的卷积滤波器,而不存储表示通道之间未连接的具有零权重的卷积滤波器。
16.根据权利要求15所述的方法,包括:
接收包括多个卷积滤波器的密集卷积神经网络,其中,相邻神经元层中的多数通道对通过所述密集卷积神经网络中的卷积滤波器连接;以及
通过修剪所述密集卷积神经网络的滤波器,将所述密集卷积神经网络转换为所述稀疏卷积神经网络。
17.根据权利要求15所述的方法,包括存储标识每个卷积滤波器的三元组信息,所述三元组信息包括:
所述索引的第一值,标识所述通道对的所述输入通道,
所述索引的第二值,标识所述通道对的所述输出通道,以及
所述卷积滤波器的权重。
18.根据权利要求15所述的方法,包括:
根据所述稀疏卷积神经网络中与非零卷积滤波器相关联的所述索引的非顺序模式,从主存储器中获取存储在所述主存储器中非顺序位置中的卷积滤波器;以及
将从所述主存储器中的非顺序位置获取的所述滤波器存储到高速缓存存储器中的顺序位置。
19.根据权利要求15所述的方法,包括:代替执行与所述卷积滤波器相关联的卷积运算,而是对具有权重的滤波器的变换集合执行矩阵乘法,所述权重被重新布置和复制以产生与所述卷积运算等效的结果。
20.根据权利要求19所述的方法,包括乘以省略与所有零值相关联的行和列的密集矩阵。
21.一种用于有效地存储稀疏神经网络的系统,所述系统包括:
一个或多个处理器,被配置为获得多个权重的稀疏神经网络,每个权重表示多个神经元层的不同层中的一对多个人工神经元之间的唯一连接,其中,相邻神经元层中的少数神经元对通过权重在所述稀疏神经网络中连接;以及
一个或多个存储器,被配置为将所述稀疏神经网络的所述多个权重中的每个权重与唯一索引相关联地存储,所述唯一索引唯一地标识一对具有由所述权重表示的连接的人工神经元,其中,仅存储表示神经元对之间的连接的非零权重并且不存储表示神经元对之间的无连接的零权重。
22.根据权利要求21所述的系统,其中,所述一个或多个存储器被配置为存储标识每个权重的三元组值,所述三元组值包括:
所述索引的第一值,标识所述不同层中的第一层中的对的第一神经元,
所述索引的第二值,标识所述不同层中的第二层中的对的第二神经元,以及
所述权重的值。
23.根据权利要求21所述的系统,其中,所述一个或多个存储器包括:
主存储器;以及
高速缓存存储器,
其中,所述一个或多个处理器被配置为根据所述稀疏神经网络中与非零权重相关联的所述索引的非顺序模式,从所述主存储器中获取存储在所述主存储器中非顺序位置中的权重;以及将从所述主存储器中非顺序位置获取的所述权重存储到高速缓存存储器中的顺序位置。
24.根据权利要求21所述的系统,其中,所述一个或多个处理器被配置为接收包括多个权重的密集神经网络,其中,相邻神经元层中的多数神经元对通过权重在所述密集神经网络中连接,并且通过修剪所述密集神经网络的权重,将所述密集神经网络转换为所述稀疏神经网络。
25.一种用于有效地存储稀疏卷积神经网络的系统,所述系统包括:
一个或多个处理器,被配置为获得稀疏卷积神经网络,所述稀疏卷积神经网络包括一个或多个神经元层中的多个神经元通道,每个神经元通道包括多个人工神经元,所述稀疏卷积神经网络由多个卷积滤波器表示,每个卷积滤波器包括多个权重,所述权重表示输入层的输入通道的神经元与卷积层的卷积通道的神经元之间的唯一连接,其中,相邻神经元层中的少数通道对通过所述稀疏神经网络中的卷积滤波器连接;
一个或多个存储器,被配置为存储与唯一索引相关联的所述稀疏神经网络的所述多个卷积滤波器中的每个卷积滤波器,所述唯一索引唯一地标识一对通道,所述一对通道具有由所述卷积滤波器的权重表示的连接,其中,仅存储表示通道之间的连接的具有非零权重的卷积滤波器,而不存储表示通道之间未连接的具有零权重的卷积滤波器。
26.根据权利要求25所述的系统,其中,所述一个或多个存储器被配置为存储标识每个卷积滤波器的三元组信息,所述三元组信息包括:
所述索引的第一值,标识所述通道对的所述输入通道,
所述索引的第二值,标识所述通道对的所述输出通道,以及
所述卷积滤波器的权重。
27.根据权利要求25所述的系统,其中,所述一个或多个存储器包括:
主存储器;以及
高速缓存存储器,
其中,所述一个或多个处理器被配置为根据所述稀疏卷积神经网络中与非零卷积滤波器相关联的所述索引的非顺序模式,从主存储器中获取存储在所述主存储器中非顺序位置中的卷积滤波器,以及将从所述主存储器中非顺序位置获取的所述滤波器存储到高速缓存存储器中的顺序位置。
28.根据权利要求25所述的系统,其中,所述一个或多个处理器被配置为接收包括多个卷积滤波器的密集卷积神经网络,其中,相邻神经元层中的多数通道对通过所述密集卷积神经网络中的卷积滤波器连接,并且通过修剪所述密集卷积神经网络的滤波器,将所述密集卷积神经网络转换为所述稀疏卷积神经网络。
29.根据权利要求25所述的系统,包括:代替执行与所述卷积滤波器相关联的卷积运算,而是所述一个或多个处理器被配置为对具有权重的滤波器的变换集合执行矩阵乘法,所述权重被重新布置和复制以产生与所述卷积运算等效的结果。
30.根据权利要求29所述的系统,其中,所述一个或多个处理器被配置为乘以省略与所有零值相关联的行和列的密集矩阵。
技术总结提供了一种用于存储稀疏神经网络的设备、系统和方法。可以获得稀疏神经网络的多个权重。每个权重可以表示多个神经元层的不同层中的一对多个人工神经元之间的唯一连接。相邻神经元层中的少数对神经元在稀疏神经网络中连接。稀疏神经网络的多个权重中的每个可以与唯一索引相关联地存储。唯一索引可以唯一地识别一对具有由权重表示的连接的人工神经元。可以仅存储表示神经元对之间的连接的非零权重(并且可以不存储表示神经元对之间的无连接的零权重)。
技术研发人员:伊莱·戴维;埃里·鲁滨
受保护的技术使用者:深立方有限公司
技术研发日:2018.09.20
技术公布日:2020.06.05