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

이 장의 물음

경사하강에 잡음을 조금 섞으면 이상한 일이 생긴다. 손실 U(θ) = θ²/2를 θ = 3에서 출발해 학습률 η(에타) = 0.01로 경사하강하면 θ는 바닥 0으로 모여들어 멈춘다. 한 걸음마다 표준정규 잡음에 η를 곱해 더하면 θ는 0 둘레에서 조금 흔들릴 뿐이고, 마르코프 사슬(따로 돌리는 샘플러 하나) 4000개로 재 보면 그 분산은 0.0051이다. 그런데 잡음에 η 대신 √(2η)를 곱하면 흔들림이 갑자기 커져 분산이 0.997이 되고, θ의 값들을 모으면 표준정규분포, 곧 e^(−U)에 비례하는 분포가 나온다. 학습률을 0.1로 바꿔 보면 차이가 더 분명하다. η를 곱한 잡음에서는 분산이 0.052로 학습률을 따라 변하지만, √(2η)를 곱한 잡음에서는 1.04로 거의 그대로다. 웰링과 테(2011)는 이 성질을 큰 데이터의 베이즈 학습에 썼고, 논문 요약에 「표준적인 확률적 경사 최적화 알고리즘에 알맞은 양의 잡음을 더하면, 걸음 크기를 줄여 갈 때 반복값들이 참 사후분포의 샘플로 수렴함을 보인다」고 적었다. 이 방법이 SGLD(stochastic gradient Langevin dynamics)다.

손실 U(θ) = θ²/2에서 경사하강(η = 0.01)에 잡음을 더해 사슬 4000개를 θ = 3에서 시간 30 동안 돌린 결과. 잡음에 η를 곱하면 분산 0.0051로 바닥 둘레에 모이고, √(2η)를 곱하면 분산 0.9972로 목표 분포 e^(−U)(표준정규분포)와 겹친다.
손실 U(θ) = θ²/2에서 경사하강(η = 0.01)에 잡음을 더해 사슬 4000개를 θ = 3에서 시간 30 동안 돌린 결과. 잡음에 η를 곱하면 분산 0.0051로 바닥 둘레에 모이고, √(2η)를 곱하면 분산 0.9972로 목표 분포 e^(−U)(표준정규분포)와 겹친다.

확산 모델에서도 같은 모양이 나온다. DDPM(denoising diffusion probabilistic model, 호·자인·아빌 2020)은 한 단계마다 샘플에 √(1 − ε)를 곱하고 표준편차 √ε인 잡음을 더한다(논문의 기호는 β이지만 역온도 β와 겹치므로 이 장에서는 ε로 쓴다). ε가 작으면 √(1 − ε) ≈ 1 − ε/2이므로, 이 단계는 U(x) = |x|²/2를 걸음 ε/2로 경사하강하면서 잡음 √(2 × ε/2)를 더하는 것과 같다. 분산을 끝없이 키우는 분산 폭발형과 달리 샘플을 원점 쪽으로 조금씩 당기므로, ε를 10⁻⁴에서 0.02까지 늘려 가며 1000단계를 지나면 원래 이미지는 0.0064배만 남고 분포는 데이터와 상관없이 거의 표준정규분포가 된다. 두 경우 모두 「에너지의 내리막으로 η만큼 가고, √(2η)만큼 흔든다」는 규칙을 쓰고, 도착하는 분포는 e^(−에너지)에 비례한다. 잡음은 왜 걸음의 제곱근만큼이어야 하고, 이 규칙은 왜 하필 볼츠만 분포에 도착할까?

이 물음에 답하려면 몇 가지를 차례로 알아야 한다.

랜덤 워크: 동전으로 걷는 사람들의 분포

첫머리의 두 규칙은 모두 샘플에 잡음을 조금씩 더해 간다. 내리막으로 끄는 힘은 잠시 빼고, 잡음만 더해 가는 가장 단순한 경우부터 보자. 잡음을 한 번씩 더할 때마다 샘플 하나는 어디로 갈까? 그리고 그런 샘플을 아주 많이 모으면, 그 분포는 어떤 규칙에 따라 바뀔까?

