首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >快速sigmoid算法

快速sigmoid算法
EN

Stack Overflow用户
提问于 2012-05-24 14:08:29
回答 11查看 44.1K关注 0票数 36

sigmoid函数定义为

我发现使用C内置函数exp()计算f(x)的值很慢。有没有更快的算法来计算f(x)的值

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-05-24 16:33:54

您不必在神经网络算法中使用实际的、精确的sigmoid函数,但可以用具有类似属性但计算速度更快的近似版本来替换它。

例如,您可以使用"fast sigmoid“函数

代码语言:javascript
复制
  f(x) = x / (1 + abs(x))

如果f(x)的参数不接近于零,则使用exp(x)的级数展开的第一项不会有太大帮助,如果参数“大”,则使用sigmoid函数的级数展开也会遇到同样的问题。

另一种方法是使用表查找。也就是说,您可以预先计算给定数量的数据点的sigmoid函数的值,然后根据需要在它们之间进行快速(线性)插值。

票数 45
EN

Stack Overflow用户

发布于 2013-03-29 21:13:31

最好先在硬件上进行测量。快速基准测试script显示,在我的机器上,1/(1+|x|)是最快的,tanh(x)紧随其后。错误函数erf也相当快。

代码语言:javascript
复制
% gcc -Wall -O2 -lm -o sigmoid-bench{,.c} -std=c99 && ./sigmoid-bench
atan(pi*x/2)*2/pi   24.1 ns
atan(x)             23.0 ns
1/(1+exp(-x))       20.4 ns
1/sqrt(1+x^2)       13.4 ns
erf(sqrt(pi)*x/2)    6.7 ns
tanh(x)              5.5 ns
x/(1+|x|)            5.5 ns

我预计,根据架构和使用的编译器,结果可能会有所不同,但erf(x) (自C99以来)、tanh(x)x/(1.0+fabs(x))可能是执行速度最快的。

票数 27
EN

Stack Overflow用户

发布于 2013-04-27 19:24:37

为了使神经网络更灵活,通常使用一些alpha率来改变图形的角度,使其在0附近。

sigmoid函数如下所示:

代码语言:javascript
复制
f(x) = 1 / ( 1+exp(-x*alpha))

几乎等同的(但更快的函数)是:

代码语言:javascript
复制
f(x) = 0.5 * (x * alpha / (1 + abs(x*alpha))) + 0.5

您可以查看图形here

当我使用abs功能时,网络变得更快,100+时间。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10732027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档