e-길: 곱셈으로 걷기
섞는 길은 확률을 그대로 더해서 걸었다. 합이 1인 것 둘을 가중평균하면 합이 저절로 1이라 따로 손볼 것이 없었다. 곱하는 쪽은 어떨까? 곱셈에는 골치 아픈 데가 있다.
언어 모델이 매기는 문장 하나의 확률은 토큰마다의 확률을 곱한 것이다. 토큰 백 개짜리 문장에서 토큰마다 확률이 0.001쯤이면 문장의 확률은 10⁻³⁰⁰이다. 컴퓨터가 쓰는 64비트 실수가 정밀도를 지키며 담을 수 있는 가장 작은 양수는 약 2.2 × 10⁻³⁰⁸이고, 그보다 작은 수는 자릿수를 잃어 가며 약 5 × 10⁻³²⁴까지만 버틴다. 토큰을 여덟 개만 더 곱하면 0이 되어 버린다. 그런데 log를 씌우면 곱이 덧셈이 된다: log(u · v) = log u + log v. 10⁻³⁰⁰은 자연로그로 −690.8이라는 평범한 숫자가 된다. 곱셈의 세계에서 일어나는 일을 덧셈의 언어로 읽어주는 통역사, 그것이 log다. 이 장의 두 번째 길은 이 통역사 위에 서 있다.
곱셈의 길
곱하는 규칙을 식으로 쓰자. 결과 i마다 a의 확률을 1 − t 제곱, b의 확률을 t 제곱해서 곱한다. t가 0이면 a 그대로, 1이면 b 그대로이고, 그 사이에서는 거듭제곱의 지수가 두 분포의 발언권을 나눈다. 곱한 값들은 합이 1이 아니므로 그 합으로 나눈다.
a와 b를 반씩(t = ½) 곱하면 결과마다 √(aibi), 곧 두 확률의 기하평균이 나온다. 덧셈의 길 한가운데가 두 확률의 산술평균이었던 것과 짝이다. 곱하는 규칙은 두 분포의 가중 기하평균을 다시 정규화하는 것이고, 두 분포가 함께 인정하는 곳으로 무게가 모인다. 필터가 겹치듯, AND다.
기하평균은 산술평균을 넘지 못한다
왜 굳이 Z로 나눠야 할까? 두 양수 4와 16을 보자. 산술평균은 (4 + 16)/2 = 10, 기하평균은 √(4 × 16) = 8이다. 같은 "가운데"인데 다르다. 두 수가 같을 때만 둘이 같고, 나머지는 언제나 기하평균이 산술평균보다 작다. 이 부등식이 곱셈의 길에 Z가 필요한 이유다. 산술평균으로 섞은 분포는 합이 저절로 1이었는데, 칸마다 그보다 작은 기하평균을 내면 합이 1에 못 미친다. Z가 늘 1 이하인지, 언제 1이 되는지는 아래 문제 5에서 보인다.
곱을 더하기로 읽는 렌즈
곱을 더하기로 바꾸는 장치는 우리 주변의 눈금에 이미 들어 있다. 지진의 규모가 1 오르면 지진계에 찍히는 흔들림의 폭(진폭)은 10배, 풀려나는 에너지는 약 32배(101.5 ≈ 31.6) 커진다. 소리의 에너지가 10배씩 커질 때 데시벨은 10씩 올라간다. 수소이온 농도가 10배씩 변할 때 pH는 1씩 변한다. 모두 같은 장치, log다. 곱으로 커지는 세계를 더하기로 느끼게 해 주는 렌즈다.
그렇다면 곱셈의 길을 이 렌즈로 보면 어떻게 보일까? 겹친 필터로 돌아가 보자. 필터 한 장은 자리마다 빛을 일정 비율만 통과시키고, 두 장을 겹치면 자리마다 통과율이 곱해진다. 한쪽 필터가 어두운 자리는 다른 필터가 아무리 밝아도 어둡다. 사진과 인쇄에서는 통과율 대신 농도(통과율에 −log₁₀를 씌운 값)를 쓰는데, 겹친 필터의 농도가 두 농도의 합이 되기 때문이다. 이 렌즈로 보면 곱셈의 길은 "농도를 1 − t : t로 섞은 필터"다. 곱셈이 로그 위에서는 섞기가 된다.
로그 좌표의 직선
곱셈의 길에 log를 씌우면 다음이 된다.
앞의 두 항은 t에 대해 일차식이다. 걸리는 것은 −log Zt 하나다. 이 항은 모든 칸에 똑같이 붙는다. 그래서 두 칸의 로그 비를 좌표로 쓰면 Z가 사라진다. 결과가 n개일 때 마지막 칸을 기준으로 이렇게 잰다.
"로그 공간의 직선"이란 정확히 이 뜻이다. log p 자체가 아니라 로그 비 θ의 좌표에서 곧다. 정규화 상수 Z가 비를 잴 때 약분되어 나가기 때문이다. 확률 좌표에서는 휘어 보이던 길이, 이 좌표에서는 곧은 선이 된다. 로그를 씌운 값이 곧게 움직이니, 분포 자체는 곧게 움직이는 값에 exp(지수함수)를 씌운 모양으로 움직인다. e-길의 e, exponential이 여기서 왔다. 이 좌표 θ를 자연모수(natural parameter)라 부른다. 모수는 분포를 정하는 숫자이고, '자연’은 곱셈의 길이 곧게 보이는 좌표라는 뜻이다.
불러오는 중…
파이썬
import numpy as np
a = np.array([0.6, 0.3, 0.1])
b = np.array([0.1, 0.2, 0.7])
def e_path(a, b, t):
r = a**(1 - t) * b**t # 가중 기하평균 (정규화 전)
Z = r.sum() # 정규화 상수
return r / Z, Z
def theta(p): # θ_i = log(p_i / p_n), 마지막 칸 기준
return np.log(p[:-1] / p[-1])
for t in [0, 0.25, 0.5, 0.75, 1]:
e, Z = e_path(a, b, t)
straight = (1 - t) * theta(a) + t * theta(b)
print(f"t={t:.2f} e_t={np.round(e, 3)} Z={Z:.3f} θ(e_t)={np.round(theta(e), 3)}"
f" 직선과 같은가? {np.allclose(theta(e), straight)}")
# t=0.00 e_t=[0.6 0.3 0.1] Z=1.000 θ(e_t)=[1.792 1.099] 직선과 같은가? True
# t=0.25 e_t=[0.469 0.332 0.199] Z=0.817 θ(e_t)=[0.857 0.511] 직선과 같은가? True
# t=0.50 e_t=[0.325 0.325 0.351] Z=0.754 θ(e_t)=[-0.077 -0.077] 직선과 같은가? True
# t=0.75 e_t=[0.194 0.274 0.532] Z=0.808 θ(e_t)=[-1.011 -0.665] 직선과 같은가? True
# t=1.00 e_t=[0.1 0.2 0.7] Z=1.000 θ(e_t)=[-1.946 -1.253] 직선과 같은가? True
같은 a, b의 m-중간점은 (0.35, 0.25, 0.4)다. e-중간점 (0.325, 0.325, 0.351)과 다르다. Z는 양 끝에서 1이고 가운데에서 가장 작다.
ML에서: 로짓과 로그 비 좌표
분류 모델이 softmax에 넣기 전에 내놓는 점수인 로짓도 확률의 로그와 한 식으로 이어져 있다. 확률은 로짓에 exp를 씌우고 그 합으로 나눈 값이다. 그렇다면 두 모델의 로짓을 평균하는 앙상블은 두 길 가운데 어느 쪽을 걸을까? 아래 문제 7에서 따라간다.
수확
“곱셈을 덧셈으로 바꾸는 렌즈가 있다. 그것이 log다. 곱셈의 길은 로그 비 좌표 θ에서 곧은 길이다.”
문제 4. 에너지가 천 배인 두 지진
지진의 규모가 1 오를 때 지진계에 찍히는 진폭은 10배, 풀려나는 에너지는 101.5배라고 하자. 두 지진의 에너지가 1000배 차이 난다. (가) 두 지진의 규모 차이는? (나) 지진계에 찍힌 진폭은 몇 배 차이인가? (다) 진폭과 에너지를 모두 log로 재면 두 눈금은 어떤 관계인가?
함께 풀기

