cross-entropy 손실함수 완전 정복 — 심화 학습서

00. 기초 — cross-entropy를 읽기 위한 공통 토대

Contents

이 학습서는 cross-entropy(교차 엔트로피) 손실함수를 정보이론의 뿌리부터 gradient·실전까지 학부생이 순서대로 따라 읽도록 쓴 한 권의 심화 학습서다. 이 장은 이후 모든 장이 다시 정의하지 않고 가져다 쓰는 공통 어휘·기호·비유를 정의한다. 특히 §0.6의 기호 규약은 끝 장까지 그대로 간다. 막히면 이 장으로 돌아오라.

이 책을 다 읽고 나면 다음 한 줄짜리 정의가 익숙해진다.

cross-entropy(CE) — 분류의 표준 손실. 모델이 정답 클래스에 준 확률을 qq라 하면 CE=logq\text{CE} = -\log q. 정답에 확신할수록(q1q\to1) 손실 0, 의심할수록(q0q\to0) 무한대. 직관: "정답에 얼마나 놀랐는가".

이 정의가 왜 이렇게 생겼는지를 한 칸씩 풀어 가는 것이 이 책이다. 정보이론의 "놀람"에서 출발한다. 거기서 softmax가 확률을 만드는 과정으로, gradient가 왜 qyq-y로 깔끔해지는지로, 끝으로 실무의 함정으로 이어진다.


0.1 우리가 푸는 문제 — 왜 손실이 필요한가

신경망을 학습시킨다는 것은 손실(loss)을 줄이는 일이다. 손실이란 "모델의 답이 정답에서 얼마나 멀리 떨어졌나"를 재는 한 숫자다. 이 숫자가 클수록 모델이 많이 틀린 것이다. 학습은 이 숫자를 작게 만드는 방향으로 모델의 파라미터를 조금씩 고친다.

분류(classification) 문제에서는 모델의 답이 단순한 "예/아니오"가 아니다. 사진 한 장을 보고 "개·고양이·새 중 무엇인가"를 푸는 모델은 정답을 하나로 찍지 않는다. 대신 각 클래스에 확률을 매긴 분포를 내놓는다. 예컨대 "개 70%, 고양이 20%, 새 10%"다. 정답이 '개'라면 이 예측은 꽤 좋고, 정답이 '새'라면 형편없다.

그러면 "예측 확률분포가 정답에서 얼마나 떨어졌나"를 어떻게 한 숫자로 잴까. 이 질문의 답이 cross-entropy 손실이다. 그리고 이 손실이 왜 그렇게 생겼는지 이해하려면 "확률분포 사이의 거리 비슷한 것"을 재는 정보이론의 언어를 먼저 빌려야 한다. 그래서 이 책은 다음 흐름으로 간다.

01. information theory
surprise to entropy to CE to KL

02. classification loss
softmax / sigmoid / BCE

03. gradient
derive q minus y

04. practical
stability / smoothing / pitfalls

05. walkthrough
one example end to end

06. conclusion
cheat sheet / decision table

위 그림은 정보이론에서 출발해 분류 손실·gradient·실전을 거쳐 결론으로 가는 책 전체의 순서다. 이 장은 그 흐름에 필요한 토대를 준비한다. 확률·로그·기댓값을 짧게 복습하고, "모델 출력이 확률분포"라는 그림과 one-hot 라벨을 정한 뒤, 마지막으로 책 전체의 기호 규약을 정한다.


Advertisements

0.2 사전 준비 ① — 이산 확률분포

확률분포는 "각 결과가 일어날 확률을 모아 놓은 표"다. 결과가 유한개 x1,,xkx_1,\dots,x_k인 이산(discrete) 경우, 분포는 각 결과에 확률을 주되 다음 두 조건을 지킨다.

i=1kp(xi)=1,0p(xi)1.\sum_{i=1}^{k} p(x_i) = 1, \qquad 0 \le p(x_i) \le 1.

각 확률은 0과 1 사이이고, 전부 더하면 정확히 1이다. 확률 총량 1을 여러 결과에 나눠 담은 것이라고 보면 된다.

세 가지 극단을 이름과 함께 기억해 두자. 책 전체에서 계속 나온다.

  • 균등분포(uniform). 모든 결과가 같은 확률이다. 공정한 6면 주사위가 p(x)=16p(x)=\tfrac16이다. 결과를 "가장 모르는" 상태다.
  • 편향분포(biased). 한쪽으로 쏠린 분포다. 찌그러진 동전이 p()=0.9, p()=0.1p(\text{앞})=0.9,\ p(\text{뒤})=0.1이다.
  • 확정분포(degenerate). 한 결과가 확률 1, 나머지는 0이다. "반드시 앞면"인 가짜 동전이 p()=1p(\text{앞})=1이다. "전혀 안 헷갈리는" 상태다.

