← 문제 목록/Huber Loss + Gradient (forward/backward) [medium]
문제 해설

Huber Loss + Gradient (forward/backward) [medium]

손실 함수 · medium

preview

Huber Loss + Gradient [medium]

v1 Huber 은 손실 값만 반환. 실제 학습에서는 gradient 도 필요 — backprop 의 한 블록으로 쓰이려면.

ei=y^iyie_i = \hat{y}_i - y_i 라 할 때 평균 Huber 손실:

L=1Niδ(ei),δ(e)={12e2eδδ(e12δ)e>δL = \frac{1}{N} \sum_i \ell_\delta(e_i), \quad \ell_\delta(e) = \begin{cases} \tfrac{1}{2} e^2 & |e| \le \delta \\ \delta(|e| - \tfrac{1}{2}\delta) & |e| > \delta \end{cases}

y^i\hat{y}_i 에 대한 기울기:

Ly^i=1N{eieiδδsign(ei)ei>δ\frac{\partial L}{\partial \hat{y}_i} = \frac{1}{N} \begin{cases} e_i & |e_i| \le \delta \\ \delta \cdot \mathrm{sign}(e_i) & |e_i| > \delta \end{cases}

핵심

  • 작은 오차 영역: /y^=e/N\partial/\partial \hat y = e / N (MSE 의 기울기 / N).
  • 큰 오차 영역: ±δ/N\pm \delta / N (MAE 처럼 상한 걸림) — 이상치에 gradient 가 폭주하지 않음.
  • e=δ|e| = \delta 경계에서 연속 미분 가능.

과제

함수 huber_with_grad(y_pred, y_true, delta) 를 완성하세요.

  • 반환: (loss, grad)
    • loss: Python float — 평균 Huber 손실.
    • grad: numpy array, shape = y_pred.shape∂L/∂ŷ.
  • 힌트: np.where(|e| <= δ, e, δ * np.sign(e)) / N.

테스트 케이스

#이름검증
1반환 2-tuple (loss, grad)
2grad shape = y_pred.shape
3완벽 예측 → loss=0, grad=0
4작은 오차 영역: grad_i = e_i / N
5큰 오차 영역: grad 가 ±δ/N 로 clip
6delta 크면 grad ≈ (ŷ-y)/N (MSE grad)
7수치 미분과 일치
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.