손실 함수란 무엇인가?
손실 함수(Loss Function)는 머신러닝 모델의 성능을 측정하는 핵심 요소다. 간단히 말해, 손실 함수는 모델의 예측값과 실제값 사이의 차이를 수치화하는 방법을 말한다. 이 값이 작을수록 모델의 예측이 정확하다고 할 수 있다. 손실 함수는 모델이 학습 과정에서 어떻게 자신의 오류를 '인식'하고 '개선'해야 하는지를 결정하는 데 중요한 역할을 한다.
손실 함수의 종류
손실 함수는 주로 사용되는 문제 유형에 따라 다양하게 분류되며, 이 때 주요한 손실 함수의 종류는 다음과 같다.
- 회귀 문제의 손실 함수
- 평균 제곱 오차 (Mean Squared Error, MSE)
- 실제 값과 예측 값의 차이를 제곱하여 평균을 낸다.
- 평균 제곱 오차 (Mean Squared Error, MSE)
import numpy as np
def mean_squared_error(y_true, y_pred):
return np.mean(np.square(y_true - y_pred))
-
- 평균 절대 오차 (Mean Absolute Error, MAE)
- 실제 값과 예측 값의 차이의 절대값의 평균을 사용한다.
- 평균 절대 오차 (Mean Absolute Error, MAE)
def mean_absolute_error(y_true, y_pred):
return np.mean(np.abs(y_true - y_pred))
-
- 휴버 손실 (Huber Loss)
- MSE와 MAE의 조합으로, 작은 오차에는 MSE와 유사하게, 큰 오차에는 MAE와 유사하게 작동한다.
- 휴버 손실 (Huber Loss)
def huber_loss(y_true, y_pred, delta=1.0):
error = y_true - y_pred
is_small_error = np.abs(error) <= delta
squared_loss = np.square(error) / 2
linear_loss = delta * (np.abs(error) - delta / 2)
return np.where(is_small_error, squared_loss, linear_loss)
-
- 로그 코시 손실 (Log-Cosh Loss)
- 오차의 하이퍼볼릭 코사인의 로그를 계산한다.
- 로그 코시 손실 (Log-Cosh Loss)
def log_cosh_loss(y_true, y_pred):
def logcosh(x):
return x + np.log(np.cosh(np.clip(-x, -10, 10)))
return np.mean(logcosh(y_true - y_pred))
-
- 포아송 손실 (Poisson Loss)
- 실제 값과 예측 값 사이의 차이에 대한 포아송 분포의 로그 우도를 계산한다.
- 포아송 손실 (Poisson Loss)
def poisson_loss(y_true, y_pred):
return np.mean(y_pred - y_true * np.log(y_pred + 1e-7))
- 이진 분류 문제의 손실 함수
- 이진 교차 엔트로피 (Binary Cross-Entropy)
- 두 클래스 중 하나를 예측하는 문제에 사용되며, 실제 값과 예측 값 사이의 정보 손실을 측정한다.
- 이진 교차 엔트로피 (Binary Cross-Entropy)
def binary_cross_entropy(y_true, y_pred):
return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
-
- 휴버 손실 (Huber Loss)
- 이진 분류 문제에서도 변형하여 사용할 수 있다.
- 휴버 손실 (Huber Loss)
def huber_loss(y_true, y_pred, delta=1.0):
error = y_true - y_pred
is_small_error = np.abs(error) <= delta
squared_loss = np.square(error) / 2
linear_loss = delta * (np.abs(error) - delta / 2)
return np.where(is_small_error, squared_loss, linear_loss)
-
- 콘트라스트 손실 (Contrastive Loss)
- 주로 유사성 학습에 사용되지만, 이진 분류 문제에도 적용 가능하다.
- 콘트라스트 손실 (Contrastive Loss)
def contrastive_loss(y_true, y_pred, margin=1.0):
return np.mean(y_true * np.square(y_pred) + (1 - y_true) * np.square(np.maximum(margin - y_pred, 0)))
- 다중 분류 문제의 손실 함수
- 다중 클래스 교차 엔트로피 (Multiclass Cross-Entropy)
- 세 개 이상의 클래스를 예측하는 문제에 적합하며, 각 클래스에 대한 예측의 확률을 고려하여 손실을 계산한다.
- 다중 클래스 교차 엔트로피 (Multiclass Cross-Entropy)
def multiclass_cross_entropy(y_true, y_pred):
return -np.sum(y_true * np.log(y_pred)) / y_true.shape[0]
-
- Dice 손실 (Dice Loss)
- 주로 이미지 분할에서 사용되지만, 다중 클래스 분류 문제에도 적용 가능하다.
- 코사인 유사도 손실 (Cosine Similarity Loss)
- 다차원 데이터의 유사성 학습에 적합하며, 다중 클래스 분류 문제에도 사용될 수 있다.
- Dice 손실 (Dice Loss)
이러한 분류는 일반적인 지침에 불과하므로, 특정 문제에 대해 손실 함수를 선택할 떄는 문제의 특성과 데이터의 특징을 고려하여 선택해야 한다.
'공부 > 데이터' 카테고리의 다른 글
오픈 데이터를 제공하는 사이트 정리 (0) | 2023.12.04 |
---|---|
머신러닝의 분류: 지도학습/비지도학습/강화학습 (0) | 2023.12.02 |
머신러닝이란? 머신러닝의 기본 개념과 적용 사례 알아보기 (0) | 2023.12.01 |
데이터 분석의 필요성과 적용 사례는 어떤 것이 있을까? (0) | 2023.11.30 |
상관도 분석에 사용되는 방법: 피어슨/스피어만 순위/켄달 순위 상관계수 (2) | 2023.11.30 |