Je suis en train de mettre en place un réseau de neurones récurrent où sigmoid
est choisi pour être la fonction d'activation.Quel est le moyen le plus rapide de calculer sigmoïde?
Mon premier prototype est écrit dans python
et je trouve sigmoid
est en quelque sorte le goulot d'étranglement du programme représente environ 30% du temps total de course.
# x is a fixed size vector here
def sigmoid(x):
return numpy.reciprocal(1.0 + numpy.exp(-x))
J'ai donc essayé une autre implémentation
def sigmoid(x):
y = numpy.exp(x)
return y/(1+y)
et trouvé étonnamment, il est 50% plus rapide que la première approche.
J'ai essayé une troisième approche
def sigmoid(x):
return (1.0+numpy.tanh(x/2.0))/2.0
, ce qui est légèrement plus lent que la première approche.
plus tard je l'ai testé les 3 implémentations en C++. Les deux première approche n'a guère de différence, et tanh
est légèrement (~ 5%) plus rapide. Pourquoi cela arrive-t-il? Je pense que numpy
a été écrit en C++.