具有不动点参数的神经网络

时间:2018-04-10 02:54:59

标签: neural-network fixed-point

大多数神经网络都采用浮点权重/偏差训练。

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

你可以从头开始构建神经网络,约束所有参数,并将它们的更新作为整数运算吗?

此类网络能否达到良好的准确度?

1 个答案:

答案 0 :(得分:1)

(我对定点有点了解,并且从90年代开始只有一些生锈的NN经验,所以用一点点盐就可以说了!)

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

请记住,浮点运算基本上是整数有效数和整数指数的组合,因此它是引擎盖下的所有整数。真正的问题是:如果没有花车,你能有效地做到吗?

首先,“良好的准确性”在很大程度上取决于许多因素。完全可以执行粒度高于浮点的整数运算。例如,32位整数有31位尾数,而32位浮点有效只有24位。因此,如果您不需要浮点数的附加精度使您接近零,那么所有关于您选择的类型都是如此。 16位 - 甚至8位 - 值可能足以完成大部分处理。

其次,累积输入到神经元的问题是,除非您知道节点的最大输入数,否则您无法确定正在累积的值的上限。因此,您必须在编译时指定此限制。

第三,在训练网络的执行期间最复杂的操作通常是激活功能。同样,您首先必须考虑您将在哪个值范围内运行。然后,您需要在没有FPU的帮助下实现该功能,并具有它提供的所有高级数学函数。考虑这样做的一种方法是通过查找表。

最后,培训涉及测量值之间的误差,并且该误差通常非常小。这是精确度的关注点。如果您测量的差异太小,它们将向下舍入为零,这可能会阻止进度。一种解决方案是通过提供更多的小数位来增加值的分辨率。

整数在浮点数上的一个优点是它们的均匀分布。浮点数随着幅度的增加而失去精度,整数保持恒定的精度。这意味着如果你试图测量接近1的值的非常小的差异,你应该没有比这些值接近0时更麻烦。浮点数也是如此。

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

简而言之,所涉及的问题绝不是不可克服的,但你需要承担一些通常通过使用浮点来节省的心理努力。但是,特别是如果您的硬件受到物理限制,这可能是一个非常有利的方法,因为浮点运算需要比整数运算多100倍的硅和功率。

希望有所帮助。