천 배면 10³이니까 규모 3 차이요. 진폭도 10³ = 1000배고요.

규모가 1 오를 때 에너지는 몇 배라고 했죠?

101.5배요. 규모가 2 차이 나면 에너지는 101.5×2 = 10³, 천 배예요. 그러니까 규모 차이는 2고, 진폭은 10² = 100배예요.

아, 진폭과 에너지를 같은 양으로 봤어요. 규모는 진폭의 로그로 정의한 눈금이라서, 에너지는 다른 기울기로 따라와요.

그럼 (다)는요? log 진폭과 log 에너지는 어떤 관계예요?

log E = 1.5 log A + 상수요. 로그를 씌운 두 눈금이 상수배만큼 기울기가 달라요. 에너지가 진폭의 1.5제곱에 비례하는 셈이고요.

둘 다 “곱을 덧셈으로” 바꾸는 렌즈인데, 렌즈마다 눈금 간격이 다르네요.

그래요. 로그는 밑을 바꿔도 상수배만 달라져요. 정보량을 잴 때 쓰는 bit(밑 2 로그)와 nat(자연로그)도 바로 그 상수배의 차이예요.

해석학 시간에 로그 눈금 그래프에서 기울기가 거듭제곱의 지수라고 배웠는데, 이게 그 기울기 1.5였네요.
문제 5. 기하평균과 Z
(가) 4와 16에 무게 3/4과 1/4을 주어, 가중 산술평균 (3/4)·4 + (1/4)·16과 가중 기하평균 43/4·161/4을 구하라. 그리고 양수 u, v에 대해 가중 산술-기하 부등식(무게를 준 기하평균 ≤ 무게를 준 산술평균) u1−tvt ≤ (1−t)u + tv (0 ≤ t ≤ 1)를 받아들이자. (나) 이 부등식으로 곱셈의 길의 정규화 상수 Zt = Σ ai1−t bit 가 0 ≤ t ≤ 1인 모든 t에서 1 이하임을 보여라. 등호는 언제 성립하는가? (다) a = (0.7, 0.2, 0.1), b = (0.2, 0.2, 0.6)에서 Z0.5와 e-중간점을 구하라. (라) 같은 a, b에서 t = 2이면 Z2와 곱셈의 길 위의 점은 어떻게 되는가? 같은 t에서 덧셈의 길 위의 점은? 위의 두 길 위젯에서 「문제 5 불러오기」를 누르고 t를 0.5에 두면 (다)의 풀이와 견줘 볼 수 있다(위젯의 t는 0과 1 사이만 움직인다).
함께 풀기

