用于布尔神经网络的设备和方法与流程

未命名 09-08 阅读:118 评论:0


1.本公开总体上涉及人工智能、机器学习和神经网络。具体地,本公开的一些实施例涉及神经网络的实现和训练。


背景技术:

2.深度神经网络(deep neural network,dnn)是受到构成生物大脑的生物神经网络的模糊启发的计算系统。深度神经网络可以通过考虑示例进行训练以执行任务,通常不使用任何任务特定规则进行编程。例如,在图像识别中,通过分析已手动标记为包括或不包括汽车的示例图像,并使用结果识别其它图像中的汽车,可以训练这些深度神经网络以识别包括汽车的图像。深度神经网络能够在不具有任何关于汽车的先验知识的情况下做到这一点。相反,它们会自动学习从训练数据中识别特征。训练深度神经网络,或一般的机器学习模型,可能是一个资源密集型过程。此外,训练过的机器学习模型的复杂度对于某些设备而言可能过高。


技术实现要素:

3.发明内容简单介绍了一些概念,在具体实施方式中会进一步描述这些概念。发明内容并非旨在确定所要求保护的主题的关键特征或必要特征,也并非旨在用于限制所要求保护的主题的范围。
4.本公开的目的是提供具有低复杂度的神经网络。此外,还公开了用于训练神经网络的高效方法。上述和其它目的可以通过独立权利要求的特征来实现。其它实现方式在从属权利要求、说明书和附图中是显而易见的。
5.根据第一方面,提供了一种用于处理神经网络的设备。该设备可以被配置为提供神经网络。神经网络的至少一个神经元可以配置有与相应的二进制输入相关联的二进制权重。该设备还可以被配置为评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数。布尔函数的输入可以包括二进制权重和相应的二进制输入。该设备可以被配置为:当评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数时,基于布尔函数的至少二进制输出的和确定至少一个神经元的预激活值。该设备可以被配置为基于预激活值的阈值确定至少一个神经元的二进制输出。此方案实现了低复杂度的神经网络的二进制实现。
6.根据第一方面的一种实现方式,设备还可以被配置为:基于配置为将布尔函数的二进制输出作为输入的逻辑阈值门,确定至少一个神经元的二进制输出。此方案为二进制神经元提供了高效的硬件实现。
7.根据第一方面的一种实现方式,设备还可以被配置为通过与门、或门或者异或门计算布尔函数。此方案为不同类型的二进制神经元提供了高效的硬件方案。
8.根据第一方面的一种实现方式,设备还可以被配置为基于布尔函数的二进制输出和二进制偏置的和确定预激活值。此方案能够通过使用二进制偏置作为二进制神经元的附
加可训练参数来改进神经网络的训练。
9.根据第一方面的一种实现方式,设备还可以可以被配置为基于以下等式确定预激活值s,
[0010][0011]
其中w0为二进制偏置,bi为第i个二进制输入,wi为第i个二进制权重,l()为布尔函数,m为至少一个神经元的输入数量。此方案能够高效计算二进制神经元的预激活。
[0012]
根据第一方面的一种实现方式,设备还可以被配置为基于以下等式确定至少一个神经元的二进制输出o:
[0013][0014]
其中t是预激活值的阈值。此方案能够高效计算二进制神经元的输出。
[0015]
根据第二方面,提供了一种用于训练神经网络的方法。方法可以包括在神经网络的至少一个神经元处,从神经网络的下游层的至少一个神经元接收二进制反向传播信号。二进制反向传播信号可以指示损失函数相对于至少一个神经元的二进制输出的变化的趋势。至少一个神经元可以配置有与相应的二进制输入关联的二进制权重。方法可以包括通过至少一个神经元评估布尔函数。布尔函数的输入可以包括至少一个神经元的第i个二进制权重和相应的二进制输入。方法可以包括确定布尔函数相对于第i个二进制权重的反转的趋势。方法可以包括:基于布尔函数相对于第i个二进制权重的反转的趋势和损失函数相对于至少一个神经元的二进制输出的变化的趋势,确定是否反转第i个二进制权重。此方案可以以降低的复杂度在二进制域中训练神经网络。
[0016]
根据第二方面的一种实现方式,损失函数相对于至少一个神经元的二进制输出的变化的趋势可以指示至少一个神经元的二进制输出的变化是否导致损失函数增加或减小。布尔函数相对于第i个二进制权重的反转的趋势可以指示第i个二进制权重的反转是否导致布尔函数增加或减小。此方案能够确定损失函数的趋势和布尔函数的趋势,从而以降低的复杂度在二进制域中训练神经网络。
[0017]
根据第二方面的一种实现方式,方法还可以包括:响应于确定第i个二进制权重的反转导致损失函数减小,确定反转第i个二进制权重。方法还可以包括:响应于确定第i个二进制权重的反转导致损失函数增加,确定不反转第i个二进制权重。此方案能够在二进制域中确定是否反转特定的二进制权重以训练神经网络,从而高效地训练神经网络。
[0018]
根据第二方面的一种实现方式,方法还可以包括:如果布尔函数相对于第i个二进制权重的反转增加,并且损失函数相对于至少一个神经元的二进制输出增加,则确定第i个二进制权重的反转导致损失函数增加。方法还可以包括:如果布尔函数相对于第i个二进制权重的反转增加,并且损失函数相对于至少一个神经元的二进制输出减小,则确定第i个二进制权重的反转导致损失函数减小。方法还可以包括:如果布尔函数相对于第i个二进制权重的反转减小,并且损失函数相对于至少一个神经元的二进制输出增加,则确定第i个二进制权重的反转导致损失函数减小。方法还可以包括:如果布尔函数相对于第i个二进制权重的反转减小,并且损失函数相对于至少一个神经元的二进制输出减小,则确定第i个二进制权重的反转导致损失函数增加。此方案能够确定第i个二进制权重的反转如何影响损失函
数,以便以降低的复杂度在二进制域中训练神经网络。
[0019]
根据第二方面的一种实现方式,方法还可以包括:至少一个神经元评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数。方法还可以包括:当评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数时,基于布尔函数的至少二进制输出的和确定至少一个神经元的预激活值。方法还可以包括:基于预激活值的阈值确定至少一个神经元的二进制输出。此方案实现了低复杂度的神经网络的二进制实现。
[0020]
根据第二方面的一种实现方式,方法还可以包括:基于配置为将布尔函数的二进制输出作为输入的逻辑阈值门,确定至少一个神经元的二进制输出。此方案为二进制神经元提供了高效的硬件实现。
[0021]
根据第二方面的一种实现方式,布尔函数可以通过与门、或门或者异或门计算。此方案为不同类型的二进制神经元提供了高效的硬件方案。
[0022]
根据第二方面的一种实现方式,方法还可以包括:基于损失函数相对于第i个二进制输入的变化的趋势,确定神经网络的至少一个上游神经元的第i个二进制上游反向传播信号。此方案能够确定二进制域中的反向传播信号,以降低训练神经网络的复杂度。
[0023]
根据第二方面的一种实现方式,方法还可以包括:如果损失函数相对于第i个二进制输入的增加而增加,则将第i个二进制上游反向传播信号设置为布尔值真。方法还可以包括:如果损失函数相对于第i个二进制输入的增加而不增加,则将第i个二进制上游反向传播信号设置为布尔值假。此方案为确定二进制域中的反向传播信号提供了一种高效的实现方式。
[0024]
根据第二方面的一种实现方式,方法还可以包括在至少一个神经元处从下游层的多个神经元接收多个二进制反向传播信号。方法还可以包括:确定指示第i个二进制权重的反转的反向传播信号的数量和指示第i个二进制权重的未反转的二进制反向传播信号的数量。方法还可以包括:如果指示第i个二进制权重的反转的二进制反向传播信号的数量大于指示第i个二进制权重的未反转的二进制反向传播信号的数量,则确定反转第i个二进制权重。方法还可以包括:如果指示第i个二进制权重的反转的二进制反向传播信号的数量小于或等于指示第i个二进制权重的未反转的二进制反向传播信号的数量,则确定不反转第i个二进制权重。此方案能够基于每个神经元的多个接收到的反向传播信号,在二进制域中高效地训练神经网络的神经元。
[0025]
根据第二方面的一种实现方式,方法还可以包括:确定指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量。方法还可以包括:确定指示将第i个二进制上游反向传播信号设置为布尔值假的反向传播信号的数量。如果损失函数相对于第i个二进制输入的增加而增加,则可以确定二进制反向传播信号指示将第i个二进制上游反向传播信号设置为布尔值真;如果损失函数相对于第i个二进制输入的增加而不增加,则设置为布尔值假。方法还可以包括:如果指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量大于或等于指示将第i个二进制上游反向传播信号设置为布尔值假的二进制反向传播信号的数量,则确定将第i个二进制上游反向传播信号设置为布尔值真。方法还可以包括:如果指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量小于指示将第i个二进制上游反向传播信号设置为布
尔值假的二进制反向传播信号的数量,则确定将第i个二进制上游反向传播信号设置为布尔值假。此方案提供了一种基于多个接收到的反向传播信号确定反向传播信号的高效实现方式,从而以降低的复杂度在二进制域中训练神经网络。
[0026]
根据第二方面的一种实现方式,方法还可以包括在至少一个神经元处从下游层的多个神经元中的每个神经元接收多个二进制反向传播信号。多个二进制反向传播信号中的每个二进制反向传播信号可以对应于小批量的多个数据样本。方法还可以包括为多个数据样本中的每个数据样本确定数据样本特定的预激活值。方法还可以包括:对于多个数据样本中的每个数据样本,确定指示第i个二进制权重的反转的反向传播信号的数量和指示第i个二进制权重的未反转的二进制反向传播信号的数量。方法还可以包括:对于多个数据样本中的每个数据样本,使用配置为将数据样本特定的预激活值与预激活值的阈值之间的差值作为输入的函数,缩放指示第i个二进制权重的反转的反向传播信号的数量和指示第i个二进制权重的未反转的二进制反向传播信号的数量。方法还可以包括:如果指示第i个二进制权重的反转的二进制反向传播信号的缩放数的和大于指示第i个二进制权重的未反转的二进制反向传播信号的缩放数的和,则确定反转第i个二进制权重。方法还可以包括:如果指示第i个二进制权重的反转的二进制反向传播信号的缩放数的和小于或等于指示第i个二进制权重的未反转的二进制反向传播信号的缩放数的和,则确定不反转第i个二进制权重。此方案能够基于小批量训练提高二进制域的训练效率。
[0027]
根据第二方面的一种实现方式,方法还可以包括:对于多个数据样本中的每个数据样本,确定指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量。方法还可以包括:对于多个数据样本中的每个数据样本,确定指示将第i个二进制上游反向传播信号设置为布尔值假的反向传播信号的数量。如果损失函数相对于第i个二进制输入的增加而增加,则可以确定二进制反向传播信号指示将第i个二进制上游反向传播信号设置为布尔值真;如果损失函数相对于第i个二进制输入的增加而不增加,则设置为布尔值假。方法还可以包括:对于多个数据样本中的每个数据样本,使用配置为将数据样本特定的预激活值与预激活值的阈值之间的差值作为输入的函数,缩放指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量和指示将第i个二进制上游反向传播信号设置为布尔值假的反向传播信号的数量。方法还可以包括:如果指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的缩放数的和大于或等于指示将第i个二进制上游反向传播信号设置为布尔值假的二进制反向传播信号的缩放数的和,则确定将第i个二进制上游反向传播信号设置为布尔值真。方法还可以包括:如果指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量的和小于指示将第i个二进制上游反向传播信号设置为布尔值假的二进制反向传播信号的数量的和,则确定将第i个二进制上游反向传播信号设置为布尔值假。此方案能够在使用小批量训练时,在二进制域中生成反向传播信号,以提高训练效率。
[0028]
根据第三方面,提供了一种用于训练神经网络的计算机程序。计算机程序可以包括程序代码,当计算机程序在计算机上执行时,程序代码被配置为使得执行第二方面的任何实现方式。
[0029]
根据第四方面,提供了一种用于处理神经网络的方法。方法可以包括提供神经网络。神经网络的至少一个神经元可以配置有与相应的二进制输入关联的二进制权重。方法
还可以包括评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数。布尔函数的输入可以包括二进制权重和相应的二进制输入。方法还可以包括:当评估二进制权重中的每个和相应的二进制输入中的每个的布尔函数时,基于布尔函数的至少二进制输出的和确定至少一个神经元的预激活值。方法还可以包括:基于预激活值的阈值确定至少一个神经元的二进制输出。此方案实现了低复杂度的神经网络的二进制实现。
[0030]
根据第五方面,提供了一种用于训练神经网络的设备。设备可以用于在神经网络的至少一个神经元处,从神经网络的下游层的至少一个神经元接收二进制反向传播信号。二进制反向传播信号可以指示损失函数相对于至少一个神经元的二进制输出的变化的趋势。至少一个神经元可以配置有与相应的二进制输入关联的二进制权重。设备可以用于通过至少一个神经元评估布尔函数。布尔函数的输入可以包括至少一个神经元的第i个二进制权重和相应的二进制输入。设备可以用于确定布尔函数相对于第i个二进制权重的反转的趋势。设备可以用于:基于布尔函数相对于第i个二进制权重的反转的趋势和损失函数相对于至少一个神经元的二进制输出的变化的趋势,确定是否反转第i个二进制权重。此方案可以以降低的复杂度在二进制域中训练神经网络。
[0031]
因此,本公开的实现方式可以提供用于以低复杂度处理和训练神经网络的设备、方法、计算机程序。根据下文描述的一种或多种示例性实现方式,本公开的这些和其它方面是显而易见的。
附图说明
[0032]
附图用于提供对示例性实施例的进一步理解,并构成本说明书的一部分,这些附图示出了示例性实施例,并与描述一起有助于解释示例性实施例。在附图中:
[0033]
图1示出了本公开的实施例提供的机器学习模型的训练和推理的示例;
[0034]
图2示出了用于实施本公开的一个或多个实施例的设备的示例;
[0035]
图3示出了本公开的实施例提供的布尔神经网络的示例;
[0036]
图4示出了本公开的实施例提供的布尔神经元的模型的示例;
[0037]
图5示出了本公开的实施例提供的逻辑运算的真值表的示例;
[0038]
图6示出了本公开的实施例提供的布尔神经元的硬件实现的示例;
[0039]
图7示出了本公开的实施例提供的变分反向传播方法的示例;
[0040]
图8示出了根据本公开的实施例,在变分反向传播中处理反向传播信号的示例;
[0041]
图9示出了根据本公开的实施例,用于权重的变分训练的变分真值表的示例;
[0042]
图10示出了根据本公开的实施例,用于计算反向传播信号的变分真值表的示例;
[0043]
图11示出了根据本公开的实施例,用于训练神经网络的方法的示例。
[0044]
在附图中,相同的附图标记用于指定相同的部件。
具体实施方式
[0045]
现在将详细参考示例性实施例,其示例在附图中示出。下文结合附图提供的详细描述旨在作为对本实施例的描述,并不打算仅表示可以构造或使用本示例的形式。描述阐述了示例的功能以及用于构造和操作示例的操作序列。但是,相同或等效的功能和序列可
以通过不同的示例来实现。
[0046]
图1示出了本公开的实施例提供的机器学习模型的训练和推理的示例。在本示例中,由深度神经网络(deep neural network,dnn)表示的机器学习模型110可以基于称为人工神经元的连接单元或节点的集合,连接单元或节点松散地模拟生物大脑中的神经元。人工神经元可以聚集成层,其中不同的层可以对这些层的输入进行不同类型的转换。人工神经元之间的连接可以与在dnn训练期间调整的权重关联。权重会增加或减少连接处信号的强度。在dnn的一般实现方式中,dnn的所有输入、输出和参数(例如权重、偏置和激活函数)都可以被认为是实数,这些实数可以在计算机中用浮点算术表示。因此,每个实数可以由有限数量的位来近似,例如32位甚至64位序列。需要说明的是,在深度学习应用中,神经网络可能有数千个神经元,其中每个神经元可能有许多输入,从而产生数百万个这种浮点数。使用大量这类高精度参数训练和推理深度神经网络可能需要大量内存和处理能力,因此,这种模型的训练阶段可以在专用平台上执行,例如具有特定硬件的云基础设施。
[0047]
图1示出了dnn的训练和推理过程的一般方案。其中,模型110可以包括例如具有给定架构的深度神经网络。该过程可分为两个阶段。在训练阶段,可以用给定的训练数据集120训练模型110,以调整该模型的权重,或者通常调整模型110的任何可学习参数。然后,在推理阶段,训练过的模型112可用于对测试数据集122的看不见的数据进行预测。例如,训练过的模型112的输出或结果可以包括将测试数据集122的图像分类为狗或猫的类别。
[0048]
dnn可用于许多应用,例如与现代通信网络有关。因此,dnn可能在未来网络中的设备(例如智能手机、传感器和/或可穿戴设备)中发挥非常重要的作用。例如,dnn可以应用于智能手机中的各种应用,包括图像识别、人像模式摄影、文本预测、用户侧写、去噪和相机增强。但是,这些dnn的高资源消耗,特别是对于网络训练,实际上可能会限制它们在此类资源受限设备上的实现。
[0049]
训练具有低精度权重(即使是单层权重)的神经网络是一个np硬优化问题。例如,由于权重离散化,连续dnn的反向传播算法可能基于计算损失函数的梯度,可能效率较低。当表示数字的位数小于8时,可能会出现梯度不稳定的问题。
[0050]
因此,低精度nn的高效训练可以基于梯度近似的使用,这可能需要将浮点权重和低精度权重一起存储,并使用浮点算法执行某种形式的反向传播(从而放弃一些离散化优势)。为了解决这个问题,可以为每个权重保留一个全精度值,然后(i)可以对这个值进行二进制化,以及(ii)可以由直通估计器针对二进制化的值评估的梯度,来更新全精度值。
[0051]
另一种方法是使用进化算法,但进化算法可能会存在性能和可扩展性问题。首先,虽然可以只考虑低精度权重,但存储在存储器中的权重数量可以乘以群体大小,因此,即使对于二进制权重和100的适度群体大小,内存占用也可能大于存储具有16、32或64位浮点表示的十进制权重。其次,在训练期间,可能需要对群体的所有成员进行单次前向传播。即使这可以并行完成,拥有与群体大小一样多的并行处理器用于在移动设备上训练可能仍然无法实现。最后,群体大小应该随着权重的数量(优化参数空间的维度)而增加,这使得大型神经网络的缩放成为问题。
[0052]
因此,可以寻求其它方案来纯粹在智能手机上训练低精度dnn。例如,可以通过在云上使用浮点算法来执行计算要求高的训练阶段,在云上,资源限制被释放。然后,可以在智能手机上提供dnn的低精度版本,以对看不见的数据执行要求较低的推理(前馈)阶段。但
是,这种方法可能只产生固定的预训练低精度dnn,这可能是不希望的。低精度神经网络可以在软件或硬件中实现。特别是,二进制神经网络可以基于位运算(在软件中)或数字逻辑电路,例如或非或同或(在硬件中)高效地实现。
[0053]
本公开的实施例可以用于大幅减少机器学习模型的资源需求,使得这些机器学习模型可以直接在资源受限的设备上实现和/或训练。一方面,公开了用于构建纯布尔神经元的硬件电路(boolnet)的示例。此外,公开了一种在不需要全精度算法的情况下训练这种神经网络的方法。所公开的神经网络的一个应用领域是边缘ai,该边缘ai可以在通信网络中的无线接口附近实现。边缘ai收益于使用具有低内存和计算要求的神经网络,例如,这是因为这使神经网络能够直接在边缘设备上训练。例如,所公开的神经网络可以应用于计算机视觉、对象检测、自主汽车或作为第六代(sixth generation,6g)通信系统的本地ai。
[0054]
根据一个实施例,提供了一种神经网络。神经网络的神经元可以配置有与相应的二进制输入相关联的二进制权重。可以评估针对二进制权重和相应的二进制输入的布尔函数。布尔函数的输入是二进制权重和相应的二进制输入。例如,当评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数时,可以基于布尔函数的二进制输出的和确定预激活。神经元的二进制输出可以基于预激活的阈值来确定。训练神经网络可以包括从下游层接收一个或多个二进制反向传播信号。一个或多个二进制反向传播信号可以指示损失函数相对于二进制输出的变化的趋势。可以确定布尔函数相对于第i个二进制权重的反转的趋势。训练可以包括基于布尔函数的趋势和损失函数的趋势确定是否反转第i个二进制权重。
[0055]
图2示出了用于实施本公开的一个或多个实施例的设备的示例。例如,设备200可以用于提供和/或训练神经网络。设备200可以包括至少一个处理器202。例如,至少一个处理器可以包括各种处理设备中的一个或多个处理设备,例如协处理器、微处理器、控制器、数字信号处理器(digital signal processor,dsp)、具有或不具有伴随dsp的处理电路,或包括集成电路的各种其它处理设备,例如专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field programmable gate array,fpga)、微控制器单元(microcontroller unit,mcu)、硬件加速器、专用计算机芯片等。
[0056]
设备200还可以包括至少一个存储器204。例如,存储器可以被配置为存储计算机程序代码等,例如操作系统软件和应用软件。存储器204还可以被配置为存储一个或多个神经网络。存储器可以包括一个或多个易失性存储器设备、一个或多个非易失性存储器设备和/或其组合。例如,存储器可以体现为磁存储设备(例如硬盘驱动器、软盘、磁带等)、光磁存储设备或半导体存储器(例如掩模rom、可编程rom(programmable rom,prom)、可擦除prom(erasable prom,eprom)、闪存rom、随机存取存储器(random access memory,ram)等)。
[0057]
设备200还可以包括通信接口208,通信接口208被配置为使设备200能够发送和/或接收信息。通信接口可以用于提供至少一个无线电连接,例如3gpp移动宽带连接(例如3g、4g、5g);无线局域网(wireless local area network,wlan)连接,例如由ieee 802.11系列或wi-fi联盟标准化;短距离无线网络连接,例如蓝牙、近场通信(near-field communication,nfc),或rfid连接;本地有线连接,例如局域网(local area network,lan)连接或通用串行总线(universal serial bus,usb)连接等;或有线互联网连接。
[0058]
设备200还可以包括用户接口210,用户接口210包括至少一个输入设备和/或至少一个输出设备。输入设备可以采取各种形式,例如键盘、触摸屏或一个或多个嵌入式控制按钮。例如,输出设备可以包括显示器、扬声器、振动马达等。
[0059]
当设备200用于实现某种功能时,设备的某个组件和/或某些组件,例如至少一个处理器和/或存储器,可以用于实现该功能。此外,当至少一个处理器用于实现某种功能时,该功能可以使用例如包括在存储器204中的程序代码206来实现。
[0060]
本文描述的功能可以至少部分地由一个或多个计算机程序产品组件(例如软件组件)执行。根据一个实施例,设备包括处理器或处理器电路,例如微控制器,该处理器或处理器电路由程序代码在执行时配置,以执行本文描述的操作和功能的实施例。或者,或另外,本文描述的功能可以至少部分地由一个或多个硬件逻辑组件执行。例如,但不限于,可使用的硬件逻辑组件的说明性类型包括现场可编程门阵列(field-programmable gate array,fpga)、专用集成电路(application-specific integrated circuit,asic)、特殊应用标准产品(application-specific standard product,assp)、片上系统(system-on-a-chip,soc)系统、复杂可编程逻辑器件(complex programmable logic device,cpld)、图形处理单元(graphics processing unit,gpu)等。
[0061]
设备200可以包括模块,或用于执行本文描述的(一种或多种)方法的模块。在一个示例中,所述模块包括至少一个处理器,所述至少一个存储器包括程序代码,所述程序代码被配置为当由至少一个处理器执行时,使所述设备执行所述方法。
[0062]
例如,设备200可以包括计算设备,例如移动电话、平板电脑、笔记本电脑、物联网(internet of things,iot)设备、服务器等。iot设备的示例包括但不限于消费电子产品、可穿戴设备、传感器和智能家电。虽然设备200示出为单个设备,但应当理解,在适用的情况下,设备200的功能可以分配到多个设备,例如,以将示例性实施例作为云计算服务实现。
[0063]
图3示出了根据本公开的实施例的神经网络300的示例。神经网络300可以包括具有神经元i1至ii的输入层和包括神经元oj至oj的输出层。在输入层与输出层之间,可以存在一个或多个隐藏层,在本示例中为第一隐藏层、第二隐藏层和第三隐藏层。第一隐藏层的神经元b可以连接到第二隐藏层的一个或多个神经元。第二隐藏层的神经元可以连接到第三隐藏层的一个或多个神经元。需要说明的是,即使图3的示例性神经网络示出了三个隐藏层,但神经网络可以具有任何数量和任何类型的隐藏层。考虑第二隐藏层作为参考,第三层可以称为下游层,因为第三层靠近输出层定位。第一隐藏层可以相对于考虑(第二)层称为上游层,因为第一隐藏层靠近输入层定位。这种神经网络可以称为前馈神经网络。但是,应当理解,本公开的实施例可以应用于任何合适类型的神经网络。例如,神经网络可以具有一个或多个递归连接,提供从一个或多个下游层到一个或多个上游层的反馈输入。神经网络还可以在非连续层之间具有一个或多个跳跃连接。神经网络可以提供在设备200上,例如存储在至少一个存储器204中,使得神经网络可以在设备200上训练和/或执行。
[0064]
神经元b可以包括布尔神经元。例如,这些神经元可以将一个或多个二进制输入作为输入,并提供二进制输出。术语二进制和布尔可以互换使用。例如,应当理解,布尔值假和真可以分别表示为二进制数字,例如0和1。备选地,二进制输出可以包括对映输出,例如取
±
1的值。
[0065]
根据一个实施例,神经网络300的输入可以包括图像。例如,神经网络300可以被配
置为对图像进行分类,或识别图像中的对象和/或对图像中的对象进行分类。根据一个实施例,神经网络的输入可以包括自主导航数据,例如,关于交通工具的位置或速度的信息、由交通工具的一个或多个传感器(例如相机、雷达、激光雷达)捕获的数据等。神经网络可以用于确定对交通工具的导航或控制指令。神经网络可以在通信网络的边缘设备上实现,例如在通过无线接入网连接到设备(例如手机或汽车)的核心网的边缘实现。
[0066]
图4示出了本公开的实施例提供的布尔神经元的模型的示例。布尔神经元的设计可以满足以下标准。首先,布尔神经元的操作可以在二进制域内进行,包括例如输入、权重和输出。其次,布尔神经元可以具有激活函数,该激活函数具有非线性性质,从而使神经网络能够广义化到看不见的数据。神经元400是神经网络300的布尔神经元b的示例。可以向神经元400提供布尔输入b1、b2、
……
、bm和布尔权重w0、w1、
……
、wm,其中m是输入的数量。神经元400还可以将二进制偏置w0作为输入。用l表示布尔逻辑运算符(函数),神经元400的预激活s因此可以例如如下给出:
[0067][0068]
例如,布尔运算符l可以包括与、或,或者异或(xor/exclusive-or)运算符。异或运算也可以用表示。神经元400可以评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数l(bi,wi)。布尔函数l(bi,wi)的输入可以包括二进制权重wi和相应的二进制输入bi。当评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数l时,神经元400还可以基于布尔函数l的至少二进制输出的和确定预激活值s。神经元400还可以基于布尔函数的二进制输出和二进制偏置w0的和确定预激活值s。由于预激活可以基于二进制值的和确定,因此预激活通常可以包括整数。但是,本公开的实施例能够在二进制域中处理预激活,这将降低神经网络的复杂度。
[0069]
图5示出了本公开的实施例的逻辑运算的真值表的示例。在本示例中,相对于输入值bi和二进制权重wi的不同组合,提供与、或以及异或函数的二进制输出。为了二进制神经元设计的目的,布尔运算符的输出可以解释为整数,如上所述。例如,对于与、或以及异或函数,输入组合bi=假,wi=真分别提供输出0、1、1,这对应于图5的表的第二行。在硬件实现方式中,布尔函数l可以通过与门、或门或异或门等计算。
[0070]
回到图4,预激活s可以进一步由激活函数处理。激活函数通常可以包括将预激活从整数值映射到二进制输出的任何函数。因此,激活函数可以包括布尔激活函数。需要说明的是,根据本公开的实施例,预激活在概念上可以仅是整数值,而在神经元400的硬件实现方式中,关联信号可以是二进制的。根据一个示例性实施例,激活函数可以包括阈值函数。阈值函数可以应用于预激活s,以提供布尔值作为输出o,例如如下:
[0071][0072]
其中t是预定义的阈值(预激活值s的阈值)。阈值t可以是整数。以下条件可以适用于阈值:0《t《m。因此,阈值t可以是小于神经元400的输入数量的正数。因此,神经元400可以基于预激活值的阈值确定二进制输出。
[0073]
图6示出了根据本公开的实施例的布尔神经元的硬件实现的示例。神经元400可以包括逻辑阈值门(logic threshold gate,ltg)601。考虑等式(1),在预激活部分,二进制输入暂时从布尔域传递到整数域。这使得可以使用具有非线性性质的激活函数。但是,这可能并不总是符合期望,因为它可能与保持神经元完全在布尔域中的目标相冲突。但是,这可以通过应用特定类型的硬件来避免,例如逻辑阈值门(logic threshold gate,ltg)。ltg包括求和以及决策两者,以此方式,可以在门本身内做出决策,从而可以直接从二进制输入产生纯二进制输出。因此,ltg可以被配置为实现等式(1)的和以及基于阈值的激活函数两者。这使得单个ltg能够实现简单的硬件实现。此外,这使得计算保持在二进制域中。因此,可以使基于神经元400构建的dnn为纯布尔型。
[0074]
神经元400的二进制输入bi和相应的权重wi可以由多个逻辑门602提供。逻辑门602的输出可以连接到ltg 601。在这个示例中,逻辑门602包括异或门,但需要说明的是的是,可以应用任何其它合适的逻辑运算符来代替。ltg 601可以将二进制偏置w0作为另一输入。因此,ltg 601可以用于将布尔函数的二进制输出作为输入。ltg 601可以配置有阈值t。因此,ltg 601可以提供二进制输出o。
[0075]
根据一个示例性实施例,神经元400的输出可以例如如下确定:
[0076][0077]
例如,阈值t可以设置为t=(m+1)/2。
[0078]
图7示出了根据本公开的实施例的变分反向传播方法的示例。该方法使得能够使用合成布尔逻辑在二进制域中训练布尔神经网络。该方法包括前馈和反向传播过程的迭代循环。迭代训练循环的目标可以是最小化或减小预定义的损失函数,该损失函数测量真实标签与由神经网络预测的实际标签之间的差异。图7示出了在层上执行反向传播过程的操作示例。在操作701中,神经网络300的考虑层(例如第二隐藏层)的神经元可以从下游层接收二进制反向传播信号z。信号z可以包括布尔信号,该布尔信号指示损失函数如何相对于每个神经元输出变化。当值为真时,z可能指示损失函数相对于神经元输出增加。当z的值为假时,它可能指示损失函数相对于神经元输出减小。在这方面,如果神经元输出从假传递到真,则可以称为增加。如果神经元输出从真传递到假,则可以称为减小。
[0079]
操作702可以包括权重的变分训练。操作702可以将接收到的二进制反向传播信号z作为输入,并考虑神经元函数,以便建立每个布尔权重与损失函数之间的变分关系的布尔变分真值表。基于真值表,可以确定合成规则(或逻辑),以便最终决策在训练迭代中是改变还是保持每个布尔权重。基于在操作702处的变分训练给出的合成逻辑,可以相应地调整每个神经元的权重。
[0080]
操作703可以包括计算上游层的二进制反向传播信号z