분류 문제에는 두 개의 분포가 등장한다. 그 둘의 관계가 이 책의 주인공이다.

  • 진짜 분포(true distribution) — 정답 라벨이 알려주는 분포다. 정답이 '개' 하나로 확정이면, 이건 '개'에 확률 1을 준 확정분포다.
  • 모델 예측 분포(predicted distribution) — 모델이 내놓은 확률 벡터다. "개 70%, 고양이 20%, 새 10%" 같은 것이다. softmax가 만든다(§0.4).

cross-entropy는 이 두 분포가 얼마나 어긋나 있는지를 잰다.

0.3 사전 준비 ② — 로그의 세 성질

cross-entropy의 정의에는 항상 로그(log)가 들어간다. 왜 하필 로그인지는 01장에서 깊게 따진다. 그 전에 우리가 쓸 성질 셋만 손에 쥐자.

성질 우리가 쓰는 곳
단조증가 a<bloga<logba<b \Rightarrow \log a<\log b 큰 확률 → 큰 로그 → 작은 손실
곱→합 log(ab)=loga+logb\log(ab)=\log a+\log b 독립 사건의 정보 가산성(01장 §1.2), 우도의 곱→합(01장 §1.6)
나눗셈→뺄셈 logab=logalogb\log\frac{a}{b}=\log a-\log b KL = CE − H 분해(01장 §1.5)

여기에 결정적인 두 끝값을 외워 두자. 이것이 cross-entropy의 모든 직관의 씨앗이다.

logp+(p0+),log1=0.-\log p \to +\infty \quad (p\to 0^+), \qquad -\log 1 = 0.

확률이 0에 가까운 일에 log-\log를 씌우면 무한대로 커진다. 확률 1인 일에 씌우면 정확히 0이다. 이것이 "정답을 확신하면 손실 0, 의심하면 무한대"라는 한 줄 정의의 수학적 뿌리다.

로그의 밑(base) — bit인가 nat인가

로그에는 밑(base)이 있고, 그 밑이 정보량의 단위를 정한다. 값은 밑만 다르고 본질은 같다. log2x=lnx/ln2\log_2 x = \ln x / \ln 2로 환산되며, ln20.6931\ln 2 \approx 0.6931이다.

단위 표기 주 사용처
22 bit log2\log_2 통신·부호화 직관("예/아니오 질문 몇 번?")
ee nat ln\ln 머신러닝의 기본 (미분이 깔끔: ddxlnx=1/x\tfrac{d}{dx}\ln x = 1/x)

이 책은 단위를 이렇게 쓴다. 직관을 설명할 때는 bit를 쓴다. 예/아니오 질문 횟수가 와닿기 때문이다. 손실·gradient 같은 ML 수식에는 nat(ln\ln)을 쓴다. PyTorch의 cross_entropy, log_softmax, nll_loss가 전부 자연로그 기반이기 때문이다. 헷갈릴 만한 곳마다 단위를 명시한다. 둘은 상수배(ln2\ln 2)만 다르므로 어느 쪽으로 최소화하든 최적 파라미터는 같다.

0.4 사전 준비 ③ — 기댓값, 그리고 "출력 = 확률분포"

기댓값 — 확률로 가중한 평균

확률변수 xpx\sim p에 대해 어떤 함수 f(x)f(x)의 기댓값(expectation)은 각 값을 그 확률로 가중해 더한 것이다.

Exp[f(x)]=xp(x)f(x).\mathbb{E}_{x\sim p}[f(x)] = \sum_x p(x)\,f(x).

직관은 "ff를 아주 많이 반복 측정하면 평균적으로 나오는 값"이다. 예컨대 주사위 눈의 기댓값은 x=1616x=3.5\sum_{x=1}^6 \tfrac16 x = 3.5다. 이 책의 모든 엔트로피류 양(entropy·cross-entropy·KL)은 "어떤 함수의 기댓값"이라는 한 가지 틀로 정의된다. 그래서 위 식 하나만 쥐고 있으면 된다.

모델 출력은 확률분포다 — softmax / sigmoid

