move84

머신러닝 활성화 함수 종류와 특징 본문

머신러닝

머신러닝 활성화 함수 종류와 특징

move84 2025. 4. 10. 07:39
반응형

활성화 함수(Activation Function)는 인공 신경망(Artificial Neural Network)에서 뉴런의 출력값을 결정하는 중요한 요소다. 입력 신호의 가중치 합을 받아 최종 출력값을 생성하며, 비선형성을 추가하여 신경망이 복잡한 패턴을 학습할 수 있게 한다. 다양한 활성화 함수가 존재하며, 각각의 특징과 장단점을 이해하는 것이 중요하다.


💡 시그모이드 함수 (Sigmoid Function)
시그모이드 함수는 입력값을 0과 1 사이의 값으로 변환한다. 수식은 다음과 같다.

f(x) = 1 / (1 + e^(-x))

이는 로지스틱 회귀(Logistic Regression)에서 주로 사용되며, 확률 값으로 해석하기 용이하다.

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.title('Sigmoid Function')
plt.grid(True)
plt.show()

장점:

  • 출력값이 0과 1 사이로 제한되어 확률 값으로 해석하기 용이하다.
  • 함수가 미분 가능하므로 경사 하강법(Gradient Descent)에 적용 가능하다.

단점:

  • 기울기 소실 (Vanishing Gradient): 입력값이 매우 크거나 작은 경우 기울기가 0에 가까워져 학습이 느려지거나 멈출 수 있다.
  • 출력값이 0을 중심으로 하지 않아 (Not Zero-Centered) 학습 효율이 떨어진다.
  • 지수 함수 계산에 비용이 많이 든다.

🌈 하이퍼볼릭 탄젠트 함수 (Hyperbolic Tangent Function, tanh)
tanh 함수는 입력값을 -1과 1 사이의 값으로 변환한다. 시그모이드 함수와 유사하지만, 출력값이 0을 중심으로 한다는 장점이 있다. 수식은 다음과 같다.

f(x) = (e^x - e^(-x)) / (e^x + e^(-x))

import numpy as np
import matplotlib.pyplot as plt

def tanh(x):
    return np.tanh(x)

x = np.linspace(-10, 10, 100)
y = tanh(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.title('Hyperbolic Tangent Function')
plt.grid(True)
plt.show()

장점:

  • 출력값이 0을 중심으로 하므로 시그모이드 함수보다 학습 효율이 높다.

단점:

  • 시그모이드 함수와 마찬가지로 기울기 소실 문제가 발생할 수 있다.
  • 지수 함수 계산에 비용이 많이 든다.

ReLU (Rectified Linear Unit) 함수
ReLU 함수는 입력값이 0보다 작으면 0을 출력하고, 0보다 크면 입력값을 그대로 출력한다. 수식은 다음과 같다.

f(x) = max(0, x)

import numpy as np
import matplotlib.pyplot as plt

def relu(x):
    return np.maximum(0, x)

x = np.linspace(-10, 10, 100)
y = relu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('ReLU(x)')
plt.title('ReLU Function')
plt.grid(True)
plt.show()

장점:

  • 계산이 매우 빠르다.
  • 기울기 소실 문제가 크게 완화된다.
  • 신경망 학습 속도가 빠르다.

단점:

  • Dead ReLU: 입력값이 음수인 경우 기울기가 0이 되어 뉴런이 더 이상 활성화되지 않을 수 있다.

🌟 Leaky ReLU 함수
Leaky ReLU 함수는 ReLU 함수의 Dead ReLU 문제를 해결하기 위해 고안되었다. 입력값이 음수인 경우에도 아주 작은 기울기를 갖도록 한다. 수식은 다음과 같다.

f(x) = x (x > 0)
f(x) = ax (x <= 0) (a는 작은 상수, 예: 0.01)

import numpy as np
import matplotlib.pyplot as plt

def leaky_relu(x, a=0.01):
    return np.where(x > 0, x, a * x)

x = np.linspace(-10, 10, 100)
y = leaky_relu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Leaky ReLU(x)')
plt.title('Leaky ReLU Function')
plt.grid(True)
plt.show()

장점:

  • Dead ReLU 문제를 완화한다.
  • ReLU 함수와 유사한 장점을 갖는다.

단점:

  • a 값을 어떻게 설정하느냐에 따라 성능이 달라질 수 있다.

💫 ELU (Exponential Linear Unit) 함수
ELU 함수는 Leaky ReLU와 유사하게 Dead ReLU 문제를 해결하기 위해 고안되었다. 음수 영역에서 지수 함수를 사용하여 부드러운 곡선을 만든다. 수식은 다음과 같다.

f(x) = x (x > 0)
f(x) = a(e^x - 1) (x <= 0) (a는 상수, 예: 1)

import numpy as np
import matplotlib.pyplot as plt

def elu(x, a=1):
    return np.where(x > 0, x, a * (np.exp(x) - 1))

x = np.linspace(-10, 10, 100)
y = elu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('ELU(x)')
plt.title('ELU Function')
plt.grid(True)
plt.show()

장점:

  • Dead ReLU 문제를 완화한다.
  • 출력값이 0을 중심으로 하므로 학습 효율이 높을 수 있다.

단점:

  • 지수 함수 계산에 비용이 많이 든다.

🔑 활성화 함수 선택 요약

  • Sigmoid (시그모이드): 이진 분류 문제에서 확률 값으로 해석할 때 유용하지만, 기울기 소실 문제가 있다.
  • tanh (하이퍼볼릭 탄젠트): Sigmoid와 유사하지만, 출력값이 0을 중심으로 하여 학습 효율이 높을 수 있다. 그러나 기울기 소실 문제는 여전히 존재한다.
  • ReLU: 계산이 빠르고 기울기 소실 문제가 완화되지만, Dead ReLU 문제가 발생할 수 있다.
  • Leaky ReLU: Dead ReLU 문제를 완화하기 위해 ReLU를 개선한 함수다.
  • ELU: Leaky ReLU와 유사하게 Dead ReLU 문제를 완화하며, 출력값이 0을 중심으로 하여 학습 효율이 높을 수 있지만, 지수 함수 계산 비용이 든다.

각 활성화 함수는 특정 상황에 더 적합할 수 있다. 따라서 문제의 특성과 신경망 구조를 고려하여 적절한 활성화 함수를 선택하는 것이 중요하다. 실험을 통해 최적의 활성화 함수를 찾는 것이 일반적이다.

반응형