활성화 함수란? (ReLU, Sigmoid, Tanh 등)
1. 활성화 함수의 개념
활성화 함수(Activation Function)는 인공신경망에서 뉴런의 출력값을 결정하는 중요한 요소입니다. 신경망에서 입력을 받은 뉴런은 가중치와 편향을 적용한 후, 활성화 함수를 거쳐 최종 출력을 내보냅니다. 이 함수는 비선형성을 추가하여 신경망이 복잡한 패턴을 학습할 수 있도록 돕습니다.
활성화 함수가 없다면 신경망의 각 층은 단순한 선형 변환만 수행하게 되고, 깊이가 아무리 깊어도 하나의 선형 모델과 동일한 표현력을 가지게 됩니다. 따라서 활성화 함수는 신경망이 비선형 문제를 해결할 수 있도록 하는 핵심적인 역할을 합니다.
2. 대표적인 활성화 함수
2.1. 시그모이드(Sigmoid) 함수
시그모이드 함수는 입력값을 0과 1 사이의 값으로 변환하는 S자형 곡선을 가집니다. 수식은 다음과 같습니다.
$$ \sigma(x) = \frac{1}{1 + e^{-x}} $$
이 함수는 출력값을 확률로 해석할 수 있어 이진 분류 문제에서 많이 사용됩니다.
장점
- 출력값이 항상 0과 1 사이에 위치하여 확률값으로 해석 가능
- 매끄러운 미분 가능 함수
단점
- 기울기 소실(Vanishing Gradient) 문제: 입력값이 매우 크거나 작으면 미분값이 거의 0에 가까워져 가중치 업데이트가 어려워짐
- 출력 범위가 0에서 1 사이로 한정됨: 결과값이 한쪽으로 치우칠 경우 학습이 어려울 수 있음
구현 코드 (Python)
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.title("Sigmoid Function")
plt.xlabel("x")
plt.ylabel("σ(x)")
plt.grid()
plt.show()
2.2. 하이퍼볼릭 탄젠트(Tanh) 함수
Tanh 함수는 시그모이드 함수와 유사하지만 출력 범위가 -1에서 1 사이입니다. 수식은 다음과 같습니다.
$$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$
장점
- 출력값이 -1에서 1 사이로 조정되어 시그모이드보다 중심이 0에 가까움
- 시그모이드보다 기울기 소실 문제가 덜 발생함
단점
- 여전히 큰 값에서 기울기 소실 문제 발생 가능
구현 코드 (Python)
def tanh(x):
return np.tanh(x)
x = np.linspace(-10, 10, 100)
y = tanh(x)
plt.plot(x, y)
plt.title("Tanh Function")
plt.xlabel("x")
plt.ylabel("tanh(x)")
plt.grid()
plt.show()
2.3. 렐루(ReLU) 함수
ReLU(Rectified Linear Unit) 함수는 현재 가장 널리 사용되는 활성화 함수 중 하나로, 수식은 다음과 같습니다.
$$ ReLU(x) = \max(0, x) $$
입력값이 0보다 작으면 0, 0 이상이면 그대로 출력하는 형태입니다.
장점
- 시그모이드나 Tanh와 달리 기울기 소실 문제가 거의 없음
- 계산이 단순하여 빠른 연산 가능
단점
- 죽은 뉴런 문제(Dead Neuron Issue): 입력값이 음수이면 기울기가 0이 되어 해당 뉴런이 학습되지 않음
구현 코드 (Python)
def relu(x):
return np.maximum(0, x)
x = np.linspace(-10, 10, 100)
y = relu(x)
plt.plot(x, y)
plt.title("ReLU Function")
plt.xlabel("x")
plt.ylabel("ReLU(x)")
plt.grid()
plt.show()
2.4. Leaky ReLU 함수
Leaky ReLU 함수는 ReLU 함수의 단점을 보완하기 위해 입력값이 음수일 때도 작은 기울기를 갖도록 변형한 함수입니다.
$$ LeakyReLU(x) = \begin{cases} x, & x > 0 \ \alpha x, & x \leq 0 \end{cases} $$
여기서 $\alpha$는 작은 양수(보통 0.01)입니다.
장점
- ReLU의 죽은 뉴런 문제를 완화
- 시그모이드 및 Tanh보다 기울기 소실 문제가 적음
단점
- $\alpha$ 값 설정이 모델 성능에 영향을 미칠 수 있음
구현 코드 (Python)
def leaky_relu(x, alpha=0.01):
return np.where(x > 0, x, alpha * x)
x = np.linspace(-10, 10, 100)
y = leaky_relu(x)
plt.plot(x, y)
plt.title("Leaky ReLU Function")
plt.xlabel("x")
plt.ylabel("Leaky ReLU(x)")
plt.grid()
plt.show()
3. 활성화 함수 선택 가이드
| 함수 | 출력 범위 | 주요 특징 | 장점 | 단점 |
|---|---|---|---|---|
| Sigmoid | (0,1) | S자형 곡선 | 확률적 출력 가능 | 기울기 소실 문제 |
| Tanh | (-1,1) | S자형 곡선 | 중심이 0이라 학습 효과 개선 | 여전히 기울기 소실 발생 |
| ReLU | (0,∞) | 선형 함수 | 계산 간단, 기울기 소실 문제 적음 | 죽은 뉴런 문제 발생 가능 |
| Leaky ReLU | (-∞,∞) | 선형 함수 변형 | 죽은 뉴런 문제 완화 | 하이퍼파라미터(α) 설정 필요 |
신경망 모델에 따라 적절한 활성화 함수를 선택하는 것이 중요합니다. 일반적으로 은닉층에서는 ReLU나 Leaky ReLU가 가장 많이 사용되며, 출력층에서는 문제 유형에 따라 다른 활성화 함수를 선택합니다.
- 이진 분류 문제: 시그모이드 함수 사용
- 다중 클래스 분류 문제: 소프트맥스(Softmax) 함수 사용
- 회귀 문제: 활성화 함수 없이 선형 출력층 사용 또는 ReLU 사용 가능
4. 결론
활성화 함수는 인공신경망의 학습 성능과 결과에 큰 영향을 미치는 중요한 요소입니다. 시그모이드와 Tanh는 비교적 오래된 방식이지만 여전히 특정 경우에 유용하며, 현재는 ReLU 계열의 함수가 주로 사용됩니다. 신경망을 설계할 때는 문제 유형과 데이터 특성을 고려하여 적절한 활성화 함수를 선택하는 것이 중요합니다.
'Python > Deep Learning' 카테고리의 다른 글
| 손실 함수와 비용 함수의 차이 및 활용 (0) | 2025.11.25 |
|---|---|
| 뉴런과 퍼셉트론: 기초부터 이해하기 (0) | 2025.11.23 |
| 인공신경망(ANN)의 개념과 역사 (0) | 2025.11.22 |