콘텐츠로 이동

P2-6.2 손실 함수(loss function)와 목적 함수(objective function)

Section ID: P2-6.2 Version: v2026.09.15

손실 함수(loss function)는 예측과 실제값의 차이를 학습에 사용할 숫자로 바꿉니다. 목적 함수(objective function)는 학습이 최소화하거나 최대화하려는 전체 기준이며, 평균 손실에 추가 조건을 나타내는 벌점을 더할 수도 있습니다.

직선 예측과 실제 점수

공부 시간으로 점수를 예측하는 직선 모델을 생각해 봅니다.

학생 공부 시간 x 실제 점수 y
A 1 55
B 2 65
C 3 80
D 4 90

후보 직선 하나를 \(\hat{y} = 10x + 45\)라고 두면 예측값은 55, 65, 75, 85가 됩니다. 이 장면에서 손실 함수의 역할은 이 직선이 얼마나 안 맞는가를 숫자로 바꾸는 일입니다.

즉 모델이 예측하고, 실제값과 비교하고, 틀린 정도를 숫자로 만든 뒤, 그 숫자를 줄이는 방향으로 학습합니다.

오차와 제곱 오차

모델의 예측이 틀렸다는 말은 사람에게는 자연스럽지만, 컴퓨터가 바로 사용할 수 있는 말은 아닙니다. 컴퓨터가 값을 조정하려면 틀림이 숫자로 표현되어야 합니다.

예를 들어 실제값이 10이고 모델 예측이 8이라고 하겠습니다.

1
2
3
actual value: 10
prediction: 8
error: 10 - 8 = 2

오차(error)는 2입니다. 하지만 학습에서는 오차를 그대로 쓰지 않고 제곱하거나, 절댓값을 취하거나, 확률에 로그를 적용하는 등 문제에 맞는 방식으로 바꿉니다. 이때 사용하는 함수가 손실 함수(loss function)입니다.

가장 쉬운 예시는 제곱 오차(squared error)입니다.

\[ \mathrm{loss} = (y - \hat{y})^2 \]

여기서 \(y\)는 실제값이고, \(\hat{y}\)는 모델의 예측값입니다.

1
2
3
actual y = 10
prediction y_hat = 8
loss = (10 - 8)^2 = 4

이 숫자 4는 “얼마나 틀렸는지”를 계산 가능한 값으로 바꾼 결과입니다. 이제 모델은 이 숫자를 줄이는 방향으로 값을 조정할 수 있습니다.

부호가 다른 오차의 상쇄

“예측이 2만큼 틀렸다면 오차 2를 쓰면 되지 않을까?”라고 생각할 수 있습니다. 하지만 오차에는 방향이 있습니다. 예를 들어 실제값 10에 대해 예측값 8은 오차 2를 만들고, 예측값 12는 오차 -2를 만듭니다.

두 예측은 모두 실제값에서 2만큼 떨어져 있습니다. 그런데 부호가 다릅니다. 여러 샘플의 오차를 그냥 더하면 서로 상쇄될 수 있습니다.

2 + (-2) = 0

틀린 예측 두 개가 있었는데 합계는 0이 됩니다. 이것은 모델이 잘 맞았다는 뜻이 아닙니다. 그래서 손실 함수는 오차를 학습에 쓸 수 있는 숫자로 바꿉니다.

방식 계산 직관
절댓값 오차(absolute error) \(\lvert y - \hat{y}\rvert\) 얼마나 떨어졌는지 본다
제곱 오차(squared error) \((y - \hat{y})^2\) 큰 오차를 더 크게 벌준다
로그 손실(log loss) 정답 클래스 확률의 음의 로그 확률을 틀리게 자신한 경우를 강하게 벌준다

정답에 부여한 확률과 로그 손실