분류 모델의 마지막 층은 raw 점수를 내놓는다. 이를 로짓(logit)이라 부르고 기호로 zz로 쓴다. 로짓은 어떤 실수든 될 수 있다. 음수도 되고, 합이 1이 아니어도 된다. 이 raw 점수를 0~1의 확률로 바꿔 주는 변환기가 둘 있다(자세한 정의는 02장).

  • softmax — 여러 클래스가 상호배타(정답이 정확히 하나)일 때 쓴다. KK개 로짓을 받아 합이 1인 확률분포를 만든다.
  • sigmoid — 이진 또는 독립 다중 라벨일 때 쓴다. 로짓 하나를 받아 "양성일 확률" 하나를 만든다.

요점은 한 줄이다. 모델의 출력은 곧 확률분포다. 그 분포가 정답 분포에서 얼마나 떨어졌나를 cross-entropy가 잰다.

one-hot 라벨

정답 라벨은 보통 one-hot 벡터로 표현한다. 정답 자리만 1, 나머지는 0이다. 정답이 클래스 ccKK=3 문제의 라벨은 다음과 같다.

y=(0,,1c번째,,0),예: 정답=2번이면 y=(0,1,0).y = (0,\dots,\underbrace{1}_{c\text{번째}},\dots,0), \qquad \text{예: 정답=2번이면 } y=(0,1,0).

이 one-hot 벡터는 사실 §0.2에서 말한 확정분포다. "정답 클래스에 확률 1을 몰아준 진짜 분포"다. 01장에서 보겠지만, 라벨이 one-hot이라는 사실 덕분에 cross-entropy의 복잡한 합이 단 한 항 logqc-\log q_c로 깔끔하게 줄어든다.

softmax (multi-class)
or sigmoid (binary)

input x

neural net

logits z
(raw scores, any real)

predicted dist q
(0..1)

true label y
(one-hot)

cross-entropy
L = -log(prob of true class)

loss (a number)

위 그림은 입력이 신경망을 지나 로짓 zz가 되고, softmax나 sigmoid가 예측 분포 qq를 만들고, 그 qq와 정답 yy를 cross-entropy가 받아 손실 한 숫자를 내는 흐름이다. 이 그림이 책 전체의 등장인물 지도다.


Advertisements

0.5 손실 함수 한 줄 정의 — 이 책이 풀어쓸 대상

이 학습서의 출발점은 어느 ML 교재의 §0.5 한 절이었다. 약 15줄로 축약돼 이해가 어려웠던 그 절의 핵심은 이렇다.

cross-entropy(CE). 분류 태스크의 표준 손실. 모델이 정답 클래스에 준 확률을 qq라 하면 CE=logq\text{CE} = -\log q. 정답에 확신할수록(q1q\to1) 손실이 0에 가깝고, 의심할수록(q0q\to0) 무한대로 커진다. 직관: "정답에 얼마나 놀랐는가".

정답 클래스 확률 ptp_t. 이진 분류에서 정답 라벨이 yy, 모델이 추정한 양성 확률이 p^\hat p일 때, "정답에 준 확률"을 pt=p^(y=1), 1p^(y=0)p_t = \hat p\,(y{=}1),\ 1-\hat p\,(y{=}0)로 정의한다. 그러면 cross-entropy가 두 경우 모두 CE=logpt\text{CE}=-\log p_t로 합쳐진다. pt1p_t\to 1이면 쉬운(easy) 샘플, 작으면 어려운(hard) 샘플이다.

이 두 단락을 풀어쓴 것이 이 책이다. 01장은 "logq-\log q가 사실 cross-entropy의 특수경우"임을 보인다. 02장은 "ptp_t로 합치는" 정체를 푼다. 03장은 "왜 gradient가 qyq-y로 깔끔한가"를 유도한다. 04장은 실전 함정을 다룬다.

이 책의 범위 밖 한 가지 — Focal Loss. 위에서 pt1p_t\to1이면 easy, 작으면 hard라 했다. "이미 잘 맞히는 easy 샘플의 손실을 깎고 어려운 샘플에 집중"하도록 CE를 변조한 확장이 Focal Loss (1pt)γlogpt-(1-p_t)^\gamma\log p_t다. 이 책은 그 다리(02장 §2.3, 04장 §4.3)만 놓고, 깊은 유도는 별도 주제로 안내한다. 이 책의 주제는 cross-entropy 그 자체다.


0.6 공통 기호 규약 — 끝까지 일관되게 쓴다 (중요)

이 책을 읽다 막히는 가장 흔한 지점은 기호다. 같은 글자가 장마다 다른 뜻이면 길을 잃는다. 그래서 여기서 한 번 정해 두고, 이후 장은 이 표를 가져다 쓰기만 한다.

