使用散列的神经网络中的大规模分类的制作方法
【技术领域】
[0001]本说明书涉及使用神经网络的图像识别。
【背景技术】
[0002]具有若干级和层次的特征的深度神经网络可以具有非常大的学习能力并且可用在语音或图像识别中。深度神经网络通常在输入和输出空间之间,具有以前馈方式连接的若干层的单元。深度神经网络中的每一层可以执行特定功能,例如,卷积、池、归一化或矩阵乘法和非线性激活。
【发明内容】
[0003]在一些实施方式中,系统使用矩阵乘法来确定用于神经网络中的特定层的输出。例如,矩阵乘法是激活向量(例如,用于特定层的输入)和权重矩阵(例如用于特定层中的一些节点的权重)的组合。神经网络使用快速局部敏感散列技术来接近矩阵乘法的结果,以允许神经网络生成用于大量,例如几百万输出类的评分。
[0004]当神经网络使用散列技术时,神经网络可以近似计算用于神经网络中的特定层的权重W和激活向量X的矩阵乘积,使得特定层中的节点数目,例如输出维度可以增加若干数目级。在一些示例中,特定层可以是用来确定神经网络的输入的分类的神经网络中的输出层,例如最终分类层。
[0005]通常,在本说明书中所述的主题的一个创新方面能以一种通过神经网络的多层的每一个来处理输入来生成输出的方法实现,其中,神经网络的多层中的每一层包括相应的多个节点,针对多层中的特定层,所述方法包括如下动作:由分类系统接收激活向量作为用于特定层的输入;使用激活向量和将数值映射到特定层中的节点的散列表来选择特定层中的一个或多个节点;以及使用所选择的节点来处理激活向量以生成用于特定层的输出。该方面的其他实施例包括分别被配置成执行该方法的动作的相对应的计算机系统、装置和记录在一个或多个计算机存储设备上的计算机程序。一个或多个计算机的系统能被配置成通过使软件、固件、硬件或它们的组合安装在用来使或导致系统执行动作的系统上来实现特定操作或动作。一个或多个计算机程序能被配置成通过包括当由数据处理装置执行时使装置执行动作的指令来实现特定操作或动作。
[0006]上述和其他实施例可分别可选地单独或组合地包括下述特征中的一个或多个。该方法可以包括通过将与未被选择的节点相对应的激活向量中的值设定为O来创建修改的激活向量。使用所选择的节点处理激活向量以生成用于特定层的输出可以包括:处理所修改的激活向量以生成用于特定层的输出。针对特定层的节点中的每一个节点,散列表存储该节点的权重值的相应的散列。选择一个或多个节点可以包括:计算用于激活向量的至少一部分的散列码,确定散列表中相对于激活向量的该部分的散列码的一个或多个最相似的散列,以及选择与所述一个或多个最相似的散列相对应的节点。针对特定层的节点中的每一个节点,散列表存储该节点的相应的节点标识符。
[0007]在一些实施方式中,激活向量包括实数值。该方法可包括将激活向量中的每一实数转换成二进制值来创建二进制向量,确定二进制向量的多个部分,以及针对所述多个部分中的每一个部分,将该部分中的二进制值转换成整数。使用激活向量和散列表来选择特定层中的节点可以包括通过将整数用作散列表的输入来选择特定层中的一个或多个节点。整数可以包括第一子集和互斥的第二子集。通过将整数用作散列表的输入来选择特定层中的一个或多个节点可以包括:针对第一子集中的每一整数,确定散列表不包括用于节点的相对应的第一条目,针对第二子集中的每一整数,确定散列表包括用于节点的相对应的第二条目,以及将特定层中的一个或多个节点选择为由第二条目识别的节点。针对第一子集中的每一整数,确定散列表不包括用于节点的相对应的第一条目可以包括:针对第一子集中的至少一些整数,确定散列表不包括具有当前时间戳的相应的第一条目。该方法可以包括:针对输出中的至少一些输出值,确定相应输出值的精度值;以及通过更新用于特定层中的特定节点的散列表中的第一节点条目的时间戳、并且不更新用于不与特定层中的任何节点相对应的散列表中的第二节点条目的时间戳,使用精度值来更新散列表中的至少一些映射。该方法可以包括由分类系统确定具有旧时间戳的散列表中的旧条目,以及从散列表移除旧条目。
[0008]在一些实施方式中,特定层可以包括神经网络的输出层。该方法可以包括:根据用于特定层的输出确定最佳输出值,以及将最佳输出值用作神经网络的输出。分类系统可以是图像分类系统。输出层中的每一节点可以与相应对象类相对应。该方法可以包括接收图像,以及将图像用作神经网络的输入。将最佳输出值用作神经网络的输出可以包括将图像中的对象分类为属于与生成最佳输出值的节点相对应的类。接收图像可以包括从设备接收识别图像的数据,并且将图像用作神经网络的输入可以包括:响应于接收到识别图像的数据,通过另一设备上的分类系统将图像用作神经网络的输入。
[0009]在本说明书中所述的主题可以在具体实施例中实现并且可以得到下述一个或多个优点。在一些实施方式中,与不使用下述方法的其他系统,例如,标准的软矩阵层或层次软矩阵层相比,分类系统可以以更快速率训练大规模神经网络,例如,根据步骤数、总时间或两者。在一些实施方式中,分类系统的计算成本可以仅取决于K(所使用的权重向量数或在输出层中识别的类的数目),并且可以与神经网络的输出层中的类的总数无关。在一些实施方式中,分类系统可以使用几十万或几百万个的类以及分类系统,以与例如常见的具有几千个类的深度神经网络几乎相同的计算成本,来分类对象。在一些实施方式中,分类系统可以例如使用另外的数据结构而用来训练大规模神经网络。例如,当在训练过程期间连续地更新权重矩阵时,分类系统可以包括具有用于跟踪和更新散列表的时间戳的逆向散列表。
[0010]在一些实施方式中,与以相同的方式不使用散列表的其他分类系统相比,具有在输出层中具有N类并且对输出层中的类选择前K个权重向量的神经网络的分类系统可以具有提高的速率N/K。在一些实施方式中,当计算散列码时,分类系统仅执行比较,例如,这允许分类系统使用整数运算来确定散列码。在一些实施方式中,分类系统计算散列码而不产生分支预测损失。在一些实施方式中,下述的分类系统的复杂度可以取决于激活向量X的维度、激活向量X被划分于其中的M个部分的数目、分类系统执行矩阵乘法的节点的数目K或这些中的两个或多个的组合。例如,由于这些值与神经网络的输出层中的类的数目无关,因此分类系统可以将任意数目的类包括在输出层中,并且例如同时在时间复杂性和精度之间提供折衷。
[0011]在附图和下述描述中阐述本说明书的主题的一个或多个实施例的细节。从该描述、附图和权利要求,该主题的其他特征、方面和优点将是显而易见的。
【附图说明】
[0012]图1是使用散列表来确定特定层y中的哪些节点使用激活向量X执行矩阵乘法的分类系统的示例。
[0013]图2是使用层中的所选择的节点,处理激活向量来生成用于该层的输出的过程的流程图。
[0014]图3是将整数用作散列表的输入,选择层中的节点的过程的流程图。
[0015 ]不同图中的相同的附图标记表示相同的元件。
【具体实施方式】
[0016]本说明书描述用于神经网络,例如深度神经网络的方法,该方法实现不同层的矩阵乘积的近似计算,使得在神经网络中的特定层的输出维度的数目可增加若干数量级,同时保持计算成本大致相同并且几乎没有精度损失。例如,神经网络可以在分类过程期间使用矩阵乘法W*x,其中,X是来自层的输入,W是指下一层的输出的连接的权重。使用矩阵乘法可以例如在实时计算期间实现几十万至几百万类的大规模分类,来基于从用户接收的输入为用户提供分类值。在一些示例中,深度神经网络可以将矩阵乘法用于多类分类或二进制分类。
[0017]在一些实施方式中,神经网络使用赢家通吃(WTA)散列方法来降低矩阵乘法的计算时间。例如,分类系统使用WTA函数,将特定神经网络层y的权重矩阵W存储在散列表中。运行时,分类系统使用来自在前层X的激活,例如,来自在前层的输出值,来计算散列码,并且使用散列码基于激活来确定当前层y中的哪些节点最可能将被触发。例如,分类系统将散列码用作散列表的输入来确定节点,然后确定用于那些节点的相