포스트

딥러닝 기초 (3) - 손실과 출력층: softmax와 교차 엔트로피

학습의 목표를 정하는 손실 함수와, 과제에 맞춘 출력층 설계를 정리합니다. 회귀의 MSE, 다중분류의 softmax와 교차 엔트로피, 이진분류의 sigmoid와 BCE가 왜 그렇게 짝지어지는지를 값으로 확인한 딥러닝 기초 (3)편입니다.

딥러닝 기초 (3) - 손실과 출력층: softmax와 교차 엔트로피

딥러닝 기초 시리즈의 3편입니다. 전체 목차는 0편에 있습니다. 1편의 순전파가 예측을 냈다면, 이 편은 그 예측이 얼마나 틀렸는지를 재는 손실과, 과제에 맞춘 출력층을 다룹니다.

학습의 목표를 하나의 수로

가중치를 바꾸려면 먼저 “지금 얼마나 틀렸는지”를 숫자 하나로 요약해야 합니다. 이것이 손실(loss)입니다. 손실은 가중치의 함수이고, 학습의 목표는 한 문장으로 정리됩니다 — 손실을 가장 작게 만드는 가중치를 찾는다.

무엇을 예측하느냐에 따라 출력층의 형태와 손실이 함께 정해집니다. 크게 회귀와 분류로 나뉩니다.

회귀: 출력 그대로, MSE

연속값(집값, 수요량)을 예측하는 회귀에서는, 출력층에 활성화를 씌우지 않고 값을 그대로 냅니다. 손실은 예측과 정답의 차이를 제곱해 평균 낸 평균제곱오차(MSE)입니다.

1
loss = np.mean((y_pred - y_true) ** 2)

제곱이라 큰 오차에 더 큰 벌점을 주고, 미분이 깔끔해 최적화에 잘 맞습니다.

다중 분류: softmax와 교차 엔트로피

여러 범주 중 하나를 고르는 분류에서는, 출력층이 각 범주의 점수(logit)를 내고 이를 확률로 바꿔야 합니다. 이때 쓰는 것이 softmax입니다. 점수를 지수화해 전체 합이 1이 되도록 정규화합니다.

1
2
3
4
5
def softmax(z):
    e = np.exp(z - z.max())   # z.max()를 빼는 것은 수치 안정을 위해
    return e / e.sum()

softmax(np.array([2.0, 1.0, 0.1]))   # [0.659, 0.242, 0.099], 합 1.0

가장 큰 점수(2.0)가 가장 큰 확률(0.659)이 되고, 세 확률의 합은 1입니다. 이렇게 나온 확률에 대한 손실이 교차 엔트로피(cross-entropy)입니다. 정답 범주에 모델이 준 확률 p에 대해 -log(p)로 벌점을 매깁니다.

1
2
3
p = softmax(np.array([2.0, 1.0, 0.1]))   # [0.659, 0.242, 0.099]
-np.log(p[0])   # 0.417  — 정답이 0번(확률 0.659): 맞춘 쪽 → 낮은 손실
-np.log(p[2])   # 2.317  — 정답이 2번(확률 0.099): 틀린 쪽 → 큰 손실

정답에 높은 확률을 줬으면 손실이 작고, 낮은 확률을 줬으면 손실이 급격히 커집니다. -log는 확률이 0에 가까울수록 무한대로 발산해, “확신에 찬 오답”을 강하게 벌합니다. softmax가 확률을 만들고 교차 엔트로피가 그 확률을 평가하는, 자연스러운 짝입니다.

이진 분류: sigmoid와 BCE

두 범주(참/거짓) 문제는 2편시그모이드로 출력을 0~1 확률로 만들고, 그에 맞는 이진 교차 엔트로피(BCE)를 손실로 씁니다. 다중 분류의 특수한 경우로 보면 됩니다.

정리

과제출력층손실
회귀활성화 없음 (값 그대로)MSE (평균제곱오차)
이진 분류sigmoidBCE (이진 교차 엔트로피)
다중 분류softmax교차 엔트로피
개념한 줄 요약
손실얼마나 틀렸는지를 하나의 수로. 학습은 이걸 최소화
softmax점수를 합이 1인 확률로 변환
교차 엔트로피정답 확률에 -log 벌점. 확신에 찬 오답을 강하게 벌

이제 예측(순전파)과 손실이 갖춰졌습니다. 남은 것은 이 손실을 줄이는 방향을 어떻게 구하느냐입니다. 다음 편, 역전파입니다.

다음 글: 딥러닝 기초 (4) - 역전파: 연쇄법칙과 계산 그래프

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.