챌린지 목록으로 돌아가기
쉬움 0명 해결 정답률 0%

손실 함수: MSE, MAE, 교차 엔트로피

평균 제곱 오차, 평균 절대 오차 또는 이진 교차 엔트로피로 예측이 얼마나 틀렸는지 측정합니다.

배우게 될 내용

  • 세 가지 방법으로 예측 오차 측정하기
  • log(0)을 피하려고 확률 제한하기
  • 회귀와 분류에 맞는 손실 고르기

문제

원문 보기 (영어)

손실 함수는 모델의 실수를 최소화할 하나의 숫자로 바꿉니다. n을 예측 개수라고 할 때, 자주 쓰이는 세 가지 손실에 대해 compute_loss(kind, predictions, targets)를 구현하세요.

  • "mse" (평균 제곱 오차): (p - t)²의 평균
  • "mae" (평균 절대 오차): |p - t|의 평균
  • "binary_cross_entropy": [t × ln(p) + (1 - t) × ln(1 - p)]의 평균에 음수를 취한 값. ln(0)을 계산하지 않도록, 먼저 각 예측 p를 [0.0000001, 0.9999999] 범위로 자르세요.

입력

kind: "mse", "mae" 또는 "binary_cross_entropy".

predictions: 모델의 예측.

targets: 정답 값 (같은 길이). 교차 엔트로피에서는 0 또는 1이고 예측은 0과 1 사이입니다.

출력

손실을 실수로 반환하세요.

제약 조건

1 ≤ 길이 ≤ 1,000

-1,000 ≤ 각 값 ≤ 1,000 (교차 엔트로피에서는 0 ≤ p ≤ 1, t ∈ {0, 1})

예시

예시 1
입력:
kind = "mse"
targets = [3.0, -0.5, 2.0]
predictions = [2.5, 0.0, 2.0]

예상 출력:
expected = 0.166667
입력:
std::string kind = "mse";
std::vector<double> targets = {3.0, -0.5, 2.0};
std::vector<double> predictions = {2.5, 0.0, 2.0};

예상 출력:
double expected = 0.166667;
입력:
string kind = "mse";
double[] targets = new double[] {3.0, -0.5, 2.0};
double[] predictions = new double[] {2.5, 0.0, 2.0};

예상 출력:
double expected = 0.166667;

설명

제곱 오차: 0.5² = 0.25, 0.5² = 0.25, 0² = 0. 평균은 0.5 / 3 ≈ 0.166667입니다.

예시 2
입력:
kind = "binary_cross_entropy"
targets = [1.0, 0.0]
predictions = [0.9, 0.2]

예상 출력:
expected = 0.164252
입력:
std::string kind = "binary_cross_entropy";
std::vector<double> targets = {1.0, 0.0};
std::vector<double> predictions = {0.9, 0.2};

예상 출력:
double expected = 0.164252;
입력:
string kind = "binary_cross_entropy";
double[] targets = new double[] {1.0, 0.0};
double[] predictions = new double[] {0.9, 0.2};

예상 출력:
double expected = 0.164252;

설명

-(ln(0.9) + ln(1 - 0.2)) / 2 = -(-0.105361 - 0.223144) / 2 ≈ 0.164252. 자신 있게 맞힌 예측은 손실이 작습니다.

접근 방법

먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.

힌트 1

각 loss는 예측값과 target을 원소별로 비교한 뒤, 예제별 오차를 평균냅니다.

힌트 2

cross-entropy에서는 로그를 취하기 전에 prediction을 0과 1에서 살짝 떨어뜨려 clamp하세요.

힌트 3

절댓값과 제곱은 다르다는 점을 기억하고, cross-entropy는 target을 각 log 항의 가중치로 사용합니다.

예상 복잡도

시간 O(n), 추가 공간 O(1)

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.