딥 러닝에서 사용하는 활성화 함수를 시각화 해 보았습니다.

나만의 메모

뭔가 알아보면 비슷한 기사가 있었지만 신경 쓰지 않는다.
같은 책 을 참고했기 때문에 어쩔 수 없다

스텝 함수



임계값보다 작으면 0, 크면 1을 돌려준다(이번 예에서는 0을 임계치로 한다)
h(x)=\begin{cases}
  0\quad(x \leqq 0) \\
  1\quad(x > 0)
\end{cases}
def step_function(x):
    return np.array(x > 0, dtype = np.int)

x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)

plt.plot(x, y)
plt.show()



시그모이드 함수



스텝 함수의 상위 호환성
값을 0~1로 스케일
h(x) = \frac{1}{1 + e^{-x}}
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)

plt.plot(x, y)
plt.show()



tanh 함수



시그모이드 함수의 상위 호환성.
그라디언트 소실 문제가 발생하기 어렵도록 선형 변환했지만 역시 그라디언트 소실 문제가 일어날 수도 있는 것 같다
h(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}



ReLU 함수



tanh 함수의 상위 호환성.
0 이하이면 0, 0보다 크면 입력한 값을 그대로 반환
h(x)=\begin{cases}
  0\quad(x \leqq 0) \\
  x\quad(x > 0)
\end{cases}
def relu(x):
    return np.maximum(0, x)

x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)

plt.plot(x, y)
plt.show()



소프트 맥스 함수



0~1로 총합이 1이 되도록 돌려주는 녀석. 확률 같게 취급할 수 있게 되기 때문에 출력층에서 사용되기 쉽다. 크고 작은 관계가 변하지 않기 때문에 사용할 필요가 없다고 말하는 사람들도 있습니다.
y_k = \frac{e^{a_k}}{\sum_{i=1}^ne^{a_i}}
def softmax(a):
  exp_a = np.exp(a)
  sum_exp_a = np.sum(exp_a)
  y = exp_a / sum_exp_a
  return y

x = np.arange(-5, 5, 0.1)
y = softmax(x)
plt.plot(x, y)
plt.show()



항등 함수



입력된 값을 그대로 반환하는 사람. 취미. 사촌을 허수아비.
h(x)=x
def identity_function(x):
    return x
x = np.arange(-5, 5, 0.1)
y = identity_function(x)
plt.plot(x, y)
plt.show()

좋은 웹페이지 즐겨찾기