본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 손실 함수(Loss Function)와 비용 함수의 결정적 차이 및 3가지 최적화 해결 방법

by Papa Martino V 2026. 4. 9.
728x90

손실 함수(Loss Function)와 비용 함수(Cost Function)
손실 함수 (Loss Function) vs  비용 함수 (Cost Function)

 

데이터 과학자와 머신러닝 엔지니어들이 가장 자주 혼용하여 사용하는 용어 중 하나가 바로 손실 함수(Loss Function)비용 함수(Cost Function)입니다. 엄밀히 말하면 이 둘은 수학적 정의와 적용 범위에서 분명한 차이가 존재합니다. 이 차이를 명확히 이해하는 것은 모델의 목적 함수(Objective Function)를 설계하고 신경망의 오차를 최소화하는 로직을 구축하는 데 있어 필수적인 기초 역량입니다. 본 포스팅에서는 두 개념의 핵심적인 차이를 분석하고, 파이썬(Python)을 활용하여 회귀와 분류 문제에서 발생하는 다양한 오차 계산 방식을 실무 예제와 함께 심층적으로 다룹니다.


1. 손실 함수 vs 비용 함수: 무엇이 다른가?

결론부터 말씀드리면, 손실 함수는 '하나의 데이터'에 대한 오차를 측정하는 것이고, 비용 함수는 '전체 데이터'에 대한 오차의 평균을 측정하는 것입니다. 즉, 손실 함수의 집합적 평균이 비용 함수가 됩니다.

손실 함수와 비용 함수의 핵심 비교

항목 손실 함수 (Loss Function) 비용 함수 (Cost Function)
계산 대상 단일 데이터 포인트 (Single Example) 전체 훈련 데이터셋 (Entire Dataset)
수학적 표기 $L(\hat{y}, y)$ $J(w, b) = \frac{1}{m} \sum L(\hat{y}^{(i)}, y^{(i)})$
주요 목적 개별 예측값의 정확도 측정 모델 전체의 성능 파악 및 파라미터 업데이트
실무적 의미 샘플 하나가 틀린 정도 현재 모델이 데이터 전체를 얼마나 잘 대변하는가

2. 실무에서 자주 사용되는 주요 함수의 종류

문제의 성격에 따라 선택해야 하는 함수가 다릅니다. 이를 잘못 선택하면 모델이 아예 학습되지 않는 현상이 발생할 수 있습니다.

  • 회귀(Regression) 문제: MSE(Mean Squared Error), MAE(Mean Absolute Error), Huber Loss
  • 이진 분류(Binary Classification): Binary Cross-Entropy (Log Loss)
  • 다중 분류(Multi-class Classification): Categorical Cross-Entropy

3. [Practical Examples] 파이썬 실무 적용 예제 7선

아래 예제들은 파이썬의 핵심 라이브러리인 NumPyPyTorch 등을 활용하여 실무에서 즉시 활용할 수 있도록 구성되었습니다.

Example 1: NumPy를 이용한 MSE 손실 함수 구현

import numpy as np

def mean_squared_error(y_true, y_pred):
    # MSE는 회귀 분석의 가장 기본적인 비용 함수입니다.
    loss = np.square(y_true - y_pred) # 단일 손실
    cost = np.mean(loss) # 전체 비용
    return cost

# 테스트 데이터
true = np.array([10, 20, 30])
pred = np.array([12, 18, 33])
print(f"MSE Cost: {mean_squared_error(true, pred)}")
    

Example 2: 이진 분류를 위한 Log Loss(Binary Cross Entropy) 해결 방법

