Cross-Entropy 손실 함수 쉽게 이해하기

머신러닝 코드를 보면 이런 줄이 꼭 나온다.

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

optimizer는 "학습 방법", metrics는 "측정 기준"인 건 알겠는데, loss에 있는 sparse_categorical_crossentropy는 대체 뭘까?

손실 함수가 뭐야?

손실 함수(Loss Function)는 "예측이 정답과 얼마나 다른지" 를 숫자로 계산하는 방법이다.

예측: "이건 2야" (확신 85%)
정답: "2"
손실: 0.16 (낮음 = 잘 맞춤)

예측: "이건 3이야" (확신 80%)
정답: "2"
손실: 3.0 (높음 = 틀림)

학습할 때 이 손실을 낮추는 방향으로 가중치를 조정한다. 그래서 손실 함수가 중요하다.

이름 뜯어보기

sparse_categorical_crossentropy를 분해하면:

부분의미
sparse정답이 숫자 하나 (예: 5)
categorical여러 개 중 하나 고르는 문제 (0~9 분류)
cross-entropy확률 차이 계산 방법

Cross-Entropy 계산법

핵심은 간단하다. 정답 위치의 예측 확률만 본다.

손글씨 "2"를 입력했을 때 모델이 이렇게 예측했다고 하자.

예측: [0.01, 0.02, 0.85, 0.02, 0.02, 0.02, 0.02, 0.02, 0.01, 0.01]
#      0     1     2     3     4     5     6     7     8     9
#                  ↑
#              정답 위치 = 85%

Cross-Entropy는 정답 위치(2번)의 확률만 가져와서 계산한다.

손실 = -log(0.85) = 0.16

만약 모델이 틀렸다면:

예측: [0.01, 0.02, 0.05, 0.80, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02]
#                  ↑
#              정답 위치 = 5%

손실 = -log(0.05) = 3.0

왜 -log를 쓰는가?

log 함수의 특성 때문이다.

정답 확률-log(확률)의미
100% (1.0)0완벽하게 맞춤
85% (0.85)0.16잘 맞춤
50% (0.5)0.69반반
10% (0.1)2.3많이 틀림
1% (0.01)4.6거의 틀림

확률이 높으면 손실이 낮고, 확률이 낮으면 손실이 급격히 높아진다. 틀릴수록 강하게 페널티를 주는 구조다.

sparse vs 일반 categorical

정답 형식에 따라 두 가지가 있다.

sparse_categorical_crossentropy

정답이 숫자 하나일 때 사용한다.

train_labels = [5, 0, 4, 1, 9, 2, ...]  # 그냥 숫자

MNIST 같은 대부분의 데이터셋이 이 형식이다.

categorical_crossentropy

정답이 원핫 인코딩일 때 사용한다.

# 5 → [0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
# 0 → [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
train_labels = [[0,0,0,0,0,1,0,0,0,0], [1,0,0,0,0,0,0,0,0,0], ...]

계산 결과는 똑같다. 정답 데이터 형식만 다를 뿐이다.

# 정답이 숫자면
loss='sparse_categorical_crossentropy'

# 정답이 원핫 인코딩이면
loss='categorical_crossentropy'

왜 "Cross"-Entropy인가?

원래 Entropy는 정보이론에서 나온 개념으로 "불확실성"을 측정한다. Cross-Entropy는 두 확률 분포 사이의 차이를 측정한다.

정답 분포: [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]  ← 2번이 100%
예측 분포: [0.01, 0.02, 0.85, ...]         ← 2번이 85%

이 두 분포가 얼마나 다른지를 "cross"해서 계산한다고 해서 Cross-Entropy다. 자세한 수학은 몰라도 "두 분포 차이 = 손실"이라고 이해하면 된다.

다른 손실 함수들

분류 문제에는 Cross-Entropy를 쓰지만, 문제 종류에 따라 다른 손실 함수도 있다.

문제 유형손실 함수예시
다중 분류categorical_crossentropy0~9 숫자 분류
이진 분류binary_crossentropy개/고양이 분류
회귀mse (평균제곱오차)집값 예측

정리

loss='sparse_categorical_crossentropy'

이 한 줄이 하는 일:

  1. 모델의 예측 확률 중 정답 위치 확률을 가져온다
  2. -log(확률)로 손실을 계산한다
  3. 확률이 낮을수록(틀릴수록) 손실이 커진다
  4. 이 손실을 줄이는 방향으로 가중치를 조정한다

결국 "정답을 맞출 확률을 높여라" 는 목표를 수학적으로 표현한 것이다.

MNIST 신경망 동작 원리 글과 함께 보면 전체 학습 과정이 더 명확해진다.