추론의 기하학

두 가지 사영: 같은 분포, 두 개의 답

모형 위로 옮기는 「가장 가까운 점」은 KL의 방향에 따라 둘이었다. 현실 p를 앞 칸에 두면 m-사영, 뒤 칸에 두면 e-사영이다. 학습 방법을 고를 때마다 우리는 이 둘 가운데 하나를 고르는 셈이다. 같은 분포를 같은 모형에 맞추는데, 답이 왜 두 개인가? 그리고 둘은 얼마나 다른가?

봉우리 둘을 가우시안 하나로

하루 동안 도로를 지나는 차의 수를 시간별로 그리면 출근 시간과 퇴근 시간에 봉우리가 둘 선다. 이것을 가우시안 하나로 요약해야 한다고 하자. 두 봉우리를 다 덮는 넓은 가우시안은 차가 거의 없는 한낮에도 확률을 준다. 한 봉우리에 앉는 좁은 가우시안은 한낮을 피하지만 다른 봉우리를 통째로 잊는다. 현실(봉우리가 여럿인 분포)은 가우시안이 아니므로, 가우시안족 위에서 가장 가까운 점을 찾아야 한다. 이것이 사영이다. 그런데 「가장 가까운」을 KL의 어느 방향으로 재느냐에 따라 넓은 가우시안이 나올 수도, 좁은 가우시안이 나올 수도 있다.

폭 1인 두 봉우리를 간격 5로 섞은 p(분홍)를 가우시안 하나로 맞춘 두 결과: m-사영(빨간 점선)은 두 봉우리를 다 덮느라 넓어져 골짜기에도 확률을 주고, e-사영의 후보 하나(파랑)는 오른쪽 봉우리에 좁게 앉아 왼쪽 봉우리를 잊는다
폭 1인 두 봉우리를 간격 5로 섞은 p(분홍)를 가우시안 하나로 맞춘 두 결과: m-사영(빨간 점선)은 두 봉우리를 다 덮느라 넓어져 골짜기에도 확률을 주고, e-사영의 후보 하나(파랑)는 오른쪽 봉우리에 좁게 앉아 왼쪽 봉우리를 잊는다

p와 q의 역할

p는 현실(진짜 분포), q는 모형 위의 분포다. 두 사영은 무엇을 벌하느냐가 다르다.

m-사영 e-사영
줄이는 것 KL(p‖q) KL(q‖p)
누구의 눈으로 심판하나 현실 p 모형 q
벌이 큰 곳 p가 높은데 q가 낮은 곳 q가 높은데 p가 낮은 곳
q가 하려는 일 p의 봉우리를 빠짐없이 덮는다 p가 거의 0인 골짜기에 확률을 걸지 않는다
가우시안족에서의 답 평균과 분산을 맞춘 가우시안. 늘 하나 봉우리 사이의 거리에 달려 있다

m-사영의 결과는 q가 넓어지는 것, 곧 「빠뜨리지 않겠다」이다. e-사영은 얼마나 떨어진 봉우리냐에 따라 달라진다.

표준편차(폭)가 1인 봉우리 두 개를 간격 d로 반반 섞은 p를 생각하자. 간격이 좁으면 골짜기가 얕다. e-사영도 가운데에 걸친 가우시안 하나를 고른다. 간격을 벌리면 어느 순간 봉우리 하나에 앉는 좁은 가우시안이 국소해(그 둘레에서만 가장 좋은 답, local minimum)로 새로 생긴다.

e-사영의 후보는 하나가 아닐 수 있다. 어느 후보에 닿는지는 최적화의 출발점이 정한다.

직접 움직여 보기

불러오는 중…

파이썬

import numpy as np

x = np.linspace(-15, 15, 3001)
dx = x[1] - x[0]

def normal(m, s):
    return np.exp(-0.5 * ((x - m) / s)**2) / (s * np.sqrt(2 * np.pi))

def fits(d):
    p = 0.5 * normal(-d / 2, 1) + 0.5 * normal(d / 2, 1)     # 두 봉우리, 폭 1, 간격 d
    # m-사영: KL(p‖q) 최소 = 평균과 분산을 맞춘 가우시안
    m_sd = np.sqrt(np.sum(x**2 * p) * dx)
    # e-사영: KL(q‖p) 를 (μ, σ) 격자 위에서 전부 재고, 국소 최소를 모두 찾는다
    mus, sds = np.arange(-4, 4.001, 0.02), np.arange(0.5, 4.001, 0.02)
    logp = np.log(p)
    K = np.array([[np.sum((q := normal(m, s)) * (np.log(q + 1e-300) - logp)) * dx for s in sds] for m in mus])
    mins = [(mus[i], sds[j], K[i, j]) for i in range(1, len(mus) - 1) for j in range(1, len(sds) - 1)
            if K[i, j] == K[i - 1:i + 2, j - 1:j + 2].min()]
    return m_sd, mins