역사: 피어슨의 편지

1905년 여름 통계학자 칼 피어슨은 모기가 개간한 숲으로 무작위로 퍼져 들어가는 모습을 셈으로 다루려다 『네이처』에 편지를 보내, 한 사람이 일정한 거리를 곧게 걷고 아무 방향으로나 돌아 다시 같은 거리를 걷기를 n번 되풀이할 때 출발점에서 얼마나 떨어져 있을지를 물으며 이것을 「랜덤 워크」라 불렀다. 레일리 경이 곧 답을 보내, 이 물음이 크기가 같고 위상이 제멋대로인 소리 n개를 겹치는 문제와 같다고 짚었다. 피어슨은 그 답을 받아 들고 「트인 들판에서 제 발로 설 수 있는 술 취한 사람을 찾으려면 출발점 근처가 가장 가능성 높은 곳」이라는 교훈을 적었다.

칼 피어슨(1857–1936), 1910년 사진 요판. 출처: Wikimedia Commons(런던 국립초상화미술관 소장), 퍼블릭 도메인
칼 피어슨(1857–1936), 1910년 사진 요판. 출처: Wikimedia Commons(런던 국립초상화미술관 소장), 퍼블릭 도메인

동전을 던져 격자 위를 걷기

정사각 격자의 한가운데 칸에 100만 명이 서 있다. 신호가 울릴 때마다 모든 사람이 동전 두 개를 던져 위, 아래, 왼쪽, 오른쪽 가운데 하나를 똑같은 확률 1/4로 고르고 그쪽으로 한 칸 옮겨 간다. 사람마다 동전을 따로 던지므로 같은 칸에서 출발해도 곧 흩어진다.

