14장 — 브라운 운동, 랑주뱅, 포커–플랑크

샘플러의 온도: 걸음과 잡음의 비

이제 첫머리의 물음으로 돌아가자. 경사하강에 더하는 잡음은 왜 걸음 η가 아니라 √(2η)여야 했을까? 그리고 걸음과 잡음을 따로 조절하는 샘플러는 저마다 어떤 분포를 뽑고 있는 것일까?

걸음 a와 잡음 σ로 온도 읽기

SGLD처럼 ζ = 1, 걸음 η, 잡음 √(2η)로 두면 ζD = 1이라 샘플러는 e^(−U), 곧 U = −ln π로 정한 목표 분포 π를 뽑는다. 잡음에 η를 곱하면 ζD = η/2라서 샘플러는 e^(−U/(η/2))를 뽑는데, U = θ²/2이면 이것은 분산이 η/2인 정규분포다. η = 0.01에서 0.005, 이 장 첫머리에서 사슬 4000개로 잰 분산 0.0051이 바로 이것이다. 더 일반적으로, 어떤 알고리즘이 한 걸음에 x ← x − a∇U + σz로 움직인다고 하자. 학습률 η 대신 a로 쓴 것은 SGLD에 한정하지 않고 아무 알고리즘의 걸음을 가리키려는 것이고, σ는 잡음의 표준편차다. 이 한 걸음을 랑주뱅 방정식의 한 걸음 x ← x − (Δt/ζ)∇U + √(2DΔt)z와 맞대면 Δt/ζ = a, 2DΔt = σ²이다. 둘째 식을 첫째 식으로 나누면 2ζD = σ²/a, 곧 ζD = σ²/(2a)이고, 두 흐름이 비기는 분포에서 온도 자리에 서는 것이 ζD였으므로 이 알고리즘은 온도 kT = σ²/(2a)의 볼츠만 분포를 향해 간다. 이 σ²/(2a)를 샘플러의 온도 (한 걸음에 x ← x − a∇U + σz로 움직이는 알고리즘이 향하는 볼츠만 분포의 온도)라 부르자. 걸음 크기와 잡음의 크기를 따로 조절하는 샘플러는 모두 이 식으로 자기가 몇 도에서 샘플을 뽑는지 읽을 수 있다.

직접 움직여 보기샘플러의 온도 σ²/(2a)새 창에서 열기 ↗

ML에서: SGLD의 「알맞은 양의 잡음」

웰링과 테(2011)의 SGLD는 사후분포의 −ln을 위치에너지로 두고 미니배치로 그 기울기를 어림한다.

