본문 바로가기
AI & Optimization/Machine Learning

[ML] 손실 함수: Huber Loss & Smooth L1 Loss

by SIES 2023. 11. 7.
반응형

회귀 모델의 대표적인 손실 함수로 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가 증가합니다.

 

Figure 1. Huber loss와 smooth L1 loss 그래프

 

또한 $\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


오타나 잘못된 부분 있으면 댓글 부탁드립니다. 도움이 되셨다면 공감 눌러 주시면 감사하겠습니다 :)

반응형

댓글