활성화 함수

AI
gemma-4-31b
작성자
익명
작성일
2026.07.15
조회수
29
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

활성화 함수

개요/소개

활성화 함수는 인공신경망(ANN)에서 입력 신호를 처리하여 출력을 생성하는 데 사용되는 핵심 요소입니다. 이 함수는 신경망이 비선형 관계를 학습할 수 있도록 하며, 단순한 선형 모델로는 해결 불가능한 복잡한 문제(예: 이미지 인식, 자연어 처리)를 해결하는 데 기여합니다. 활성화 함수의 선택은 네트워크 성능, 수렴 속도, 과적합 방지 등에 직접적인 영향을 미칩니다.


주요 활성화 함수 종류 및 특징

1. 시그모이드(Sigmoid) 함수

  • 수학적 표현: $ \sigma(x) = \frac{1}{1 + e^{-x}} $
  • 특징: 출력 범위는 [0, 1]로, 확률 값으로 해석할 수 있습니다.
  • 장점: 연속적인 미분 가능, 비선형성 제공.
  • 단점: 기울기 소실(gradient vanishing) 문제 발생 (입력이 매우 클 경우 0에 가까워짐).
  • 사용 사례: 이진 분류 문제에서 출력층에 자주 사용되지만, 최근에는 다른 함수로 대체되는 경향.

2. 탄젠트 하이퍼볼릭(Tanh) 함수

  • 수학적 표현: $ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $
  • 특징: 출력 범위는 [-1, 1]로 시그모이드보다 중앙에 집중된 특성.
  • 장점: 시그모이드와 유사하지만 평균이 0이라 훈련 속도가 빠를 수 있음.
  • 단점: 시그모이드와 마찬가지로 기울기 소실 문제 존재.
  • 사용 사례: 은닉층에서 사용되며, 시그모이드보다 더 널리 활용됨.

3. 렐루(ReLU) 함수

  • 수학적 표현: $ \text{ReLU}(x) = \max(0, x) $
  • 특징: 입력이 양수일 때는 그대로 전달, 음수일 때는 0으로 처리.
  • 장점: 기울기 소실 문제 완화, 계산 효율성 높음.
  • 단점: "사망한 렐루" 문제(입력이 음수인 경우 출력이 0으로 고정됨).
  • 사용 사례: 딥러닝에서 가장 널리 사용되며, CNN 및 RNN에 적합.

4. 리니어ReLU(LReLU) 및 파라메트릭ReLU(PReLU)

  • LReLU: 음수 입력 시 작은 기울기(예: $ \alpha x $, $ \alpha = 0.01 $)를 적용하여 "사망한 렐루" 문제 완화.
  • PReLU: 학습 가능한 파라미터 $ \alpha $를 통해 음수 영역의 기울기 조정 가능.

5. ELU(Exponential Linear Unit) 함수

  • 수학적 표현:
    $$ \text{ELU}(x) = \begin{cases} x & (x > 0) \\ \alpha(e^x - 1) & (x \leq 0) \end{cases} $$
  • 특징: 음수 영역에서 지수적 감소를 통해 기울기 소실 완화.
  • 장점: 더 자연스러운 출력 분포 생성, 성능 향상 가능.

6. 소프트맥스(Softmax) 함수

  • 수학적 표현: $ \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} $
  • 특징: 다중 클래스 분류 문제에서 확률 분포로 변환.
  • 장점: 출력이 확률 값으로 해석 가능.
  • 단점: 계산 비용이 높고, 단일 클래스에만 적용 가능.

활성화 함수 선택 기준

요소 고려 사항
비선형성 입력 데이터의 복잡성을 모델링할 수 있는지 확인 (예: ReLU, Tanh).
기울기 소실 방지 시그모이드/Tanh는 기울기 소실 문제로 인해 최근 사용 감소.
계산 효율성 ReLU 계열은 연산 속도가 빠르며, ELU는 더 복잡한 수식을 가짐.
과적합 방지 LReLU/PReLU와 같은 확장형 함수로 "사망한 렐루" 문제 완화 가능.

코드 예시: PyTorch에서 활성화 함수 사용

import torch
import torch.nn as nn

# ReLU 적용
relu = nn.ReLU()
x = torch.tensor([-2.0, 1.5, 0.0])
print(relu(x))  # tensor([0., 1.5, 0.])

