지수족

쌍대 퍼텐셜 F*: θ와 η를 잇는 르장드르 짝

θ에서 η로 가는 길은 기울기 하나, η = ∇F(θ) 였다. 그렇다면 η에서 θ로 돌아오는 길도 어떤 함수의 기울기일까? 그리고 그 함수는 분포에 대해 무엇을 말해 줄까?

르장드르 변환 — 기울기를 새 좌표로

볼록함수 F가 있으면 기울기 η = ∇F(θ) 를 새 좌표로 삼고, 새 함수 F*(η) = θ·η − F(θ) 를 만들 수 있다. 이것을 르장드르 변환이라 부르고, F*를 F의 쌍대, 또는 쌍대 퍼텐셜이라고 한다. 퍼텐셜은 F처럼 기울기를 내놓는 바탕 함수를 부르는 말이다. 역학에서 속도 v에서 운동량 p = ∂L/∂v (여기서 p는 확률이 아니라 운동량이고, L은 운동 에너지에서 위치 에너지를 뺀 라그랑지안이다) 로 넘어갈 때 쓰는 것도 같은 변환이다. 기울기가 새 좌표가 된다. F가 볼록이라는 것은 앞 절에서 보았으니, 이 변환을 지수족에 그대로 쓸 수 있다.

F*는 음의 엔트로피다

η = ∇F(θ) 인 맞물린 짝에서 F*(η) = θ·η − F(θ) 이다. 이 값에 이름이 있다. θ·η = E[θ·t(x)] 이므로, 기댓값 안에 골격을 다시 모으면 이렇다.

