tanh
tanh
개요
tanh(하이퍼볼릭 탄젠트, Hyperbolic Tangent)는 인공신경망에서 널리 사용되는 비선형 활성화 함수 중 하나입니다. 수학적으로는 입력값에 대한 하이퍼볼릭 탄젠트 값을 출력하며, 출력 범위가 -1에서 1 사이로 제한된다는 특징을 가지고 있습니다. 이는 신경망의 학습 안정성과 수렴 속도에 긍정적인 영향을 미칠 수 있어, 특히 초기 신경망 모델에서 자주 사용되었습니다.
tanh는 시그모이드(Sigmoid) 함수와 유사한 S자 형태의 곡선을 가지지만, 출력 범위가 대칭적이라는 점에서 차이가 있으며, 이로 인해 제로 중심(zero-centered) 출력을 제공하여 역전파(Backpropagation) 과정에서 기울기 업데이트가 더 효율적으로 이루어질 수 있습니다.
수학적 정의
tanh 함수는 다음과 같은 수학적 식으로 정의됩니다:
$$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = \frac{\sinh(x)}{\cosh(x)} $$
또는 시그모이드 함수 $ \sigma(x) $를 이용해 다음과 같이 표현할 수도 있습니다:
$$ \tanh(x) = 2\sigma(2x) - 1 $$
특징
- 정의역: $ x \in (-\infty, +\infty) $
- 치역: $ y \in (-1, 1) $
- 기울기(도함수):
$$ \frac{d}{dx}\tanh(x) = 1 - \tanh^2(x) $$ 이 도함수는 입력값이 0 근처일 때 기울기가 1에 가까우며, 입력값이 커질수록 기울기가 0에 수렴합니다.
신경망에서의 역할
활성화 함수로서의 기능
신경망의 각 뉴런은 가중합을 계산한 후 활성화 함수를 적용하여 출력을 결정합니다. tanh는 이 과정에서 다음과 같은 역할을 수행합니다:
- 비선형성 도입: 선형 함수만 사용할 경우 신경망은 단일 계층과 동일한 표현력을 가지게 됩니다. tanh는 비선형 함수이므로, 깊은 신경망이 복잡한 패턴을 학습할 수 있도록 합니다.
- 출력 정규화: 입력값이 크거나 작을수록 출력이 각각 1 또는 -1에 수렴하므로, 신호의 크기를 제한하여 수치적 안정성을 제공합니다.
- 제로 중심 출력: 출력이 0을 중심으로 대칭적이므로, 다음 레이어의 입력 분포가 균형을 이루게 되어 기울기 소실(vanishing gradient) 문제를 부분적으로 완화할 수 있습니다.
장점과 단점
장점
| 장점 | 설명 |
|---|---|
| 제로 중심 출력 | 평균이 0에 가까운 출력을 생성하므로, 다음 레이어의 가중치 업데이트가 더 안정적임 |
| 비선형성 | 복잡한 데이터 패턴 학습 가능 |
| 미분 가능성 | 모든 지점에서 미분 가능하여 역전파 알고리즘에 적합 |
단점
| 단점 | 설명 |
|---|---|
| 기울기 소실 문제 | 입력값이 매우 크거나 작을 경우 기울기가 거의 0이 되어, 깊은 네트워크에서 역전파 시 그래디언트가 사라질 수 있음 |
| 계산 비용 | 지수 함수를 포함하므로 ReLU와 같은 단순 함수보다 계산이 복잡함 |
| 출력 포화 | 입력이 커지면 출력이 포화되어 변화가 거의 없음 → 학습 정체 유발 가능 |
tanh vs. 다른 활성화 함수
| 함수 | 출력 범위 | 제로 중심 | 기울기 소실 | 계산 복잡도 | 주요 사용처 |
|---|---|---|---|---|---|
| tanh | (-1, 1) | ✅ | 중간 | 중간 | RNN, 전통적 DNN |
| Sigmoid | (0, 1) | ❌ | 심함 | 중간 | 이진 분류 출력층 |
| ReLU | [0, ∞) | ❌ | 없음 (양수 구간) | 낮음 | CNN, DNN 일반 레이어 |
| Leaky ReLU | (-∞, ∞) | ❌ | 약함 | 낮음 | ReLU의 대안 |
사용 사례
- 순환 신경망(RNN): RNN의 내부 상태 업데이트에 tanh가 자주 사용됩니다. 예를 들어, 전통적인 LSTM에서는 셀 상태(candidate cell state) 계산에 tanh 함수를 적용합니다.
- 자기회귀 모델: 과거 정보를 요약하는 구조에서 출력의 대칭성이 유리하게 작용합니다.
- 생성 모델: 생성적 적대 신경망(GAN)이나 오토인코더의 일부 레이어에서 사용되기도 합니다.
코드 예시 (Python)
import numpy as np
import matplotlib.pyplot as plt
def tanh(x):
return np.tanh(x)
def tanh_derivative(x):
return 1 - np.tanh(x) ** 2
# 시각화
x = np.linspace(-5, 5, 100)
y = tanh(x)
dy = tanh_derivative(x)
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='tanh(x)', color='blue')
plt.plot(x, dy, label="tanh'(x)", color='red', linestyle='--')
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)
plt.title('tanh 함수와 그 도함수')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
참고 자료 및 관련 문서
- Activation Function - Wikipedia
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
- 관련 활성화 함수: Sigmoid, ReLU, Softmax
- 관련 개념: 신경망, 역전파 알고리즘, 기울기 소실 문제
참고: 최근에는 ReLU 및 그 변형(GELU, Swish 등)이 대부분의 심층 신경망에서 tanh를 대체하고 있으나, 여전히 특정 아키텍처(RNN 기반 모델 등)에서는 유용하게 사용되고 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.