“KL(π‖목표)는 너무 좁히고 KL(목표‖π)는 너무 넓히면, 그 사이를 걸을 수는 없는가?”
비유
라디오의 수신 폭 조절 다이얼. 지금까지 라디오에는 전 주파수대 수신(넓음)과 단일 주파수 수신(좁음), 두 가지 수신 방식만 있었다. 그런데 수신 폭을 고르는 다이얼이 하나 더 있다면 어떨까? 수신 폭을 넓히면 여러 채널이 겹쳐 들리고(봉우리를 덮는 쪽), 좁히면 하나만 선명하게 들린다(봉우리를 찾는 쪽). α-발산의 α 가 이 수신 폭 다이얼에 해당한다.
정의: 아마리의 규약
아마리의 규약을 따라 α = +1 을 e 쪽, α = −1 을 m 쪽으로 둔다.
Dα(p∥q)=1−α24(1−y∑p(y)21−αq(y)21+α)
Dααpyqα-발산발산지수목표 (현실) 분포결과 (답변)모델
α → −1 이면 KL(p‖q): 목표 쪽에 무게, m-사영, 봉우리를 덮는 쪽. α → +1 이면 KL(q‖p): 모델 쪽에 무게, e-사영, 봉우리를 찾는 쪽. α = 0 이면 2 Σ(√p − √q)² 로 대칭인데, 헬링거 거리 제곱을 ½ Σ(√p − √q)² 으로 정의하면 그 네 배다. α-발산은 "무엇을 곧은 길로 볼지"를 정하는 규칙(접속)도 ±α 한 쌍으로 만든다. 그래서 α 는 발산을 고르는 파라미터이면서 곧음(접속)을 고르는 파라미터이기도 하다.
봉우리 둘인 목표를 정규분포 하나로 근사하면서 α를 돌려 보자. α가 −1에서 올라가는 동안 근사는 두 봉우리 사이에 넓게 걸쳐 있다가, 어느 지점에서 한쪽 봉우리로 뛰어넘는다. α 는 연속적으로 바뀌는데 결과가 연속적이지 않을 수 있는 것은, 두 극소점이 경쟁하다가 순위가 바뀌기 때문이다.
직접 움직여 보기
불러오는 중…
α를 스케줄링한다면
강화학습 초기에는 α를 m 쪽에 두어 다양성을 지키고, 후기에는 e 쪽으로 옮겨 정답 경로에 집중하는 설계를 생각해 볼 수 있다. “처음에는 넓게 듣다가, 점점 좁혀간다.” 다만 뒤의 엔트로피 붕괴 절에서 따로 보듯이, 다양성이 무너지는 것은 KL 벌칙을 아예 빼도 일어난다. 엔트로피를 무너뜨리는 원인은 KL 방향보다 보상 항에 있으므로, 발산의 모양을 바꾸는 것만으로 다양성이 지켜진다고 기대하면 안 된다.
파이썬
봉우리 둘(무게 0.6, 0.4)인 목표에 정규분포 하나를 격자 탐색으로 맞춘다.
import numpy as np
x = np.linspace(-8, 8, 401); dx = x[1] - x[0]
N = lambda m, s: np.exp(-0.5 * ((x - m) / s)**2) / (s * np.sqrt(2 * np.pi))
p = 0.6 * N(-2.5, 0.8) + 0.4 * N(2.5, 0.8) # 봉우리 둘인 목표
def D(p, q, a):
p, q = p + 1e-300, q + 1e-300
if a <= -0.999: return np.sum(p * np.log(p / q)) * dx # KL(p‖q)
if a >= 0.999: return np.sum(q * np.log(q / p)) * dx # KL(q‖p)
return 4 / (1 - a * a) * (1 - np.sum(p**((1 - a) / 2) * q**((1 + a) / 2)) * dx)
mus, ss = np.linspace(-4, 4, 161), np.linspace(0.3, 4, 75)
for a in [-1, -0.2, 0.2, 0.4, 1]:
d, m, s = min((D(p, N(m, s), a), m, s) for m in mus for s in ss)
print(f"α={a:+.1f} 평균 {m:+.2f} 표준편차 {s:.2f}")
# α=-1.0 평균 -0.50 표준편차 2.60
# α=-0.2 평균 -0.50 표준편차 2.50
# α=+0.2 평균 -0.45 표준편차 2.45
# α=+0.4 평균 -2.50 표준편차 0.80
# α=+1.0 평균 -2.50 표준편차 0.80
α = −1 의 답은 목표의 평균(−0.5)과 표준편차(2.58)를 맞춘 것, 곧 평균과 분산을 맞춘 것(모멘트 일치)이다. α = 0.2 와 0.4 사이에서 답이 큰 봉우리로 뛰어넘는다.
이 절의 결론
“두 KL은 α-발산 한 족의 양 끝이고, 규약은 α = +1 이 e 쪽, α = −1 이 m 쪽이다. α는 발산과 접속을 함께 고르는 파라미터인데, 그 α 를 연속적으로 바꿔도 답은 불연속적으로 뛸 수 있다.”
문제 8. 이항족에서 α 바꿔 가기
결과가 0, 1, 2 인 분포 p = (0.45, 0.1, 0.45) 를 이항족 q = ((1−m)², 2m(1−m), m²) 으로 근사한다. α = −1, 곧 KL(p‖q) 를 줄이면 m = 0.5 이고, α = +1, 곧 KL(q‖p) 를 줄이면 m ≈ 0.75 (또는 0.25) 다. (가) α = 0 에서 Dα 를 m = 0.5 와 m = 0.75 에서 계산해 어느 쪽이 작은지 보라. (나) α 를 −1 에서 +1 로 천천히 올리면 가장 좋은 m 은 어떻게 움직이는가? 위 정규분포 예처럼 한순간에 뛰어넘는가?
α 축의 두 끝과, 문제에 주어진 두 끝의 답(α = −1 에서 m = 0.5, α = +1 에서 m ≈ 0.75)이 만드는 분포 q. 그 사이의 α 에서 m 이 어떻게 움직이는지는 비워 두었다
함께 풀기
김민준
(가)는 넣기만 하면 돼요. α = 0 이면 4(1 − Σ√(pq)) 니까, m = 0.5 에서 0.422, m = 0.75 에서 0.542 예요. 0.5 쪽이 작아요.
이서연
α = 0 이면 p 와 q 를 바꿔도 값이 같은 대칭 발산이잖아. 어느 한쪽 끝의 편도 들지 않으니 가운데가 이기는 게 자연스러워.
김민준
(나)는 위 정규분포 예에서 봤잖아요. 어느 α 에서 0.5 에서 0.75 로 툭 뛰어넘을 거예요. 격자로 훑어볼게요.
김민준
α = 0.8 까지는 0.5 그대로인데, 0.83 에서 0.546, 0.86 에서 0.628, 0.9 에서 0.681, 0.95 에서 0.722… 어, 안 뛰어요. 조금씩 미끄러져서 0.75 로 가요.
선생님
위 정규분포 예와 무엇이 다르죠?
이서연
목표의 봉우리 무게요. 정규분포 예는 0.6 대 0.4 라서, 큰 봉우리 쪽 극소점과 가운데 극소점이 따로 있다가 순위가 바뀌는 순간 뛰어넘었어요. 여기는 0.45 대 0.45 로 똑같아요.
선생님
똑같으면 m 과 1 − m 은 어떤 관계죠?
이서연
늘 같은 값을 줘요. 그럼 가운데 m = 0.5 가 가장 낮은 점이었다가, α ≈ 0.83 을 넘으면서 양옆으로 낮은 점 두 개가 갈라져 나오는 거예요.
선생님
그러면 갈라진 두 답 가운데 실제 학습은 어느 쪽에 앉을까요?
김민준
두 쪽 값이 똑같으니 출발점에 달렸겠네요. 처음 m 이 0.5 보다 조금이라도 크면 0.75 쪽, 작으면 0.25 쪽이요.
이서연
α 를 연속으로 바꿔도 답이 불연속으로 뛰는 건 극소점 둘이 순위를 바꿀 때고, 대칭인 목표에서는 답이 이어진 채로 둘로 갈라지는 거네요. 해석학 시간에 x⁴ − c·x² 의 극소점이 c 가 0 을 지날 때 하나에서 둘로 갈라지던 것과 같아요.