Neural network 带不动点参数的神经网络

Neural network 带不动点参数的神经网络,neural-network,fixed-point,Neural Network,Fixed Point,大多数神经网络都使用浮点权重/偏差进行训练 存在量化方法将权重从float转换为int,以便在较小的平台上部署 你能从头开始构建约束所有参数的神经网络,并将其更新为整数算法吗 这样的网络能达到很好的精确度吗 (我对定点技术略知一二,而且在90年代只有一些生锈的NN经验,所以我要说的话,请恕我直言!) 一般的答案是肯定的,但这取决于许多因素 请记住,浮点运算基本上是一个整数有效位和一个整数指数的组合,所以它都是整数。真正的问题是:你能在没有浮动的情况下有效地完成吗 首先,“良好的准确性”高度依赖于

大多数神经网络都使用浮点权重/偏差进行训练

存在量化方法将权重从float转换为int,以便在较小的平台上部署

你能从头开始构建约束所有参数的神经网络,并将其更新为整数算法吗

这样的网络能达到很好的精确度吗

(我对定点技术略知一二,而且在90年代只有一些生锈的NN经验,所以我要说的话,请恕我直言!)

一般的答案是肯定的,但这取决于许多因素

请记住,浮点运算基本上是一个整数有效位和一个整数指数的组合,所以它都是整数。真正的问题是:你能在没有浮动的情况下有效地完成吗

首先,“良好的准确性”高度依赖于许多因素。执行比浮点粒度更高的整数操作是完全可能的。例如,32位整数有31位尾数,而32位浮点实际上只有24位尾数。因此,如果您不需要浮点数所提供的接近零的附加精度,那么这完全取决于您选择的类型。16位——甚至8位——的值可能足以满足大部分处理

第二,积累对神经元的输入有一个问题,除非你知道一个节点的最大输入数,否则你无法确定积累值的上限是多少。因此,您必须在编译时有效地指定此限制

第三,在训练网络的执行过程中,最复杂的操作通常是激活函数。同样,你首先要考虑你将要操作的值的范围。然后,您需要使用FPU提供的所有高级数学函数,在不借助FPU的情况下实现该函数。考虑这一点的一种方法是通过查找表。

最后,培训涉及测量值之间的误差,误差通常很小。这就是准确性的问题所在。如果您测量的差异太小,它们将四舍五入为零,这可能会阻碍进度。一种解决方案是通过提供更多的小数位数来提高值的分辨率

这里整数比浮点的一个优点是它们的均匀分布。当浮点数的大小增加时,其精度会降低,而整数的精度保持不变。这意味着,如果您试图测量接近1的值之间的非常小的差异,您应该不会遇到比这些值接近0时更大的问题。对于浮动,情况并非如此

如果训练时间不是瓶颈,那么训练一个比用来运行网络的精度更高的网络是可能的。您甚至可以使用浮点类型训练网络,并使用精度较低的整数运行网络,但您需要了解这些快捷方式将带来的行为差异

简言之,所涉及的问题决不是无法克服的,但您需要付出一些精神上的努力,这些努力通常可以通过使用浮点来节省。然而,特别是当您的硬件受到物理约束时,这可能是一种非常有效的方法,因为浮点运算需要比整数运算多100倍的硅和功率

希望有帮助