손실 함수
손실 함수(Loss Function): 모델이 예측한 값과 실제 값 간의 차이를 측정하는 함수.
손실 함수는 모델의 예측 성능을 평가하고, 모델의 학습 과정을 안내하는 데 사용한다.
손실 함수의 출력값은 모델이 예측을 얼마나 잘못했는지를 나타내며, 이 값을 최소화하는 것이 모델 학습의 목표이다.

평균 제곱 오차 (Mean Squared Error, MSE)
회귀 손실 함수의 한 종류로, 제곱 오차(Squared Error, SE) 와 오차 제곱합(Sum of Squared Error, SSE) 을 활용한다.
제곱 오차의 수식은 다음과 같다.
$$ SE = \left(Y_i - \hat{Y}_i \right)^2 $$
제곱 오차는 실젯값과 예측값을 뺀 값에 제곱을 취하는데, 이는 오차의 방향보다 오차의 크기가 더 중요하고,
제곱을 적용하면 오차가 작은 값보다 오차가 큰 값이 더 두드러져 오차의 간극을 확인하기 용이하기 때문이다.
오차 제곱합의 수식은 다음과 같다.
$$ SSE = \sum_{i=1}^n \left(Y_i - \hat{Y}_i \right)^2 $$
오차 제곱합에서 오찻값들을 제곱하지 않고 모두 더하면, 오차를 정확하게 계산할 수 없기 때문에 모든 값을 제곱한 값으로 오차를 계산한다.
예를 들면, 오찻값이 (-1, 1, -1, 1) 이라면, 이들을 제곱하지 않고 모두 더하면 오차가 0이 되어 버린다.
평균 제곱 오차(Mean Squared Error, MSE) 방식은 단순하게 오차 제곱합에서 평균을 취하는 방식이다.
$$ MSE = \frac {1}{n} \sum_{i=1}^n \left(Y_i - \hat{Y}_i \right)^2 $$
평균 제곱 오차는 모델의 성능을 측정할 수 있으며, 오차가 0에 가까워질수록 모델의 성능이 높다고 평가할 수 있다.
이 값에 제곱근을 씌우면 평균 제곱근 오차(Root Mean Squared Error, RMSE)가 되며, 평균 제곱 오차에서 발생한 왜곡을 감소시켜 정밀도를 적합하게 표현할 수 있다.
# MSE 예제 코드
# 예측값과 실제값 생성
true = torch.tensor([3.0, -0.5, 2.0, 1.0])
pred = torch.tensor([2.5, 0.0, 2.1, 1.4])
# MSE 손실 함수 정의
criterion = nn.MSELoss()
# 손실 계산
loss = criterion(true, pred)
print(f'MSE Loss: {loss.item():.4f}')
MSE Loss: 0.1675
교차 엔트로피 (Cross-Entropy, CE)
분류 손실 함수의 한 종류로, 실젯값의 확률분포와 예측값의 확률분포의 차이를 계산한다.
교차 엔트로피의 수식은 다음과 같다.
$$ CE(y, \hat{y}) = -\sum_{j} y_j\log \hat{y}_j $$
# Cross Entropy 예제 코드
# 예측값과 실제값
true = torch.LongTensor([0, 1, 0, 1]) # 클래스 0과 1이 있는 데이터
pred = torch.FloatTensor([[0.1, 0.9], [0.8, 0.2], [0.7, 0.3], [0.2, 0.8]])
# Cross Entropy 손실 함수 정의
criterion = nn.CrossEntropyLoss()
# 손실 계산
loss = criterion(pred, true)
print(f'Cross Entropy Loss: {loss.item():.4f}')
Cross Entropy Loss: 0.7898'ML · DL > Pytorch 공부' 카테고리의 다른 글
| [파이토치 기초] 데이터세트 분리 (0) | 2025.01.07 |
|---|---|
| [파이토치 기초] 모듈 (0) | 2025.01.04 |
| [파이토치 기초] 데이터세트 & 데이터로더 (0) | 2024.12.30 |
| [파이토치 기초] 경사 하강법 (0) | 2024.12.26 |
| [파이토치 기초] 텐서 (0) | 2024.12.16 |