# LeakyReLU 적용 (alpha=0.01)
leaky_relu = nn.LeakyReLU(negative_slope=0.01)
print(leaky_relu(x))  # tensor([ -0.0200,  1.5000,   0.0000])

# Softmax 적용 (확률 분포로 변환)
softmax = nn.Softmax(dim=1)
logits = torch.tensor([[2.0, 1.0, 0.1]])
probabilities = softmax(logits)
print(probabilities)  # tensor([[0.6590, 0.2424, 0.0986]])


참고 자료 및 관련 문서

이 문서는 활성화 함수의 기초 개념부터 실용적인 적용까지 포괄적으로 설명하며, 딥러닝 모델 설계 시 중요한 선택 기준을 제시합니다.

비선형성의 이론적 근거

신경망에서 비선형 활성화 함수가 필수적인 이유는 선형 함수의 중첩(Composition) 특성 때문입니다. 만약 활성화 함수를 사용하지 않거나 선형 함수($f(x) = ax + b$)를 사용한다면, 아무리 많은 층을 쌓더라도 결과적으로는 하나의 거대한 선형 함수로 환원됩니다.

수학적으로 두 개의 선형 층을 중첩하면 다음과 같습니다: $$y = W_2(W_1x + b_1) + b_2 = (W_2W_1)x + (W_2b_1 + b_2) = W_{new}x + b_{new}$$

즉, 층을 깊게 쌓는 '심층 신경망(Deep Neural Network)'의 구조적 이점이 사라지며, 모델은 단순한 선형 회귀 모델과 동일한 표현력만을 갖게 됩니다. 따라서 비선형 활성화 함수를 도입해야만 신경망이 복잡한 곡선 형태의 결정 경계를 학습하고, 고차원의 비선형 데이터를 근사할 수 있는 '보편적 근사 정리(Universal Approximation Theorem)'를 충족할 수 있습니다.

함수별 상세 비교 및 미분 특성

활성화 함수 비교표

함수 수식 출력 범위 미분 값 (Gradient) 주요 특징 비고
Sigmoid $\frac{1}{1+e^{-x}}$ $(0, 1)$ $\sigma(x)(1-\sigma(x))$ 최대 미분값 0.25 기울기 소실 심함
Tanh $\frac{e^x-e^{-x}}{e^x+e^{-x}}$ $(-1, 1)$ $1-\tanh^2(x)$ Zero-centered 시그모이드보다 수렴 빠름
ReLU $\max(0, x)$ $[0, \infty)$ $x>0: 1, x<0: 0$ 연산 매우 빠름 Dying ReLU 문제
LReLU $\max(\alpha x, x)$ $(-\infty, \infty)$ $x>0: 1, x<0: \alpha$ 음수 영역 기울기 유지 Dying ReLU 해결
ELU $x$ or $\alpha(e^x-1)$ $(-\alpha, \infty)$ $x>0: 1, x \le 0: f(x)+\alpha$ 평균 0에 가까움 ReLU보다 노이즈 강함
GELU $x\Phi(x)$ $\approx (-0.17, \infty)$ 복잡한 비선형 형태 확률적 가중치 적용 Transformer 표준

기울기 소실(Vanishing Gradient)의 기술적 원인

기울기 소실은 역전파(Backpropagation) 과정에서 체인 룰(Chain Rule)에 의해 미분 값이 계속 곱해질 때 발생합니다. - Sigmoid/Tanh: 입력값이 매우 크거나 작으면 미분 값이 0에 수렴합니다. 층이 깊어질수록 $0.25 \times 0.25 \times \dots$ 와 같이 매우 작은 값이 곱해져, 입력층에 가까운 가중치들은 업데이트가 거의 일어나지 않는 현상이 발생합니다. - ReLU: 양수 영역에서 미분 값이 항상 $1$이므로, 층이 깊어져도 기울기가 그대로 전달되어 기울기 소실 문제를 획기적으로 해결했습니다.

기울기 소실 시각화 개념

(그래프 묘사: X축을 입력값, Y축을 미분값으로 설정했을 때, Sigmoid는 중앙에서만 솟아오르고 양 끝에서 0으로 급격히 수렴하는 종 모양의 곡선을 그리며, ReLU는 $x=0$을 기점으로 0과 1로 급격히 변하는 계단 모양을 보임. 층이 깊어질수록 Sigmoid의 미분값 곱은 지수적으로 감소하여 0에 수렴하는 그래프가 나타남)

최신 활성화 함수 동향

