일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 최적화
- 딥러닝
- GRU
- 강화 학습
- 머신러닝
- 신경망
- q-러닝
- 교차 검증
- Q-Learning
- 데이터 전처리
- 과적합
- 활성화 함수
- AI
- python
- 분류
- 손실 함수
- LSTM
- 정규화
- 회귀
- reinforcement learning
- 강화학습
- Deep learning
- 머신 러닝
- Machine Learning
- 인공 신경망
- 인공지능
- 지도 학습
- rnn
- 자연어 처리
- CNN
- Today
- Total
move84
머신러닝 손실 함수(Loss Function)의 의미와 종류 본문
머신러닝 모델을 훈련하는 과정에서 손실 함수(Loss Function)는 모델의 예측이 얼마나 부정확한지를 측정하는 중요한 지표이다. 이 함수는 모델이 학습 데이터에 얼마나 잘 적합되는지를 평가하고, 모델의 가중치를 조정하여 성능을 개선하는 데 사용된다. 손실 함수의 이해는 머신러닝 모델의 성능을 최적화하는 데 필수적이다.
💡 손실 함수(Loss Function)란? (What is a Loss Function?)
손실 함수는 모델의 예측값과 실제값 사이의 차이를 정량화하는 함수이다. 이 차이가 클수록 손실 함수의 값은 커지며, 이는 모델의 성능이 낮음을 의미한다. 모델은 손실 함수의 값을 최소화하는 방향으로 학습하며, 이를 통해 예측 정확도를 높인다. 손실 함수는 비용 함수(Cost Function) 또는 목적 함수(Objective Function)라고도 불린다.
🤔 손실 함수의 중요성 (Importance of Loss Functions)
손실 함수는 머신러닝 모델의 학습 방향을 결정하는 핵심 요소이다. 적절한 손실 함수를 선택하면 모델이 특정 문제에 대해 더 나은 성능을 보이도록 유도할 수 있다. 예를 들어, 분류 문제와 회귀 문제에 적합한 손실 함수는 서로 다르다. 또한, 손실 함수는 모델의 과적합(Overfitting)을 방지하고 일반화(Generalization) 성능을 높이는 데에도 중요한 역할을 한다.
📊 회귀 문제(Regression Problems)를 위한 손실 함수 (Loss Functions for Regression Problems)
회귀 문제는 연속적인 값을 예측하는 문제이다. 예를 들어, 주택 가격 예측, 주식 가격 예측 등이 회귀 문제에 해당한다. 다음은 회귀 문제에 자주 사용되는 손실 함수들이다.
평균 제곱 오차 (Mean Squared Error, MSE)
MSE는 예측값과 실제값의 차이의 제곱의 평균이다. 이는 가장 흔하게 사용되는 회귀 손실 함수 중 하나이다. MSE는 이상치(Outlier)에 민감하게 반응하는 특징이 있다.MSE = (1/n) * Σ(yᵢ - ŷᵢ)²
여기서 yᵢ는 실제값, ŷᵢ는 예측값, n은 데이터의 개수를 의미한다.
import numpy as np def mse(y_true, y_pred): return np.mean((y_true - y_pred) ** 2) y_true = np.array([1, 2, 3, 4, 5]) y_pred = np.array([1.2, 1.8, 3.2, 3.8, 4.9]) print(f"MSE: {mse(y_true, y_pred):.4f}")
평균 절대 오차 (Mean Absolute Error, MAE)
MAE는 예측값과 실제값의 차이의 절대값의 평균이다. MSE와 달리 이상치에 덜 민감하며, 직관적으로 이해하기 쉽다.MAE = (1/n) * Σ|yᵢ - ŷᵢ|
import numpy as np def mae(y_true, y_pred): return np.mean(np.abs(y_true - y_pred)) y_true = np.array([1, 2, 3, 4, 5]) y_pred = np.array([1.2, 1.8, 3.2, 3.8, 4.9]) print(f"MAE: {mae(y_true, y_pred):.4f}")
후버 손실 (Huber Loss)
후버 손실은 MSE와 MAE의 장점을 결합한 손실 함수이다. 특정 임계값(δ) 이하에서는 MSE처럼 제곱 오차를 사용하고, 그 이상에서는 MAE처럼 절대 오차를 사용한다. 이는 이상치에 덜 민감하면서도, 작은 오차에 대해서는 더 정확한 학습을 가능하게 한다.L(y, ŷ) =
- 0.5 * (y - ŷ)² if |y - ŷ| <= δ
- δ * (|y - ŷ| - 0.5 * δ) otherwise
import numpy as np def huber_loss(y_true, y_pred, delta=1.0): abs_error = np.abs(y_true - y_pred) quadratic = np.minimum(abs_error, delta) linear = abs_error - quadratic return np.mean(0.5 * quadratic**2 + delta * linear) y_true = np.array([1, 2, 3, 4, 5]) y_pred = np.array([1.2, 1.8, 3.2, 3.8, 4.9]) print(f"Huber Loss: {huber_loss(y_true, y_pred):.4f}")
🌈 분류 문제(Classification Problems)를 위한 손실 함수 (Loss Functions for Classification Problems)
분류 문제는 주어진 데이터를 여러 범주(Class) 중 하나로 분류하는 문제이다. 예를 들어, 스팸 메일 분류, 이미지 인식 등이 분류 문제에 해당한다. 다음은 분류 문제에 자주 사용되는 손실 함수들이다.
교차 엔트로피 손실 (Cross-Entropy Loss)
교차 엔트로피 손실은 두 확률 분포 사이의 차이를 측정하는 데 사용된다. 분류 문제에서 모델의 예측 확률 분포와 실제 레이블의 확률 분포 사이의 차이를 최소화하는 방향으로 학습한다. 특히, 다중 분류 문제에서 많이 사용된다.L = - Σ yᵢ * log(ŷᵢ)
여기서 yᵢ는 실제 레이블 (0 또는 1), ŷᵢ는 예측 확률을 의미한다.
import numpy as np def cross_entropy(y_true, y_pred): epsilon = 1e-15 # Prevent log(0) y_pred = np.clip(y_pred, epsilon, 1 - epsilon) return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) y_true = np.array([1, 0, 1, 0]) y_pred = np.array([0.9, 0.1, 0.8, 0.3]) print(f"Cross-Entropy Loss: {cross_entropy(y_true, y_pred):.4f}")
이진 교차 엔트로피 손실 (Binary Cross-Entropy Loss)
이진 교차 엔트로피 손실은 이진 분류 문제에 특화된 교차 엔트로피 손실 함수이다. 즉, 레이블이 0 또는 1인 경우에 사용된다.L = - [y * log(ŷ) + (1 - y) * log(1 - ŷ)]
import numpy as np def binary_cross_entropy(y_true, y_pred): epsilon = 1e-15 # Prevent log(0) y_pred = np.clip(y_pred, epsilon, 1 - epsilon) return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) y_true = np.array([1, 0, 1, 0]) y_pred = np.array([0.9, 0.1, 0.8, 0.3]) print(f"Binary Cross-Entropy Loss: {binary_cross_entropy(y_true, y_pred):.4f}")
범주형 교차 엔트로피 손실 (Categorical Cross-Entropy Loss)
범주형 교차 엔트로피 손실은 다중 분류 문제에 사용되는 교차 엔트로피 손실 함수이다. 각 클래스에 대한 확률 분포를 예측하고, 실제 레이블과의 차이를 최소화한다. One-Hot Encoding된 레이블을 사용한다.L = - Σ Σ yᵢ,c * log(ŷᵢ,c)
여기서 yᵢ,c는 i번째 샘플의 c번째 클래스에 대한 실제 레이블, ŷᵢ,c는 i번째 샘플의 c번째 클래스에 대한 예측 확률을 의미한다.
import numpy as np def categorical_cross_entropy(y_true, y_pred): epsilon = 1e-15 # Prevent log(0) y_pred = np.clip(y_pred, epsilon, 1 - epsilon) return -np.mean(np.sum(y_true * np.log(y_pred), axis=1)) y_true = np.array([[0, 1, 0], [1, 0, 0], [0, 0, 1]]) y_pred = np.array([[0.1, 0.8, 0.1], [0.7, 0.2, 0.1], [0.1, 0.1, 0.8]]) print(f"Categorical Cross-Entropy Loss: {categorical_cross_entropy(y_true, y_pred):.4f}")
📝 손실 함수 선택 시 고려 사항 (Considerations When Choosing a Loss Function)
손실 함수를 선택할 때는 다음과 같은 사항을 고려해야 한다.
- 문제 유형 (Type of Problem): 회귀 문제인지 분류 문제인지에 따라 적합한 손실 함수가 다르다.
- 데이터 특성 (Data Characteristics): 이상치(Outlier)의 존재 여부, 데이터의 분포 등을 고려해야 한다. 이상치가 많은 경우, MAE나 Huber Loss가 더 나은 선택일 수 있다.
- 모델 복잡성 (Model Complexity): 모델이 복잡할수록 과적합(Overfitting)의 위험이 커지므로, Regularization 항을 포함하는 손실 함수를 사용할 수 있다.
- 학습 속도 (Learning Speed): 손실 함수의 형태에 따라 학습 속도가 달라질 수 있다. 예를 들어, MSE는 초기 학습 속도가 빠르지만, 최적점에 가까워질수록 학습 속도가 느려질 수 있다.
📌 핵심 용어 정리 (Summary of Key Terms)
- 손실 함수 (Loss Function): 모델의 예측값과 실제값 사이의 차이를 정량화하는 함수 (Function quantifying the difference between predicted and actual values).
- 평균 제곱 오차 (Mean Squared Error, MSE): 예측값과 실제값의 차이의 제곱의 평균 (Average of the squared differences between predicted and actual values).
- 평균 절대 오차 (Mean Absolute Error, MAE): 예측값과 실제값의 차이의 절대값의 평균 (Average of the absolute differences between predicted and actual values).
- 후버 손실 (Huber Loss): MSE와 MAE의 장점을 결합한 손실 함수 (Loss function combining the advantages of MSE and MAE).
- 교차 엔트로피 손실 (Cross-Entropy Loss): 두 확률 분포 사이의 차이를 측정하는 데 사용되는 손실 함수 (Loss function used to measure the difference between two probability distributions).
- 이진 교차 엔트로피 손실 (Binary Cross-Entropy Loss): 이진 분류 문제에 특화된 교차 엔트로피 손실 함수 (Cross-entropy loss function specialized for binary classification problems).
- 범주형 교차 엔트로피 손실 (Categorical Cross-Entropy Loss): 다중 분류 문제에 사용되는 교차 엔트로피 손실 함수 (Cross-entropy loss function used for multi-class classification problems).
'머신러닝' 카테고리의 다른 글
인공신경망(Artificial Neural Network, ANN) 기초 (0) | 2025.04.10 |
---|---|
머신러닝: 결정 트리(Decision Tree)와 기본 작동 원리 (0) | 2025.04.10 |
머신러닝과 딥러닝의 차이점 (0) | 2025.04.10 |
머신러닝에서 텐서(Tensor)의 개념과 중요성 (0) | 2025.04.10 |
머신러닝: 역전파 알고리즘(Backpropagation) 이해하기 (0) | 2025.04.10 |