회귀 모델의 대표적인 손실 함수로 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 |
댓글