시그모이드 활성화 함수 - Python 구현
이 튜토리얼에서는 시그모이드 활성화 기능에 대해 알아봅니다. 시그모이드 함수는 항상 0과 1 사이의 출력값을 반환합니다.
이 자습서 후에 다음을 알게 됩니다.
- 활성화 기능이란 무엇입니까?
- 파이썬에서 시그모이드 함수를 구현하는 방법은 무엇입니까?
- 파이썬에서 시그모이드 함수를 그리는 방법
- 시그모이드 함수는 어디에 사용하나요?
- 시그모이드 활성화 기능으로 인해 발생하는 문제는 무엇입니까?
- 시그모이드 활성화에 대한 더 나은 대안.
활성화 기능이란 무엇입니까?
활성화 함수는 신경망의 출력을 제어하는 수학적 함수입니다. 활성화 기능은 뉴런이 발동되어야 하는지 여부를 결정하는 데 도움이 됩니다.
널리 사용되는 활성화 기능 중 일부는 다음과 같습니다.
- 바이너리 스텝
- 선형
- 시그모이드
- 탱
- ReLU
- 새는 ReLU
- 소프트맥스
활성화는 신경망 모델의 출력에 비선형성을 추가하는 역할을 합니다. 활성화 함수가 없으면 신경망은 단순히 선형 회귀입니다.
신경망의 출력을 계산하기 위한 수학 방정식은 다음과 같습니다.
이 튜토리얼에서는 시그모이드 활성화 기능에 중점을 둘 것입니다. 이 함수는 수학의 시그모이드 함수에서 나옵니다.
함수의 공식에 대해 논의하는 것으로 시작하겠습니다.
시그모이드 활성화 함수 공식
수학적으로 시그모이드 활성화 함수를 다음과 같이 나타낼 수 있습니다.
분모가 항상 1보다 크므로 출력이 항상 0과 1 사이임을 알 수 있습니다.
Python에서 Sigmoid 활성화 함수 구현
이 섹션에서는 Python에서 시그모이드 활성화 함수를 구현하는 방법을 알아봅니다.
파이썬에서 함수를 다음과 같이 정의할 수 있습니다.
import numpy as np
def sig(x):
return 1/(1 + np.exp(-x))
일부 입력에서 함수를 실행해 봅시다.
import numpy as np
def sig(x):
return 1/(1 + np.exp(-x))
x = 1.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = -10.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = 0.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = 15.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = -2.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
출력 :
Applying Sigmoid Activation on (1.0) gives 0.7
Applying Sigmoid Activation on (-10.0) gives 0.0
Applying Sigmoid Activation on (0.0) gives 0.5
Applying Sigmoid Activation on (15.0) gives 1.0
Applying Sigmoid Activation on (-2.0) gives 0.1
Python을 사용하여 시그모이드 활성화 플로팅
시그모이드 활성화를 플롯하기 위해 Numpy 라이브러리를 사용합니다.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10, 50)
p = sig(x)
plt.xlabel("x")
plt.ylabel("Sigmoid(x)")
plt.plot(x, p)
plt.show()
출력 :
출력이 0과 1 사이임을 알 수 있습니다.
시그모이드 함수는 확률이 항상 0과 1 사이이기 때문에 확률을 예측하는 데 일반적으로 사용됩니다.
시그모이드 함수의 단점 중 하나는 끝 영역으로 갈수록 Y 값이 X 값의 변화에 매우 적게 반응한다는 것입니다.
이로 인해 기울기 소실 문제라는 문제가 발생합니다.
Vanishing Gradient는 학습 과정을 느리게 하므로 바람직하지 않습니다.
이 문제를 극복하는 몇 가지 대안에 대해 논의해 봅시다.
ReLu 활성화 기능
기울기 소실 문제를 해결하는 더 나은 대안은 ReLu 활성화 기능입니다.
ReLu 활성화 함수는 입력이 음수이면 0을 반환하고 그렇지 않으면 입력을 그대로 반환합니다.
수학적으로는 다음과 같이 표현됩니다.
다음과 같이 Python에서 구현할 수 있습니다.
def relu(x):
return max(0.0, x)
일부 입력에서 어떻게 작동하는지 봅시다.
def relu(x):
return max(0.0, x)
x = 1.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -10.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 0.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 15.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -20.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
산출:
Applying Relu on (1.0) gives 1.0
Applying Relu on (-10.0) gives 0.0
Applying Relu on (0.0) gives 0.0
Applying Relu on (15.0) gives 15.0
Applying Relu on (-20.0) gives 0.0
ReLu의 문제는 음의 입력에 대한 그래디언트가 0으로 나온다는 것입니다.
이것은 다시 음의 입력에 대해 기울기가 사라지는 문제(기울기가 0임)로 이어집니다.
이 문제를 해결하기 위해 Leaky ReLu 활성화 기능으로 알려진 또 다른 대안이 있습니다.
Leaky ReLu 활성화 함수
Leaky ReLu는 x의 매우 작은 선형 구성 요소를 음의 입력에 제공하여 음의 값에 대한 기울기가 0인 문제를 해결합니다.
수학적으로 다음과 같이 정의할 수 있습니다.
f(x)= 0.01x, x<0
= x, x>=0
다음을 사용하여 Python에서 구현할 수 있습니다.
def leaky_relu(x):
if x>0 :
return x
else :
return 0.01*x
x = 1.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -10.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 0.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 15.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -20.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
출력 :
Applying Leaky Relu on (1.0) gives 1.0
Applying Leaky Relu on (-10.0) gives -0.1
Applying Leaky Relu on (0.0) gives 0.0
Applying Leaky Relu on (15.0) gives 15.0
Applying Leaky Relu on (-20.0) gives -0.2
결론
이 튜토리얼은 Sigmoid 활성화 기능에 관한 것입니다. 파이썬에서 함수를 구현하고 플로팅하는 방법을 배웠습니다.