xn+1=xn+sn,sn∈{(1,0), (−1,0), (0,1), (0,−1)} (각각 확률 1/4)\textcolor{#1b9e77}{\mathbf{x}}_{n+1} = \textcolor{#1b9e77}{\mathbf{x}}_{n} + \textcolor{#8c547a}{\mathbf{s}}_{n}, \qquad \textcolor{#8c547a}{\mathbf{s}}_{n} \in \{(1, 0),\ (-1, 0),\ (0, 1),\ (0, -1)\} \ \text{(각각 확률 1/4)}
xn한 사람이 n걸음 뒤 서 있는 칸 (처음에는 원점)snn번째 걸음: 동전 두 개로 고른 한 칸 이동, 걸음마다 새로 던짐\begin{array}{ll} \textcolor{#1b9e77}{\mathbf{x}}_{n} & \text{한 사람이 n걸음 뒤 서 있는 칸 (처음에는 원점)} \\ \textcolor{#8c547a}{\mathbf{s}}_{n} & \text{n번째 걸음: 동전 두 개로 고른 한 칸 이동, 걸음마다 새로 던짐} \end{array}

이처럼 걸음마다 따로 뽑은 무작위 이동을 더해 가는 길을 랜덤 워크 (무작위 걸음, random walk)라 한다.

한 사람의 길은 제멋대로다. 왼쪽으로 세 번 연달아 갔다가 오른쪽으로 두 번 돌아오기도 하고, 100걸음 뒤에 출발점에 서 있기도 하고 15칸 떨어진 곳에 가 있기도 하다. 그러나 100만 명을 모아 보면 규칙이 보인다. n걸음 뒤 출발점에서 떨어진 거리 제곱의 평균과, 출발점에 서 있는 사람의 비율, 출발점에서 가로로 10칸 떨어진 칸 (10, 0)에 서 있는 사람의 비율을 재어 보자. 옆에는 한가운데 칸에만 1을 두고 모든 칸을 동시에 이웃 넷의 평균으로 바꾸기를 n번 되풀이했을 때 그 칸에 남는 값을 나란히 적었다.

걸음 수 n 거리 제곱의 평균 원점에 선 비율 이웃 평균: 원점 (10, 0)에 선 비율 이웃 평균: (10, 0)
99 99.07 0 0 0 0
100 100.10 0.00622 0.00633 0.00228 0.00235
400 400.00 0.00161 0.00159 0.00117 0.00124

세 가지가 눈에 띈다. 첫째, 거리 제곱의 평균이 걸음 수와 거의 같다. 100걸음 동안 한 칸씩 쉬지 않고 움직였는데도 출발점에서 떨어진 거리는 평균적으로 √100 = 10칸 남짓이다. 둘째, 사람들의 비율이 이웃 평균을 되풀이한 값과 소수 넷째 자리에서만 조금 다를 뿐 거의 같다. 한 사람 한 사람은 동전에 따라 제멋대로 걸었을 뿐, 누구도 이웃과 평균을 내지 않았는데 말이다. 셋째, 99걸음 뒤에는 원점에도 (10, 0)에도 아무도 없다. 한 걸음마다 가로와 세로 칸 번호의 합이 1씩 바뀌어 홀짝이 뒤집히므로, 홀수 걸음 뒤에는 모두 그 합이 홀수인 칸에 서 있다. 이웃 평균의 값도 99번째에는 두 칸 모두 0이다.

동전 두 개로 100걸음을 걸은 다섯 사람의 길과 도착 거리(4.5, 7.1, 8.6, 5.1, 10.2칸). 오른쪽은 1000명의 도착점으로, 거리 제곱의 평균이 100.3이고 모두 가로 + 세로가 짝수인 칸에 서 있다. 점선 원의 반지름은 √100 = 10칸.
동전 두 개로 100걸음을 걸은 다섯 사람의 길과 도착 거리(4.5, 7.1, 8.6, 5.1, 10.2칸). 오른쪽은 1000명의 도착점으로, 거리 제곱의 평균이 100.3이고 모두 가로 + 세로가 짝수인 칸에 서 있다. 점선 원의 반지름은 √100 = 10칸.

그렇다면 한 사람의 걸음과 모든 칸의 동시 평균은 무슨 관계일까?

사람들의 분포는 이웃 평균을 따른다

n + 1걸음 뒤 어떤 사람이 칸 x에 서 있으려면, n걸음 뒤 x의 이웃 네 칸 가운데 하나에 서 있다가 x 쪽을 가리키는 동전이 나와야 한다. 그 동전이 나올 확률은 1/4이고 동전은 그 사람이 지금까지 어디를 걸어왔는지 기억하지 않으므로, n + 1걸음 뒤 x에 있을 확률은 이웃 네 칸에 있을 확률에 각각 1/4을 곱해 더한 것이다.

ρn+1(x)=∑sρn(x−s)⋅14=14[ρn(x+(1,0))+ρn(x−(1,0))+ρn(x+(0,1))+ρn(x−(0,1))]\textcolor{#e377c2}{\rho}_{n+1}(\textcolor{#1b9e77}{\mathbf{x}}) = \sum_{\mathbf{s}} \textcolor{#e377c2}{\rho}_{n}(\textcolor{#1b9e77}{\mathbf{x}} - \textcolor{#8c547a}{\mathbf{s}}) \cdot \frac{1}{4} = \frac{1}{4}\Big[\textcolor{#e377c2}{\rho}_{n}(\textcolor{#1b9e77}{\mathbf{x}} + (1, 0)) + \textcolor{#e377c2}{\rho}_{n}(\textcolor{#1b9e77}{\mathbf{x}} - (1, 0)) + \textcolor{#e377c2}{\rho}_{n}(\textcolor{#1b9e77}{\mathbf{x}} + (0, 1)) + \textcolor{#e377c2}{\rho}_{n}(\textcolor{#1b9e77}{\mathbf{x}} - (0, 1))\Big]
ρn(x)한 사람이 n걸음 뒤 칸 x에 서 있을 확률 (처음에는 원점만 1)s한 칸 이동 네 가지, 각각 확률 1/4x칸의 위치 (가로, 세로 칸 번호)\begin{array}{ll} \textcolor{#e377c2}{\rho}_{n}(\textcolor{#1b9e77}{\mathbf{x}}) & \text{한 사람이 n걸음 뒤 칸 x에 서 있을 확률 (처음에는 원점만 1)} \\ \textcolor{#8c547a}{\mathbf{s}} & \text{한 칸 이동 네 가지, 각각 확률 1/4} \\ \textcolor{#1b9e77}{\mathbf{x}} & \text{칸의 위치 (가로, 세로 칸 번호)} \end{array}

오른쪽 식은 칸마다 이웃 넷의 평균을 내는 규칙 그대로다. 한 사람이 서 있을 확률의 분포는 이웃 평균 규칙을 정확히 따르고, 100만 명의 비율은 그 확률을 표본으로 잰 것이어서 표본 오차만큼만 다르다. 이웃 평균의 규칙은 거꾸로 보면 모든 칸이 제 값을 네 등분해 이웃 네 칸에 하나씩 나눠 주는 것과 같은데, 한 칸의 값을 그 칸에 서 있을 확률로 읽으면 이것은 「그 칸에 선 사람이 네 방향 가운데 하나로 한 칸 옮겨 간다」는 말과 같다. 값을 나눠 주는 결정론적 규칙과 한 사람의 무작위한 걸음은 같은 것을 두 쪽에서 본 것이다.

거리 제곱이 걸음 수와 같은 까닭

거리 제곱의 평균이 걸음 수와 거의 같았던 이유도 한 사람의 걸음으로 읽을 수 있다. n걸음 뒤 위치는 걸음 s₁, s₂, …, sₙ의 합이므로 거리의 제곱은 걸음마다의 제곱 |sᵢ|² = 1의 합 n에, 서로 다른 두 걸음의 곱 sᵢ·sⱼ의 합을 더한 것이다. 두 걸음은 서로 따로 던진 동전으로 정해지고 한 걸음의 평균 이동은 0이므로, 곱의 평균도 0이 되어 교차항이 모두 사라진다. 그래서 거리 제곱의 평균은 정확히 n이다. 여기서 쓴 것은 한 걸음의 평균 이동이 0이라는 것과 걸음들이 서로 독립이라는 것 두 가지뿐이다. 동전 대신 한 걸음에 정규분포를 따르는 변위를 쓰든 걸음 크기를 제멋대로 섞든, 평균이 0이고 서로 독립이면 분산이 걸음마다 더해진다.

ML에서: 샘플 하나와 분포 전체

확산 모델을 학습하는 코드도 이 두 쪽을 오간다. 코드는 이미지 한 장에 잡음을 한 번씩 더할 뿐이어서, 한 사람이 동전을 던져 한 칸씩 걷는 것과 같다. 가로세로 32픽셀짜리 컬러 이미지(CIFAR-10 데이터 모음의 이미지 한 장)는 픽셀마다 빨강·초록·파랑 세 값이 있어 숫자 32 × 32 × 3 = 3072개로 적힌다. 숫자마다 표준편차 0.1인 잡음을 100번 더하면 숫자 하나가 얼마나 움직였는지는 제멋대로여서, 한 번 해 보니 −3.8에서 3.6까지 퍼졌다. 그러나 3072개를 모아 움직인 거리 제곱의 평균을 내면 이론값 100 × 0.1² = 1에서 크게 벗어나지 않고, 이렇게 더하기를 1000번 되풀이해도 그 평균은 1.000 둘레에서 표준편차 0.025만큼만 흔들렸다. 모델이 배워야 하는 것은 이런 이미지들을 모은 분포가 잡음을 더할수록 어떻게 번져 가는지다. 한 장 한 장의 길은 제멋대로여도, 모은 분포는 이웃 평균처럼 결정론적인 규칙을 따르기 때문에 배울 수 있다.

문제 1. 술 취한 사람은 언제 집에 닿을까

피어슨의 물음처럼 술 취한 사람이 한 걸음에 1 m씩, 격자를 따르지 않고 360° 아무 방향으로나 걷는다. 방향은 걸음마다 새로 정한다. (가) 100걸음 뒤 출발점에서 떨어진 거리의 제곱평균은 격자 위 동전 걸음과 같은가? (나) 집은 출발점에서 20 m 떨어져 있다. 떨어진 거리의 제곱평균제곱근이 20 m가 되려면 몇 걸음이 필요한가?

김민준 M01
김민준

격자가 아니니까 다를 것 같아서 돌려 봤어요. 20만 명이 100걸음 걸었더니 거리 제곱의 평균이 100.2 m²예요. 격자랑 같네요.

이서연 S01
이서연

걸음 하나의 길이 제곱이 1이고 방향이 제멋대로라 평균 이동이 0이잖아. 그 두 가지만 맞으면 격자든 아니든 교차항이 사라져.

선생님 T01
선생님

(나)는요?

김민준 M04
김민준

100걸음에 10 m니까 20 m면 200걸음이요.

이서연 S01
이서연

걸음 수에 비례하는 건 거리가 아니라 거리의 제곱이야. 거리를 두 배로 하려면 거리 제곱은 네 배, 400걸음이 필요해.

김민준 M07
김민준

아, 그렇네요. 400걸음으로 돌리니 제곱평균제곱근이 19.97 m예요. 두 배 멀리 가는 데 네 배 걸리는 거였어요.

선생님 T01
선생님

그래서 피어슨의 말대로 술 취한 사람은 출발점 근처부터 찾는 게 낫죠.

김민준 M11
김민준

조별 과제 회의가 매번 아무 쪽으로나 흘러가면, 안건에서 두 배 멀어지는 데 회의가 네 번 필요한 셈이네요.

문제 2. 걸음이 들쭉날쭉하거나 지난 걸음을 닮으면

격자 위의 사람이 걸음마다 네 방향 가운데 하나를 고른다. (가) 방향은 1/4씩 고르게 고르고, 한 걸음에 한 칸 또는 세 칸을 반반의 확률로 간다면 100걸음 뒤 거리 제곱의 평균은? (나) 이번에는 늘 한 칸씩 가되, 직전 걸음과 같은 방향을 확률 1/2로 다시 고르고 나머지 세 방향을 1/6씩 고른다면?

김민준 M01
김민준

(가)는 한 걸음이 평균 두 칸이니까 2² × 100 = 400이요.

이서연 S06
이서연

돌려 보면 501이야. 걸음마다 더해지는 건 걸음 길이 제곱의 평균이잖아. (1 + 9)/2 = 5니까 100걸음이면 500이지.

김민준 M07
김민준

평균 걸음을 먼저 제곱해 버렸네요. 평균의 제곱이랑 제곱의 평균은 다르죠.

선생님 T01
선생님

(나)는 걸음 길이가 늘 1이에요. 그럼 100이 나올까요?

이서연 S03
이서연

평균 이동은 여전히 0인데… 두 걸음이 독립이 아니에요. 직전과 같은 방향이 1/2, 반대 방향이 1/6이니까 이웃한 두 걸음의 곱의 평균이 1/2 − 1/6 = 1/3이에요. 교차항이 사라지지 않아요.

김민준 M06
김민준

돌려 보니 198이에요. 거의 두 배네요.

선생님 T13
선생님

그래요. 걸음이 서로 닮으면 교차항이 남아서 더 빨리 퍼져요. 거리 제곱이 걸음 수와 같다는 결론은 평균 이동이 0이고 걸음들이 독립이라는 두 조건이 모두 있어야 서요.

이서연 S08
이서연

서로 직교하는 벡터를 더할 때만 길이 제곱이 각 길이 제곱의 합이 되는 거랑 같네요. 직교가 깨지면 내적이 남고요.