분류 모델은 정답이 될 가능성을 확률로 예측합니다. 정답이 ‘스팸’인 메일에 스팸 확률 0.9를 부여한 경우와 0.1을 부여한 경우를 비교해 보겠습니다. 이처럼 정답 클래스가 하나인 분류에서 개별 로그 손실은 −ln(정답 클래스의 예측 확률)입니다. ln은 자연로그이며, 0과 1 사이 확률의 로그는 음수이므로 앞에 마이너스를 붙입니다.

정답 스팸에 부여한 확률 개별 로그 손실 해석
0.9 −ln(0.9) ≈ 0.105 정답에 높은 확률
0.5 −ln(0.5) ≈ 0.693 두 클래스에 같은 확률
0.1 −ln(0.1) ≈ 2.303 정답에 낮은 확률

정답에 부여한 확률이 1에 가까우면 손실은 0에 가까워지고, 0에 가까우면 손실은 매우 커집니다. 단순히 맞음·틀림을 세는 정확도와 달리, 로그 손실은 정답에 얼마나 높은 확률을 부여했는지도 반영합니다. 예를 들어 스팸 판정 기준이 0.5라면 0.6과 0.9는 모두 정답으로 판정되지만 로그 손실은 서로 다릅니다.

평균 제곱 오차

학습 데이터는 보통 하나의 샘플(sample)만 갖고 있지 않습니다. 여러 샘플에 대해 예측하고, 각 샘플의 손실을 계산합니다.

앞의 네 학생에 대한 예측과 손실을 계산하면 다음과 같습니다.

학생 실제 점수 예측 점수 실제값 − 예측값 제곱 오차
A 55 55 0 0
B 65 65 0 0
C 80 75 5 25
D 90 85 5 25

개별 손실은 0, 0, 25, 25이고 평균 제곱 오차(mean squared error, MSE)는 (0 + 0 + 25 + 25) / 4 = 12.5입니다. 이 평균을 사용하면 다른 직선 후보와 같은 데이터에서 비교할 수 있습니다.

조금 더 일반적으로 쓰면 다음과 같습니다.

