
- Mean_Squared_Error
- Mean_Absolute_Error
- Huber Loss
- Smooth L1 Loss
- Symmetric_Absolute_Percentage_Error
회귀 Task에서는 보통 Mean Squared Error, Mean absolute Error, 이외에 MSE의 제곱근을 사용하는 RMSE, MAPE 등 다양한 손실함수가 사용된다.
MSE(= L2 Loss)
예측 값과 실제 값 차이의 제곱한 값을 사용하며, 식은 아래와 같다.
MSE는 빠른 수렴으로 많이 사용
하지만 이상치에 민감하여 이상치가 많은 경우 다른 손실함수를 사용해야한다.
MAE는 예측 오차를 선형 처리하여 이상치에 강건하고, 단순 차이 값이기 때문에 결과 해석이 직관적인 특징을 갖는다.
MAE(= L1 loss)
그레디언트 부호만 다르고 항상 동일한 크기를 가짐(sign-dependent)
이상치, 노이즈에 강건한 특성
평균을 예측하는 MSE와 다르게, MAE는 분포의 중앙값(median)을 예측하기 때문에 이상치에 강건MSE와 MAE의 절충안인 Huber loss, Smooth L1 loss 등이 사용됨
Huber loss
delta가 손실함수에 사용되는데, 이 delta로 두 손실함수 중 어떤 함수를 사용할지 판단하는 기준으로 사용된다.
값의 차이가 delta보다 작으면 L2 구간이라하여 MSE를 사용하고, 반대로 delta보다 이상이면 L1 구간이라하여 MAE 손실을 사용한다.

위 그림은 각 손실의 delta, beta 값에 따라 시각화한 결과로, delta와 beta 모두 1인 경우에는 동일한 함수임을 알 수 있다.
Huber loss의 경우 delta가 커지면 2차 함수 형태에 가까워지고, 작아지면 1차식 형태에 가까워진다.
Smooth L1 loss의 경우는 beta가 1보다 커지면 MSE 구간이 넓어지고, 1보다 작아지는 경우 MAE의 구간이 넓어진다.
0~200사이의 값을 갖는 지표로, MAPE의 단점을 보완한 손실로, MAPE와 직접적인 차이는 예측한 값의 절대값도 손실 계산에 포함한다는 것이다.
SMAPE의 수식은 아래와 같다.
MAPE는 같은 손실 값이어도 |실제 값|으로만 분모를 구성하여 실제로 동일한 차이도 다르게 계산될 수 있다. 물론 실제 값이 충분히 큰 수라면 문제가 안 되지만, 실제 값이 작은 경우 해당 손실은 무한대로 발산할 수 있어, 실제 값이 작은 경우 MAPE는 적절한 손실로 사용하기 어렵다.
반면, SMAPE는 |예측 값|도 분모에 포함하여 MAPE에 비해 공정하게 평가할 수 있다.
SMAPE 구현 코드
def SMAPE(preds, trues, eps = 1e-8):
numerator = np.abs(trues - preds)
denominator = np.abd(trues) + np.abs(preds) + eps
smape = 2.0 * numerator / denominator
return np.mean(smape)