m-길은 확률을 그대로 더해서 걸었는데, 합이 1인 것 둘을 가중평균하면 합이 저절로 1이라 따로 손볼 것이 없었다. 곱하는 규칙은 어떨까? 곱셈에는 골치 아픈 데가 있다.
언어 모델이 매기는 문장 하나의 확률은 토큰마다의 확률을 곱한 것이다. 토큰 백 개짜리 문장에서 토큰마다 확률이 0.001쯤이면 문장의 확률은 10⁻³⁰⁰이다. 컴퓨터가 쓰는 64비트 실수가 정밀도를 지키며 담을 수 있는 가장 작은 양수는 약 2.2 × 10⁻³⁰⁸이고, 그보다 작은 수는 자릿수를 잃어 가며 약 5 × 10⁻³²⁴까지만 버틴다. 토큰을 여덟 개만 더 곱하면 0이 되어 버린다. 그런데 log를 씌우면 곱이 덧셈이 된다: log(u · v) = log u + log v. 10⁻³⁰⁰은 자연로그로 −690.8이라는 평범한 숫자가 된다. 곱셈의 세계에서 일어나는 일을 덧셈의 언어로 읽어 주는 통역사가 log이고, 이 장의 두 번째 길은 이 통역사 위에 서 있다.
e-길의 식
곱하는 규칙을 식으로 쓰자. 결과 i마다 a의 확률을 1 − t 제곱, b의 확률을 t 제곱해서 곱한다. t가 0이면 a 그대로, 1이면 b 그대로이고, 그 사이에서는 거듭제곱의 지수가 두 분포의 발언권을 나눈다. 곱한 값들은 합이 1이 아니므로 그 합으로 나눈다.
a와 b를 반씩(t = ½) 곱하면 결과마다 √(aibi), 곧 두 확률의 기하평균이 나온다. m-길 한가운데가 두 확률의 산술평균이었던 것과 나란하다. 곱하는 규칙은 두 분포의 가중 기하평균을 다시 정규화하는 것이고, 두 분포가 함께 인정하는 곳으로 무게가 모인다. 필터가 겹치듯, AND다.
기하평균은 산술평균을 넘지 못한다
왜 굳이 Z로 나눠야 할까? 두 양수 4와 16을 보면, 산술평균은 (4 + 16)/2 = 10, 기하평균은 √(4 × 16) = 8이어서 같은 "가운데"인데도 값이 다르다. 두 수가 같을 때만 둘이 같고 나머지는 언제나 기하평균이 산술평균보다 작다는 이 산술-기하 평균 부등식이, e-길에 Z가 필요한 이유다. 산술평균으로 섞은 분포는 합이 저절로 1이었는데, 칸마다 그보다 작은 기하평균을 내면 합이 1에 못 미친다. Z가 늘 1 이하인지, 언제 1이 되는지는 아래 문제 5에서 보인다.
곱을 더하기로 읽는 렌즈
곱을 더하기로 바꾸는 장치는 우리 주변의 눈금에 이미 들어 있다. 지진의 규모가 1 오르면 지진계 바늘이 움직인 폭(진폭)은 10배, 풀려나는 에너지는 약 32배(101.5 ≈ 31.6) 커진다. 소리의 에너지가 10배씩 커질 때 데시벨은 10씩 올라가고, 수소이온 농도가 10배씩 변할 때 pH는 1씩 변한다. 이 눈금들은 모두 같은 장치인 log를 쓰는데, log는 곱으로 커지는 세계를 더하기로 느끼게 해 주는 렌즈다.
그렇다면 e-길을 이 로그 렌즈로 보면 어떻게 보일까? 겹친 필터로 돌아가 보자. 필터 한 장은 자리마다 빛을 일정 비율만 통과시키고, 두 장을 겹치면 자리마다 통과율이 곱해진다. 한쪽 필터가 어두운 자리는 다른 필터가 아무리 밝아도 어둡다. 사진과 인쇄에서는 통과율 대신 농도(통과율에 −log₁₀를 씌운 값)를 쓰는데, 겹친 필터의 농도가 두 농도의 합이 되기 때문이다. 곱셈이 로그 위에서는 가중평균이 되므로, 로그 렌즈로 보면 e-길은 "농도를 1 − t : t로 섞은 필터"다.
로그 좌표의 직선
e-길 위의 분포에 log를 씌우면 다음이 된다.
logrte(i)=(1−t)logai+tlogbi−logZt
rtea,btZtie-길위의분포두끝점분포보간비율정규화상수결과의번호
앞의 두 항은 t에 대해 일차식이라, 걸리는 것은 모든 칸에 똑같이 붙는 −log Zt 하나뿐이다. 그래서 두 칸의 로그 비를 좌표로 쓰면 Z가 사라지는데, 결과가 n개일 때는 마지막 칸을 기준으로 이렇게 잰다.
"로그 공간의 직선"이란, log p 자체가 아니라 로그 비 θ의 좌표에서 곧다는 뜻이다. 정규화 상수 Z가 비를 잴 때 약분되어 나가기 때문에, 확률 좌표에서는 휘어 보이던 길이 이 좌표에서는 곧은 선이 된다. 로그를 씌운 값이 곧게 움직이니, 분포 자체는 곧게 움직이는 값에 exp(지수함수)를 씌운 모양으로 움직인다. e-길의 e, exponential이 여기서 왔다. 이 좌표 θ를 자연 파라미터(natural parameter)라 부르는데, 파라미터는 분포를 정하는 숫자이고 '자연’은 e-길이 곧게 보이는 좌표라는 뜻이다.
직접 움직여 보기
불러오는 중…
파이썬
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를 씌우고 그 합으로 나눈 값이다. 그렇다면 두 모델의 로짓을 평균하는 앙상블은 m-길과 e-길 가운데 어느 쪽을 걸을까? 아래 문제 7에서 따라간다.
이 절의 결론
“log는 곱셈을 덧셈으로 바꾼다. 그래서 e-길(확률을 거듭제곱해 곱하고 다시 나누는 길)은 로그 비 좌표 θ에서 곧은 길이다.”
문제 4. 에너지가 천 배인 두 지진
지진의 규모가 1 오를 때 지진계에 찍히는 진폭은 10배, 풀려나는 에너지는 101.5배라고 하자. 두 지진의 에너지가 1000배 차이 난다. (가) 두 지진의 규모 차이는? (나) 지진계에 찍힌 진폭은 몇 배 차이인가? (다) 진폭과 에너지를 모두 log로 재면 두 눈금은 어떤 관계인가?
규모가 한 칸 오를 때마다 진폭은 10배, 에너지는 10의 1.5제곱배가 된다. 둘째 칸부터는 물음표로 비워 두었다
함께 풀기
이서연
천 배면 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)를 받아들이자. (나) 이 부등식으로 e-길의 정규화 상수 Zt = Σ ai1−tbit 가 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와 e-길 위의 점은 어떻게 되는가? 같은 t에서 m-길 위의 점은?
(다)와 (라)의 두 분포 a = (0.7, 0.2, 0.1), b = (0.2, 0.2, 0.6)을 칸마다 나란히 놓은 막대
맞아요. e-길에서 곧게 움직이는 건 로그 밀도의 계수들이에요. 정규분포라면 μ/σ²와 1/σ²이죠. 이 두 계수를 정규분포의 자연 파라미터 θ라 불러요.
이서연
선형대수에서 "기저를 바꾸면 선형 결합의 계수가 바뀐다"던 게 이거네요. σ 좌표에서 보간하는 거랑 1/σ² 좌표에서 보간하는 건 다른 길이에요.
김민준
확신이 강한 쪽, 폭이 좁은 a 쪽으로 평균이 끌려가는 것도 말이 되네요. 조별 과제에서 확실히 아는 사람 의견이 더 세게 반영되는 거랑 같아요.
문제 7. 로짓을 평균하는 앙상블
결과가 셋인 분류 모델 두 개가 한 입력에 로짓 (2, 1, 0)과 (0, 0, 3)을 내놓았고, 확률은 로짓에 exp를 씌우고 그 합으로 나눈 값(softmax)이다. (가) 두 로짓을 반씩 평균해 softmax에 넣은 분포를 구하라. (나) 둘째 모델의 로짓이 (5, 5, 8)로 저장돼 있었다면 (가)의 답은 달라지는가? 로짓 대신 확률의 로그(로그확률)를 반씩 평균하면 어떤가? (다) 이 앙상블은 두 모델의 출력 분포 사이, m-길과 e-길 가운데 어디에 있는가? 로그 비 좌표 θ(마지막 칸 기준)로 확인하라.
첫째 모델의 로짓 (2, 1, 0), 둘째 모델의 로짓 (0, 0, 3), 그리고 둘째 모델의 로짓이 (5, 5, 8)로 저장돼 있었을 때(회색 파선)
함께 풀기
김민준
(가)는 평균 로짓 (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)이에요. 딱 둘의 가운데네요.