KL은 비대칭이라 '진짜 거리’로 쓸 수 없다고 했다. 그런데 아주 가까운 두 분포 사이에서는 대칭이 된다면? 그 '찰나의 대칭’은 도대체 무엇일까?
다시 한국 남성의 키 분포로 돌아가자. (174, 5.8)과 (174.01, 5.801). 거의 같은 분포다. 이 두 점 사이에서 KL(p‖q)를 재면 1.5155 × 10⁻⁶, KL(q‖p)를 재면 1.5161 × 10⁻⁶이다. 두 값은 0.03%밖에 다르지 않다. N(0, 2²)와 N(0, 1²)처럼 멀리 떨어진 두 분포에서는 두 방향이 2.5배나 달랐는데, 가까워지니 비대칭이 거의 사라졌다.
최솟값 근처는 언제나 포물선
한쪽 벽은 가파르고 다른 쪽 벽은 완만해서 전체가 비대칭인 그릇이 있다. 그러나 바닥에 구슬을 놓고 아주 조금만 흔들면, 구슬이 느끼는 바닥은 좌우가 똑같은 포물선이다. 매끄러운 함수는 최솟값 근처에서 언제나 이차식처럼 보이기 때문이다.
q를 움직이며 KL(p‖q)를 재면, q = p에서 최솟값 0을 갖는 곡선(분포의 파라미터가 여럿이면 곡면)이 생긴다. 멀리서 보면 좌우가 비대칭으로 찌그러져 있지만, 최솟값 q = p 근처는 대칭인 포물면이다. 그 포물면이 얼마나 가파르게 오므라드는지, 곧 KL을 두 번 미분한 값이 피셔 정보다.
앞면 확률 0.3인 동전을 현실 p 로 두고, 모델 q 의 앞면 확률을 0 에서 1 까지 움직이며 잰 KL(p‖q)(분홍 실선)과, 최솟값 자리 q = 0.3 에 맞춘 포물선 ½·I·(q − 0.3)²(청록 점선). 멀리서는 두 벽의 기울기가 다르고 포물선과도 어긋나지만, q = 0.3 근처에서는 두 곡선이 포개진다. 포물선의 오므라든 정도 I 가 피셔 정보다
동전 하나로 먼저: 베르누이 분포의 피셔 정보
가장 간단한 경우부터 보자. 앞면이 나올 확률이 θ인 동전을 한 번 던지는 분포를 베르누이 분포라고 하는데, 이 분포는 파라미터(분포를 정하는 숫자)가 θ 하나뿐이다. 앞면 확률을 흔히 쓰는 p 대신 θ 로 적는 것은, 이 책에서 p 는 분포 전체(현실)를 가리키고 분포를 정하는 숫자는 θ 로 적기 때문이다. 글자만 다르고 뜻은 앞면 확률이다. 현실을 θ, 모델을 θ + dθ로 두면
이다. dθ로 한 번 미분하면 −θ/(θ+dθ) + (1−θ)/(1−θ−dθ)라서 dθ = 0에서 0이 된다. KL이 최솟값 0을 갖는 자리라 미분값이 0이다. 한 번 더 미분하면 θ/(θ+dθ)² + (1−θ)/(1−θ−dθ)²라서 dθ = 0에서 1/θ + 1/(1−θ)이다. 테일러 전개로 쓰면 KL ≈ ½ × (1/θ + 1/(1−θ)) × dθ²이고, 1/θ + 1/(1−θ)가 베르누이 분포의 피셔 정보다.
I(θ)=θ(1−θ)1
Iθ베르누이분포의피셔정보성공확률
θ가 0이나 1에 가까우면 분모가 작아져 I가 커진다는 것은, 거의 확신에 찬 분포 근처에서는 θ를 조금만 움직여도 KL이 크게 변한다는 뜻이다. 지금은 피셔 정보를 "아주 가까운 두 분포 사이의 KL을 이차식으로 근사할 때의 계수"로 기억해 두자. 아래 파이썬은 θ = 0.3에서 움직이는 크기 ε를 줄여 가며, 두 방향의 KL과 ½Iε²을 비교한다.
가운데 식의 dθᵀ에서 ᵀ(전치)는 세로로 세운 dθ를 가로로 눕힌다는 표시다. 풀어 쓰면 오른쪽의 합이고, 파라미터가 하나뿐이면 ½Idθ²으로, 곧 앞의 동전 식으로 돌아온다. 여기서 pθ가 현실 자리, pθ+dθ가 모델 자리다.
KL은 dθ의 제곱에 비례해서 0으로 간다. 1차 항이 없는 이유는 모델이 현실과 같을 때(dθ = 0) KL이 가장 작은 값 0을 갖고, 최솟값 자리에서는 미분값이 0이기 때문이다. 두 자리를 바꿔서 잰 KL도 같은 이차식으로 가므로, 두 방향의 차이는 KL 자체보다 빨리 사라진다.
직접 움직여 보기
불러오는 중…
ML에서: 같은 스텝, 다른 변화
스팸인지 아닌지를 가리는 모델의 출력은 결국 동전 하나, 곧 「스팸일 확률 θ」다. 학습의 한 스텝이 θ를 dθ만큼 옮기면, 분포는 ½I(θ)dθ²만큼 바뀌는데, 같은 dθ라도 I가 곳마다 다르니 분포가 움직이는 크기도 곳마다 다르다. 그런데 모델이 실제로 옮기는 것은 θ가 아니라 그 앞의 로짓(시그모이드에 넣기 전의 점수)이다. 로짓으로 걸으면 어떻게 되는지는 아래 문제 9에서 따져 본다.
이 절의 결론
“아주 가까운 두 분포 사이의 KL 발산은 대칭인 이차식 ½ dθᵀ I dθ로 근사되고, 그 이차식을 만드는 행렬이 피셔 정보 행렬 I다.”
그런데 우리는 아직 두 점 사이를 "걸어가는 방법"을 모른다. 거리를 재는 일은 두 분포에 숫자 하나를 매기는 것이고, 걷는 일은 두 분포 사이에 늘어선 분포들을 하나씩 지나가는 것이다. 같은 두 분포를 잇는 길이 여럿이라면?
문제 8. KL은 삼각부등식을 깨는가 (킬러)
베르누이 분포 세 개 a = 0.1, b = 0.5, c = 0.9를 생각한다. (가) KL(a‖c)와 KL(a‖b) + KL(b‖c)를 비교해 KL이 삼각부등식을 깨는지 확인하라. (나) 그렇다면 KL은 거리로서 쓸모없는가? 유클리드 거리의 제곱과 비교해서 답하라. (다) θ = 0.5에서 KL(θ‖θ+ε) − KL(θ+ε‖θ)가 ε의 몇 제곱으로 줄어드는지 보이고, 위 파이썬의 θ = 0.3일 때와 비교하라. (위 위젯의 θ 슬라이더를 0.5에 두고 아래 그래프로 확인할 수도 있다.)
앞면 확률이 a = 0.1, b = 0.5, c = 0.9인 세 동전. 아래 화살표는 a에서 c로 곧장 잰 KL, 위의 두 화살표는 b를 거쳐 잰 두 KL이다
함께 풀기
김민준
(가)는 쉬워요. KL(a‖c)가 1.758이고, KL(a‖b) + KL(b‖c)가 0.368 + 0.511 = 0.879예요. 돌아가는 게 두 배나 짧아요. 삼각부등식 깨졌고요, 그러니까 (나)의 답은 "KL은 거리로는 못 쓴다"예요.
선생님
서연 학생도 같은 생각이에요?
이서연
잠깐만요. 깨지는 건 맞는데… 그러면 이 장 절반이 쓸모없는 KL을 쓴 거잖아요. 뭔가 이상해요. 저는 처음에 로그의 볼록성으로 삼각부등식을 증명하려고 했는데 안 되더라고요. 안 되는 게 당연했던 거죠.
이서연
아니면 방향이 문제일지도 몰라요. 두 방향을 더해서 대칭으로 만들면 삼각부등식이 살아나지 않을까요?
선생님
해 봐요. a와 c는 0.5를 사이에 둔 거울상이라 계산이 쉬울 거예요.
김민준
대칭으로 만들면 a–c가 1.758 × 2 = 3.516이고, a–b랑 b–c가 둘 다 0.368 + 0.511 = 0.879예요. 돌아가도 1.758이라 여전히 절반이에요.
이서연
대칭으로 만들어도 안 되네요. 그럼 원인은 방향이 아니라 다른 데 있어요.
선생님
좋은 의심이에요. 수직선 위의 점 1, 2, 3을 생각해 봐요. 유클리드 거리의 제곱으로 재면 1에서 3까지가 얼마예요?
이서연
4요. 1에서 2가 1, 2에서 3이 1이니까 돌아가면 2고요.
이서연
…제곱 거리도 삼각부등식을 깨요. KL은 두 분포가 아주 가까우면 ½ dθᵀ I dθ, 그러니까 제곱 거리처럼 생겼잖아요. 제곱 거리가 삼각부등식을 깨는 건 제곱이라서 생기는 일이에요.
선생님
그래요. KL은 "거리"보다 "거리의 제곱의 절반"에 가까운 물건이에요. 제곱 거리가 쓸모없지 않듯 KL도 쓸모없지 않아요. 최소제곱법이 제곱 거리로 세상을 다 굴리잖아요.
김민준
그럼 (다)는요? 저 ε을 1e-9까지 줄여서 찍어 봤는데, KL(θ‖θ+ε)가 −2.0e-18이 나왔어요. KL은 음수가 될 수 없잖아요? 차이도 −4.0e-18이고요. 줄어드는 차수를 모르겠어요.
선생님
KL(θ‖θ+ε)의 진짜 값은 ε = 1e-9에서 얼마쯤이어야 해요?
이서연
½ I ε²이니까 θ = 0.5면 I가 4라서… 2e-18이요.
김민준
그런데 제 코드는 음수가 나왔으니까… 값 자체가 틀렸네요. 로그 두 개를 빼는 과정에서 부동소수점 오차가 1e-16 근처에 깔려 있는데 진짜 값이 그 아래에 있어요.
선생님
그래서 ε은 1e-1, 1e-2, 1e-3 정도로 봐야 해요. 그 범위에서 다시 찍어 봐요.
김민준
차이가 2.8e-4, 2.7e-8, 2.7e-12예요. ε을 열 배 줄이면 만 배 줄어요.
김민준
네제곱이다! 어, 그런데 위 파이썬의 θ = 0.3에서는 두 KL의 비가 1에 열 배씩 다가갔잖아요. KL 자체가 제곱으로 주니까 차이는 세제곱으로 준 거고요. 왜 0.5에서만 한 차수가 더 빨라요?
이서연
θ = 0.5는 앞면과 뒷면을 바꿔도 같은 동전이에요. 그래서 ε만큼 올린 쪽과 ε만큼 내린 쪽의 KL이 같고, 두 방향의 차이는 ε의 짝수 함수가 돼요. 짝수 함수에는 세제곱 항이 있을 수 없어요. 테일러 전개로 보면 차이의 세제곱 항 계수가 (2θ − 1)에 비례해서, θ = 0.3에서는 살아 있고 0.5에서는 딱 0이에요.
선생님
둘 다 같은 결론에 다른 길로 왔네요. 민준 학생은 숫자가 거짓말하는 구간을 피해서, 서연 학생은 대칭을 따라서. 이 장에서 가져갈 건 세 가지예요. KL은 방향이 있다. KL은 거리보다 제곱 거리를 닮았다. 그리고 아주 가까이에서는 그 제곱 거리가 피셔 정보라는 행렬로 쓰인다.
이서연
수학 수업에서 "노름에서 나온 거리"와 "내적에서 나온 제곱 노름"을 구분하라고 그렇게 강조했던 이유를 이제 알겠어요. 둘은 쓰임새가 다르고, 둘 다 필요해요.
문제 9. 로짓으로 걸으면
스팸 분류기는 로짓 z를 내고, 스팸일 확률은 θ = 1/(1 + e−z)이고, 학습의 한 스텝은 z를 0.1 옮긴다. (가) z = 0(θ = 0.5)에서 z = 0.1로 갈 때와 z = 4(θ ≈ 0.982)에서 z = 4.1로 갈 때, 각각 θ는 얼마나 움직이고 스텝 전후 두 베르누이 분포의 KL은 얼마인가? (나) 본문은 "θ가 0이나 1에 가까우면 θ를 조금만 움직여도 KL이 크게 변한다"고 했다. (가)의 결과와 맞는가? (다) 같은 학습률로 걸어도 분포가 움직이는 크기가 곳마다 다르다면, 스텝의 크기는 무엇으로 재야 하는가?
시그모이드 θ = 1/(1 + e^(−z))와 로짓 스텝 두 개: z = 0 → 0.1, z = 4 → 4.1
함께 풀기
김민준
본문대로면 θ가 1에 가까운 z = 4 쪽이 KL이 크겠죠. 돌려 봤는데… z = 0에서는 θ가 0.5에서 0.525로 가고 KL이 1.25 × 10⁻³, z = 4에서는 0.982에서 0.984로 가고 KL이 8.6 × 10⁻⁵예요. 오히려 z = 4 쪽이 열네 배쯤 작아요.
선생님
두 곳에서 θ는 얼마나 움직였어요?
김민준
z = 0에서는 0.025, z = 4에서는 0.0017이요. 같은 0.1을 걸었는데 θ가 움직인 양이 열다섯 배 가까이 달라요.
이서연
시그모이드가 z = 4에서는 거의 평평하니까요. dθ/dz = θ(1 − θ)라서 z = 4에서는 0.018밖에 안 돼요.
선생님
그 기울기를 본문의 KL ≈ ½ I dθ²에 넣어 보면요? dθ = θ(1 − θ) dz로요.
이서연
½ × 1/(θ(1 − θ)) × (θ(1 − θ) dz)²… 하나가 약분되니까 ½ θ(1 − θ) dz²예요.
이서연
어, 로짓으로 재니까 피셔 정보가 θ(1 − θ)로 뒤집혔어요.
선생님
그러면 본문의 말이 틀린 거예요?
이서연
아니요. 본문은 θ를 dθ만큼 움직일 때의 이야기예요. 확신에 찬 곳에서는 θ를 조금 움직이는 일 자체가 큰 변화라서, 로짓을 한참 밀어야 겨우 그만큼 움직여요. 무엇을 좌표로 쓰느냐에 따라 "같은 스텝"의 뜻이 달라지는 거예요.
선생님
(다)는요?
김민준
같은 한 스텝 0.1이 z = 0에서는 KL 1.25 × 10⁻³만큼이고 z = 4에서는 그 열네 분의 일이에요. 로짓 0.1이 곳마다 다른 크기의 스텝인 거네요.
선생님
그러면 스텝의 크기를 무엇으로 재야 곳마다 같은 뜻이 될까요?
김민준
분포가 실제로 얼마나 바뀌었는지로요. KL로 재야겠네요.
선생님
그래요. KL로 잰 스텝을 곳마다 고르게 맞추려면 피셔 정보로 스텝을 보정하면 돼요. 그 생각에는 자연 그래디언트라는 이름이 붙어 있어요.
이서연
키를 인치로 바꿔도 KL은 그대로였는데, 피셔 정보는 좌표를 θ에서 z로 바꾸니 달라지네요. KL은 두 분포 사이의 값이라 좌표와 상관없고, 피셔 정보는 좌표 한 칸이 KL로 얼마인지를 재는 값이라 좌표를 따라 바뀌는 거예요. 치환적분에서 dx = g′(u) du의 g′(u)가 따라붙던 것과 같아요.
김민준
조교님이 "과목마다 한 시간씩 공부해라"고 해도 과목마다 한 시간에 오르는 점수가 다른 거랑 같네요. 시간 말고 오른 점수로 계획을 짜야죠.