(가)는 7이랑 5.66이에요. (다)는 √(0.7·0.2) + √(0.2·0.2) + √(0.1·0.6)이니까 0.374 + 0.200 + 0.245, 합이 0.819예요.

그럼 e-중간점은 뭐예요?

(0.374, 0.200, 0.245)요. 기하평균 그대로요.

서연아, 그거 더하면 0.819잖아. 확률이 아니야.

…아. 기하평균은 한 칸씩 계산하니까 칸들끼리 합을 맞춰 줄 장치가 없네요. Z로 나눠야 (0.457, 0.244, 0.299)이 돼요.

칸 2는 두 분포가 똑같이 0.2를 줬는데 0.244로 올랐네요. 두 분포가 어긋나는 칸 1과 3이 기하평균에서 깎인 만큼, 다시 나누면서 칸 2가 나눠 받은 거예요.

그래요. 산술평균은 합이 1인 것끼리 섞으면 합이 저절로 1인데, 기하평균은 아니에요. (나)는요?

저 이미 확인했어요. 랜덤 분포 쌍 천 개를 뽑아서 t = 0.5로 Z를 쟀는데 전부 1 이하였어요.

t = 0.3이면요?

…안 돌려 봤어요. 0.5만 넣었어요.

칸마다 부등식을 쓰면 돼요. ai1−tbit ≤ (1−t)ai + t bi. 이걸 i에 대해 다 더하면 오른쪽은 (1−t)·1 + t·1 = 1이에요. t가 뭐든 상관없어요.

등호는요?

가중 산술-기하 부등식은 두 수가 같을 때만 등호니까, 모든 칸에서 ai = bi, 곧 a = b일 때만요. 끝점 t = 0, 1은 빼고요.

그러니까 Z가 1보다 작다는 건 두 분포가 다르다는 신호고, 얼마나 작은지가 얼마나 다른지네요. 천 개 뽑아서 확인한 건 t = 0.5 하나에 대한 증거였고요.

