기술(Tech, IT)/머신 러닝(Machine Learning)

[ML] Huber Loss(후버 손실)

Daniel803 2023. 2. 28. 07:31

 앞서 살펴봤던 MSE와 MAE의 장점을 결합한 Huber Loss에 대해 살펴보겠다. MSE는 outlier에 제곱을 통해 많은 비중을 주게 되는 반면, MAE는 같은 비중을 두게 된다. 또한 MSE의 경우 outlier가 아닌 데이터에선 훌륭한 모델을 만들 수 있기에 이 둘을 절충해 아래와 같이 나타낸다. 에러(예측값과 실제값의 차)가 Delta(델타) 사이일 경우 MSE를 적용하고 그 외에 범위에 있을 경우 MAE를 적용하는 것이다. 참고로 1/2을 곱한 것은 아래 두 함수의 접점(Junction)에서 같은 결과값과 같은 편미분 값을 같기 위한 것이다.

import matplotlib.pyplot as plt
import numpy as np

# Huber loss function
def huber_loss(y_pred, y, delta=1.0):
    huber_mse = 0.5*(y-y_pred)**2
    huber_mae = delta * (np.abs(y - y_pred) - 0.5 * delta)
    return np.where(np.abs(y - y_pred) <= delta, huber_mse, huber_mae)
    
# Plotting
x_vals = np.arange(-65, 65, 0.01)

delta = 1.5
huber_mse = 0.5*np.square(x_vals)
huber_mae = delta * (np.abs(x_vals) - 0.5 * delta)
y_vals = np.where(np.abs(x_vals) <= delta, huber_mse, huber_mae)

plt.plot(x_vals, y_vals, "green")
plt.grid(True, which="major")
plt.show()

 

출처

- https://towardsdatascience.com/understanding-the-3-most-common-loss-functions-for-machine-learning-regression-23e0ef3e14d3

- https://parklize.blogspot.com/2019/04/loss-functions.html