。该信号的规格与信号z的规格相同。例如,如果损失函数随着神经元的输入而增加,则发送真,否则发送假。为此,可以建立损失函数与神经元输入之间变分关系的真值表,以便合成用于确定反向传播信号z

的逻辑。这种变分反向传播方法至少具有以下优点:该方法的变分原理可以直接应用于布
尔域,并可以用来取代二进制dnn的梯度下降方法。它还具有梯度下降方法的所有期望特征,例如适合于小批量训练,其中,不是一个数据样本,而是数据样本的子集用于一个训练迭代。此外,它能够完全在布尔域中使用布尔逻辑训练布尔网络,从而实现设计纯二进制dnn的目标,从而大大减少内存和计算能量。
[0081]
图8示出了根据本公开的实施例的,在变分反向传播中处理反向传播信号的示例。在变分反向传播中,可以使用指定预定义的损失函数如何随神经元输出变化的布尔反向传播信号来调整布尔权重。改变或保持布尔权重的决策是基于逻辑规则做出的,逻辑规则可以从变分真值表合成。变分反向传播还可以包括基于逻辑规则计算要反向传播到上层的信号,该逻辑规则可以从更新的权重、神经元函数和接收到的反向传播信号合成。
[0082]
神经网络的层可以包括一个或多个神经元。例如,考虑层810的神经元812可以从下游层820的一个或多个神经元(1
……
n)接收二进制反向传播信号z。对于一个训练数据样本,神经元812可以从下游层820的第j个神经元接收反向传播信号zj。如上所述,信号zj可以是布尔值或二进制数。设n是下游层820的神经元的数量,神经元812可以接收一个训练数据样本的反向传播信号向量z=[z1,

,zj,

,zn]。(一个或多个)二进制反向传播信号zj可以指示损失函数相对于神经元812的二进制输出的变化的趋势。如上所述,神经元812可以配置有与相应的二进制输入相关联的二进制权重。损失函数相对于神经元812的二进制输出的变化的趋势可以指示神经元812的二进制输出的变化是导致损失函数增加还是减小。
[0083]
在训练期间,可以基于输入评估神经元812的布尔函数,该输入包括神经元812的第i个二进制权重和神经元812的相应的二进制输入。此外,可以确定布尔函数相对于第i个二进制权重的反转的趋势,并最终可以决策是否反转第i个二进制权重。基于布尔函数相对于第i个二进制权重的反转的趋势和损失函数相对于神经元812的二进制输出的变化的趋势,可以确定是否反转第i个二进制权重,如下文进一步描述。布尔函数相对于第i个二进制权重的反转的趋势可以指示反转是否导致布尔函数增加或减小。
[0084]
图9示出了根据本公开的实施例的,用于权重的变分训练的变分真值表的示例。在真值表中,bi是第i个当前布尔输入,并且wi是神经元812的第i个当前布尔权重,并且zj是从下游层820的第j个神经元接收的二进制反向传播信号。表的第3列(“当前”)表示按异或运算符加权的当前结果。例如,在第一行上,第三列的值为0,这是第一列和第二列的值真和真之间的异或运算的结果。第4列(“新”)表示第i个权重wi的新值。新值可以根据第二列中相应值的反转而被获得。需要说明的是,即使以异或运算作为示例,也可以类似地为其它类型的布尔函数生成真值表。
[0085]
真值表可用于确定损失函数在wi变化时的行为。对于新wi,可以获得与第五列对应的xor(bi,wi)的新值。此外,基于第三列和第五列,可以获得与第六列对应的xor(bi,wi)的变化。在第六列(“的变化”),加号和减号表示异或函数相对于其当前值分别增加和减小时的输出。因此,第六列可以指示布尔函数相对于第i个二进制权重的反转的趋势,例如,第i个二进制权重的反转是否导致布尔函数增加或减小。
[0086]
基于上文,可以确定损失函数的变化,例如,损失函数相对于神经元812的二进制输出的变化的趋势。例如,如果接收到的二进制反向传播信号zj为真,表示损失随着神经元812的输出而增加,则损失随着xor(bi,wi)增加。相反,如果接收到的信号zj为假,表示损失随着神经元812的输出而减少,则当xor(bi,wi)增加时损失减少。因此,损失的变化可以如变
分真值表的最后两列所示给出。
[0087]
例如,变分训练可以包括:如果异或函数相对于wi的反转增加,并且损失函数相对于神经元812的二进制输出增加,则确定wi的反转导致损失函数增加。这种备选方案由倒数第二列的第一行和第四行上的加号反映。
[0088]
变分训练还可以包括:如果异或函数相对于wi的反转增加,并且损失函数相对于神经元812的二进制输出减小,则确定wi的反转导致损失函数减小。这种备选方案由最后一列的第一行和第四行上的减号反映。
[0089]
变分训练还可以包括:如果异或函数相对于wi的反转减小,并且损失函数相对于神经元812的二进制输出增加,则确定wi的反转导致损失函数减小。这种备选方案由倒数第二列的第二行和第三行上的减号反映。
[0090]
变分训练还可以包括:如果异或函数相对于wi的反转减小,并且损失函数相对于神经元812的二进制输出减小,则确定wi的反转导致损失函数增加。这种备选方案由最后一列的第二行和第三行上的加号反映。
[0091]
由于目标可以是最小化损失函数,因此只有当改变导致损失减少时,神经元812的第i个权重wi才可以改变。因此,训练可以包括响应于确定wi的反转导致损失函数减小而确定反转wi。训练还可以包括响应于确定wi的反转导致损失函数增加而确定不反转wi。考虑仅从一个神经元反向传播的信号,逻辑可以例如合成如下:vj:=xor(xi,zj),其中,xi=xor(bi,wi)。如果vj等于真,则反转wi;否则保持wi。
[0092]
训练过的神经网络的(一个或多个神经元)可以根据图4配置。例如,一个或多个神经元可以被配置为评估针对神经元的每个二进制权重和相应的二进制输入的布尔函数(例如异或函数)。当评估针对二进制权重中的每个二进制权重和相应的二进制输入中的每个二进制输入的布尔函数时,(一个或多个)神经元还可以基于布尔函数的至少二进制输出的和确定(一个或多个)预激活值。(一个或多个)神经元还可以用于基于预激活值的阈值确定一个或多个神经元的二进制输出,如上所述。(一个或多个)神经元可以例如基于逻辑阈值门实现。
[0093]
但是,如图9所示,在下游层820处可以有多个神经元。这些神经元可能会反向传播不同的信号(z=[z1,

,zj,

,zn])。因此,训练可以包括组合多个二进制反向传播信号。换句话说,确定是否反转第i个二进制权重可以基于多个二进制反向传播信号的组合。例如,神经元812可以从下游层820的对应多个神经元接收多个二进制反向传播信号(z=[z1,

,zj,

,zn])。训练神经元812可以包括确定指示wi的反转的反向传播信号的数量和指示wi的未反转的二进制反向传播信号的数量。例如,训练可以包括计算当前xi∶=xor(bi,wi);针对多个zj计算vj:=xor(xi,zj);以及以n
false
计数vj=false的数量并以n
true
计数vj=true的数量。
[0094]
变分训练还可以包括:如果指示wi的反转的二进制反向传播信号的数量高于指示wi的未反转的二进制反向传播信号的数量,则确定反转wi。变分训练还可以包括:如果指示wi的反转的二进制反向传播信号的数量小于(或等于)指示wi的未反转的二进制反向传播信号的数量,则确定不反转wi。例如,如果n
false
》n
true
,可以反转(reversed/inverted)wi。否则,可以保持wi的当前值(不反转)。
[0095]
图10示出了根据本公开的实施例的,用于计算反向传播信号的变分真值表的示
例。例如,如参考图9所述,使用在操作702处更新的权重,可以计算上游层(例如图3的第一层)的第i个二进制反向传播信号索引i可以指代考虑层的神经元(例如神经元812)的第i个输入和第i个权重。因此,索引i也可以指代向其提供第i个二进制上游反向传播信号的上游层的神经元的索引。索引j可以指代下游层的第j个神经元。可以确定二进制反向传播信号,使得如果损失函数随着输入而增加,则信号为真,否则为假。信号可以是基于与不同zj对应的不同临时计算以确定最终二进制上游反向传播信号ui的信号。
[0096]
为了确定(一个或多个)上游二进制反向传播信号的值,可以以与结合图9描述的非常相似的方式执行变分分析。针对损失相对于bi的变化的最后两列1001可以基于针对bi的变化的列和针对损失变化的列获得。这最后两列可以在逻辑规则中如下合成:二进制上游反向传播信号
[0097]
如果损失函数随着神经元812的输入而增加,则第i个二进制上游反向传播信号可以设置为真,否则可以设置为假。例如,确定可以基于损失函数相对于第i个二进制输入bi的变化的趋势。例如,如果损失函数相对于bi的增加而增加,则可以设置为布尔值真。并且,如果损失函数相对于bi的增加而不增加,则可以设置为布尔值假。然后,可以基于来训练上游层的神经元,类似于考虑层810的神经元812的训练。这样,可以更新整个神经网络的二进制权重,同时将所需的计算保持在二进制域中。
[0098]
如上所述,在下游层820处可以有多个神经元,并且这些神经元可以发送独立的二进制反向传播信号zj,其中,j=1,

