【问题标题】:Neural Networks w/ Fixed Point Parameters带定点参数的神经网络
【发布时间】:2018-04-10 02:54:58
【问题描述】:

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

存在将权重从浮点数转换为整数的量化方法,以便部署在较小的平台上。

您能否从头开始构建神经网络来约束所有参数,并将其更新为整数算术?

这样的网络能否达到良好的准确性?

【问题讨论】:

    标签: neural-network fixed-point


    【解决方案1】:

    (我对定点略知一二,并且从 90 年代开始只有一些生疏的 NN 经验,所以我要说的一点儿盐!)

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

    请记住,浮点算术基本上是整数有效数与整数指数的组合,因此它在底层都是整数。真正的问题是:没有浮点数你能有效地做到这一点吗?

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

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

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

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

    这里整数相对于浮点的一个优势是它们的分布均匀。当浮点数随着幅度的增加而失去精度时,整数保持恒定的精度。这意味着,如果您尝试测量接近 1 的值的非常小的差异,则与这些值接近 0 时相比,您应该不会遇到更多麻烦。对于浮点数而言,情况并非如此。

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

    简而言之,所涉及的问题绝不是不可克服的,但您需要承担一些通常可以通过使用浮点来节省的脑力劳动。但是,尤其是在您的硬件受到物理限制的情况下,这可能是一种非常有益的方法,因为浮点运算所需的芯片和功率是整数运算的 100 倍。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 2017-05-16
      • 2017-07-28
      • 1970-01-01
      • 2020-09-29
      • 2013-07-01
      • 1970-01-01
      • 2012-04-05
      相关资源
      最近更新 更多