회귀 모델의 대표적인 손실 함수로 L1 loss와 L2 loss가 있습니다. L1 loss는 MAE (Mean Absolute Error)라고도 하며 L2 loss는 MSE (Mean Squared Error)라고도 합니다.
■ L2 Loss (MSE, Mean Squared Error)
L2 loss는 실제값과 예측값의 오차를 제곱하여 구합니다. 모든 구간에서 미분이 가능하여 gradient를 구하기 쉽지만, 실제값과 예측값이 차이가 큰 outlier에 대해서는 제곱 효과에 의해 loss가 커지는 단점이 있습니다.
$$ \text{L2 Loss} = \sum_{n=1}^N (x_n-y_n)^2 $$
■ L1 Loss (MAE, Mean Absolute Error)
L1 loss는 실제값과 예측값 차이의 절대값을 이용하여 구합니다. 일차식이기 때문에 위에서 언급한 outlier의 영향이 적지만, V자 모양으로 미분이 불가능한 지점이 있습니다.
$$ \text{L1 Loss} = \sum_{n=1}^N |x_n-y_n| $$
L1 loss와 L2 loss가 각각 장단점이 있어서 이 둘을 조합한 Huber loss와 smooth L1 loss가 있습니다.
■ Huber Loss
Huber loss는 L1 loss와 L2 loss의 장점을 취해 미분 가능하면서 outlier에 영향을 덜 받는 일차식에 가까운 형태를 가질 수 있습니다.
$$ \begin{align} &\text{Huber Loss} = \sum_{n=1}^N l_n, \\ &\text{where}~~l_n= \begin{cases} \frac{1}{2}(x_n-y_n)^2,~&\text{if}~|x_n-y_n|<\delta \\ \delta\left(|x_n-y_n|-\frac{1}{2}\delta\right),~&\text{otherwise} \end{cases} \end{align}$$
■ Smooth L1 Loss
Smooth L1 loss도 Huber loss와 마찬가지로 L1 loss와 L2 loss의 장점을 취해 미분 가능하면서 outlier에 영향을 덜 받는 일차식에 가까운 형태를 가질 수 있습니다.
$$ \begin{align} &\text{Smooth L1 Loss} = \sum_{n=1}^N l_n, \\ &\text{where}~~l_n= \begin{cases} \frac{1}{2}(x_n-y_n)^2/\beta,~&\text{if}~|x_n-y_n|<\beta\\ |x_n-y_n|-\frac{1}{2}\beta,~&\text{otherwise} \end{cases} \end{align}$$
[그림 1]과 같이 Huber loss는 $\delta$가 커질수록 이차식에 가까워지며, $\delta$가 작아질수록 일차식에 가까워지지만 기울기가 감소하는 형태를 가집니다. 반면 Smooth L1 loss는 $\beta$ 값과 무관하게 기울기가 1에 가깝습니다. $\beta$가 작아질수록 L1 loss와 동일해지며, $\beta$가 커질수록 0 부근에서의 smoothness가 증가합니다.
또한 $\delta=1$인 Huber loss와 $\beta=1$인 Smooth L1 loss는 완전히 동일한 손실 함수 형태가 됩니다.
References
[1] https://pytorch.org/docs/stable/generated/torch.nn.HuberLoss.html
[2] https://pytorch.org/docs/stable/generated/torch.nn.SmoothL1Loss.html
오타나 잘못된 부분 있으면 댓글 부탁드립니다. 도움이 되셨다면 공감 눌러 주시면 감사하겠습니다 :)
'AI & Optimization > Machine Learning' 카테고리의 다른 글
[ML] Importance Sampling (중요도 샘플링) (1) | 2023.12.03 |
---|---|
[ML] 분류 성능 지표: Precision(정밀도), Recall(재현율), F1-score (0) | 2023.01.21 |
댓글