,n。因此,变分真值表的最后两列1001的合成逻辑可以在不同的反向传播信号zj上组合。例如,确定可以包括确定指示将设置为布尔值真的二进制反向传播信号zj的数量。如果损失函数相对于bi的增加而增加,则可以确定第j个二进制反向传播信号zj指示将设置为布尔值真。此外,例如,可以基于损失函数相对于bi的增加而不增加,确定指示将设置为布尔值假的zj的数量。然后,如果指示将设置为布尔值真的zj的数量大于(或等于)指示将设置为布尔值假的zj的数量,则(组合的)二进制反向传播信号ui可以设置为布尔值真。如果指示将设置为布尔值真的zj的数量小于指示将设置为布尔值假的zj的数量,则二进制反向传播信号ui可以设置为布尔值假。
[0099]
例如,确定上游反向传播信号ui可以包括:针对多个zj计算以n
false
计数的数量并以n
true
计数的数量;如果n
false
》n
true
,则发送信号ui=false,否则将ui=true发送到上层。这使得在确定上游反向传播信号时,能够考虑来自下游层820的所有或多个神经元的反向传播信号。
[0100]
根据示例性实施例,变分反向传播可以与小批量训练一起应用,该小批量训练不仅使用每个训练循环中的一个数据样本,而且使用多个数据样本,因此反向传播信号z可以是数据样本上的矩阵。例如,对于第d个数据样本:神经元812的前馈输入可以是
接收到的二进制反向传播信号可以是因此,神经元812可以接收来自下游层的多个神经元中的每个神经元的多个二进制反向传播信号。此外,多个二进制反向传播信号中的每个二进制反向传播信号可以对应于小批量的多个数据样本。
[0101]
在一个示例中,神经元812的预激活值可以被结合到合成逻辑中,以便提高性能。在异或布尔函数示例的情况下,第d个数据样本的预激活值可以给出为:
[0102][0103]
其中是数据样本d的第i个二进制输入。可以为多个数据样本中的每个数据样本确定神经元812的数据样本特定的预激活值。与上文类似,可以确定指示wi的反转的反向传播信号的数量和指示wi的非反转的二进制反向传播信号的数量。但是,这些数量可以针对多个数据样本中的每个数据样本确定。对于多个数据样本d中的每个数据样本,然后可以用函数f缩放指示wi的反转的反向传播信号的数量和指示wi的未反转的二进制反向传播信号的数量。函数f可以称为缩放函数,函数f可以被配置为将数据样本特定的预激活值sd与预激活值的阈值t(例如,为逻辑阈值门配置的预定义的阈值)之间的差值作为输入。例如,使δd:=s
d-t。然后,缩放函数可以将δd作为输入。缩放函数可以包括表示激活函数的梯度的任何合适函数。缩放函数的两个示例是和f(x)=sigmoid