def binary_cross_entropy(y_true, y_pred):
    # 확률 기반 분류에서 0 또는 1에 수렴하도록 유도합니다.
    epsilon = 1e-15 # 로그 계산 시 0 방지를 위한 작은 값
    y_pred = np.clip(y_pred, epsilon, 1 - epsilon)
    loss = -(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
    return np.mean(loss)

y_true = np.array([1, 0, 1])
y_prob = np.array([0.9, 0.1, 0.8])
print(f"BCE Cost: {binary_cross_entropy(y_true, y_prob)}")
    

Example 3: 이상치(Outlier)에 강한 Huber Loss 구현

def huber_loss(y_true, y_pred, delta=1.0):
    # 오차가 크면 MAE, 작으면 MSE의 장점을 결합한 방식입니다.
    error = y_true - y_pred
    is_small_error = np.abs(error) <= delta
    squared_loss = 0.5 * np.square(error)
    linear_loss = delta * (np.abs(error) - 0.5 * delta)
    return np.where(is_small_error, squared_loss, linear_loss).mean()
    

Example 4: PyTorch 기반 신경망 손실 함수 활용

import torch
import torch.nn as nn

# 실제 딥러닝 프로젝트에서 사용하는 방식
criterion = nn.CrossEntropyLoss()
outputs = torch.randn(3, 5, requires_grad=True) # 예측 확률
targets = torch.empty(3, dtype=torch.long).random_(5) # 실제 레이블

loss = criterion(outputs, targets)
print(f"PyTorch CrossEntropy: {loss.item()}")
    

Example 5: 정규화(L2 Regularization)를 포함한 비용 함수

def cost_with_l2(y_true, y_pred, weights, lambda_reg=0.01):
    # 과적합 해결을 위해 가중치의 제곱합을 비용에 추가합니다.
    mse = np.mean(np.square(y_true - y_pred))
    l2_penalty = (lambda_reg / 2) * np.sum(np.square(weights))
    return mse + l2_penalty
    

Example 6: 사이킷런(Scikit-learn)을 이용한 지표 평가

from sklearn.metrics import mean_absolute_error, log_loss

# MAE는 절대 오차를 사용하므로 이상치의 영향을 덜 받습니다.
mae_val = mean_absolute_error([3, -0.5, 2], [2.5, 0.0, 2])
print(f"SKlearn MAE: {mae_val}")
    

Example 7: 다중 클래스 분류 확률 분포 오차(Categorical CE)

def categorical_cross_entropy(y_true, y_pred):
    # Softmax 결과값과 원-핫 인코딩된 정답 사이의 오차 계산
    return -np.sum(y_true * np.log(y_pred + 1e-9)) / y_true.shape[0]
    

4. 성능 저하 및 학습 불안정 문제의 해결 방법

손실 함수가 줄어들지 않거나 무한대(Inf)가 나오는 문제는 실무에서 매우 흔합니다. 이를 해결하기 위한 3가지 전략을 제시합니다.

  1. Gradient Clipping: Cross-Entropy 계산 시 로그 값이 너무 커지거나 작아져서 발생하는 수치적 불안정성을 방지합니다.
  2. Label Smoothing: 분류 문제에서 모델이 정답에 대해 너무 과도하게 확신(Overconfidence)하지 않도록 오차를 조정하여 일반화 성능을 높입니다.
  3. Loss Scaling: 혼합 정밀도(Mixed Precision) 학습 시 손실 값이 너무 작아져서 0으로 수렴하는 '언더플로우' 문제를 해결합니다.

5. 마무리 및 결론

손실 함수와 비용 함수는 머신러닝의 학습 목표를 정의하는 핵심 장치입니다. 손실 함수가 개별 전투에서의 승패를 가린다면, 비용 함수는 전쟁 전체의 승리(모델 최적화)를 위한 전략적 지표입니다. 각 문제 상황에 맞는 적절한 함수를 선택하고 구현하는 능력을 통해 더 정교한 AI 모델을 구축해 보시기 바랍니다.

 

[내용 출처]
1. Machine Learning by Andrew Ng (Stanford University)
2. Deep Learning Book (Ian Goodfellow, Yoshua Bengio, Aaron Courville)
3. Scikit-learn Documentation (User Guide - Loss Functions)

728x90