조교님이 과제 채점할 때 "예시 입력 하나 통과했다고 다 맞은 거 아니다"라고 하던 거랑 같네요. 이번엔 t라는 입력 하나만 넣은 셈이에요.

그래요. 증명은 모든 t를 한 번에 다뤄요. 서연 학생은 부등식을 칸마다 쓰고 더했죠. 그게 기하평균에서 분포로 넘어가는 다리예요.

그런데 부등식에는 (0 ≤ t ≤ 1)이 붙어 있었어요. (라)처럼 t = 2면요?

ai−1bi2을 칸마다 계산하면 0.057, 0.2, 3.6이라 Z2 = 3.857이에요. 1을 넘었어요. 방금 증명이랑 부딪히는데요?

t = 2면 1 − t = −1이라 무게 하나가 음수예요. 가중 산술-기하 부등식은 두 무게가 다 0 이상일 때만 쓸 수 있어요. 증명은 0 ≤ t ≤ 1 안에서만 한 말이에요.

그럼 t = 2의 점은 분포이긴 해요?

3.857로 나누면 (0.015, 0.052, 0.933)이에요. 합이 1이고 전부 양수예요. 덧셈의 길은 (1 − 2)a + 2b = (−0.3, 0.2, 1.1)이라 칸 1이 음수고요.

m-길은 늘이면 삼각형의 변을 뚫고 나갔는데, e-길은 안 나가요. 양수는 지수가 음수든 2든 거듭제곱해도 양수로 남고, 합은 Z가 맞춰 주니까요. 곱셈의 길은 양쪽으로 끝없이 늘릴 수 있어요.

로그 비 좌표에서 보면 더 분명해요. e-길은 거기서 곧은 직선이고, 그 좌표에서는 평면 전체가 다 분포예요. 끝없이 뻗어도 밖으로 나갈 곳이 없죠.
문제 6. 가우시안 두 개의 곱셈 길
a = N(0, 1²), b = N(4, 2²)라 하자. (가) 곱셈의 길 위의 분포 ret ∝ a1−tbt 가 다시 정규분포임을 보이고, 평균과 분산을 t로 써라. (나) t = 0.5에서 평균과 표준편차를 구하라.
함께 풀기

곱하면 지수끼리 더해지니까 x에 대한 이차식이 나와요. 이차식의 지수니까 정규분포 맞아요. (나)는 평균이 (1−t)·0 + t·4 = 2, 표준편차가 (1−t)·1 + t·2 = 1.5요.

나는 다르게 나왔어. 1 간격 격자에 올려서 계산했더니 평균 0.800, 표준편차 1.265야. 근데 막대그래프가 울퉁불퉁해서 정규분포 같지도 않아. 격자를 촘촘히 하면 서연이 값으로 가지 않을까?

두 사람 다 한 가지씩 확인해 봐요. 민준 학생, 격자에서 log ei의 2차 차분(이웃 칸끼리 차이의 차이)을 찍어 봐요.

−0.625, −0.625, −0.625… 전부 똑같아요. 2차 차분이 상수면 log가 정확히 이차식이란 거고, 그럼 격자 위에서도 정확히 가우시안 모양이네요. 울퉁불퉁한 건 칸이 성긴 거지 모양이 틀린 게 아니었어요.

그래요. 격자를 촘촘히 해도 평균 0.8, 표준편차 1.265에서 안 움직여요. 그럼 서연 학생의 2와 1.5는 어디서 틀렸을까요?

제가 지수를 대충 봤어요. 다시 써 볼게요. log a1−tbt = −(1−t)x²/2 − t(x−4)²/8 + 상수. x²의 계수가 −½[(1−t)/1 + t/4]예요.

그러니까 선형으로 보간되는 건 σ가 아니라 1/σ², 분산의 역수인 정밀도(precision)예요. 분류의 정밀도와는 다른 말이에요. 1/σt² = (1−t)/σa² + t/σb². t = 0.5면 0.625, σ = 1.265. 평균도 정밀도로 가중해서 (0.5·0.25·4)/0.625 = 0.8이에요.

맞아요. 곱셈의 길에서 곧게 움직이는 건 로그 밀도의 계수들이에요. 정규분포라면 μ/σ²와 1/σ²이죠. 이 둘을 정규분포의 자연모수 θ라 불러요.