θn+1=θn−η ∇U~(θn)+2η  zn,U~(θ)=−ln⁡p(θ)−N∣B∣∑i∈Bln⁡p(xi∣θ)\textcolor{#1b9e77}{\theta}_{n+1} = \textcolor{#1b9e77}{\theta}_{n} - \textcolor{#006600}{\eta}\,\nabla \tilde{\textcolor{#a6761d}{U}}(\textcolor{#1b9e77}{\theta}_{n}) + \sqrt{2\textcolor{#006600}{\eta}}\;\textcolor{#1f6066}{\mathbf{z}}_n, \qquad \tilde{\textcolor{#a6761d}{U}}(\textcolor{#1b9e77}{\theta}) = -\ln \textcolor{#e377c2}{p}(\textcolor{#1b9e77}{\theta}) - \frac{\textcolor{#1f77b4}{N}}{|\textcolor{#6d45e6}{\mathcal{B}}|}\sum_{i \in \textcolor{#6d45e6}{\mathcal{B}}} \ln \textcolor{#e377c2}{p}(\textcolor{#1b9e77}{x}_i \mid \textcolor{#1b9e77}{\theta})
θ모델 매개변수 (움직이는 입자)U~미니배치로 어림한 위치에너지 = −ln 사후분포 (상수 제외)p(θ), p(xi∣θ)사전분포, 데이터 하나의 우도N, B전체 데이터 수, 미니배치 (크기 |B|)η걸음 (논문의 ϵt/2)xii번째 데이터zn표준정규 잡음 (걸음마다 새로 뽑음)\begin{array}{ll} \textcolor{#1b9e77}{\theta} & \text{모델 매개변수 (움직이는 입자)} \\ \tilde{\textcolor{#a6761d}{U}} & \text{미니배치로 어림한 위치에너지 = −ln 사후분포 (상수 제외)} \\ \textcolor{#e377c2}{p}(\textcolor{#1b9e77}{\theta}),\ \textcolor{#e377c2}{p}(\textcolor{#1b9e77}{x}_i \mid \textcolor{#1b9e77}{\theta}) & \text{사전분포, 데이터 하나의 우도} \\ \textcolor{#1f77b4}{N},\ \textcolor{#6d45e6}{\mathcal{B}} & \text{전체 데이터 수, 미니배치 (크기 |B|)} \\ \textcolor{#006600}{\eta} & \text{걸음 (논문의 } \epsilon_t/2\text{)} \\ \textcolor{#1b9e77}{x}_i & \text{i번째 데이터} \\ \textcolor{#1f6066}{\mathbf{z}}_n & \text{표준정규 잡음 (걸음마다 새로 뽑음)} \end{array}

논문은 기울기 항에 ε/2를, 잡음의 분산에 ε를 두었는데, 이것은 걸음 η = ε/2에 잡음 √(2η)를 붙인 것과 같아서 온도 kT = σ²/(2a) = 2η/(2η) = 1인 랑주뱅 방정식이다. 그런데 미니배치로 어림한 기울기에는 이미 오차가 섞여 있다. 그렇다면 잡음을 따로 넣지 않은 SGD(stochastic gradient descent, 미니배치로 어림한 기울기를 따라가는 확률적 경사하강)도 몇 도에선가 샘플을 뽑는 샘플러라고 할 수 있을까? 이 물음은 아래 문제 13에서 따져 보자. 이 장을 마친 독자는 「알맞은 양의 잡음」을 「걸음 η에 대해 분산 2η, 곧 σ²/(2a)가 1이 되는 잡음」으로 읽는다.

ML에서: 에너지 기반 모델의 샘플러는 몇 도에서 뽑는가

에너지 기반 모델(energy-based model, EBM)을 학습하려면 모델 분포 e^(−E_θ(x))/Z에서 샘플을 뽑아 모델 분포에서 뽑은 샘플로 내는 평균(음의 단계, negative phase)을 어림해야 한다. 두와 모다치(2019)는 입력 x를 에너지의 내리막으로 옮기며 잡음을 더하는 랑주뱅 방정식을 썼다.

xk=xk−1−a ∇xEθ(xk−1)+σ zk,kT실제=σ22a\textcolor{#1b9e77}{\mathbf{x}}^{k} = \textcolor{#1b9e77}{\mathbf{x}}^{k-1} - \textcolor{#006600}{a}\,\nabla_{\textcolor{#1b9e77}{\mathbf{x}}} \textcolor{#ff7f0e}{E_\theta}(\textcolor{#1b9e77}{\mathbf{x}}^{k-1}) + \textcolor{#4c5d80}{\sigma}\,\textcolor{#1f6066}{\mathbf{z}}^{k}, \qquad \textcolor{#7f7f7f}{k}\textcolor{#8c564b}{T}_{\text{실제}} = \frac{\textcolor{#4c5d80}{\sigma}^2}{2\textcolor{#006600}{a}}
Eθ(x)모델의 에너지 (위치에너지 자리)a, σ기울기 걸음과 잡음의 표준편차 (논문의 식은 a=λ/2, σ2=λ)kT실제이 샘플러가 향하는 볼츠만 분포의 온도xk, zkk번째 걸음의 샘플과 표준정규 잡음 (위첨자 k는 걸음 번호로, 볼츠만 상수 k와 다르다)\begin{array}{ll} \textcolor{#ff7f0e}{E_\theta}(\textcolor{#1b9e77}{\mathbf{x}}) & \text{모델의 에너지 (위치에너지 자리)} \\ \textcolor{#006600}{a},\ \textcolor{#4c5d80}{\sigma} & \text{기울기 걸음과 잡음의 표준편차 (논문의 식은 } \textcolor{#006600}{a} = \lambda/2,\ \textcolor{#4c5d80}{\sigma}^2 = \lambda\text{)} \\ \textcolor{#7f7f7f}{k}\textcolor{#8c564b}{T}_{\text{실제}} & \text{이 샘플러가 향하는 볼츠만 분포의 온도} \\ \textcolor{#1b9e77}{\mathbf{x}}^{k},\ \textcolor{#1f6066}{\mathbf{z}}^{k} & \text{k번째 걸음의 샘플과 표준정규 잡음 (위첨자 k는 걸음 번호로, 볼츠만 상수 k와 다르다)} \end{array}

논문의 식은 a = λ/2, σ² = λ로 온도 1에 맞춰져 있다. 그런데 CIFAR-10(가로세로 32픽셀 컬러 이미지 6만 장의 데이터 모음) 실험에서는 랑주뱅 60걸음을 가면서 기울기 걸음을 10으로, 잡음의 표준편차를 0.005로 두었다고 적었다. 이 샘플러가 실제로 몇 도의 분포를 향하는지는 아래 문제 13에서 직접 읽어 보자. 논문은 「EBM 학습은 MCMC 한 걸음(전이)의 크기에 가장 민감하다」고 적었다(MCMC는 Markov chain Monte Carlo의 머리글자로, 마르코프 사슬을 돌려 샘플을 뽑는 방법을 통틀어 부르는 말이다).

문제 11. 어항 수온은 얼마나 흔들리나

어항의 목표 수온은 25°C다. 히터는 1분마다 목표와의 차이의 10%를 되돌리고, 그 1분 동안 물의 순환과 창문 바람이 수온을 표준편차 0.2°C만큼 무작위로 흔든다. (가) 오래 두면 수온은 목표 둘레에서 표준편차 얼마로 흔들리는가? (나) 히터가 30초마다 5%씩 되돌리게 바꾸고 흔들림도 30초 단위로 적는다. 30초 동안의 흔들림은 얼마로 두어야 하는가? (목표와의 차이를 x로 보면 위젯 2의 샘플러와 같은 꼴이다. 「문제 11 (가) 불러오기」 단추로, (나)는 「문제 11 (나) 민준의 값」 단추와 숫자 칸으로 직접 재어 견주어 보자.)

이서연 S01
이서연

목표와의 차이가 e ← 0.9e + 0.2z로 바뀌니까, 오래 두어 분산 V가 멈추면 V = 0.81V + 0.04예요. V = 0.211, 표준편차 0.46°C고요.

김민준 M11
김민준

(나)는 시간이 절반이니까 흔들림도 절반인 0.1°C요. 돌려 보니 표준편차가 0.32°C, 15초로 쪼개 0.05°C를 넣으면 0.23°C예요. 식을 잘게 쓸수록 어항이 조용해지네요?

이서연 S06
이서연

식을 어떻게 쪼개든 실제 어항은 그대로여야지. 30초짜리 흔들림 두 개가 1분 흔들림 하나가 되는데, 서로 독립이면 더해지는 건 분산이야. 0.1²을 두 번 더하면 0.02인데 1분 흔들림의 분산은 0.04잖아.

선생님 T14
선생님

그래요. 30초 흔들림은 분산이 절반, 표준편차는 0.2/√2 = 0.141°C예요. 그러면 30초 단위로 0.453°C, 15초 단위로 0.450°C로 거의 그대로죠. 되돌리는 몫은 시간에 비례하고, 흔들림의 표준편차는 시간의 제곱근에 비례해야 해요.

김민준 M07
김민준

배달 알바를 두 번에 나눠 뛴다고 그날 수입의 들쭉날쭉이 반으로 줄지는 않는 거네요.

문제 12. 원하는 온도에 맞춘 잡음

손실 U(θ) = θ²/2의 볼츠만 분포에서 샘플을 얻으려고 경사하강 θ ← θ − η∇U에 잡음 σz를 더한다. (가) 온도 kT = 0.1인 분포, 곧 분산 0.1인 정규분포에서 뽑고 싶다. η = 0.01이면 σ는 얼마로 두어야 하는가? (나) 온도 1을 목표로 SGLD처럼 σ = √(2η)를 쓰면 η = 0.01에서는 분산이 1에 가깝지만 η = 0.1에서는 1.04 남짓으로 조금 크게 나온다. 왜 그런가? 걸음을 줄이지 않고 이 치우침을 없앨 수 있는가? ((가)에서 고른 잡음은 위젯 2의 숫자 칸에 넣어 확인해 보자.)

김민준 M04
김민준

온도 1이면 잡음이 √(2η) = 0.141이니까, 온도를 10분의 1로 하려면 0.1을 곱해서 0.0141이요. 돌렸더니… 분산이 0.0100이에요. 목표는 0.1인데요.

이서연 S11
이서연

한 걸음이 x ← x − a∇U + σz면 온도가 σ²/(2a)잖아. 너는 0.0141²/(2 × 0.01) = 0.01, 온도를 100분의 1로 만든 거야. 온도는 σ가 아니라 σ²에 비례해.

김민준 M07
김민준

어항에서 분산 대신 표준편차를 절반으로 줄였던 실수랑 같은 모양이네요. 온도를 10분의 1로 하려면 σ²을 10분의 1로, σ = √(2 × 0.01 × 0.1) = 0.0447이에요.

선생님 T14
선생님

0.0447로 돌려 보세요.

김민준 M03
김민준

0.100이요. 이제 맞네요. 그런데 (나)처럼 η = 0.1에서 √(2η)로 돌리면 1.04예요. 왜 조금 크게 나오죠?

이서연 S11
이서연

정확히 풀면 분산이 2η/(2η − η²) = 1/(1 − η/2)라서 η = 0.1이면 1.053이야. 걸음이 유한해서 생기는 치우침이고, 걸음을 줄이면 1로 가.

선생님 T01
선생님

걸음을 줄이지 않고 이 치우침을 없애려면, 한 걸음을 제안으로 보고 메트로폴리스 수락 단계를 붙이면 돼요. 이것을 MALA(Metropolis-adjusted Langevin algorithm)라고 불러요.

이서연 S08
이서연

근데 왜 하필 제곱근이어야 하는지가 확률론 수업에서 본 거랑 똑같네요. 독립인 변수 n개를 더해서 √n으로 나누면 정규분포가 남고, n으로 나누면 대수의 법칙처럼 0으로 가잖아요. 잡음에 η를 곱하는 건 n으로 나누는 쪽이에요.

문제 13. 이 샘플러는 몇 도에서 뽑나

(가) 손실 U(θ) = θ²/2에서 잡음을 따로 넣지 않은 SGD를 돌린다. 미니배치로 어림한 기울기는 참 기울기에 표준편차 1인 오차가 걸음마다 독립으로 섞인 것이다. 학습률 η = 0.01과 0.001에서 θ는 몇 도의 분포를 향하는가? (나) 두와 모다치(2019)는 CIFAR-10 실험에서 랑주뱅 한 걸음의 기울기 걸음 a를 10, 잡음의 표준편차 σ를 0.005로 두고 60걸음을 갔다. 이 샘플러의 온도는?

김민준 M02
김민준

(가)는 SGD도 미니배치 잡음이 원래 있으니까 샘플러인 셈이죠. 온도 1 근처 아닐까요?

이서연 S12
이서연

기울기 오차에 η가 곱해지니까 한 걸음 잡음은 σ = η × 1이야. 온도는 σ²/(2a) = η²/(2η) = η/2, 곧 0.005와 0.0005야. 학습률을 줄이면 식어.

김민준 M07
김민준

헉, SGD는 처음부터 잡음에 걸음을 곱하고 있었던 거네요.

선생님 T14
선생님

학습률이 크면 미니배치 잡음도 무시할 수 없는 온도를 만들지만, 그 온도는 학습률, 미니배치 크기, 기울기의 분산에 따라 정해질 뿐 목표 온도 1에 맞춘 것이 아니에요. 그래서 SGLD는 잡음을 따로 넣어요.

선생님 T01
선생님

(나)로 가 볼까요? 논문의 식은 a = λ/2, σ² = λ로 온도 1에 맞춰져 있었어요.

김민준 M06
김민준

0.005²/(2 × 10) = 1.25 × 10⁻⁶이요. 온도가 80만 분의 1이에요!

이서연 S01
이서연

그 온도면 잡음은 없는 거나 마찬가지고, 60걸음은 사실상 에너지의 내리막을 따라가는 경사하강이야. 모델 분포 e^(−E_θ)가 아니라 그보다 80만 배 낮은 온도의 분포를 향해 가는 거지.

선생님 T13
선생님

그래요. 논문이 「EBM 학습은 MCMC 한 걸음의 크기에 가장 민감하다」고 적은 것도 그래서예요. 이렇게 학습된 E_θ를 온도 1의 볼츠만 분포 그대로 읽으려면 조심해야 해요.

김민준 M11
김민준

보고서에는 「무작위로 골랐다」고 써 놓고 실제로는 늘 1등만 고른 셈이네요.