PyTorch

PyTorch 활성화 함수와 손실 함수

PyExplorer 2025. 4. 11. 11:40
728x90

PyTorch 활성화 함수와 손실 함수

1. 개요

신경망(Neural Network) 모델에서 활성화 함수(Activation Function)와 손실 함수(Loss Function)는 핵심적인 역할을 합니다. 활성화 함수는 뉴런이 다음 계층으로 전달할 값을 결정하며, 손실 함수는 모델의 예측 값과 실제 값 사이의 차이를 측정하여 학습 방향을 결정하는 역할을 합니다. 본 포스팅에서는 PyTorch를 활용하여 다양한 활성화 함수와 손실 함수를 살펴보고, 코드 예제를 통해 실제 구현 방법을 설명하겠습니다.


2. 활성화 함수(Activation Function)

활성화 함수는 입력을 받아 비선형성을 추가하고, 모델이 복잡한 패턴을 학습할 수 있도록 합니다. 대표적인 활성화 함수는 다음과 같습니다.

2.1 시그모이드(Sigmoid) 함수

시그모이드 함수는 출력값을 0과 1 사이로 변환하는 S자 형태의 함수입니다. 수식은 다음과 같습니다.

$$
\sigma(x) = \frac{1}{1 + e^{-x}}
$$

장점

  • 출력값이 0과 1 사이로 제한되어 확률값을 나타내기에 적합
  • 연속적이며 미분 가능함

단점

  • 기울기 소실(Vanishing Gradient) 문제: 입력 값이 크거나 작을 경우, 미분 값이 거의 0에 가까워져 학습이 어려움
  • 지수 함수 연산이 포함되어 있어 계산 비용이 큼

PyTorch 코드 예제

import torch
import torch.nn as nn

sigmoid = nn.Sigmoid()
x = torch.tensor([-2.0, 0.0, 2.0])
y = sigmoid(x)
print(y)

2.2 ReLU(Rectified Linear Unit) 함수

ReLU 함수는 음수 입력을 0으로 만들고, 양수 입력은 그대로 출력하는 함수입니다.

$$
ReLU(x) = \max(0, x)
$$

장점

  • 기울기 소실 문제를 완화할 수 있음
  • 연산이 단순하여 계산 속도가 빠름

단점

  • 죽은 ReLU(Dead ReLU) 문제: 입력 값이 0 이하이면 기울기가 0이 되어 뉴런이 업데이트되지 않음

PyTorch 코드 예제

relu = nn.ReLU()
y = relu(x)
print(y)

2.3 Leaky ReLU 함수

ReLU의 단점인 죽은 뉴런 문제를 해결하기 위해 음수 값에 대해 작은 기울기를 적용한 함수입니다.

$$
LeakyReLU(x) = \max(0.01x, x)
$$

PyTorch 코드 예제

leaky_relu = nn.LeakyReLU(negative_slope=0.01)
y = leaky_relu(x)
print(y)

3. 손실 함수(Loss Function)

손실 함수는 신경망이 예측한 값과 실제 값의 차이를 측정하는 함수입니다. 주어진 문제에 따라 다양한 손실 함수를 사용할 수 있습니다.

3.1 평균 제곱 오차(Mean Squared Error, MSE)

회귀 문제에서 많이 사용되는 손실 함수로, 예측 값과 실제 값의 차이를 제곱하여 평균을 구합니다.

$$
MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
$$

PyTorch 코드 예제

mse_loss = nn.MSELoss()
y_true = torch.tensor([1.0, 2.0, 3.0])
y_pred = torch.tensor([1.2, 1.9, 3.1])
loss = mse_loss(y_pred, y_true)
print(loss.item())

3.2 교차 엔트로피(Cross-Entropy Loss)

분류 문제에서 자주 사용되며, 예측 확률 분포와 실제 분포의 차이를 계산합니다.

$$
CE = -\sum_{i} y_i \log(\hat{y}_i)
$$

PyTorch 코드 예제

cross_entropy_loss = nn.CrossEntropyLoss()
y_true = torch.tensor([0])  # 정답 라벨 (클래스 인덱스)
y_pred = torch.tensor([[2.0, 1.0, 0.1]])  # 예측 값 (Logits)
loss = cross_entropy_loss(y_pred, y_true)
print(loss.item())

4. 결론

활성화 함수와 손실 함수는 신경망 모델의 성능에 큰 영향을 미칩니다. 적절한 활성화 함수를 선택하면 모델이 효과적으로 학습할 수 있으며, 적절한 손실 함수를 사용하면 학습 과정에서 오류를 효과적으로 줄일 수 있습니다. 본 포스팅에서는 PyTorch를 활용하여 대표적인 활성화 함수와 손실 함수를 소개하였으며, 실습 예제를 통해 직접 사용법을 확인하였습니다. 앞으로 신경망 모델을 구축할 때, 문제의 특성에 맞는 활성화 함수와 손실 함수를 신중히 선택하는 것이 중요합니다.

728x90