기호 읽기 처음 깊게 다루는 곳
z=(z1,,zK)z=(z_1,\dots,z_K) "지" 로짓(logit) — 정규화 안 된 raw 점수. 음수·합≠1 허용 02장 §2.1
q=(q1,,qK)q=(q_1,\dots,q_K) "큐" 모델 예측 분포 — softmax 출력. 합=1 02장 §2.1
qcq_c "큐 씨" 모델이 정답 클래스 cc에 준 확률 01장 §1.4, 02장 §2.2
y=(y1,,yK)y=(y_1,\dots,y_K) "와이" 타깃(정답) 분포 — one-hot 또는 soft label 00장 §0.4
ptp_t "피 티" 정답 클래스 확률 — 이진/통합 표기. pt1p_t\to1 easy, 작으면 hard 00장 §0.5, 02장 §2.3
H(p)H(p) "에이치 피" entropy — 분포 pp의 평균 놀람(불확실성) 01장 §1.2
H(p,q)H(p,q) "에이치 피 큐" cross-entropyqq의 놀람을 pp로 평균 01장 §1.3
DKL(pq)D_{KL}(p|q) "케이엘" KL divergenceppqq로 믿을 때의 추가 낭비 01장 §1.5
ε\varepsilon "엡실론" label smoothing 강도(보통 0.1) 04장 §4.2
γ\gamma "감마" Focal의 focusing 파라미터 (이 책은 다리만) 02장 §2.3

⚠ 기호 pp의 두 얼굴 — 반드시 구분하라

이 책에서 글자 pp는 문맥에 따라 정반대 두 가지를 뜻한다. 합본 학습서에서 학습자가 가장 잘 막히는 지점이라 여기서 명시적으로 분리한다.

표기 어디 측인가 등장 장
p(x)p(x) (또는 "진짜 분포 pp") 진짜(라벨) 확률분포 — cross-entropy H(p,q)=xp(x)logq(x)H(p,q)=-\sum_x p(x)\log q(x)에서 가중치 역할을 하는 분포 정답 측 01장(정보이론)
p^=σ(z)\hat p = \sigma(z) (또는 "예측 양성확률") 모델이 예측한 양성 확률 — 이진 분류에서 sigmoid가 낸 값. gradient p^y\hat p - yp^\hat p이것 예측 측 02·03장(이진 분류)

01장의 pp는 "정답이 알려주는 분포"다. 우리가 맞춰야 할 목표다. 02·03장 이진의 p^\hat p는 "모델이 내놓은 예측"이다. 우리가 고쳐야 할 출력이다. 정반대 측이다. 그래서 이렇게 읽는다.

  • 정보이론 장(01)에서 pp를 보면 진짜 분포로 읽는다. 목표다.
  • 이진 분류·gradient 장(02·03)에서 p^\hat p 또는 p=σ(z)p=\sigma(z)를 보면 모델의 예측 양성확률로 읽는다. 출력이다.
  • gradient 식 p^y\hat p - y(=예측 − 정답)의 p^\hat p는 후자, 예측 측이다. 01장의 진짜 분포 pp와 혼동하지 말라.

혼동을 막기 위해 이 책은 이진 예측 확률을 일관되게 p^\hat p로 쓴다. softmax 예측 분포는 qq다. 진짜 분포가 필요한 곳은 p(x)p(x)로 맥락을 명시한다.

이 책에 등장하지 않는 기호. "태스크 선택 확률" πt\pi_t는 멀티태스크 스케줄링의 기호다. 이 책은 cross-entropy 자체가 주제라 πt\pi_t는 등장하지 않는다. 다른 자료에서 ptp_t가 "태스크 선택 확률"로 쓰인 걸 봤더라도, 이 책의 ptp_t는 언제나 정답 클래스 확률(분류 난이도)이다.


0.7 이 책을 읽는 법

  • 순서대로 읽으라. 00 → 01 → ... → 06. 각 장 끝이 다음 장으로 잇는다. 뒷장은 앞장 정의를 가져다 쓰기만 하므로 건너뛰면 막힌다.
  • 수식은 LaTeX, 흐름은 Mermaid. 수식은 ...... 안에 있다. 개념의 흐름·관계·구조는 Mermaid 다이어그램 소스로 있다(렌더하면 그림이 된다).
  • 막히면 이 장으로. 처음 보는 기호는 §0.6 표로, 처음 보는 용어는 GLOSSARY로 돌아오라.
  • 종합 결론·치트시트·결정표가 필요하면 06장으로 가라. 결론은 거기에 단일화돼 있다.

다음 장은 cross-entropy의 뿌리인 정보이론으로 내려간다. "한 사건의 놀람"이라는 작은 개념에서 출발해 entropy와 cross-entropy로 이어 가며, 끝에서 logq-\log q가 cross-entropy의 특수경우임을 보인다.