Skip to content

8 · 근사 추정 ​

확률 모델에서 가장 중요한 일 중 하나는 사후 분포나 그 기댓값을 계산하는 것이지만, 실제로는 이 계산이 불가능할 수 있다. 결정론적 근사 방법을 쓰면 유한한 시간 안에 근사해를 찾을 수 있다.

8.1 변분적 추론 ​

  • 변분적 방법은 변분법calculus of variations에 기반한다. 함수가 값을 받아 값을 내는 사상이라면, 범함수functional는 함수를 받아 값을 내는 사상이다(예: 엔트로피 H[p]=−∫p(x)ln⁡p(x)dx). 잠재 변수·매개변수 전체를 Z, 관측 변수를 X로 두면 로그 주변 확률은 다음처럼 분해된다.
(10.2)ln⁡p(X)=L(q)+KL(q∥p)L(q)=∫q(Z)ln⁡p(X,Z)q(Z)dZ,KL(q∥p)=−∫q(Z)ln⁡p(Z∣X)q(Z)dZ
  • 하한 L(q)를 최대화하는 것은 쿨백–라이블러 발산Kullback–Leibler divergence을 최소화하는 것과 같다. q(Z)=p(Z∣X)이면 KL=0이지만 실제 사후 분포는 다루기 어려우므로, q를 더 제한된 종류로 한정해 그 안에서 최적해를 찾는다.

8.1.1 인수분해된 분포 ​

  • Z를 서로소 집합 Zi로 나누고 q가 이들에 대해 인수분해된다고 가정한다(평균장 근사mean-field approximation).
(10.5)q(Z)=∏i=1Mqi(Zi)
  • 각 인자 qj에 대해 L(q)를 자유 형태로 변분 최적화하면, 최적 인자는 나머지 인자들에 대한 결합 로그 분포의 기댓값으로 주어진다.
(10.9)ln⁡qj⋆(Zj)=Ei≠j[ln⁡p(X,Z)]+const

각 인자가 다른 인자의 기댓값에 의존하므로, 인자들을 번갈아 갱신해 수렴시킨다.

8.1.2 인수분해 근사의 성질 ​

  • 상관된 2변수 가우시안 p(z)=N(z∣μ,Λ−1)를 q(z)=q1(z1)q2(z2)로 근사하면, (10.9)에서 각 인자가 가우시안이 되고
q1⋆(z1)=N(z1∣m1,Λ11−1),m1=μ1−Λ11−1Λ12(E[z2]−μ2)

q2도 대칭적으로 얻는다. 평균은 E[z1]=μ1, E[z2]=μ2로 정확하지만, 각 축의 분산은 조건부 분산 Λkk−1이라 참 주변 분산 (Λ−1)kk보다 작다. 즉 KL(q∥p) 기반 변분 근사는 분산을 과소평가한다.

그림 8.1 · 상관된 가우시안 p(z)(녹색)를 인수분해 가우시안 q(z)(적색)로 근사. (a) KL(q∥p) 최소화, (b) KL(p∥q) 최소화.

  • KL(q∥p)를 최소화하면 분포의 한 최빈값으로 붙는(mode-seeking) 경향이, KL(p∥q)를 최소화하면 모든 최빈값을 평균 내는(mean-covering) 경향이 있다. 두 발산은 모두 알파족alpha family 발산 Dα의 특수한 경우다(KL(p∥q)는 α→1, KL(q∥p)는 α→−1, α=0은 대칭적 헬링거 거리Hellinger distance).

그림 8.2 · 양봉 분포 p(Z)(청색)를 단일 가우시안 q(적색)로 근사. (왼쪽) KL(p∥q)는 두 봉우리를 덮고, (가운데·오른쪽) KL(q∥p)는 한 봉우리에 붙는다(지역 최솟값 둘).

실습 · 인수분해 변분 근사의 분산 과소평가

상관된 2변수 가우시안을 q1(z1)q2(z2)로 근사할 때, 평균장 갱신 m1=μ1−Λ11−1Λ12(E[z2]−μ2)를 반복하면 평균은 맞지만 축별 분산이 참 주변 분산보다 작아지는 것을 확인합니다.

python
import numpy as np
mu = np.array([0.0, 0.0])
Lam = np.array([[2.0, 1.6], [1.6, 2.0]])       # 정밀도 (상관이 큼)
Sigma = np.linalg.inv(Lam)
m = np.array([2.0, -1.0])                        # 초기값
for it in range(30):
    m1 = mu[0] - Lam[0,0]**-1 * Lam[0,1]*(m[1]-mu[1])
    m2 = mu[1] - Lam[1,1]**-1 * Lam[1,0]*(m1-mu[0])
    new = np.array([m1, m2])
    if np.linalg.norm(new-m) < 1e-12: m = new; break
    m = new
