2
sigmoid
이 활성화 기능으로 선택되는 반복적 인 신경망을 구현하려고합니다.Sigmoid를 계산하는 가장 빠른 방법은 무엇입니까?
내 첫 번째 프로토 타입은 python
으로 작성되었으며 sigmoid
은 프로그램의 병목 현상으로 전체 실행 시간의 30 %를 차지합니다.
# x is a fixed size vector here
def sigmoid(x):
return numpy.reciprocal(1.0 + numpy.exp(-x))
그래서 다른 구현
def sigmoid(x):
y = numpy.exp(x)
return y/(1+y)
을 시도하고 놀랍게도 첫 번째 방법에 비해 50 % 더 빠른 발견했다.
는 또한 첫 번째 방법보다 조금 느린 세번째 접근def sigmoid(x):
return (1.0+numpy.tanh(x/2.0))/2.0
을 시도했다.
나중에 C++에서 3 가지 구현을 모두 테스트했습니다. 첫 번째 두 가지 접근 방식은 거의 차이가 없으며 tanh
은 약간 (~ 5 %) 빠릅니다. 왜 이런 일이 생길까요? 나는 numpy
가 C++로 작성되었다고 생각하고 있습니다.