for d in [3, 5]:
    m_sd, mins = fits(d)
    sols = "  ".join(f"N({m:+.2f}, {s:.2f}²) KL {k:.3f}" for m, s, k in mins)
    print(f"간격 {d}:  m-사영 N(0, {m_sd:.2f}²)  |  e-사영 국소해  {sols}")
# 간격 3:  m-사영 N(0, 1.80²)  |  e-사영 국소해  N(+0.00, 1.72²) KL 0.074
# 간격 5:  m-사영 N(0, 2.69²)  |  e-사영 국소해  N(-2.38, 1.14²) KL 0.666  N(+0.00, 2.40²) KL 0.481  N(+2.38, 1.14²) KL 0.666

간격 3에서는 e-사영도 가운데에 앉는다. m-사영보다 조금 좁을 뿐이다. 간격 5에서는 KL(q‖p)의 기울기가 0인 바닥이 셋이다. 가운데 하나와 봉우리 쪽 둘. 그 가운데 KL이 가장 작은 것은 여전히 가운데(0.481)이고, 봉우리 쪽(0.666)은 그 둘레에서만 가장 좋은 국소해다. 봉우리 쪽에서 출발한 최적화는 그 국소해에 멈춘다. 그러니 「e-사영은 봉우리 하나를 고른다」는 흔한 말은 간격 5에서는 틀렸다. 간격을 더 벌리면 어떻게 되는지는 아래 문제에서 따진다.

수확

「어떻게 사영하느냐 = 어떤 종류의 추론을 하느냐. m-사영은 늘 하나이고, e-사영은 여럿일 수 있다.」

문제 4. 봉우리를 고르는 순간

표준편차(폭)가 1인 두 봉우리를 간격 d로 반반 섞은 p에 가우시안 q를 KL(q‖p)로 맞춘다. (가) d = 6에서 KL(q‖p)의 국소해를 모두 구하고, 어느 것이 e-사영(전역 최적)인지 가려라. (나) 봉우리 하나에 앉는 국소해가 처음 생기는 간격과, 그 해가 전역 최적이 되는 간격을 구하라. (위 위젯의 「문제 4 불러오기」 단추로 d = 6을 불러올 수 있다.)

함께 풀기

이서연 S01
이서연

간격 5에서도 가운데가 이겼잖아. 게다가 문제가 좌우 대칭이니까, 최적해가 유일하면 그 해도 대칭이어야 해. μ = 0. 간격이 6이어도 답은 가운데일 거야.

김민준 M01
김민준

저는 왼쪽 봉우리에서 출발해서 최적화했어요. N(−2.98, 1.02²), KL 0.689가 나왔어요. 봉우리 하나를 골랐으니 이게 e-사영이에요.

이서연 S01
이서연

간격 5 때처럼 그건 국소해겠지. 가운데에서 출발해 봐.

김민준 M05
김민준

N(0, 2.74²), KL 0.841이에요. …가운데가 더 커요. 이번에는 봉우리 쪽이 이겨요.

선생님 T01
선생님

서연 학생, 오른쪽 봉우리에서 출발하면요?

이서연 S05
이서연

N(+2.98, 1.02²), KL 0.689. 왼쪽 해와 똑같아요. 대칭인 문제인데 가운데가 최적이 아니에요.

선생님 T01
선생님

서연 학생의 논증에서 어느 가정이 깨졌어요?

이서연 S08
이서연

「최적해가 유일하면」이요. 해가 두 개면 대칭은 두 해를 서로 바꿔 줄 뿐이고, 각각은 대칭일 필요가 없어요. 대칭인 문제가 비대칭인 해 한 쌍을 가질 수 있어요.

선생님 T01
선생님

물리에서는 그걸 대칭 깨짐이라고 불러요. 민준 학생은 답은 맞았어요. 그게 답이라는 건 어떻게 알았어요?

김민준 M04
김민준

몰랐어요. 출발점 하나만 보고 끝냈는데 마침 그게 전역 최적이었던 거예요. 가운데 해와 견줘 보기 전에는 알 수 없었어요.

선생님 T01
선생님

그럼 (나)는요?

김민준 M01
김민준

이번에는 출발점을 셋 두고 d를 촘촘히 훑었어요. 약 4.8에서 봉우리 쪽 국소해가 처음 생기고, 약 5.6에서 가운데 해와 KL이 같아져요. 그 뒤로는 봉우리 해가 이겨요.