print("수렴 평균 q :", np.round(m, 4).tolist(), " (참 평균 [0, 0])")
print("q 분산(축별):", [round(float(1/Lam[0,0]),4), round(float(1/Lam[1,1]),4)])
print("참 주변 분산:", [round(float(Sigma[0,0]),4), round(float(Sigma[1,1]),4)])
print("→ 변분 근사가 주변 분산을 과소평가")

실습 · 두 방향의 KL 발산 (KL(q∥p) vs KL(p∥q))

양봉 목표 분포를 단일 가우시안으로 근사할 때, KL(p∥q) 최소화(모멘트 매칭)는 두 봉우리를 넓게 덮고, KL(q∥p) 최소화는 한 봉우리에 붙는 것을 비교합니다.

python
import numpy as np
def p(x):
    return (0.5*np.exp(-(x+2)**2/(2*0.5**2)) + 0.5*np.exp(-(x-2)**2/(2*0.5**2)))/np.sqrt(2*np.pi*0.5**2)
def gauss(x, mu, s): return np.exp(-(x-mu)**2/(2*s**2))/np.sqrt(2*np.pi*s**2)
xs = np.linspace(-8, 8, 4001); dx = xs[1]-xs[0]; px = p(xs)
# KL(p||q): 모멘트 매칭 (해석적)
Ep = np.sum(xs*px)*dx; Ep2 = np.sum(xs**2*px)*dx
mu_pm, s_pm = Ep, np.sqrt(Ep2-Ep**2)
# KL(q||p): 그리드 최소화
best = None
for mu_ in np.linspace(-4, 4, 81):
    for s_ in np.linspace(0.2, 3, 57):
        q = gauss(xs, mu_, s_); mk = q > 1e-12
        kl = np.sum(q[mk]*(np.log(q[mk])-np.log(px[mk]+1e-300)))*dx
        if best is None or kl < best[0]: best = (kl, mu_, s_)
print(f"KL(p||q) 모멘트매칭: μ={mu_pm:+.3f}, σ={s_pm:.3f}  (두 봉우리를 넓게 덮음)")
print(f"KL(q||p) 최빈값탐색: μ={best[1]:+.3f}, σ={best[2]:.3f}  (한 봉우리에 붙음)")

8.2 변분적 가우시안 혼합 분포 예시 ​

  • 베이지안 가우시안 혼합에서 잠재 변수 p(Z∣π)=∏n∏kπkznk, 관측 p(X∣Z,μ,Λ)=∏n∏kN(xn∣μk,Λk−1)znk에, 켤레 사전 분포로 π에 디리클레, (μ,Λ)에 가우시안–위샤트를 둔다.

그림 8.3 · 베이지안 가우시안 혼합의 방향성 그래프. 판은 N개 관측이며 Λ→μ 링크가 있다.

8.2.1 변분적 분포 ​

  • q(Z,π,μ,Λ)=q(Z)q(π,μ,Λ)로 인수분해하면 잠재 변수 인자는
(10.45)ln⁡q⋆(Z)=∑n=1N∑k=1Kznkln⁡ρnk+const,rnk=ρnk∑j=1Kρnj

로 정규화되며 E[znk]=rnk가 책임값 역할을 한다. 책임값으로 통계량 Nk=∑nrnk, x―k=1Nk∑nrnkxn, Sk=1Nk∑nrnk(xn−x―k)(xn−x―k)⊤를 정의하며, 이는 EM의 값들과 유사하다.

8.3 변분적 선형 회귀 ​

  • 선형 회귀에 가능도 p(t∣w)=∏nN(tn∣w⊤ϕn,β−1), 사전 분포 p(w∣α)=N(w∣0,α−1I), α에 켤레 감마 사전 p(α)=Gam(α∣a0,b0)을 둔다.

그림 8.4 · 베이지안 선형 회귀 p(t,w,α)=p(t∣w)p(w∣α)p(α)의 그래프 모델.

8.3.1 변분적 분포 ​

  • q(w,α)=q(w)q(α)로 두면 q⋆(α)는 감마 분포, q⋆(w)는 가우시안이 된다.
q⋆(α)=Gam(α∣aN,bN),aN=a0+M2,bN=b0+12E[w⊤w]q⋆(w)=N(w∣mN,SN),mN=βSNΦ⊤t,SN=(E[α]I+βΦ⊤Φ)−1

증거 최대화 EM 결과와 거의 같되, α의 점 추정이 기댓값 E[α]로 바뀐 것이 차이다.

8.3.2 예측 분포 ​

  • 예측 분포는 q(w)로 주변화해 얻는다.
