Tanh (Hyperbolic Tangent)
Tanh 활성화 함수가 데이터를 영점 중심화하여 신경망 학습을 개선하는 방법을 알아봅니다. RNN, GAN 및 Ultralytics YOLO26 모델에서의 역할을 살펴봅니다.
Tanh(쌍곡선 탄젠트) 함수는 인공 신경망의 은닉층에서 널리 사용되는 수학적 활성화 함수입니다. 입력값을 -1에서 1 사이의 출력 범위로 변환하여 시그모이드 함수와 유사하지만 0을 중심으로 하는 S자 곡선을 만듭니다. 이러한 0 중심화 특성은 뉴런의 출력을 정규화하여 모델이 더 효율적으로 학습할 수 있도록 하고, 네트워크를 통과하는 데이터의 평균이 0에 가까워지도록 하므로 매우 중요합니다. Tanh는 음수 값을 명시적으로 처리함으로써 신경망이 데이터 내의 더 복잡한 패턴과 관계를 포착하도록 돕습니다.
딥러닝에서 Tanh의 작동 원리#
딥러닝 모델의 아키텍처에서 활성화 함수는 비선형성을 도입하여 네트워크가 서로 다른 데이터 클래스 사이의 복잡한 경계를 학습할 수 있도록 합니다. Tanh와 같은 함수가 없다면 신경망은 레이어 수와 관계없이 단순한 선형 회귀 모델처럼 동작합니다. Tanh 함수는 특히 순환 신경망 (RNN)과 균형 잡힌 0 중심 활성화 분포를 유지하는 것이 역전파 중 기울기 소실 문제를 방지하는 데 도움이 되는 특정 유형의 피드포워드 네트워크에서 효과적입니다.
입력이 -1에서 1 범위로 매핑되면 매우 큰 음수 입력은 음수 출력으로, 매우 큰 양수 입력은 양수 출력으로 변환됩니다. 이는 값을 0에서 1 사이로 압축하는 Sigmoid 함수와 다릅니다. Tanh의 출력은 0을 기준으로 대칭이므로 경사 하강법 프로세스가 더 빠르게 수렴하는 경우가 많습니다. 이는 후속 레이어의 가중치가 한 방향으로만 일관되게 이동하지 않기 때문이며, 최적화에서 이를 "지그재그" 경로라고 합니다.
실제 적용 사례#
Tanh는 특정 아키텍처와 사용 사례, 특히 시퀀스 처리와 연속값 추정이 필요한 경우에 계속해서 중요한 역할을 합니다.
- 자연어 처리 (NLP): 장단기 메모리 (LSTM) 네트워크 및 게이트 순환 유닛 (GRU)과 같은 아키텍처에서 Tanh는 정보 흐름을 조절하는 주요 활성화 함수로 사용됩니다. 예를 들어 영어 텍스트를 프랑스어로 변환하는 기계 번역 작업에서 Tanh는 LSTM의 내부 게이트가 이전 컨텍스트(메모리)를 얼마나 유지하거나 잊을지 결정하도록 돕습니다. 이를 통해 모델은 문장 구조의 장기 의존성을 처리할 수 있습니다.
- 생성적 적대 신경망 (GANs): 다수의 생성적 적대 신경망에서 생성기 구성 요소의 출력 레이어에 Tanh가 최종 활성화 함수로 자주 사용됩니다. 이미지가 전처리 과정에서 -1에서 1 범위로 정규화되는 경우가 많으므로 Tanh를 사용하면 생성기가 동일한 유효 범위 내의 픽셀값을 생성할 수 있습니다. 이 기법은 텍스트-이미지 생성과 같은 애플리케이션에서 사실적인 이미지를 합성하는 데 도움이 됩니다.
비교: Tanh와 Sigmoid 및 ReLU 비교#
Tanh를 언제 사용해야 하는지 이해하려면 Tanh를 다른 일반적인 함수와 구별하는 것이 유용합니다.
- Tanh와 Sigmoid 비교: 두 함수 모두 S자 곡선입니다. 그러나 Sigmoid는 0에서 1 사이의 값을 출력하므로 Tanh보다 기울기가 더 빠르게 소실될 수 있습니다. Sigmoid는 일반적으로 이진 분류 문제의 최종 출력 레이어(확률 예측)에 사용되는 반면, Tanh는 RNN의 은닉층에 선호됩니다.
- Tanh와 ReLU (정류 선형 유닛) 비교: YOLO26과 같은 최신 합성곱 신경망 (CNNs)에서는 일반적으로 은닉층에 Tanh보다 ReLU와 그 변형(예: SiLU)을 선호합니다. ReLU는 매우 깊은 네트워크에서 기울기 소실 문제를 더 효과적으로 방지하고 계산 비용도 더 저렴하기 때문입니다. Tanh는 지수 계산이 필요하므로 계산 비용이 더 높습니다.
PyTorch에서 활성화 함수 구현하기#
Ultralytics YOLO26과 같은 고수준 모델은 구성 파일 내에서 활성화 함수 정의를 내부적으로 처리하지만, 사용자 지정 모델을 구축할 때 PyTorch를 사용하여 Tanh를 적용하는 방법을 이해하는 것이 유용합니다.
import torch
import torch.nn as nn
# Define a sample input tensor with positive and negative values
input_data = torch.tensor([-2.0, -0.5, 0.0, 0.5, 2.0])
# Initialize the Tanh activation function
tanh = nn.Tanh()
# Apply Tanh to the input data
output = tanh(input_data)
# Print results to see values squashed between -1 and 1
print(f"Input: {input_data}")
print(f"Output: {output}")사용자 지정 아키텍처를 학습하거나 데이터셋을 효과적으로 관리하려는 사용자를 위해 Ultralytics Platform은 다양한 모델 하이퍼파라미터를 실험하고, 학습 메트릭을 시각화하며, 신경망의 모든 레이어를 수동으로 코딩하지 않고도 솔루션을 배포할 수 있는 간소화된 환경을 제공합니다.