F∗(η)=θ⋅η−F(θ)=E[log⁡pθ(x)−k(x)]=−H(pθ)−E[k(x)]\textcolor{#c0622f}{F^*}(\textcolor{#e0504a}{\eta}) = \textcolor{#3b7de0}{\theta} \cdot \textcolor{#e0504a}{\eta} - \textcolor{#7d8a3a}{F}(\textcolor{#3b7de0}{\theta}) = \mathbb{E}\big[\log \textcolor{#7f8f10}{p}_{\textcolor{#3b7de0}{\theta}}(\textcolor{#6f8fa6}{x}) - \textcolor{#0e93b0}{k}(\textcolor{#6f8fa6}{x})\big] = -\textcolor{#9467bd}{H}(\textcolor{#7f8f10}{p}_{\textcolor{#3b7de0}{\theta}}) - \mathbb{E}\big[\textcolor{#0e93b0}{k}(\textcolor{#6f8fa6}{x})\big]
F∗쌍대 퍼텐셜 (F 의 르장드르 변환)η기대모수 =∇F(θ)θ자연모수F로그정규화자pθ기대모수가 η 인 가족의 한 명x데이터k캐리어H섀넌 엔트로피Epθ 아래의 기댓값\begin{array}{ll} \textcolor{#c0622f}{F^*} & \text{쌍대 퍼텐셜 (}F \text{ 의 르장드르 변환)} \\ \textcolor{#e0504a}{\eta} & \text{기대모수 } = \nabla F(\theta) \\ \textcolor{#3b7de0}{\theta} & \text{자연모수} \\ \textcolor{#7d8a3a}{F} & \text{로그정규화자} \\ \textcolor{#7f8f10}{p}_{\textcolor{#3b7de0}{\theta}} & \text{기대모수가 } \eta \text{ 인 가족의 한 명} \\ \textcolor{#6f8fa6}{x} & \text{데이터} \\ \textcolor{#0e93b0}{k} & \text{캐리어} \\ \textcolor{#9467bd}{H} & \text{섀넌 엔트로피} \\ \mathbb{E} & p_\theta \text{ 아래의 기댓값} \end{array}

캐리어가 0인 가족(베르누이, 가우시안)에서는 F*가 정확히 음의 엔트로피다. 베르누이: F*(η) = η log η + (1−η) log(1−η). 가우시안: F*(η) = −½ log(2πe(η₂ − η₁²)), 곧 −½ log(2πeσ²). 푸아송은 캐리어 −log x! 때문에 E[log x!] 만큼 다르다. F*(η) = η log η − η 이다. F(θ) = eᶿ 를 손으로 르장드르 변환해도 같은 함수가 나온다.

르장드르 짝에는 펜셸–영 부등식 F(θ) + F*(η) ≥ θ·η 가 따라온다. 여기서는 그것이 등호로 쓰인다. θ와 η가 같은 분포의 두 주소이면 언제나 η = ∇F(θ) 이므로, F(θ) + F*(η) = θ·η. θ와 η를 서로 다른 분포에서 가져오면 부등식이 되고, 그 틈이 다음 절의 주인공이다. 그리고 르장드르 짝에서는 기울기의 역함수가 쌍대의 기울기다, (F′)⁻¹ = (F*)′. 여기서는 그것이 θ = ∇F*(η) 가 된다. η에서 θ로 돌아가는 길도 기울기 하나다.

베르누이의 두 볼록함수. 위: F(θ) = log(1 + eᶿ), 점 θ = 1 에서 접선의 기울기가 η = 0.731. 아래: F*(η) = η log η + (1 − η) log(1 − η), 점 η = 0.731 에서 접선의 기울기가 θ = 1. 같은 분포의 두 주소가 서로의 기울기로 맞물린다
베르누이의 두 볼록함수. 위: F(θ) = log(1 + eᶿ), 점 θ = 1 에서 접선의 기울기가 η = 0.731. 아래: F*(η) = η log η + (1 − η) log(1 − η), 점 η = 0.731 에서 접선의 기울기가 θ = 1. 같은 분포의 두 주소가 서로의 기울기로 맞물린다

그림은 앞면 확률 0.731인 동전 하나를 두 함수 위에 찍은 것이다. 위 곡선에서 θ = 1 의 기울기를 읽으면 η = 0.731 이 나오고, 아래 곡선에서 η = 0.731 의 기울기를 읽으면 θ = 1 로 돌아온다. 두 높이를 더하면 F(1) + F*(0.731) = 1.313 − 0.582 = 0.731 = θ·η 다.

파이썬

import numpy as np
from math import lgamma

# 가우시안 μ=1, σ=2
mu, s = 1.0, 2.0
th = np.array([mu / s**2, -1 / (2 * s**2)])
eta = np.array([mu, mu**2 + s**2])
F = -th[0]**2 / (4 * th[1]) + 0.5 * np.log(-np.pi / th[1])
Fs = -0.5 * np.log(2 * np.pi * np.e * (eta[1] - eta[0]**2))
print(f"가우시안  F = {F:.4f}  F* = {Fs:.4f}  F+F* = {F + Fs:.4f}  θ·η = {th @ eta:.4f}")

# 푸아송 λ=3: F*(η) = η log η − η  vs  −H − E[k]
lam = 3.0
xs = np.arange(0, 80)
k = -np.array([lgamma(x + 1) for x in xs])
logp = xs * np.log(lam) - lam + k
p = np.exp(logp)
H = -(p * logp).sum()
print(f"푸아송   η log η − η = {lam * np.log(lam) - lam:.4f}   −H − E[k] = {-H - (p * k).sum():.4f}   −H 만 = {-H:.4f}")
# 가우시안  F = 1.7371  F* = -2.1121  F+F* = -0.3750  θ·η = -0.3750
# 푸아송   η log η − η = 0.2958   −H − E[k] = 0.2958   −H 만 = -1.9315

수확

“추상적 볼록함수가 지수족에서 구체적 의미를 얻었다. F는 로그정규화자, 그 기울기는 기대모수, 그 쌍대는 음의 엔트로피(캐리어가 없을 때). 역학에서 속도와 운동량을 잇던 르장드르 변환이 여기서는 분포의 두 주소를 잇는다.”

문제 12. 기대모수에서 출발한 가우시안의 네 좌표

기대모수가 η = (2, 5)인 가우시안이 있다. (가) (μ, σ)를 거치지 말고 F*(η) = −½ log(2πe(η₂ − η₁²))의 기울기로 θ를 구하라. (나) F(θ)와 F*(η)를 구해 F(θ) + F*(η) = θ·η 를 검산하라. 자연모수 공간은 어디인가?

함께 풀기

김민준 M01
김민준

F*를 η₁로 미분하면 η₁/(η₂ − η₁²) = 2, η₂로 미분하면 −½/(η₂ − η₁²) = −0.5. θ = (2, −0.5) 요. θ·η = 4 − 2.5 = 1.5. F = −θ₁²/(4θ₂) + ½ log(−1/θ₂) = 2 + 0.3466 = 2.3466. F* = −½ log(2πe · 1) = −1.4189. 더하면 0.928 이에요. 1.5 랑 안 맞아요.

선생님 T01
선생님

F를 어디서 가져왔어요?

김민준 M01
김민준

정규화 상수 1/√(2πσ²) 에서 로그를 씌웠는데… ½ log(2πσ²) = ½ log(−π/θ₂) 예요. 2σ² = −1/θ₂ 라서 π가 남아요. 제가 ½ log π = 0.572 를 빼먹었어요. 넣으면 F = 2.9189, F + F* = 1.5. 맞아요.

이서연 S01
이서연

대칭성도 보려고 θ = (2, +0.5) 로도 해 봤는데 log(−π/θ₂) 가 정의가 안 돼.

선생님 T01
선생님

θ₂ > 0 이면 분포가 어떻게 생겼어요?

이서연 S01
이서연

exp(2x + 0.5x²) 요. x가 커지면 한없이 커져서 적분이 무한대예요. 정규화가 안 되니까 분포가 아니에요. 자연모수 공간은 θ₁ 은 아무 실수, θ₂ < 0 인 반평면이에요. θ₂ 가 −1/(2σ²) 에서 왔으니 당연했는데, 기호만 보고 아무 실수나 되는 줄 알았어요.

선생님 T01
선생님

좌표가 어디까지 살아 있는지부터 적어 두는 습관이 좋아요. 로그정규화자가 유한한 곳이 곧 그 좌표의 땅이에요.

이서연 S01
이서연

함수를 정의할 때 정의역을 먼저 쓰라는 게 이래서였어요.

문제 13. 확률만 알려 주는 모델의 온도 바꾸기

어떤 서비스가 다음 단어 후보 셋의 확률 p = (0.7, 0.2, 0.1)만 알려 주고 로짓은 알려 주지 않는다. 온도를 바꿔 뽑는다는 것은 로짓을 온도로 나눈 뒤 소프트맥스를 씌우는 것이다. (가) 이 확률을 내놓은 로짓을 되살려라. 하나로 정해지는가? (나) 온도 2로 뽑을 때의 확률을 구하라.

함께 풀기

김민준 M01
김민준

로짓을 모르니까 확률을 2로 나눠 쓰면… (0.35, 0.1, 0.05), 합이 1이 되게 다시 나누면 (0.7, 0.2, 0.1). 그대로예요. 온도를 바꿨는데 아무 일도 안 일어났어요.

선생님 T01
선생님

온도로 나누는 건 무엇이었죠?

김민준 M04
김민준

로짓이요. 확률을 나누면 다시 나눌 때 약분돼서 없어져요. 로짓부터 알아야 하네요.

이서연 S01
이서연

로짓이 이 가족의 θ이고 확률이 η니까, η에서 θ로 가는 길은 F*의 기울기야. 이 가족은 캐리어가 0이라 F*(η) = Σ ηᵢ log ηᵢ, 미분하면 log ηᵢ + 1. 그러니 로짓은 log p = (−0.357, −1.609, −2.303)에 어떤 수를 세 칸에 똑같이 더한 것이야.

선생님 T01
선생님

그 더한 수는 모르는 채로 남는데, 괜찮아요?

이서연 S07
이서연

괜찮아요. 로짓 셋에 같은 수를 더해도 분포가 그대로였으니까, 그 수는 처음부터 정해질 수가 없어요. 온도로 나누면 그 수도 함께 나뉘지만 여전히 세 칸에 똑같이 붙은 수라서 소프트맥스에서 지워져요.

김민준 M01
김민준

그럼 (나)는 log p 를 2로 나눠 소프트맥스를 씌우면 (0.523, 0.279, 0.198). 확률에 제곱근을 씌워 다시 나눈 것과 같네요. 확률로 곧장 하려면 나누기가 아니라 ½제곱이었어요.

선생님 T01
선생님

그래요. 확률에서 로짓으로 돌아가는 길이 log, 곧 쌍대 퍼텐셜의 기울기예요. 온도는 그 돌아간 좌표에서 하는 일이고요.