p(t∣x,t)=N(t∣mN⊤ϕ(x),σ2(x)),σ2(x)=1β+ϕ(x)⊤SNϕ(x)

8.4 지수족 분포 ​

  • 매개변수 θ는 수가 고정된 집중적intensive 변수, 잠재 변수 Z는 데이터가 늘수록 늘어나는 광역적extensive 변수다. 결합 분포가 지수족 p(X,Z∣η)=∏nh(xn,zn)g(η)exp⁡{η⊤u(xn,zn)}이고 η에 켤레 사전 분포를 두면, q(Z,η)=q(Z)q(η)의 두 인자를 닫힌 형태로 갱신할 수 있다(νN=ν0+N).

8.5 지역적 변분 방법론 ​

  • 전역 변분법이 전체 사후 분포를 근사하는 반면, 지역적 변분법은 개별 변수·함수의 경계를 찾는다. 볼록 함수 f(x)의 접선은 하한이며, 기울기 η의 접선을 ηx−g(η)로 쓰면 볼록 쌍대성convex duality으로
f(x)=maxη{ηx−g(η)},g(η)=maxx{ηx−f(x)}

를 얻는다. 예컨대 f(x)=exp⁡(−x)의 접선 하한은 η=−exp⁡(−ξ)로 매개변수화되며, 엄밀한 경계를 위해 η를 최적화한다. 오목 함수면 max↔min이 바뀌어 상한을 준다.

그림 8.5 · (왼쪽) exp⁡(−x)(적색)와 x=ξ=1의 접선(청색). (오른쪽) ηξ−g(η)는 η=−1/e에서 최대.

그림 8.6 · 볼록 함수 f(x)(적색)와 하한 ηx(청색). 듀얼 함수 g(η)는 기울기 η 접선의 절편이다.

8.6 변분적 로지스틱 회귀 ​

8.6.1 변분적 사후 분포 ​

  • 로지스틱 회귀의 주변 가능도 p(t)=∫∏np(tn∣w)p(w)dw는 다룰 수 없다. p(t∣w)=eatσ(−a)(a=w⊤ϕ)에 시그모이드의 변분 하한을 적용한다.
σ(z)⩾σ(ξ)exp⁡{(z−ξ)/2−λ(ξ)(z2−ξ2)},λ(ξ)=12ξ[σ(ξ)−12]
  • 관측마다 변분 매개변수 ξn을 두면 결합 분포의 하한이 w에 대한 이차식이 되어, 사후 분포의 가우시안 근사를 얻는다.
q(w)=N(w∣mN,SN),mN=SN(S0−1m0+∑n(tn−12)ϕn),SN−1=S0−1+2∑nλ(ξn)ϕnϕn⊤

실습 · 로지스틱 시그모이드의 변분 하한

σ(z)⩾σ(ξ)exp⁡{(z−ξ)/2−λ(ξ)(z2−ξ2)}이 z=±ξ에서 시그모이드에 접하고 다른 곳에서 하한임을 확인합니다.

python
import numpy as np
def sig(z): return 1/(1+np.exp(-z))
def lam(xi): return (sig(xi)-0.5)/(2*xi)
def bound(z, xi): return sig(xi)*np.exp((z-xi)/2 - lam(xi)*(z**2-xi**2))
xi = 2.0
print(f"변분 매개변수 ξ={xi} (z=±ξ에서 등호)")
print(f"  {'z':>4} {'σ(z)':>8} {'하한':>8} {'차이':>9}")
for z in [-3, -2, -1, 0, 1, 2, 3]:
    print(f"  {z:>4} {sig(z):>8.4f} {bound(z, xi):>8.4f} {sig(z)-bound(z, xi):>9.5f}")

8.6.2 변분적 매개변수의 최적화 ​

  • ξn은 하한 L(ξ)=ln⁡∫h(w,ξ)p(w)dw⩽ln⁡p(t)를 최대화해 정한다. EM 접근에서 재추정식은
(ξnnew)2=ϕn⊤E[ww⊤]ϕn=ϕn⊤(SN+mNmN⊤)ϕn

그림 8.7 · 변분적 베이지안 로지스틱 회귀. (왼쪽) 예측 분포와 결정 경계, 데이터에서 멀수록 불확실성 증가. (오른쪽) 사후 분포에서 뽑은 w 표본 다섯의 결정 경계.

8.6.3 초매개변수 추론 ​

  • 초매개변수 α까지 데이터로부터 추론하려면 전역 변분법과 지역 변분법을 결합한다. q(w,α)=q(w)q(α)로 두면 q(w)는 가우시안, q(α)는 감마 분포가 되어 번갈아 갱신한다.