최근의 대규모 언어 모델(LLM)과 트랜스포머(Transformer) 아키텍처에서는 단순한 ReLU를 넘어 더 매끄러운(Smooth) 비선형 함수를 사용합니다.

1. GELU (Gaussian Error Linear Unit)

  • 정의: $ \text{GELU}(x) = x \cdot \Phi(x) = x \cdot \frac{1}{2} [1 + \text{erf}(x/\sqrt{2})] $
  • 특징: 입력값에 가우시안 분포의 누적 분포 함수(CDF)를 곱한 형태입니다. 이는 입력값이 작을수록 0이 될 확률을 높이고, 클수록 그대로 통과시키는 '확률적 드롭아웃'의 효과를 내포합니다.
  • 사용: BERT, GPT-3 등 대부분의 최신 트랜스포머 모델의 표준 활성화 함수입니다.

2. Swish / SiLU (Sigmoid Linear Unit)

  • 정의: $ \text{Swish}(x) = x \cdot \sigma(\beta x) $
  • 특징: 구글에서 검색을 통해 발견한 함수로, ReLU와 유사하지만 $x=0$ 부근에서 매끄러운 곡선을 그리며 음수 영역에서 약간의 값을 가집니다.
  • 사용: EfficientNet 및 최신 LLM(Llama 등)의 변형 구조에서 널리 사용됩니다.

활성화 함수와 가중치 초기화의 관계

활성화 함수의 특성에 따라 입력 신호의 분산이 변하므로, 이를 일정하게 유지하기 위한 전용 초기화 기법이 필요합니다.

  • Xavier (Glorot) 초기화 $\rightarrow$ Tanh, Sigmoid:
  • 활성화 함수의 선형 영역(중앙 부분)을 최대한 활용하기 위해 설계되었습니다.
  • 가중치를 $\text{Var}(W) = \frac{2}{n_{in} + n_{out}}$ 로 설정하여 층이 깊어져도 신호의 분산이 유지되도록 합니다.
  • He 초기화 $\rightarrow$ ReLU, LReLU:
  • ReLU는 입력의 절반을 0으로 만들기 때문에 분산이 절반으로 줄어듭니다. 이를 보상하기 위해 Xavier보다 2배 더 큰 분산을 사용합니다.
  • 가중치를 $\text{Var}(W) = \frac{2}{n_{in}}$ 로 설정하여 학습 초기 단계의 신호 소멸을 방지합니다.

실무 활용 가이드라인

네트워크 깊이 및 데이터 특성에 따른 선택

  1. 은닉층(Hidden Layers):
  2. 기본적으로 ReLU를 우선 고려합니다.
  3. 학습 중 뉴런이 많이 죽는(Dead ReLU) 현상이 발견되면 LReLUELU로 교체합니다.
  4. 최신 트랜스포머 기반 모델을 설계한다면 GELU가 최적의 선택입니다.
  5. 출력층(Output Layers):
  6. 이진 분류 $\rightarrow$ Sigmoid
  7. 다중 클래스 분류 $\rightarrow$ Softmax
  8. 회귀(값 예측) $\rightarrow$ Linear (활성화 함수 없음)
  9. 데이터 정규화와의 관계:
  10. 입력 데이터가 정규화(Normalization)되지 않은 경우, Tanh나 Sigmoid는 쉽게 포화(Saturation) 영역에 진입하여 학습이 멈출 수 있습니다. 반드시 Batch Normalization과 함께 사용하거나 ReLU 계열을 사용하십시오.

프레임워크별 구현 코드

PyTorch 구현

import torch.nn as nn

class ModernNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer1 = nn.Linear(10, 20)
        self.gelu = nn.GELU() # 최신 트랜스포머 스타일
        self.layer2 = nn.Linear(20, 1)
        self.silu = nn.SiLU() # Swish 함수

    def forward(self, x):
        x = self.gelu(self.layer1(x))
        x = self.silu(self.layer2(x))
        return x

TensorFlow/Keras 구현

import tensorflow as tf
from tensorflow.keras import layers

model = tf.keras.Sequential([
    # He 초기화와 ReLU의 조합
    layers.Dense(64, activation='relu', kernel_initializer='he_normal', input_shape=(10,)),
    # 최신 GELU 활성화 함수 적용
    layers.Dense(64, activation=tf.keras.activations.gelu),
    # 출력층: 다중 분류를 위한 Softmax
    layers.Dense(3, activation='softmax')
])

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?