부록 · 참고 자료
본문에서 반복적으로 쓰이는 확률 분포, 행렬 항등식, 변분법과 라그랑주 승수법을 정리했습니다.
는 디감마digamma 함수입니다.
A. 확률 분포
A.1 베르누이 분포
- 단일 이진 변수
에 대한 분포로 이 일 확률이다. 켤레 사전 분포는 베타 분포다.
A.2 베타 분포
- 연속 변수
에 대한 분포로 , 을 매개변수로 갖는다. 베르누이·이항 분포의 켤레 사전 분포이며 , 는 · 의 유효 관측 수로 해석된다.
A.3 이항 분포
- 베르누이 시행
번 중 을 번 관측할 확률의 분포다. 이면 베르누이, 이 크면 가우시안에 가까워진다.
A.4 디리클레 분포
, 인 차원 벡터에 대한 분포로 다항 분포의 켤레 사전 분포이며 베타 분포의 일반화다( ).
A.5 감마 분포
- 양의 변수
에 대한 분포로 단변량 가우시안 정밀도의 켤레 사전 분포다. 이면 지수 분포다.
A.6 가우시안 분포
- 단변량은 평균
·분산 , 다변량은 평균 ·공분산 (대칭 양의 정부호)로 결정된다. 의 켤레 사전 분포는 가우시안, 정밀도 행렬의 켤레 사전 분포는 위샤트 분포다.
- 선형 가우시안 관계에서 주변·조건부 분포는 다음과 같다.
, 일 때
- 분할
, 에서 조건부·주변 분포는
A.7 가우시안 감마 · 가우시안 위샤트 분포
- 평균·정밀도가 둘 다 미지인 가우시안의 켤레 사전 분포다. 단변량은 정규 감마normal-gamma, 다변량은 정규 위샤트normal-Wishart이다.
A.8 다항 분포
- 원 핫 이산 변수의 일반화.
개 관측에서 상태 의 개수 에 대한 분포다.
A.9 스튜던트 t 분포
- 같은 평균·다른 분산의 가우시안들의 무한 혼합이다. 자유도
이며 이면 코시 분포, 이면 가우시안이 된다.
A.10 균등 · 폰 미제스 · 위샤트 분포
- 균등 분포
, , . - 폰 미제스 분포von Mises는 주기 변수
에 대한 가우시안 유사 분포다. ( 은 0차 베셀 함수, 은 집중 매개변수). - 위샤트 분포Wishart는 다변량 가우시안 정밀도 행렬의 켤레 사전 분포다.
실습 · 분포 모멘트 공식 검증
베타·감마·디리클레·스튜던트 t 분포에서 표본을 뽑아, 위 표의 평균·분산 공식과 일치하는지 확인합니다.
python
import numpy as np
rng = np.random.default_rng(0); N = 500000
a, b = 2.0, 5.0 # Beta(a, b)
s = rng.beta(a, b, N)
print(f"Beta({a},{b}): 평균 {s.mean():.4f} (이론 {a/(a+b):.4f}), 분산 {s.var():.5f} (이론 {a*b/((a+b)**2*(a+b+1)):.5f})")
ag, bg = 3.0, 2.0 # Gam(a, b): rate b → scale 1/b
g = rng.gamma(ag, 1/bg, N)
print(f"Gam({ag},{bg}): 평균 {g.mean():.4f} (이론 {ag/bg:.4f}), 분산 {g.var():.5f} (이론 {ag/bg**2:.5f})")
al = np.array([2.0, 3.0, 5.0]) # Dirichlet
d = rng.dirichlet(al, N)
print(f"Dir{al.tolist()}: 평균 {np.round(d.mean(0),4).tolist()} (이론 {np.round(al/al.sum(),4).tolist()})")
nu = 5.0 # Student-t
t = rng.standard_t(nu, N)
print(f"St(ν={nu}): 분산 {t.var():.4f} (이론 ν/(ν-2)={nu/(nu-2):.4f})")B. 행렬의 성질
B.1 기본 성질
- 유용한 항등식과 우드베리 항등식Woodbury identity은 다음과 같다(
이면 우변 계산이 훨씬 효율적).
B.2 대각합과 행렬식
, 가 이면 이고, 벡터에 대해 이다.
B.3 행렬 미분
B.4 고윳값 공식
- 정방 행렬
의 고유벡터eigenvector ·고윳값eigenvalue 는 이며, 해의 존재 조건인 특성 방정식characteristic equation은 이다.
실습 · 행렬 항등식 검증 (우드베리 · 행렬식 보조정리)
우드베리 항등식과
python
import numpy as np
rng = np.random.default_rng(1)
n, m = 5, 2
A = rng.standard_normal((n, n)); A = A@A.T + n*np.eye(n) # 양의 정부호
B = rng.standard_normal((n, m)); C = rng.standard_normal((m, n))
D = rng.standard_normal((m, m)); D = D@D.T + np.eye(m)
lhs = np.linalg.inv(A + B@np.linalg.inv(D)@C)
rhs = np.linalg.inv(A) - np.linalg.inv(A)@B@np.linalg.inv(D + C@np.linalg.inv(A)@B)@C@np.linalg.inv(A)
print(f"우드베리 항등식 최대 오차: {np.abs(lhs-rhs).max():.2e}")
Am = rng.standard_normal((n, m)); Bm = rng.standard_normal((n, m))
d1 = np.linalg.det(np.eye(n) + Am@Bm.T); d2 = np.linalg.det(np.eye(m) + Am.T@Bm)
print(f"|I_N+ABᵀ|={d1:.4f}, |I_M+AᵀB|={d2:.4f}, 오차={abs(d1-d2):.2e}")C. 변분법
- 범함수functional
는 함수 를 입력받아 값을 내는 연산자다. 함수의 미소 변화 에 대한 범함수 미분functional derivative은
로 정의된다. 임의의

그림 C.1 · 범함수 미분은
형태의 범함수를 정류시키는 함수는 오일러–라그랑주 방정식Euler–Lagrange equation을 만족한다.
D. 라그랑주 승수법
- 라그랑주 승수법Lagrange multiplier은 제약 조건 하의 임계점을 찾는다. 제약
의 표면에서 는 표면에 수직이고, 의 최적점에서 도 표면에 수직이어야 하므로 두 기울기가 평행하다.
라그랑주 함수

그림 D.1 · 라그랑주 승수법의 기하. 제약
- 부등식 제약inequality constraint
하의 최대화는 다음 카루시–쿤–터커Karush–Kuhn–Tucker; KKT 조건 하에 을 최적화한다.
제약이 비활성inactive이면(

그림 D.2 · 부등식 제약
실습 · 라그랑주 승수법
python
import numpy as np
# max f=x+y s.t. g=x²+y²-1=0. ∇f=λ∇g → (1,1)=λ(2x,2y) → x=y=1/√2
xst = 1/np.sqrt(2)
gradf = np.array([1.0, 1.0]); gradg = np.array([2*xst, 2*xst]); lam = gradf[0]/gradg[0]
print(f"최적점 (x,y)=({xst:.4f},{xst:.4f}), f={xst+xst:.4f} (최댓값 √2={np.sqrt(2):.4f})")
print(f"∇f={gradf.tolist()}, λ∇g={(lam*gradg).round(4).tolist()} (∇f=λ∇g 성립, λ={lam:.4f})")
th = np.linspace(0, 2*np.pi, 100000); vals = np.cos(th) + np.sin(th) # 원 위 격자
print(f"격자 탐색 최댓값={vals.max():.4f} at θ={th[vals.argmax()]:.4f} (π/4={np.pi/4:.4f})")