8.7 기대 전파 (EP) ​

  • 기대 전파expectation propagation; EP도 결정적 근사이지만, 변분법과 반대로 KL(p∥q)를 최소화한다. q가 지수족일 때 KL(p∥q) 최소화는 충분 통계량의 기댓값을 맞추는 모멘트 매칭moment matching과 같다(Eq[u]=Ep[u]).

그림 8.8 · 라플라스(적색)·전역 변분(녹색)·EP(청색) 근사 비교. EP는 KL(p∥q)를 써서 변분 근사보다 넓은 분포를 낸다.

EP 알고리즘

결합 분포가 인자들의 곱 p(D,θ)=∏ifi(θ)일 때, 사후 분포를 q(θ)=1Z∏if~i(θ)로 근사한다.

  1. 근사 인자 f~i를 초기화하고 q(θ)∝∏if~i(θ)로 둔다.

  2. 수렴할 때까지 각 인자 f~j에 대해 반복한다.

  • 제거: q∖j(θ)=q(θ)/f~j(θ)

  • 갱신: qnew의 모멘트를 q∖j(θ)fj(θ)의 모멘트와 맞추고 Zj=∫q∖jfjdθ를 계산한다.

  • 인자 갱신: f~j(θ)=Zjqnew(θ)/q∖j(θ)

  1. 모델 증거를 p(D)≃∫∏if~i(θ)dθ로 근사한다.

연습문제 ​

문제 8.1

관측 데이터의 로그 주변 분포 ln⁡p(X)가 (10.2)의 형태 L(q)+KL(q∥p)로 분해됨을 증명하라.

풀이

임의의 분포 q(Z)(∫qdZ=1)에 대해, p(X,Z)=p(Z∣X)p(X)를 이용한다. ln⁡p(X)는 Z에 무관하므로

ln⁡p(X)=∫q(Z)ln⁡p(X)dZ=∫q(Z)ln⁡p(X,Z)p(Z∣X)dZ

우변에 q(Z)/q(Z)를 곱해 분리한다.

=∫q(Z)ln⁡p(X,Z)q(Z)dZ+∫q(Z)ln⁡q(Z)p(Z∣X)dZ

첫 항은 L(q), 둘째 항은 −∫qln⁡p(Z∣X)q=KL(q∥p)이다. 따라서 ln⁡p(X)=L(q)+KL(q∥p). KL⩾0이므로 L(q)는 하한이다. ◼

문제 8.2

로그 로지스틱 함수 f(x)=−ln⁡(1+e−x)가 오목 함수임을 이차 미분으로 증명하고, x=ξ 주변 일차 테일러 전개로 변분적 상한 경계를 유도하라.

풀이

f(x)=−ln⁡(1+e−x)=ln⁡σ(x)이다. 일차 미분은

f′(x)=σ′(x)σ(x)=σ(x)(1−σ(x))σ(x)=1−σ(x)=σ(−x)

이차 미분은

f″(x)=−σ′(x)=−σ(x)(1−σ(x))<0

모든 x에서 f″(x)<0이므로 f는 오목이다. 오목 함수는 접선이 함수 위에 있으므로, x=ξ에서의 일차 테일러 전개가 상한이 된다.

f(x)⩽f(ξ)+f′(ξ)(x−ξ)=−ln⁡(1+e−ξ)+σ(−ξ)(x−ξ)

이 선형 상한의 기울기 σ(−ξ)가 변분 매개변수 역할을 하며, x=ξ에서 등호가 성립한다. ◼

문제 8.3

고정 분포 p(x)를 가우시안 q(x)=N(x∣μ,Σ)로 근사할 때, KL(p∥q)를 μ·Σ에 대해 미분해 최소해가 모멘트 매칭임을 보여라.

풀이

KL(p∥q)=∫pln⁡pdx−∫pln⁡qdx에서 첫 항은 q에 무관하다. 둘째 항에 가우시안 로그

−ln⁡q(x)=12(x−μ)⊤Σ−1(x−μ)+12ln⁡|Σ|+D2ln⁡(2π)

를 대입하면 q에 의존하는 부분은 ∫p(x){12(x−μ)⊤Σ−1(x−μ)+12ln⁡|Σ|}dx이다.

μ에 대해 — 미분해 0으로 두면

∂∂μ=−Σ−1∫p(x)(x−μ)dx=0 ⟹ μ=Ep[x]

Σ에 대해 — ∂∂Σ−1를 취하면 12∫p{(x−μ)(x−μ)⊤−Σ}dx=0에서

Σ=Ep[(x−μ)(x−μ)⊤]=covp[x]

즉 KL(p∥q)의 최소해는 q의 평균·공분산을 p의 것과 맞추는 모멘트 매칭이다. ◼

PDF