(x),其中,sigmoid

(x)是sigmoid函数在x的导数。但是,许多其它近似值也可用于f。
[0104]
通过将缩放函数应用于指示wi的反转的反向传播信号的数量和指示wi的未反转的二进制反向传播信号的数量,可以获得指示wi的反转的反向传播信号的数量和指示wi的未反转的二进制反向传播信号的数量的缩放数量。然后,如果指示wi的反转的二进制反向传播信号的缩放数的和高于指示wi的未反转的二进制反向传播信号的缩放数的和,则可以确定反转第i个二进制权重wi。如果指示wi的反转的二进制反向传播信号的缩放数的和小于(或等于)指示wi的未反转的二进制反向传播信号的缩放数的和,则可以确定不反转第i个二进制权重wi。
[0105]
例如,使用小批量对权重wi进行变分训练可以包括计算其中,对于多个神经元j和数据样本d,对于每个数据样本d,以计数计数并以计数对于每个数据样本d,例如基于δd:=s
d-t计算δd并且如果则确定反转wi,否则确定保持(不反转)wi。
[0106]
使用小批量训练的变分反向传播还可以包括确定上游层的一个或多个二进制反向传播信号。如参考图10描述的,用于确定上游二进制反向传播的过程可以扩展到类似于训练权重的小批量训练。例如,可以为多个数据样本d中的每个数据样本确定指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量。还可以为多个数据样本d中的每个数据样本确定指示将第i个二进制上游反向传播信号设置为布尔值假的二进制反向传播信号的数量。如果损失函数相对于第i个二进制输入的增加而增加,则可以确定二进制上游反向传播信号指示将第i个二进制上游反向传播信号设置为布
尔值真。如果损失函数不会相对于第i个二进制输入的增加而增加,则可以确定二进制上游反向传播信号指示将第i个二进制上游反向传播信号设置为布尔值假。
[0107]
指示将第i个二进制上游反向传播信号设置为布尔值假或真的反向传播信号的数量可以用缩放函数f缩放。如果指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的缩放数的和大于或等于指示将第i个二进制上游反向传播信号设置为布尔值假的二进制反向传播信号的缩放数的和,则可以确定将第i个二进制上游反向传播信号设置为布尔值真。并且,如果指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量的和小于指示将第i个二进制上游反向传播信号设置为布尔值假的二进制反向传播信号的数量的和,则可以确定将第i个二进制上游反向传播信号设置为布尔值假。在本实施例中,指示将第i个二进制反向传播信号设置为真或假的反向传播信号的数量不仅可以在下游层的不同神经元上计数,而且还可以在不同的数据样本上计数,这使得能够使用小批量处理高效地训练神经网络。
[0108]
例如,确定(组合的)二进制反向传播信号ui可以包括:对于每个二进制输入i,针对多个神经元j和多个数据样本d计算对于每个数据样本d,以计数并且以计数并且如果则向上游层信号发送ui=假,否则向上游层发送ui=真。
[0109]
因此,本文公开的实施例提供了一种基于布尔神经元的神经网络的低复杂度实现,该神经网络可以用简单的逻辑阈值门实现。还公开了能够在二进制域中训练神经网络的方法,用于基于个体数据样本和数据样本的小批量的训练。
[0110]
图11示出了根据本公开的实施例,用于训练神经网络的方法1100的示例。
[0111]
在1101处,所述方法可以包括在神经网络的至少一个神经元处,从神经网络的下游层的至少一个神经元接收二进制反向传播信号。二进制反向传播信号可以指示损失函数相对于至少一个神经元的二进制输出的变化的趋势。至少一个神经元可以配置有与相应的二进制输入关联的二进制权重。
[0112]
在1102处,所述方法可以包括由至少一个神经元评估布尔函数。布尔函数的输入可以包括至少一个神经元的第i个二进制权重和相应的二进制输入。
[0113]
在1103处,所述方法可以包括确定布尔函数相对于第i个二进制权重的反转的趋势。
[0114]
在1104处,所述方法可以包括:基于布尔函数相对于第i个二进制权重的反转的趋势和损失函数相对于至少一个神经元的二进制输出的趋势,确定是否反转第i个二进制权重。
[0115]
方法1100的其它特征直接来自用于提供和/或训练一个或多个二进制神经网络的设备200的功能,如在所附权利要求书中和整个说明书中所述,因此在此不重复。还可以应用方法的不同变化,如结合各种示例性实施例所述。
[0116]
设备可以被配置为执行或使得执行本文描述的(一个或多个)方法的任何方面。此外,计算机程序可以包括程序代码,该程序代码被配置为执行本文所述的(一个或多个)方法的一个方面,则计算机程序在计算机上执行。此外,计算机程序产品可以包括存储有程序代码的计算机可读存储介质,该程序代码包括用于执行本文所述的(一个或多个)方法的任
何方面的指令。此外,设备可以包括用于执行本文所述的(一个或多个)方法的任何方面的模块。根据示例性实施例,该模块包括至少一个处理器和包括程序代码的存储器,所述至少一个处理器,所述程序代码用于当由所述至少一个处理器执行时执行所述(一种或多种)方法的任何方面。
[0117]
例如,设备可以用于执行二进制神经网络的变分训练,如本文所公开的。此外,方法可以包括使用本文描述的一种或多种二进制神经网络提供和/或执行推理。用于训练神经网络的方法可以包括用于制造神经网络的方法。
[0118]
本文给出的任何范围或设备值均可以扩展或更改,但不会丢失所寻求的效果。除非明确禁止,否则任何实施例还可以与另一实施例组合。
[0119]
尽管已经以结构特征和/或动作特定的语言描述了主题,但是应当理解,所附权利要求书定义的主题不必局限于上面描述的具体特征或动作。相反,上文描述的具体特性和动作作为实施权利要求书的示例进行公开,并且其它等效特征和动作旨在包含于权利要求书的范围内。
[0120]
应当理解,上面描述的优点和优势可以涉及一个实施例,或者可以涉及多个实施例。实施例不限于解决任意或全部所述问题,也不限于具有任意或全部所述优点和优势的实施例。还应当理解,提及“一个”项目时可以指这些项目中的一个或多个项目。
[0121]
本文描述的方法的步骤或操作可以按任何适合的次序进行,或在适当时同时进行。此外,可以在不脱离本文描述的主题的范围的情况下从方法中的任何一种方法中删除个别方框、操作或元素。上面描述的任意实施例的方面可以与所描述的任何其它实施例的方面组合以形成更多实施例,而不影响所要达到的效果。
[0122]
本文使用的术语“包括”意指包括所标识的方法、方框、操作或元素,但此类项目不包括排他性列表,且方法或设备可以包括附加的方框、操作和/或元素。
[0123]
虽然主题可以称为“第一”或“第二”主题,但这不一定表明主题的任何顺序或重要性。相反,这些属性可以仅用于在主题之间产生差异。
[0124]
应当理解,以上描述仅作为示例提供,并且本领域技术人员可以进行各种修改。以上说明书、示例和数据完整描述了示例性实施例的结构和使用。尽管上文相对详细地或结合一个或多个单独实施例描述了各实施例,但本领域技术人员可以对所公开的实施例进行各种变更,而不脱离本发明的范围。

