2장 — 엔트로피

교차 엔트로피: 모델이 정답에 놀란 정도

분류와 언어 모델의 표준 손실에는 cross-entropy라는 이름이 붙어 있다. 앞에서 본 놀라움의 평균과는 어떤 관계일까? 그리고 이 loss는 왜 학습을 아무리 오래 해도 0까지 내려가지 않을까?

정답에 대한 놀라움

모델이 정답 y에 확률 q(y)를 주었다면 손실은 −ln q(y)다. 다시 말해 정답이 나왔을 때 모델이 얼마나 놀랐는지를 nat으로 잰 값이다. 이것을 데이터 분포 p에 대해 평균하면 교차 엔트로피 (정답에 놀란 정도의 평균, cross-entropy)가 된다.

H(p,q)=−∑yp(y)ln⁡q(y)\textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}, \textcolor{#bcbd22}{q}) = -\sum_y \textcolor{#e377c2}{p}(\textcolor{#1b9e77}{y}) \ln \textcolor{#bcbd22}{q}(\textcolor{#1b9e77}{y})
H(p,q)교차 엔트로피 (loss의 평균)p데이터 분포 (정답의 실제 분포)q모델 분포 (모델이 준 확률)y정답 후보 (합의 번호)\begin{array}{ll} \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}, \textcolor{#bcbd22}{q}) & \text{교차 엔트로피 (loss의 평균)} \\ \textcolor{#e377c2}{p} & \text{데이터 분포 (정답의 실제 분포)} \\ \textcolor{#bcbd22}{q} & \text{모델 분포 (모델이 준 확률)} \\ \textcolor{#1b9e77}{y} & \text{정답 후보 (합의 번호)} \end{array}

loss의 바닥: KL 발산

그렇다면 모델을 아무리 잘 학습시켜도 loss가 0이 되지 않는 이유는 무엇일까? 작은 예로 확인해 보자. 정답의 실제 분포가 p = (0.5, 0.3, 0.2)인데, 아직 아무것도 배우지 못한 모델이 세 후보에 1/3씩 준다고 하자. 그러면 loss는 ln 3 ≈ 1.099 nat이고, 그 가운데 1.030 nat은 데이터 자체의 엔트로피 H(p), 나머지 0.069 nat만 모델 탓이다.

이 나눔은 이 예에서만 생긴 우연이 아니다. 교차 엔트로피는 언제나 모델과 상관없는 H(p)와 모델에 따라 달라지는 나머지 항의 합으로 나뉜다.

H(p,q)=H(p)+DKL(p ∥ q),DKL(p ∥ q)=∑yp(y)ln⁡p(y)q(y)\textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}, \textcolor{#bcbd22}{q}) = \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}) + \textcolor{#9467bd}{D_{\mathrm{KL}}}(\textcolor{#e377c2}{p} \,\|\, \textcolor{#bcbd22}{q}), \qquad \textcolor{#9467bd}{D_{\mathrm{KL}}}(\textcolor{#e377c2}{p} \,\|\, \textcolor{#bcbd22}{q}) = \sum_y \textcolor{#e377c2}{p}(\textcolor{#1b9e77}{y}) \ln \frac{\textcolor{#e377c2}{p}(\textcolor{#1b9e77}{y})}{\textcolor{#bcbd22}{q}(\textcolor{#1b9e77}{y})}
H(p,q)교차 엔트로피 (loss의 평균)H(p)데이터 분포의 엔트로피DKLKL 발산: p인데 q라고 믿어서 더 당하는 놀라움p데이터 분포 (정답의 실제 분포)q모델 분포 (모델이 준 확률)y정답 후보 (합의 번호)\begin{array}{ll} \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}, \textcolor{#bcbd22}{q}) & \text{교차 엔트로피 (loss의 평균)} \\ \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}) & \text{데이터 분포의 엔트로피} \\ \textcolor{#9467bd}{D_{\mathrm{KL}}} & \text{KL 발산: p인데 q라고 믿어서 더 당하는 놀라움} \\ \textcolor{#e377c2}{p} & \text{데이터 분포 (정답의 실제 분포)} \\ \textcolor{#bcbd22}{q} & \text{모델 분포 (모델이 준 확률)} \\ \textcolor{#1b9e77}{y} & \text{정답 후보 (합의 번호)} \end{array}
직접 움직여 보기loss의 바닥은 H(p)새 창에서 열기 ↗

여기서 D_KL(p‖q)를 KL 발산(Kullback–Leibler divergence)이라 한다. D_KL는 글자를 곱한 것이 아니라 한 덩어리 이름이다. D는 발산(divergence)의, KL은 쿨백(Kullback)과 라이블러(Leibler) 두 사람 이름의 머리글자다. 괄호 안의 세로 두 줄 ‖은 두 분포를 가르는 표시로, 앞에 실제 분포를, 뒤에 믿은 분포를 둔다. 두 자리를 바꾸면 값도 대개 달라진다. 뜻은 "실제 분포가 p인데 q라고 믿어서 추가로 당하는 놀라움"이다. 이 값은 항상 0 이상이고, q = p일 때만 0이 된다.

왜 0 아래로는 내려가지 않을까? 위젯 3에서 q를 어떻게 움직여도 KL 값은 0 아래로 내려가지 않는다. 까닭은 로그의 성질 하나에 있다. 곡선 ln u는 직선 u − 1보다 늘 아래에 있고 u = 1에서만 닿는다. u 자리에 q/p를 넣고 p로 평균하면 −D_KL = Σ p ln(q/p) ≤ Σ p(q/p − 1) = Σ q − Σ p = 1 − 1 = 0이다. 등호는 모든 후보에서 q/p = 1일 때, 곧 q = p일 때만 선다.

그러므로 loss의 바닥은 0이 아니라 H(p), 즉 데이터 자체의 엔트로피다. 학습이 줄일 수 있는 것은 KL 부분뿐이다.

역사: 두 가설을 가려내는 정보

이 양에 이름을 남긴 쿨백과 라이블러는 둘 다 미국 정부에서 암호를 푸는 일을 한 수학자였다. 1951년 두 사람은 수리통계학 학술지에 실은 논문에서, 관측값 하나가 두 가설 가운데 어느 쪽이 참인지 가려내는 데 평균 얼마나 도움이 되는지를 재는 양으로 이 값을 정의했다. 실제 분포가 p일 때 관측을 하나씩 모으면, 「q가 아니라 p다」라는 증거가 관측 하나에 평균 D_KL(p‖q)씩 쌓인다는 뜻이다. 모델이 q라고 믿어서 더 당하는 놀라움과 같은 값이다. 두 사람이 그 논문에서 「발산(divergence)」이라 부른 것은 두 방향의 값을 더한 대칭인 양이었고, 한 방향만 재는 지금의 값이 KL 발산이라는 이름으로 굳은 것은 그 뒤의 일이다.

ML에서: 최대우도 = 교차 엔트로피 최소화

마지막으로 최대우도 학습과의 관계를 정리해 두자. 데이터의 log-likelihood를 최대화하는 것과 데이터에 대한 교차 엔트로피를 최소화하는 것은 부호만 다른 같은 일이다. 게다가 H(p)는 모델과 상관없는 상수이므로, 최대우도 학습은 결국 D_KL(p‖q)를 줄이는 일이 된다.

문제 13. 확신이 넘치는 모델

정답의 실제 분포가 p = (0.5, 0.3, 0.2)다. 세 후보에 1/3씩 주는 모델과, 가장 흔한 첫 후보에 0.9, 나머지 둘에 0.05씩 주는 모델 가운데 어느 쪽의 교차 엔트로피가 작은가? 둘째 모델의 KL 발산은 얼마인가? (풀어 본 뒤 위젯 3의 「문제 13 불러오기」로 확인해 보자.)

김민준 M01
김민준

둘째가 낫죠. 가장 자주 나오는 답을 가장 높게 찍었으니까요.

선생님 T12
선생님

계산해 보세요. 정답이 둘째나 셋째 후보일 때 둘째 모델은 얼마나 놀라죠?

김민준 M04
김민준

−ln 0.05 ≈ 3.00 nat이요. 첫 후보일 때는 −ln 0.9 ≈ 0.11이고요. 평균하면 0.5 × 0.11 + 0.3 × 3.00 + 0.2 × 3.00 ≈ 1.55 nat. 1/3씩 준 모델의 ln 3 ≈ 1.10보다 크네요.

이서연 S11
이서연

H(p) ≈ 1.03을 빼면 KL은 약 0.52 nat이야. 균등한 모델의 KL 0.07보다 일곱 배 넘게 커. 0.05를 0까지 줄이면 −ln 0이라 loss가 끝없이 커지겠다.

선생님 T13
선생님

맞아요. 교차 엔트로피는 "드물다고 장담했는데 나온 답"을 무겁게 벌해요. 비 올 확률 0%라던 날 비가 오면, 30%라던 날 비가 온 것보다 그 예보를 훨씬 덜 믿게 되는 것과 같아요.