이서연 S01
이서연

가운데 해는 그 뒤에도 국소해로 남아 있고요. 그러니까 d = 6에는 해가 셋이에요.

김민준 M01
김민준

팀플에서 제가 처음 낸 안을 아무도 반박 안 해서 최선인 줄 알았는데, 다른 사람이 처음부터 다시 짜 보니 더 나은 게 있던 거랑 같네요.

이서연 S01
이서연

해석학에서 극값 판정할 때 「임계점을 전부 찾고 비교해라」던 게 이래서였네요. 대칭은 후보를 줄여 줄 뿐 답을 정해 주지 않아요.

문제 5. 장애물 앞의 두 갈래 시연

자율주행 시연 데이터에서, 길 한가운데 놓인 장애물 앞에서 운전자의 절반은 핸들을 왼쪽으로 20°, 절반은 오른쪽으로 20° 꺾었다. 꺾은 각도는 저마다 표준편차 5°로 흩어진다(설명을 위해 정한 숫자다). 정책 모델은 꺾을 각도를 가우시안 하나로 낸다. (가) 시연의 우도를 최대로 하는 정책, 곧 KL(p‖q)를 줄이는 정책을 구하라. 그 정책이 핸들을 ±5° 안으로만 꺾을(장애물로 곧장 갈) 확률을 시연 분포의 같은 확률과 견주어라. (나) 정책이 스스로 뽑은 각도를 시연 분포의 로그확률로 채점하고 엔트로피 보너스를 더한 값, 곧 𝔼q[log p] + H(q)를 키우는 학습은 무엇을 줄이는가? 그렇게 학습한 정책은 어떻게 운전하는가?

함께 풀기

김민준 M01
김민준

(가)는 평균과 분산을 맞추면 되니까 평균 0°, 분산은 5² + 20² = 425, 표준편차 20.6°예요. 평균이 시연과 같으니까 잘 배운 거죠. 평균적으로 똑바로 가고요.

선생님 T01
선생님

±5° 안으로 꺾을 확률은요?

김민준 M04
김민준

정책은 0.19예요. 시연은… 0.0013이요. 백사십 배쯤이에요. 시연한 사람 가운데 장애물로 곧장 간 사람은 거의 없는데, 정책은 다섯 번에 한 번꼴로 들이받아요.

이서연 S01
이서연

평균을 맞춘 게 문제야. m-사영은 p가 높은 곳을 빠뜨리지 않으려고 넓게 덮으니까, 두 봉우리 사이 골짜기까지 덮었어.

선생님 T01
선생님

(나)로 가죠. 무엇을 줄이는 학습이에요?

이서연 S01
이서연

𝔼q[log p] + H(q) = Σ q log p − Σ q log q = −KL(q‖p). 이걸 키우는 건 KL(q‖p)를 줄이는 거예요. e-사영이요.

김민준 M01
김민준

그럼 봉우리 문제를 처음부터 다시 돌려야겠네요. 이번엔 봉우리 폭이 1이 아니라 5°고 간격은 40°니까요.

이서연 S07
이서연

안 돌려도 돼. 각도를 5°로 나눠서 재면 폭 1, 간격 8인 문제야. 각도의 단위를 바꿔도 KL은 그대로니까, 그 문제의 답을 5배 하면 돼. 간격 8은 봉우리 해가 전역 최적이 되는 5.6보다 훨씬 넓으니까 봉우리 하나에 앉는 해가 이겨.

김민준 M01
김민준

돌려서 확인해 보니 N(±20.0°, 5.0²), KL 0.693이에요. 가운데 해 N(0°, 17.4²)는 KL 1.871로 국소해로만 남고요. 왼쪽 해를 고른 정책이 오른쪽으로 꺾을 확률은 0.00003이에요.

선생님 T01
선생님

그럼 어느 정책이 나아요?

김민준 M01
김민준

장애물을 들이받지 않으니 (나)가 낫죠. 대신 시연에 있던 오른쪽 길은 잊어버려요.

이서연 S01
이서연

넓게 덮느냐, 한 곳에 확실히 앉느냐네요. 어느 쪽이 좋은지는 무엇을 더 피해야 하느냐가 정해요. 골짜기가 위험하면 e 쪽, 봉우리를 하나라도 잃으면 안 되면 m 쪽이요.

김민준 M01
김민준

조별 과제에서 두 사람이 서로 다른 주제를 냈을 때, 두 주제를 반씩 섞은 보고서를 내면 아무 주제도 아닌 게 되는 거랑 같네요.