在许多资源/视频中,我看到有人按照“我们可以在这里看到我们有一个对数/指数,所以这将是一项昂贵的计算”。(例如使用 NN 的 sigmoid 激活函数)。这些声明的背后是什么?
一个更具体的例子是:是什么让在计算机计算中或之类的东西有很大不同?
在许多资源/视频中,我看到有人按照“我们可以在这里看到我们有一个对数/指数,所以这将是一项昂贵的计算”。(例如使用 NN 的 sigmoid 激活函数)。这些声明的背后是什么?
一个更具体的例子是:是什么让在计算机计算中或之类的东西有很大不同?
要添加到 Lutz Lehmann 的答案,您可以在Agner Fog的这个综合表中查找 CPU 指令的延迟。例如,在 Intel Ivy Bridge 处理器上:
要计算底数不是 2 的指数,您必须结合使用 FYL2X 和 F2XM1 指令。除了 Lutz 所说的原因之外,IEEE-754 标准对于必须如何准确地评估超越函数有非常严格的要求——正确到最后一位和正确的舍入。对于许多应用程序来说,这种精度水平是完全没有必要的,人们将在软件中使用比内置硬件指令所需的周期少得多的近似值。例如,这篇博文展示了如果您愿意牺牲一些准确性,如何快速计算指数函数的近似值。我认为,与 ML 相比,使用较低精度的浮点数也很常见——只有 32、16 甚至 8 位——而不是完整的 64 位。
,,并且它们的反函数和其他相关函数是超越函数,由无限幂级数定义。这意味着需要一些努力来评估一致的良好近似值。这是通过使用这些函数的属性和多项式近似的参数简化来完成的,或者使用多项式的商 à la Padé 近似(但再次转向某种一致收敛)。
所以确实是一个sigmoid应该比例如花费更多的周期.
幂函数通过或一些包装器来评估,这些包装器删除了更易于计算的部分,因此特别是对于非整数比指数函数更昂贵。