技术特征:
1.一种用于处理神经网络的设备,所述设备被配置为:提供所述神经网络,其中所述神经网络的至少一个神经元被配置有与相应的二进制输入相关联的二进制权重;评估针对所述二进制权重中的每个二进制权重和所述相应的二进制输入中的每个二进制输入的布尔函数,其中所述布尔函数的输入包括二进制权重和相应的二进制输入;当针对所述二进制权重中的每个二进制权重和所述相应的二进制输入中的每个二进制输入的所述布尔函数被评估时,基于所述布尔函数的至少二进制输出的和确定所述至少一个神经元的预激活值;以及基于针对所述预激活值的阈值确定所述至少一个神经元的二进制输出。2.根据权利要求1所述的设备,还被配置为:基于被配置为将所述布尔函数的所述二进制输出作为输入的逻辑阈值门,确定所述至少一个神经元的所述二进制输出。3.根据权利要求1或2所述的设备,还被配置为:通过与门、或门或者异或门计算所述布尔函数。4.根据上述权利要求中任一项所述的设备,还被配置为:基于所述布尔函数的所述二进制输出与二进制偏置的和确定所述预激活值。5.根据权利要求4所述的设备,还被配置为:基于以下等式确定所述预激活值s,其中w0为所述二进制偏置,b
i
为第i个二进制输入,w
i
为第i个二进制权重,l()为所述布尔函数,m为所述至少一个神经元的输入数量。6.根据权利要求5所述的设备,还被配置为基于以下等式确定所述至少一个神经元的所述二进制输出o:其中t是针对所述预激活值的所述阈值。7.一种用于训练神经网络的方法,所述方法包括:在所述神经网络的至少一个神经元处,从所述神经网络的下游层的至少一个神经元接收二进制反向传播信号,其中所述二进制反向传播信号指示损失函数相对于所述至少一个神经元的二进制输出的变化的趋势,并且其中所述至少一个神经元被配置有与相应的二进制输入相关联的二进制权重;通过所述至少一个神经元评估布尔函数,其中所述布尔函数的输入包括所述至少一个神经元的第i个二进制权重和相应的二进制输入;确定所述布尔函数相对于所述第i个二进制权重的反转的趋势;以及基于所述布尔函数相对于所述第i个二进制权重的所述反转的趋势和所述损失函数相对于所述至少一个神经元的所述二进制输出的所述变化的趋势,确定是否反转所述第i个二进制权重。
8.根据权利要求7所述的方法,其中所述损失函数相对于所述至少一个神经元的所述二进制输出的所述变化的趋势指示所述至少一个神经元的所述二进制输出的所述变化是否导致所述损失函数增加或减小,以及其中所述布尔函数相对于所述第i个二进制权重的所述反转的趋势指示所述第i个二进制权重的所述反转是否导致所述布尔函数增加或减小。9.根据权利要求8所述的方法,还包括:响应于确定所述第i个二进制权重的所述反转导致所述损失函数减小,确定反转所述第i个二进制权重;以及响应于确定所述第i个二进制权重的所述反转导致所述损失函数增加,确定不反转所述第i个二进制权重。10.根据权利要求9所述的方法,还包括:如果所述布尔函数相对于所述第i个二进制权重的反转增加,并且所述损失函数相对于所述至少一个神经元的所述二进制输出增加,则确定所述第i个二进制权重的所述反转导致所述损失函数增加;如果所述布尔函数相对于所述第i个二进制权重的反转增加,并且所述损失函数相对于所述至少一个神经元的所述二进制输出减小,则确定所述第i个二进制权重的所述反转导致所述损失函数减小;如果所述布尔函数相对于所述第i个二进制权重的反转减小,并且所述损失函数相对于所述至少一个神经元的所述二进制输出增加,则确定所述第i个二进制权重的所述反转导致所述损失函数减小;以及如果所述布尔函数相对于所述第i个二进制权重的反转减小,并且所述损失函数相对于所述至少一个神经元的所述二进制输出减小,则确定所述第i个二进制权重的所述反转导致所述损失函数增加。11.根据权利要求7至10中任一项所述的方法,还包括:通过所述至少一个神经元评估针对所述二进制权重中的每个二进制权重和所述相应的二进制输入中的每个二进制输入的所述布尔函数;当针对所述二进制权重中的每个二进制权重和所述相应的二进制输入中的每个二进制输入的所述布尔函数被评估时,基于所述布尔函数的至少二进制输出的和确定所述至少一个神经元的预激活值;以及基于针对所述预激活值的阈值确定所述至少一个神经元的所述二进制输出。12.根据权利要求11所述的方法,还包括:基于被配置为将所述布尔函数的所述二进制输出作为输入的逻辑阈值门,确定所述至少一个神经元的所述二进制输出。13.根据权利要求11或12所述的方法,其中所述布尔函数通过与门、或门或者异或门而被计算。14.根据权利要求7至13中任一项所述的方法,还包括:基于所述损失函数相对于第i个二进制输入的变化的趋势,确定针对所述神经网络的至少一个上游神经元的第i个二进制上游反向传播信号。15.根据权利要求14所述的方法,还包括:
如果所述损失函数相对于所述第i个二进制输入的增加而增加,则将所述第i个二进制上游反向传播信号设置为布尔值真;以及如果所述损失函数相对于所述第i个二进制输入的所述增加而不增加,则将所述第i个二进制上游反向传播信号设置为布尔值假。16.根据权利要求15所述的方法,还包括:在所述至少一个神经元处从所述下游层的多个神经元接收多个二进制反向传播信号;确定指示所述第i个二进制权重的反转的反向传播信号的数量和指示所述第i个二进制权重的未反转的二进制反向传播信号的数量;如果指示所述第i个二进制权重的所述反转的所述二进制反向传播信号的数量大于指示所述第i个二进制权重的未反转的所述二进制反向传播信号的数量,则确定反转所述第i个二进制权重;以及如果指示所述第i个二进制权重的所述反转的所述二进制反向传播信号的数量小于或等于指示所述第i个二进制权重的未反转的所述二进制反向传播信号的数量,则确定不反转所述第i个二进制权重。17.根据权利要求15或16所述的方法,还包括:确定指示将所述第i个二进制上游反向传播信号设置为所述布尔值真的二进制反向传播信号的数量;确定指示将所述第i个二进制上游反向传播信号设置为所述布尔值假的反向传播信号的数量,其中如果所述损失函数相对于所述第i个二进制输入的所述增加而增加,则确定二进制反向传播信号指示将所述第i个二进制上游反向传播信号设置为所述布尔值真,并且如果所述损失函数相对于所述第i个二进制输入的所述增加而不增加,则设置为所述布尔值假;如果指示将所述第i个二进制上游反向传播信号设置为所述布尔值真的所述二进制反向传播信号的数量大于或等于指示将所述第i个二进制上游反向传播信号设置为所述布尔值假的所述二进制反向传播信号的数量,则确定将所述第i个二进制上游反向传播信号设置为所述布尔值真;以及如果指示将所述第i个二进制上游反向传播信号设置为所述布尔值真的所述二进制反向传播信号的数量小于指示将所述第i个二进制上游反向传播信号设置为所述布尔值假的所述二进制反向传播信号的数量,则确定将所述第i个二进制上游反向传播信号设置为所述布尔值假。18.根据权利要求14所述的方法,包括:在所述至少一个神经元处,从所述下游层的多个神经元中的每个神经元接收多个二进制反向传播信号,所述多个二进制反向传播信号中的每个二进制反向传播信号对应于小批量的多个数据样本;为所述多个数据样本中的每个数据样本确定数据样本特定的预激活值;对于所述多个数据样本中的每个数据样本,确定指示所述第i个二进制权重的反转的反向传播信号的数量和指示所述第i个二进制权重的未反转的二进制反向传播信号的数量;对于所述多个数据样本中的每个数据样本,利用被配置为将所述数据样本特定的预激
活值与针对所述预激活值的所述阈值之间的差值作为输入的函数,缩放指示所述第i个二进制权重的反转的所述反向传播信号的数量和指示所述第i个二进制权重的未反转的所述二进制反向传播信号的数量;如果指示所述第i个二进制权重的反转的所述二进制反向传播信号的缩放数的和大于指示所述第i个二进制权重的未反转的所述二进制反向传播信号的缩放数的和,则确定反转所述第i个二进制权重;以及如果指示所述第i个二进制权重的反转的所述二进制反向传播信号的所述缩放数的所述和小于或等于指示所述第i个二进制权重的未反转的所述二进制反向传播信号的所述缩放数的所述和,则确定不反转所述第i个二进制权重。19.根据权利要求18所述的方法,还包括:对于所述多个数据样本中的每个数据样本,确定指示将第i个二进制上游反向传播信号设置为布尔值真的二进制反向传播信号的数量;对于所述多个数据样本中的每个数据样本,确定指示将所述第i个二进制上游反向传播信号设置为布尔值假的反向传播信号的数量,其中如果所述损失函数相对于所述第i个二进制输入的增加而增加,则确定二进制反向传播信号指示将所述第i个二进制上游反向传播信号设置为所述布尔值真,并且如果所述损失函数相对于所述第i个二进制输入的所述增加而不增加,则设置为所述布尔值假;对于所述多个数据样本中的每个数据样本,利用被配置为将所述数据样本特定的预激活值与针对所述预激活值的所述阈值之间的差值作为输入的函数,缩放指示将所述第i个二进制上游反向传播信号设置为所述布尔值真的所述二进制反向传播信号的数量和指示将所述第i个二进制上游反向传播信号设置为所述布尔值假的所述反向传播信号的数量;如果指示将所述第i个二进制上游反向传播信号设置为所述布尔值真的所述二进制反向传播信号的缩放数的和大于或等于指示将所述第i个二进制上游反向传播信号设置为所述布尔值假的所述二进制反向传播信号的缩放数的和,则确定将所述第i个二进制上游反向传播信号设置为所述布尔值真;以及如果指示将所述第i个二进制上游反向传播信号设置为所述布尔值真的所述二进制反向传播信号的数量的和小于指示将所述第i个二进制上游反向传播信号设置为所述布尔值假的所述二进制反向传播信号的数量的和,则确定将所述第i个二进制上游反向传播信号设置为所述布尔值假。20.一种计算机程序,包括程序代码,当所述计算机程序在计算机上被执行时,所述程序代码被配置为使得执行根据权利要求7至19中任一项所述的方法。

技术总结
各实施例涉及神经网络。神经元可以配置有与相应的二进制输入相关联的二进制权重。可以评估针对二进制权重和相应的二进制输入的布尔函数。预激活可以基于所述布尔函数的二进制输出的和确定。神经元的二进制输出可以基于预激活的阈值而被确定。训练神经网络可以包括从下游层接收(一个或多个)二进制反向传播信号。(一个或多个)二进制反向传播信号可以指示损失函数相对于二进制输出的变化的趋势。可以确定布尔函数相对于第i个二进制权重的反转的趋势。训练可以包括基于布尔函数的趋势和损失函数的趋势确定是否反转第i个二进制权重。公开了设备、方法和计算机程序。方法和计算机程序。方法和计算机程序。


技术研发人员:阮万明 简-克洛德
受保护的技术使用者:华为技术有限公司
技术研发日:2020.11.12
技术公布日:2023/8/1
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