샘플러의 온도: 걸음과 잡음의 비
이제 첫머리의 물음으로 돌아가자. 경사하강에 더하는 잡음은 왜 걸음 η가 아니라 √(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로 움직이는 알고리즘이 향하는 볼츠만 분포의 온도)라 부르자. 걸음 크기와 잡음의 크기를 따로 조절하는 샘플러는 모두 이 식으로 자기가 몇 도에서 샘플을 뽑는지 읽을 수 있다.
ML에서: SGLD의 「알맞은 양의 잡음」
웰링과 테(2011)의 SGLD는 사후분포의 −ln을 위치에너지로 두고 미니배치로 그 기울기를 어림한다.
논문은 기울기 항에 ε/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를 에너지의 내리막으로 옮기며 잡음을 더하는 랑주뱅 방정식을 썼다.
논문의 식은 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 (나) 민준의 값」 단추와 숫자 칸으로 직접 재어 견주어 보자.)

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

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

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

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

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

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

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

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

0.0447로 돌려 보세요.

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

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

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

근데 왜 하필 제곱근이어야 하는지가 확률론 수업에서 본 거랑 똑같네요. 독립인 변수 n개를 더해서 √n으로 나누면 정규분포가 남고, n으로 나누면 대수의 법칙처럼 0으로 가잖아요. 잡음에 η를 곱하는 건 n으로 나누는 쪽이에요.
문제 13. 이 샘플러는 몇 도에서 뽑나
(가) 손실 U(θ) = θ²/2에서 잡음을 따로 넣지 않은 SGD를 돌린다. 미니배치로 어림한 기울기는 참 기울기에 표준편차 1인 오차가 걸음마다 독립으로 섞인 것이다. 학습률 η = 0.01과 0.001에서 θ는 몇 도의 분포를 향하는가? (나) 두와 모다치(2019)는 CIFAR-10 실험에서 랑주뱅 한 걸음의 기울기 걸음 a를 10, 잡음의 표준편차 σ를 0.005로 두고 60걸음을 갔다. 이 샘플러의 온도는?

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

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

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

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

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

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

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

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

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