\[ \mathrm{MSE}(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \]

시그마(sigma)는 각 샘플의 제곱 오차를 모두 더하는 계산을 압축합니다. 여기서 n은 샘플 수이고 i는 샘플의 번호입니다. 제곱 오차를 모두 더한 뒤 n으로 나누어 샘플당 평균 손실을 얻습니다. 평균을 구하는 MSE 자체도 손실 함수라고 부르므로, 개별 손실인지 평균 손실인지는 식과 문맥으로 구분합니다.

평균 손실과 정규화 벌점

손실 함수(loss function)와 목적 함수(objective function)는 자주 함께 쓰입니다. 손실 함수는 예측이 얼마나 틀렸는지 계산하는 함수이고, 목적 함수는 학습이 실제로 줄이거나 키우려는 전체 기준이라고 구분합니다.

많은 경우 목적 함수는 평균 손실입니다.

objective = average loss

하지만 항상 그렇게 단순하지는 않습니다. 예를 들어 모델이 너무 복잡해지지 않도록 벌점을 더할 수도 있습니다.

objective = average loss + regularization penalty

예를 들어 기울기 a가 지나치게 커지는 것을 억제하려고 평균 손실에 0.2a²를 더한다고 가정합니다. 이 예에서는 절편 b에는 벌점을 주지 않습니다.

직선 후보 평균 손실 벌점 0.2a² 목적 함수값
a = 10, b = 45 12.5 20 32.5
a = 12, b = 40 7.5 28.8 36.3

평균 손실만 비교하면 두 번째 후보가 낫지만, 벌점을 포함한 목적 함수에서는 첫 번째 후보가 낫습니다. 학습이 무엇을 최소화하는지 알려면 손실뿐 아니라 정규화(regularization) 항도 확인해야 합니다.

벌점의 강도를 일반적으로 λ(람다)로 쓰면 목적 함수는 평균 손실 + λa²입니다. λ≥0은 두 항의 비중을 정하는 설정값입니다. λ=0이면 평균 손실만 비교하고, λ가 커지면 큰 기울기에 더 많은 비용을 부여합니다. 이 사례에서 λ는 학습으로 찾는 a, b와 구분하여 미리 정합니다.

λ 후보 1: a=10, b=45 후보 2: a=12, b=40 두 후보 중 작은 목적 함수값
0 12.5 7.5 후보 2
0.1 22.5 21.9 후보 2
0.2 32.5 36.3 후보 1

벌점은 a가 어떤 한도를 절대 넘지 못한다는 제약과 다릅니다. 큰 a에도 비용을 붙여 비교할 뿐 금지하지 않습니다. λ가 크다고 새 데이터의 성능이 반드시 좋아지는 것도 아닙니다. 너무 강하면 데이터의 변화까지 충분히 따라가지 못할 수 있으므로 검증 데이터에서 확인해야 합니다.

도식의 평균 손실과 벌점은 서로 다른 항이며, 두 항을 더한 값이 이 예에서 최소화하는 목적 함수입니다.

flowchart TD
  L["개별 제곱 오차<br/>0, 0, 25, 25"]
  M["평균 손실<br/>50 / 4 = 12.5"]
  R["정규화 벌점<br/>λ = 0.2, a = 10<br/>λa² = 20"]
  O["목적 함수<br/>12.5 + 20 = 32.5<br/>최소화할 값"]
  L --> M
  M --> O
  R --> O

훈련 손실과 새 데이터 성능

손실이 낮아졌다는 것은 보통 좋은 신호입니다. 모델의 예측이 학습 데이터 기준에서 더 잘 맞아졌다는 뜻이기 때문입니다.

하지만 낮은 손실만 보고 모델이 현실에서도 좋다고 단정하면 안 됩니다. 학습 데이터에서만 손실이 낮을 수 있고, 새 데이터에서는 잘 맞지 않을 수 있으며, 서비스 목표와 손실 함수가 다를 수 있고, 안전, 공정성, 비용 같은 제약은 손실 하나로 충분히 표현되지 않을 수 있습니다.

학습 데이터의 손실은 우리가 가진 데이터에서 계산한 값입니다. 실제 세계 전체에서의 성능을 완전히 보장하지 않습니다.

그래서 학습에서는 보통 훈련 데이터(training data)와 검증 데이터(validation data), 테스트 데이터(test data)를 나누어 봅니다.

손실 함수와 평가 지표

손실 함수(loss function)는 학습 과정에서 모델 값을 조정하기 위해 사용됩니다. 평가 지표(metric)는 모델 결과를 사람이 해석하고 비교하기 위해 사용됩니다.

두 값이 같은 경우도 있습니다. 예를 들어 학습도 MSE로 하고 평가도 MSE로 하는 경우입니다.

하지만 다를 수도 있습니다. 예를 들어 학습은 로그 손실(log loss)을 줄이지만, 보고서에서는 정확도(accuracy), 정밀도(precision), 재현율(recall)을 보고, 실제 서비스에서는 비용, 지연 시간, 위험도까지 함께 볼 수 있습니다.

이 차이는 실무에서 중요합니다. 모델이 학습 중에 줄이는 숫자와 사람이 실제로 중요하게 보는 숫자가 다르면, 모델은 엉뚱한 방향으로 좋아질 수 있습니다.

공부 시간-점수 예시로도 같은 구분이 가능합니다. 학습은 평균 손실이 낮은 직선을 찾을 수 있지만, 사람은 고득점 학생을 특히 많이 틀리는가, 전반적으로 점수를 낮게 잡는가 같은 해석 질문을 따로 볼 수 있습니다. 손실은 학습의 나침반이고, 평가는 사람이 결과를 읽는 자리입니다.

평균 손실과 최대 배송 오차

세 주문의 실제 배송 시간이 모두 60분이라고 가정합니다.

모델 예측 배송 시간 제곱 오차 MSE 최대 절대 오차
A 55, 55, 55분 25, 25, 25 25 5분
B 60, 60, 52분 0, 0, 64 약 21.33 8분

MSE는 B가 더 낮지만 가장 크게 빗나간 주문의 오차는 A가 더 작습니다. 서비스가 예측이 6분 넘게 빗나간 주문 수를 별도로 확인한다면 A는 0건, B는 1건입니다. 학습 손실이 개선되어도 운영에서 보는 다른 지표까지 함께 좋아지는 것은 아닙니다.

벌점과 평가 기준을 바꾸어 계산하기

  1. λ=0.05일 때 두 직선 후보의 목적 함수값을 계산하고 더 작은 쪽을 고르세요.
  2. 정답이 스팸인 메일에 스팸 확률 0.6을 부여했다면 로그 손실은 얼마인가요? 확률 0.9와 정확도 판정은 같아도 손실은 어떻게 다른가요? 스팸 판정 기준은 0.5로 둡니다.
  3. 배송 사례에서 ‘절대 오차가 4분을 초과한 주문 수’를 세면 A와 B는 각각 몇 건인가요? 기준이 6분일 때와 선택이 달라지나요?

풀이: ① 후보 1은 12.5+0.05×100=17.5, 후보 2는 7.5+0.05×144=14.7로 후보 2가 작습니다. ② −ln(0.6)≈0.511입니다. 두 확률 모두 스팸으로 맞히지만 0.9의 손실 약 0.105가 더 작습니다. ③ A는 3건, B는 1건이므로 이 건수를 최소화하면 B가 낫습니다. 6분 기준에서는 A가 0건, B가 1건이므로 A가 낫습니다. 평가 기준의 이름뿐 아니라 임계값도 선택에 영향을 줍니다.

체크리스트

  • 손실 함수(loss function)를 예측의 틀림을 숫자로 바꾸는 함수로 설명할 수 있다.
  • 실제값 \(y\)와 예측값 \(\hat{y}\)의 차이를 이용해 제곱 오차를 계산할 수 있다.
  • 평균 제곱 오차(mean squared error, MSE)가 여러 샘플의 손실을 평균낸 값임을 설명할 수 있다.
  • 목적 함수(objective function)를 학습이 실제로 최적화하려는 기준으로 설명할 수 있다.
  • 손실 함수와 평가 지표(metric)가 항상 같은 것은 아님을 설명할 수 있다.
  • 낮은 손실이 좋은 신호이지만, 현실 성능을 자동으로 보장하지는 않음을 설명할 수 있다.
  • 개별 오차, 여러 샘플의 평균 손실, 학습 전체 목적 함수를 구분할 수 있다.
  • 손실이 낮다는 사실과 실제 운영에서 좋은 모델이라는 판단을 구분할 수 있다.

출처와 참고 자료

  • Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, Chapter 8: Optimization for Training Deep Models, MIT Press, 2016, 확인 날짜: 2026-07-20. 딥러닝 학습에서 훈련 데이터의 예제별 손실을 평균한 비용 함수(cost function)를 줄인다는 설명 확인에 사용했다.
  • scikit-learn developers, 3.4. Metrics and scoring: quantifying the quality of predictions, scikit-learn User Guide, 확인 날짜: 2026-07-20. 예측 품질을 평가하는 scoring/metric 선택과 손실 함수와 평가 지표가 같을 수도 다를 수도 있다는 설명 확인에 사용했다.
  • scikit-learn developers, mean_squared_error, scikit-learn API Reference, 확인 날짜: 2026-07-20. 평균 제곱 오차가 실제값 y_true와 예측값 y_pred 사이의 회귀 손실이며 0이 최선이라는 설명 확인에 사용했다.
  • scikit-learn developers, log_loss, scikit-learn API Reference, 확인 날짜: 2026-09-15. 로그 손실이 로지스틱 손실 또는 교차 엔트로피 손실로 불리며 예측 확률에 적용된다는 설명 확인에 사용했다.