두 방향 u, v의 피셔 내적은 Σ u(x) v(x) / q(x)이다. u = p − qm, v = ∂iq를 넣으면 직교 조건 식 Σ (p − qm) ∂i log q = 0이 된다. 「최소점이다」와 「p에서 온 m-측지선이 모델과 피셔 직교한다」는 같은 말이다. 유클리드 직교가 아니다. 심플렉스(결과가 셋인 분포를 점으로 찍는 삼각형) 그림 위에서 눈으로 보면 비스듬하다.
m과 e를 바꾸고 KL의 두 인자 순서도 바꾼 쌍대 쪽에서도 같은 말이 성립한다. qe가 KL(q‖p)의 그래디언트가 0인 점(정류점)이면, p와 qe를 잇는 e-측지선이 모델과 피셔 직교한다.
언제 하나인가
직교 조건을 만족하는 점이 하나뿐이라는 보장은 모델의 모양에 달려 있다.
m-사영은 모델이 e-평탄할 때(지수족처럼 자연 파라미터 θ 좌표에서 평평할 때) 유일하다.
e-사영은 모델이 m-평탄할 때(혼합족, 곧 성분을 고정하고 비중만 바꾼 혼합들의 모임처럼 기댓값 파라미터 η 좌표에서 평평할 때) 유일하다.
정규분포족은 e-평탄해서 m-사영(모멘트 일치)은 늘 하나였지만, m-평탄하지는 않아서 e-사영에는 하나뿐이라는 보장이 없다. 폭이 1인 두 봉우리를 간격 5로 반반 섞은 분포를 정규분포 하나에 맞추면, e-사영의 후보가 가운데 하나와 봉우리 쪽 둘, 모두 셋이었다. 아래 그림은 같은 분포에서 두 KL을 정규분포의 평균 μ의 함수로 그린 것이다(표준편차 σ는 μ마다 가장 좋은 값으로 고른다). KL(p‖q) 곡선은 극소점이 하나뿐이고, KL(q‖p) 곡선은 극소점이 셋이다. 직교 조건은 「그 점에서 그래디언트가 0」이라는 조건이므로, 극소점이 여럿이면 직교하는 점도 여럿이다.
폭 1, 간격 5인 두 봉우리 분포를 정규분포 하나에 맞출 때의 두 KL. 위: KL(p‖q)는 평균 μ = 0에 극소점이 하나다. 아래: KL(q‖p)는 μ = 0과 μ = ±2.4 근처에 극소점이 셋이다(σ는 μ마다 가장 좋게 골랐다)
사영의 이름과 모델의 평탄함이 엇갈려야 유일하다는 것, 이것이 쌍대 구조가 일하는 방식이다.
첫 줄을 읽어 보자. 현실 p에서 모델 위의 아무 점 r까지의 KL은 「p에서 사영점까지」와 「사영점에서 r까지」의 합이다. 직각삼각형의 빗변이 두 변으로 나뉘듯이. KL의 두 인자 자리에 무엇을 넣느냐가 중요한데, p는 언제나 첫 인자, r은 언제나 둘째 인자다. 순서를 바꾸면 등식이 깨진다(아래 문제 6).
첫 줄의 등식 KL(p‖r) = KL(p‖qm) + KL(qm‖r)에서 두 가지가 바로 나온다. KL(qm‖r) ≥ 0이므로 qm이 정말로 최소점이다. 그리고 r이 사영점에서 멀어질수록 얼마나 손해인지가 정확히 KL(qm‖r)이다. EM 알고리즘(기댓값 계산 Expectation과 최대화 Maximization을 번갈아 하는 알고리즘)은 이 분해를 한 스텝마다 쓴다.
직접 움직여 보기
불러오는 중…
파이썬
import numpy as np
def q(th): # 모델 M: 이항분포 B(2, θ) — 지수족, e-평탄
return np.array([(1 - th)**2, 2 * th * (1 - th), th**2])
def dq(th): # 모델 곡선의 접벡터(곡선을 따라가는 방향) dq/dθ
return np.array([-2 * (1 - th), 2 - 4 * th, 2 * th])
def kl(a, b):
return np.sum(a * np.log(a / b))
p = np.array([0.6, 0.1, 0.3]) # 모델 밖의 현실
th_m = (p @ [0, 1, 2]) / 2 # m-사영점 = 평균 k 를 맞춘 θ
q_m = q(th_m)
u = p - q_m # p 에서 q_m 으로 가는 m-측지선의 방향
print(f"θ_m = {th_m:.3f} q_m = {np.round(q_m, 4)}")
print(f"유클리드 내적 {u @ dq(th_m):+.4f} 피셔 내적 {np.sum(u * dq(th_m) / q_m):+.1e}")
for th_r in [0.1, 0.7, 0.9]:
r = q(th_r)
lhs, rhs = kl(p, r), kl(p, q_m) + kl(q_m, r)
print(f"r=B(2,{th_r}): KL(p‖r) {lhs:.6f} KL(p‖q_m)+KL(q_m‖r) {rhs:.6f} 잔차 {lhs - rhs:+.1e}")
# θ_m = 0.350 q_m = [0.4225 0.455 0.1225]
# 유클리드 내적 -0.3195 피셔 내적 +0.0e+00
# r=B(2,0.1): KL(p‖r) 0.781518 KL(p‖q_m)+KL(q_m‖r) 0.781518 잔차 +1.1e-16
# r=B(2,0.7): KL(p‖r) 0.847577 KL(p‖q_m)+KL(q_m‖r) 0.847577 잔차 +0.0e+00
# r=B(2,0.9): KL(p‖r) 2.099853 KL(p‖q_m)+KL(q_m‖r) 2.099853 잔차 +0.0e+00
유클리드 내적으로는 직교하지 않고(−0.32), 피셔 내적으로는 0이 되어 직교한다. 피타고라스의 잔차는 부동소수점 오차 수준인 10−16 크기다.
이 절의 결론
「m-사영점 qm에서는 p와 qm을 잇는 m-측지선이 모델과 피셔 직교한다. 그래서 KL(p‖r)이 피타고라스처럼 KL(p‖qm) + KL(qm‖r)로 나뉜다.」
인물 이야기: Imre Csiszár와 「발산의 통일」
임레 치사르(Imre Csiszár)
1960년대 초, 부다페스트. 헝가리 과학원 수학연구소에 막 들어온 젊은 수학자 임레 치사르(Imre Csiszár)는 정보이론과 확률론의 경계에서 일하고 있었다. 연구소를 세우고 이끌던 알프레드 레니(Alfréd Rényi)는 1961년 논문 「엔트로피와 정보의 척도에 대하여」에서 이미 비슷한 양을 다룬 적이 있었다.
그가 마주한 물음은 이랬다. KL 발산, χ²(카이제곱) 발산, 헬링거 거리처럼 분포 사이의 「다름」을 재는 양이 여러 개인데, 이 양들 사이에 체계가 있는가? 아니면 각각이 별개의 발명인가?
1963년, 치사르는 마르코프 체인의 에르고딕성(오래 돌리면 모든 상태를 고르게 지나는 성질)을 증명하는 논문에서 이 양들을 하나의 가족, f-발산(f-divergence)으로 묶었다. 볼록함수 f 하나를 고르면 발산 하나가 정해진다. f(x) = x log x이면 KL, f(x) = (x−1)²이면 χ², f(x) = (√x − 1)²이면 헬링거(의 제곱)다.
f-발산 가족: 볼록함수 x log x, (x − 1)², (√x − 1)²는 모두 x = 1에서 0이 되고, 같은 두 분포 p = (0.2, 0.2, 0.6), r = (1/3, 1/3, 1/3)에 넣으면 KL 0.148, χ² 0.320, 헬링거 제곱 0.073이라는 서로 다른 발산 값을 낸다(직접 그림, 값은 sources/11-추론의 기하학/fig_fdiv_family.py 로 계산)
같은 1963년, 일본의 물리학자 모리모토 데쓰조(Tetsuzo Morimoto)가 마르코프 과정과 H-정리(엔트로피가 시간이 갈수록 늘어난다는 볼츠만의 정리)를 다루며 같은 꼴에 닿았다. 1966년에는 알리(S. M. Ali)와 실비(S. D. Silvey)가 영국 왕립통계학회지에 같은 가족을 통계학의 언어로 정리했고, 그래서 이 발산은 치사르–모리모토 발산, 알리–실비 거리라고도 불린다. 문제가 무르익으면 다른 곳에서 같은 답이 나온다.
치사르의 기여는 거기서 멈추지 않았다. 1975년 논문에서 그는 KL 발산(그의 말로는 I-발산, I-divergence)이 유클리드 거리의 제곱 노릇을 하는 기하학을 썼다. 볼록 집합 위로 분포를 사영하는 문제, 그 사영점이 있는지와 어떤 모양인지, 그리고 사영점에서 성립하는 피타고라스형 관계. 이 절의 사영과 피타고라스가 서 있는 기초 가운데 하나다. 1984년에는 가보르 투슈나디(Gábor Tusnády)와 함께, 두 집합 사이를 번갈아 최소화하는 절차를 같은 기하학으로 분석했다.
그가 놓은 기초, 곧 f-발산과 I-사영(KL 발산을 최소로 하는 사영)은 아마리(Amari)의 쌍대 구조와 만나 사영과 교대 최소화의 기하학을 꿰뚫는 뼈대가 되었다.
김민준
위 파이썬에서는 이항분포 모델 위에서 KL(p‖r)이 두 KL의 합과 잔차 10−16까지 맞았잖아요. 숫자 셋을 넣고 돌리면 끝나는 일인데, 1975년에 논문으로 쓸 만한 일이었어요?
선생님
그 코드의 p는 결과가 셋뿐인 분포였어요. 치사르가 다룬 건 결과가 실수 전체에 퍼진 분포까지 들어가는 일반적인 경우였고, 거기서 사영점을 고르는 건 숫자 셋이 아니라 끝없이 많은 숫자를 한꺼번에 고르는 일이에요. 그러면 무엇부터 걱정해야 할까요?
이서연
음, 유클리드 공간에서는 닫힌 볼록 집합 위로 내린 정사영이 늘 있고 하나뿐이라고 배웠어요. 그 증명에서 내적이랑 삼각부등식을 썼던 것 같은데요.
선생님
그 두 가지가 KL에는 있어요?
이서연
없어요. KL은 두 인자를 바꾸면 값이 달라지고, 삼각부등식도 안 돼요. 그럼 가장 가까운 점이 있기는 한지부터 따로 증명해야 했겠네요. 상자에 「사영점이 있는지」가 물음으로 적혀 있던 게 그래서고요.
선생님
하나 더 있어요. 이 절에서는 사영점의 직각을 피셔 계량으로 재고, 그 직각을 m과 e 두 접속의 쌍대 구조로 읽었죠. 그 쌍대 구조의 말은 1980년대 아마리의 작업에서 자리 잡았어요. 1975년의 치사르는 그 말 없이 KL과 볼록 집합만 가지고 피타고라스형 관계를 세운 거예요.
김민준
그럼 결과가 셋뿐인 이항분포 모델에서는 사영점이 있는지 걱정할 필요는 없겠네요. 그래도 삼각부등식도 없는 KL이 위 코드에서 딱 두 조각으로 나뉜 건, 모델의 어떤 모양 덕분이었을까요?
문제 6. 피타고라스를 증명하라 (킬러)
모델 M은 이항분포족 B(2, θ)이고, p = (0.2, 0.2, 0.6)이다. (가) m-사영점 qm을 구하고, r = B(2, 0.4)에 대해 KL(p‖r) = KL(p‖qm) + KL(qm‖r)를 수치로 확인하라. (나) 세 KL의 두 인자 순서를 모두 뒤집은 등식 KL(r‖p) = KL(r‖qm) + KL(qm‖p)도 성립하는가? (다) 모델이 지수족 pθ(x) = exp(θ·t(x) − F(θ))일 때(F는 합이 1이 되게 맞추는 로그정규화자) (가)의 등식을 증명하라. (위 위젯의 「문제 6의 p」 단추로 이 p와 r을 불러올 수 있다.)
심플렉스 위의 모델 곡선 B(2, θ)와, 모델 밖의 p = (0.2, 0.2, 0.6), 모델 위의 r = B(2, 0.4). 찾을 m-사영점 qₘ은 그리지 않았다
Σ(p − qm) = 0 때문에 사라져요. 남는 건 (θm − θr)·(Ep[t] − Eqm[t])예요.
이서연
그리고 qm은 모멘트 일치점이니까 Ep[t] = Eqm[t]. 뒤 괄호가 0이에요. 끝이에요. θ의 차이와 η의 차이가 곱해지는데, η 쪽이 0이라서 사라지는 거예요.
김민준
숫자로 보면 θm − θr = 0.847 − (−0.405) = 1.253이고, 평균 k는 p도 qm도 1.4예요. 곱이 0이에요.
선생님
그 증명에서 「직교」는 어디 있었어요?
이서연
θ의 차이와 η의 차이의 곱이 0이라는 것, 그게 직교예요. θ의 차이는 e-측지선을 따라 재고, η의 차이는 m-측지선을 따라 재요. 유클리드 직교가 아니라 두 좌표를 짝지은 직교예요.
선생님
두 사람 다 한 번씩 그림에 속았어요. 민준 학생은 KL이 대칭인 것처럼 인자 순서를 바꿨고, 서연 학생은 심플렉스 그림의 직각을 유클리드 직각으로 읽었어요. 가져갈 것은 셋이에요. 피타고라스는 사영의 방향과 KL 인자의 순서가 맞을 때만 성립한다. 직교는 피셔 계량으로 잰다. 그리고 지수족에서는 그 직교가 θ의 차이와 η의 차이의 곱으로 쓰인다.
이서연
선형대수에서 쌍대 기저를 배울 때, 한 기저로 잰 좌표와 다른 기저로 잰 좌표를 곱해야 내적이 된다는 게 이해가 안 됐는데요. 이게 그거였네요. θ와 η가 서로의 쌍대 기저예요.
풀어 본 뒤 위젯에서 확인 → 위 심플렉스 사영 위젯의 「문제 6의 p와 r」 단추
문제 7. loss의 차이는 데이터 없이 잴 수 있는가
리뷰 100개에 긍정·중립·부정 라벨이 70, 10, 20개 붙어 있고, 로짓을 (w, 0, −w)로 묶은 분류기로 학습한다. 크로스 엔트로피 loss가 가장 작은 모델은 w* = 0.834, 그 확률은 q* = (0.616, 0.268, 0.116), loss는 0.901이다. (가) 학습을 시작하기 전의 모델 w = 0과, 너무 멀리 간 모델 w = 1.5의 loss를 구하고, 가장 좋은 모델과의 loss 차이를 두 모델 사이의 KL과 비교하라. (나) 이 loss 차이를 계산하는 데 데이터가 필요한가? (다) 로짓을 (w, −w², −w)로 바꾼 분류기에서도 (가)에서 찾은 관계가 성립하는가?
w 축 위의 세 모델: 학습 전 w = 0, 가장 좋은 w* = 0.834(확률 0.616, 0.268, 0.116, loss 0.901), 너무 멀리 간 w = 1.5. 양 끝 모델의 loss는 비워 두었다
함께 풀기
김민준
w = 0이면 세 확률이 다 1/3이라 loss는 ln 3 = 1.099, 차이는 0.197이에요. w = 1.5면 loss 0.991, 차이 0.090이고요.
이서연
모델 사이의 KL이면, 비교할 모델을 앞에 두고 KL(q0‖q*)겠지. 0.220이야. w = 1.5는 0.074. 차이랑 비슷은 한데 같지는 않네. 역시 loss 차이에는 데이터가 들어가니까 모델 둘만으로는 안 되는 거야.
선생님
사영의 피타고라스에서 세 KL의 인자 자리를 다시 봐요. 사영점은 어느 자리에 있었어요?
이서연
KL(p‖r) = KL(p‖qm) + KL(qm‖r)니까 사영점이 첫 인자예요. 제가 순서를 거꾸로 넣었어요.