지수족

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

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

르장드르 변환: 그래디언트를 새 좌표로

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

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*)′. 여기서는 그 관계가 θ = ∇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*(η) = θ·η 를 검산하라. 자연 파라미터 공간은 어디인가?

기댓값 파라미터 η = (E[x], E[x²])의 평면. 분산 η₂ − η₁² 가 양수인 곳(색칠한 곳)에만 정규분포가 있고, 주어진 점 η = (2, 5)(sources/07-지수족/problems_figs.py)
기댓값 파라미터 η = (E[x], E[x²])의 평면. 분산 η₂ − η₁² 가 양수인 곳(색칠한 곳)에만 정규분포가 있고, 주어진 점 η = (2, 5)(sources/07-지수족/problems_figs.py)

함께 풀기

김민준 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가 커지면 한없이 커져서 적분이 무한대예요. 정규화가 안 되니까 분포가 아니에요.

선생님 T01
선생님

그럼 θ가 살 수 있는 곳은 어디까지예요?

이서연 S01
이서연

θ₁ 은 아무 실수, θ₂ < 0 인 반평면이요. θ₂ 가 −1/(2σ²) 에서 왔으니 당연했는데, 기호만 보고 아무 실수나 되는 줄 알았어요.

선생님 T01
선생님

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

이서연 S01
이서연

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

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

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

서비스가 알려 주는 확률 (0.7, 0.2, 0.1)과 알려 주지 않는 로짓(sources/07-지수족/problems_figs.py)
서비스가 알려 주는 확률 (0.7, 0.2, 0.1)과 알려 주지 않는 로짓(sources/07-지수족/problems_figs.py)

함께 풀기

김민준 M01
김민준

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

선생님 T01
선생님

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

김민준 M04
김민준

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

이서연 S01
이서연

로짓이 이 가족의 θ이고 확률이 η니까, η에서 θ로 가는 변환은 F*의 그래디언트야.

김민준 M01
김민준

여기서 F*는 뭔데?

이서연 S01
이서연

이 가족은 캐리어가 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 이고, log 는 쌍대 퍼텐셜의 그래디언트예요. 온도는 그 돌아간 좌표에서 하는 일이고요.