Skip to content

8 · 근사 추정

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

8.1 변분적 추론

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

8.1.1 인수분해된 분포

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

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

8.1.2 인수분해 근사의 성질

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

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

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

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

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

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

상관된 2변수 가우시안을 q1(z1)q2(z2)로 근사할 때, 평균장 갱신 m1=μ1Λ111Λ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(qp) vs KL(pq))

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

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π)=nkπkznk, 관측 p(XZ,μ,Λ)=nkN(xnμk,Λk1)znk에, 켤레 사전 분포로 π에 디리클레, (μ,Λ)에 가우시안–위샤트를 둔다.

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

8.2.1 변분적 분포

  • q(Z,π,μ,Λ)=q(Z)q(π,μ,Λ)로 인수분해하면 잠재 변수 인자는
(10.45)lnq(Z)=n=1Nk=1Kznklnρnk+const,rnk=ρnkj=1Kρnj

로 정규화되며 E[znk]=rnk가 책임값 역할을 한다. 책임값으로 통계량 Nk=nrnk, xk=1Nknrnkxn, Sk=1Nknrnk(xnxk)(xnxk)를 정의하며, 이는 EM의 값들과 유사하다.

8.3 변분적 선형 회귀

  • 선형 회귀에 가능도 p(tw)=nN(tnwϕn,β1), 사전 분포 p(wα)=N(w0,α1I), α에 켤레 감마 사전 p(α)=Gam(αa0,b0)을 둔다.

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

8.3.1 변분적 분포

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

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

8.3.2 예측 분포

  • 예측 분포는 q(w)로 주변화해 얻는다.
p(tx,t)=N(tmNϕ(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)의 접선은 하한이며, 기울기 η의 접선을 ηxg(η)로 쓰면 볼록 쌍대성convex duality으로
f(x)=maxη{ηxg(η)},g(η)=maxx{ηxf(x)}

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

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

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

8.6 변분적 로지스틱 회귀

8.6.1 변분적 사후 분포

  • 로지스틱 회귀의 주변 가능도 p(t)=np(tnw)p(w)dw는 다룰 수 없다. p(tw)=eatσ(a)(a=wϕ)에 시그모이드의 변분 하한을 적용한다.
σ(z)σ(ξ)exp{(zξ)/2λ(ξ)(z2ξ2)},λ(ξ)=12ξ[σ(ξ)12]
  • 관측마다 변분 매개변수 ξn을 두면 결합 분포의 하한이 w에 대한 이차식이 되어, 사후 분포의 가우시안 근사를 얻는다.
q(w)=N(wmN,SN),mN=SN(S01m0+n(tn12)ϕn),SN1=S01+2nλ(ξ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(ξ)=lnh(w,ξ)p(w)dwlnp(t)를 최대화해 정한다. EM 접근에서 재추정식은
(ξnnew)2=ϕnE[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(pq)를 최소화한다. q가 지수족일 때 KL(pq) 최소화는 충분 통계량의 기댓값을 맞추는 모멘트 매칭moment matching과 같다(Eq[u]=Ep[u]).

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

EP 알고리즘

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

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

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

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

  • 갱신: qnew의 모멘트를 qj(θ)fj(θ)의 모멘트와 맞추고 Zj=qjfjdθ를 계산한다.

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

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

연습문제

문제 8.1

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

풀이

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

lnp(X)=q(Z)lnp(X)dZ=q(Z)lnp(X,Z)p(ZX)dZ

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

=q(Z)lnp(X,Z)q(Z)dZ+q(Z)lnq(Z)p(ZX)dZ

첫 항은 L(q), 둘째 항은 qlnp(ZX)q=KL(qp)이다. 따라서 lnp(X)=L(q)+KL(qp). KL0이므로 L(q)는 하한이다.

문제 8.2

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

풀이

f(x)=ln(1+ex)=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(pq)μ·Σ에 대해 미분해 최소해가 모멘트 매칭임을 보여라.

풀이

KL(pq)=plnpdxplnqdx에서 첫 항은 q에 무관하다. 둘째 항에 가우시안 로그

lnq(x)=12(xμ)Σ1(xμ)+12ln|Σ|+D2ln(2π)

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

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

μ=Σ1p(x)(xμ)dx=0  μ=Ep[x]

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

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

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

PDF