선형대수에서 "기저를 바꾸면 선형 결합의 계수가 바뀐다"던 게 이거네요. σ 좌표에서 보간하는 거랑 1/σ² 좌표에서 보간하는 건 다른 길이에요.

확신이 강한 쪽, 폭이 좁은 a 쪽으로 평균이 끌려가는 것도 말이 되네요. 조별 과제에서 확실히 아는 사람 의견이 더 세게 반영되는 거랑 같아요.
문제 7. 로짓을 평균하는 앙상블
결과가 셋인 분류 모델 두 개가 한 입력에 로짓 (2, 1, 0)과 (0, 0, 3)을 내놓았다. 확률은 로짓에 exp를 씌우고 그 합으로 나눈 값(softmax)이다. (가) 두 로짓을 반씩 평균해 softmax에 넣은 분포를 구하라. (나) 둘째 모델의 로짓이 (5, 5, 8)로 저장돼 있었다면 (가)의 답은 달라지는가? 로짓 대신 확률의 로그(로그확률)를 반씩 평균하면 어떤가? (다) 이 앙상블은 두 모델의 출력 분포 사이, 덧셈의 길과 곱셈의 길 가운데 어디에 있는가? 로그 비 좌표 θ(마지막 칸 기준)로 확인하라. 위의 두 길 위젯에서 「문제 7 불러오기」를 누르면 두 모델의 확률표가 두 끝점으로 올라간다.
함께 풀기

(가)는 평균 로짓 (1, 0.5, 1.5)를 softmax에 넣으면 (0.307, 0.186, 0.507)이에요. (나)는 달라질 것 같아요. (5, 5, 8)로 평균하면 (3.5, 3, 4)라 로짓이 전부 커지잖아요. 둘째 모델 쪽으로 더 쏠릴 거예요.

두 모델이 내놓는 확률부터 볼까요? (0, 0, 3)과 (5, 5, 8)의 softmax는요?

둘 다 (0.045, 0.045, 0.909)… 같네요. 세 칸에 5를 똑같이 더했으니 exp가 전부 e⁵배가 되고, 합으로 나누면서 지워져요. 평균 (3.5, 3, 4)도 (1, 0.5, 1.5)에 2.5를 똑같이 더한 거라 softmax가 같아요.

그건 알겠는데, 로그확률 평균은 다를 것 같아요. 로그확률은 합이 1이 되게 나눈 다음에 로그를 씌운 거라, 로짓하고는 다른 좌표잖아요.

한 모델 안에서 로그확률과 로짓은 칸마다 무엇이 달라요?

로그확률은 로짓에서 log(exp의 합)을 뺀 거니까… 빼는 수가 세 칸에 똑같아요. 모델마다 상수 하나씩이에요. 평균을 내도 칸마다 같은 상수가 붙을 뿐이라, softmax에 넣으면 같은 (0.307, 0.186, 0.507)이 나와요.

문제 5에서 기하평균을 Z로 나눴던 거랑 같네요. 로짓에서는 그 나누기가 log(exp의 합)을 빼는 걸로 보이는 거고요.

그럼 (다)는요?

θ는 마지막 칸 기준 로그 비니까 로짓의 차예요. 첫째 모델은 (2 − 0, 1 − 0) = (2, 1), 둘째는 (−3, −3), 앙상블은 (1 − 1.5, 0.5 − 1.5) = (−0.5, −1)이에요. 딱 둘의 가운데네요.

θ 좌표에서 곧은 길의 가운데니까 곱셈의 길, e-중간점이에요. 두 확률표를 칸마다 곱해 제곱근을 씌우고 정규화해도 (0.307, 0.186, 0.507)로 같아요. 확률표를 평균하면 (0.355, 0.145, 0.500)이라 덧셈의 길 쪽은 다른 점이고요.

그래요. 로짓을 평균하는 앙상블은 곱셈의 길을 걸어요. 로짓의 모든 칸에 같은 수를 더해도 분포가 그대로라는 것과, 곱셈의 길에서 Z가 로그 비를 잴 때 약분된다는 것은 같은 이야기예요.

사영기하의 동차좌표 같아요. (x : y : z)는 세 수에 같은 수를 곱해도 같은 점이잖아요. 로짓은 세 수에 같은 수를 더해도 같은 분포고요. 곱 대신 덧셈일 뿐이에요.