동전 두 개를 비교해 보자. 앞면 확률이 0.5인 동전과 0.8인 동전이다. KL 발산(두 분포가 얼마나 다른지 한 방향으로 재는 양)으로 재면 0.5 동전에서 0.8 동전 쪽으로는 0.223, 거꾸로 재면 0.193이 나온다. 어느 쪽에서 재느냐에 따라 값이 다르다. 기호로 쓰면 DKL(p∥q)=DKL(q∥p)다. 세로 두 줄 앞에 적은 분포가 기준이어서, DKL(p∥q)는 "p에서 q 쪽으로 잰 값"으로 읽는다. 아래에서는 같은 양을 D(p∥q)로 줄여 적기도 한다.
동전을 하나 더 넣으면 더 이상한 일이 생긴다. 0.2 동전에서 0.8 동전으로 곧장 재면 0.832인데, 0.5 동전을 거쳐 가면 0.193 + 0.223 = 0.416이다. 돌아가는 길이 곧장 가는 길의 절반밖에 안 된다. 보통의 거리라면 돌아가는 길이 더 짧을 수 없다(삼각부등식). 거리라면 당연히 지킬 대칭성과 삼각부등식을 KL 발산은 둘 다 어긴다. 그렇다면 KL 발산을 "거리"라고 부를 수 있는가?
그런데 KL 발산은 거리의 자격이 없는데도 실제로는 거리보다 더 많이 쓰인다. 기계학습의 손실 함수로, 변분추론의 최적화 목표로, 강화학습에서 정책 사이의 차이를 재는 잣대로, 정보이론의 채널 용량 계산에 — KL 발산은 어디에나 있다. 거리의 조건을 어기는 것이 "결함"이 아니라 오히려 "특징"이라면?
더 근본적인 질문을 해 보자. 비대칭이 실제로 의미를 갖는 상황이 있는가? "p가 참인데 q로 근사하는 것"과 "q가 참인데 p로 근사하는 것"은 같은 일일까? 봉우리가 둘인 분포 p를 봉우리 하나짜리 정규분포 q로 근사한다고 하자. 봉우리 하나로는 두 봉우리를 다 맞출 수 없으니 어딘가에서는 틀려야 한다. 아무것도 없는 골짜기에 확률을 쏟는 틀림과 봉우리 하나를 통째로 놓치는 틀림 가운데 어느 쪽을 더 무겁게 볼 것인가? 발산을 어느 방향으로 재느냐가 이 선택을 정할까?
KL 발산: 방향이 있는 떨어짐
거리의 자격이 없는 양이 왜 이렇게 널리 쓰일까? 그 답을 찾으려면 먼저 이 양이 애초에 무엇을 재려고 만들어졌는지부터 알아야 한다.
역사: 솔로몬 쿨백 (Solomon Kullback, 1907–1994) & 리처드 라이블러 (Richard Leibler, 1914–2003)
KL 발산은 순수 수학이 아니라 암호를 깨는 일터에서 나왔다. 쿨백은 1930년대에 미국 육군 신호정보국(SIS)이 처음 뽑은 암호분석가 세 사람 가운데 하나였다. 제2차 세계대전 중이던 1942년 5월에는 영국 블레츨리 파크에 가서 영국이 독일의 에니그마 암호를 깨어 좋은 정보를 얻고 있는 것을 보았고, 돌아와서는 일본 암호를 다루는 부서를 이끌었다. 라이블러는 전쟁 뒤 국가안보국(NSA)에서 일하며 1949~1950년 소련 암호문을 푸는 작업(베노나 계획)에 새로운 공격법을 보탰다.
암호를 푸는 사람은 늘 같은 물음 앞에 선다. 가로챈 글 한 토막을 보고 "이것은 이 방식으로 만든 글인가, 저 방식으로 만든 글인가"를 가려야 하는데, 글자 하나하나는 약한 증거라서 그 증거를 모아 판정해야 한다. 1951년, 두 사람은 Annals of Mathematical Statistics에 "정보와 충분성에 관하여(On Information and Sufficiency)"라는 논문을 실어 이 물음을 일반적인 꼴로 적었다: 두 확률분포 p와 q가 주어졌을 때, 관측 데이터로 이 둘을 얼마나 잘 구별할 수 있는가?
그 답으로 제시된 것이 DKL(p∥q)=∑xp(x)logq(x)p(x)이다. 이 양은 "p가 참일 때 관측 하나가 q가 아닌 p를 지지하는 증거(로그 가능도비)의 평균"이다. 증거가 평균 이만큼씩 쌓인다는 말이 실제로 무엇을 뜻하는지는 아래 문제 1에서 동전을 던져 가며 센다.
두 사람도 이 양이 방향에 따라 다르다는 것을 알았다. 논문은 한 방향의 양을 "판별을 위한 평균 정보"라고 부르고, 두 방향을 더한 대칭인 양에 "발산(divergence)"이라는 이름을 붙였다(이 대칭인 합은 해럴드 제프리스가 1948년에 이미 썼다). 지금 KL 발산이라 부르는 한 방향의 양은 처음에는 발산이라는 이름조차 얻지 못한 셈이다. 쿨백은 1959년 책 『정보 이론과 통계(Information Theory and Statistics)』에서 한 방향의 양을 "방향이 있는 발산(directed divergence)"이라고도 불렀다. "p가 참인데 q라고 착각하는 것"과 "q가 참인데 p라고 착각하는 것"은 질적으로 다른 실수이고, 이 장은 그 차이가 어디서 쓸모를 갖는지 따라간다.
식으로 적은 KL 발산
KL 발산을 식으로 다시 적어 두자. 이산 분포라면 다음과 같고, 연속 분포라면 합이 적분으로 바뀐다.
이 양을 KL 발산 (방향 있는 떨어짐 / Kullback–Leibler Divergence)이라 부른다. 합의 모든 항에 p가 곱해져 있다는 점이 비대칭의 뿌리다. p가 큰 곳에서 q가 작으면 큰 벌점이 붙지만, q가 큰 곳에서 p가 작으면 그 칸은 합에 거의 들어가지 않는다.
아래 그림은 정규분포 한 쌍 p=N(0,1), q=N(1,22)로 두 방향을 나란히 그린 것이다. 갈색 곡선 아래 넓이가 발산 값이다. (가)에서는 곱하는 쪽이 p라서 p가 거의 없는 오른쪽 꼬리는 셈에 거의 들어가지 않는다. (나)에서는 곱하는 쪽이 q로 바뀌어, p가 거의 없는데 q는 아직 큰 오른쪽 꼬리가 크게 쌓인다.
같은 두 정규분포 p = N(0, 1)(실선)과 q = N(1, 2²)(점선)로 잰 KL 발산의 두 방향. 갈색 곡선이 합(적분)에 들어가는 항이고 그 아래 넓이가 발산 값이다. (가) p를 앞에 두면 넓이 0.443, (나) q를 앞에 두면 p가 거의 없는 오른쪽 꼬리가 크게 쌓여 넓이 1.307
ML에서: 손실 함수 속의 KL
분류 모델을 학습시킬 때 쓰는 교차 엔트로피 손실 −Ep[logq](데이터 분포 p 아래에서 모델이 매긴 로그확률을 평균 내고 부호를 바꾼 값)도 KL 발산과 이어져 있다. 여기서 움직이는 것은 모델 매개변수가 정하는 분포 q다. 둘이 어떻게 이어지는지는 아래 문제 3에서 숫자로 확인한다.
방향을 거꾸로 쓰는 곳도 있다. InstructGPT(Ouyang 등, 2022)처럼 사람의 선호로 언어 모델을 미세조정하는 RLHF(사람의 피드백으로 하는 강화학습)에서는, 학습 중인 정책(문장을 내놓는 모델)이 처음 모델에서 너무 멀어지지 않도록 학습 중인 정책에서 뽑은 문장으로 잰 KL 발산을 보상에서 뺀다. 어느 쪽을 앞에 두느냐에 따라 모델이 받는 압력이 달라진다.
문제 1 — 깎은 동전인가
확인 친구가 동전 하나를 건네며 "앞면이 80% 나오게 깎은 동전"이라고 한다. 나는 보통 동전(앞면 50%)이라고 의심한다. 한 번 던질 때마다 "보통 동전이면 이 결과가 나올 확률 ÷ 깎은 동전이면 이 결과가 나올 확률"을 계산해 지금까지의 값에 곱해 간다. 앞면이면 0.5/0.8 = 0.625를, 뒷면이면 0.5/0.2 = 2.5를 곱한다. (가) 동전이 실제로 보통 동전이면, 이 곱은 한 번 던질 때마다 평균 몇 배씩 커지는가? 곱이 100배가 되려면 대략 몇 번 던져야 하는가? (나) 동전이 실제로 깎은 동전이면, 거꾸로 깎은 동전 쪽을 100배 지지하기까지 대략 몇 번 던져야 하는가?
0.625×2.5=1.5625… 두 번 던져서 1.56배예요. 한 번에 1.56배가 아니라 두 번에 1.56배네요. 곱해 가는 걸 더하기 평균으로 냈어요.
이서연
곱은 로그를 씌우면 합이 되니까 평균도 로그로 내야 해. 한 번에 0.5log0.625+0.5log2.5≈0.223, 곧 e0.223=1.25배씩이야. log100≈4.61이니까 4.61/0.223≈21번. (나)는 깎은 동전이 참이니까 평균을 0.8과 0.2로 내야지. 0.8log1.6+0.2log0.4≈0.193이라 4.61/0.193≈24번. 같은 두 동전인데 세 번 더 걸리네.
선생님
0.223과 0.193, 어디서 본 숫자죠?
이서연
출발 문제의 두 KL 값이에요. KL 발산이 한 번 관측할 때 쌓이는 증거의 평균이었구나. 어느 쪽이 참이냐에 따라 평균을 내는 확률이 달라서 두 방향의 값이 다른 거고요.
문제 2 — 동전 두 개의 KL
확인 앞면 확률이 0.5인 동전 p=Bern(0.5)와 0.9인 동전 q=Bern(0.9)에 대해 D(p∥q)와 D(q∥p)를 자연로그로 계산하라. 계산 도중 음수인 항이 나오면 그것이 무엇을 뜻하는지도 설명하라.
같이 풀기 세션 2
김민준
numpy로 바로 했어요. D(p∥q)=0.5log0.90.5+0.5log0.10.5≈0.511이고, D(q∥p)=0.9log1.8+0.1log0.2≈0.368이에요. 역시 비대칭이네요.
이서연
잠깐, 두 번째 항 0.1log0.2가 −0.161이야. 첫 번째 식에서도 0.5log0.90.5가 음수고. 발산은 0 이상이어야 하잖아. 음수가 섞이면 어디가 틀린 거 아닐까?
선생님
좋은 의심이에요. 발산이 0 이상이라는 건 어디에 대한 약속이죠? 항 하나하나예요, 합 전체예요?
이서연
합 전체요. 아, logqp는 p<q인 칸에서 당연히 음수가 되는구나. 확률의 합이 둘 다 1이니까 어떤 칸에서 p가 더 크면 다른 칸에선 반드시 q가 더 커야 하고, 그러니 음수 항은 피할 수가 없네.
선생님
그래도 합이 0 이상인 이유는 log가 오목함수라서예요. 젠센 부등식으로 −D(p∥q)=∑plogpq≤log∑ppq=log1=0이 되죠.
이서연
해석학 시간에 적분값이 양수라고 적분하는 함수까지 어디서나 양수인 건 아니라고 몇 번이나 들었는데, 합으로 바뀌니까 또 헷갈렸어요.
문제 3 — 정답 모델의 손실은 왜 0이 아닌가
계산 앞면과 뒷면이 반반인 동전 던지기 기록(데이터 분포 p=Bern(0.5))으로 앞면 확률 하나를 내놓는 모델을 학습시킨다. 모델 A는 q=Bern(0.8), 모델 B는 q=Bern(0.6)을 내놓는다. (가) 두 모델의 교차 엔트로피 손실 −Ep[logq]와 KL 발산 D(p∥q)를 자연로그로 구하라. (나) 손실이 가장 작은 모델은 무엇이고, 그때 손실은 얼마인가?