리우빌 정리: 해밀턴 흐름은 부피를 바꾸지 않는다
지금까지는 상태 하나가 움직이는 모습을 보았다. 그런데 HMC는 출발점과 운동량을 매번 무작위로 뽑고, 통계역학은 상태 하나가 아니라 수많은 상태에 확률을 매긴다. 다루는 것이 늘 상태들의 무리인 셈이다. 이번에는 조금씩 다른 상태 여럿을 한꺼번에 흘려 보자. 그 무리가 차지하는 넓이는 흐름을 따라가며 어떻게 변할까?
역사: 이름 없는 정리
리우빌 정리의 이력은 엉켜 있다. 리우빌이 1838년에 쓴 논문은 미분방정식의 해들이 이루는 행렬식에 관한 짧은 수학 노트였고, 역학이나 위상공간이라는 말은 나오지 않는다. 이것이 해밀턴 방정식을 따르는 역학계에 그대로 적용된다는 것을 처음 알아본 사람은 1842년의 야코비였고, 야코비의 일을 모른 채 1871년 기체 분자들의 운동에서 같은 결과를 스스로 유도해 통계역학의 기초로 쓴 사람은 볼츠만이었다. 그런데 볼츠만은 1896년의 강의록에서 이 결과를 리우빌의 이름으로 소개했고, 그 뒤로 정리의 이름은 리우빌의 것이 되었다.

진자 위에서 흘린 정사각형
진자(m = l = g = 1)의 위상공간에서 각도가 2.4에서 2.6 사이(라디안, 약 138°에서 149°), 운동량이 0에서 0.2 사이인 작은 정사각형 안에 있는 상태들을 모두 출발시켜 보자. 이 자리를 고른 까닭은 꼭대기(π ≈ 3.14) 가까이까지 크게 흔드는 상태들이라, 에너지가 조금만 달라도 한 번 왕복하는 시간이 크게 달라져 모양이 바뀌는 것이 빨리 보이기 때문이다. 상태들을 출발시키면, 정사각형은 흐름을 따라 움직이면서 모양이 바뀐다. 진자는 크게 흔들릴수록 한 번 왕복하는 데 시간이 더 걸리므로, 정사각형 안에서 에너지가 큰 쪽의 상태들은 작은 쪽보다 뒤처지고 정사각형은 점점 가늘고 길게 늘어난다. 수치 적분으로 경계를 따라가 보면 둘레는 처음 0.8에서 시간 10이 지나면 2.83, 시간 20이 지나면 7.51로 아홉 배 넘게 늘어난다. 그런데 넓이는 세 시각 모두 소수 다섯째 자리까지 0.04 그대로다. 반죽을 밀대로 밀면 모양은 얇고 넓게 바뀌어도 부피는 그대로인 것과 같다.

넓이를 바꾸는 빠르기: 발산
모양은 이렇게 크게 바뀌는데 왜 넓이만은 그대로일까? 이 물음에 답하려면 먼저, 흐름이 넓이를 바꾼다면 그 빠르기를 무엇이 정하는지 알아야 한다. 평면 위의 흐름에서 작은 영역의 넓이가 늘어나는 빠르기는 속도장(점마다 그 자리의 상태가 움직이는 속도 벡터를 하나씩 정해 둔 것, velocity field)의 발산(한 점에서 흐름이 퍼져 나가는 정도, divergence), 곧 각 속도 성분을 자기 좌표로 미분한 값들의 합이 정한다. 영어 이름은 KL 발산처럼 두 분포 사이를 재는 발산과 같지만, 이 발산은 속도장 하나에 붙은 전혀 다른 양이다.
넓이가 실제로 바뀌는 흐름에서 이것을 확인해 보자. 진자에 공기 저항처럼 운동량에 비례하는 마찰을 넣어 ṗ = −sin θ − γp(γ는 감마)로 바꾸면, θ̇ = p를 θ로 미분한 값은 0이고 ṗ를 p로 미분한 값은 −γ이므로 발산은 −γ가 되어 넓이가 e^(−γt)의 빠르기로 줄어든다. γ = 0.2로 같은 정사각형을 흘려 보면 넓이는 시간 2에서 0.0268, 시간 5에서 0.0147로, 0.04 × e^(−0.2t)와 소수 여섯째 자리까지 일치한다.
그렇다면 마찰이 없는 진자, 곧 해밀턴 방정식이 정하는 흐름의 발산은 얼마이길래 넓이가 0.04 그대로였을까?
두 항이 지워진다
해밀턴 방정식의 속도장에서 발산을 계산하면 두 항이 정확히 지워진다.
발산이 어디서나 0이니 어떤 영역도 늘거나 줄지 않는다. 자유도가 n개이면 i마다 같은 계산을 해서 더하면 되므로, 2n차원 위상공간의 부피도 마찬가지다. 이 사실을 리우빌 정리 (해밀턴 흐름은 위상공간의 부피를 보존한다, Liouville’s theorem)라 한다. 마찰이 있으면 모든 상태가 결국 가장 낮은 점 하나로 모여들지만, 이 정리 때문에 마찰이 없으면 어떤 상태도 한곳으로 모이지 않는다.
ML에서: Hamiltonian Neural Networks
진자나 행성의 관측 데이터로 운동을 예측하는 신경망을 학습한다고 하자. 흔한 방법은 상태 (q, p)를 넣고 변화율 (q̇, ṗ)를 직접 출력하게 하는 것인데, 이렇게 배운 속도장은 발산이 0이라는 보장이 없어서 긴 시간을 굴리면 에너지가 조금씩 새거나 불어난다. Greydanus, Dzamba, Yosinski(2019)의 Hamiltonian Neural Networks는 신경망이 스칼라 하나 ℋ_θ(q, p)만 출력하게 하고, 자동미분으로 ∂ℋ_θ/∂p와 −∂ℋ_θ/∂q를 계산해 관측된 변화율과 맞추도록 학습한다. 속도장이 해밀턴 방정식의 모양으로 만들어지므로 학습이 불완전해도 적분 오차를 빼면 배운 에너지 ℋ_θ는 정확히 보존되고 위상공간의 부피도 보존된다. 대신 HNN은 운동량을 관측할 수 있어야 하는데, 속도만 관측될 때를 위해 라그랑지안을 배우는 Lagrangian Neural Networks가 뒤따라 나왔다.
문제 6. 가로로 늘린 사진
가로 1200픽셀, 세로 800픽셀인 사진을 편집한다. 가로를 1.5배로 늘리되 전체 픽셀 수는 그대로 두려면 세로는 몇 픽셀이 되어야 하는가? 같은 편집을 한 번 더 하면 가로와 세로는 처음의 몇 배인가?

가로를 1.5배 늘렸으니까 세로도 1.5배 줄이면 되죠. 800 − 400 = 400픽셀이요.

1.5배 줄인다는 게 절반을 빼는 거야? 넓이를 셈해 봐. 1800 × 400이면 72만 픽셀인데 처음은 96만 픽셀이잖아.

아, 1.5로 나눠야 하네요. 800 ÷ 1.5 ≈ 533픽셀. 1800 × 533.3 = 96만, 맞아요.

두 번 하면요?

가로는 1.5² = 2.25배, 세로는 1/2.25 ≈ 0.444배예요. 곱하면 늘 1이고요. 몇 번을 해도 넓이는 그대로인데 사진은 점점 가늘고 길어져요.

얼굴 사진이면 몇 번만 해도 누군지 못 알아보겠네요. 픽셀 수는 그대로인데.
문제 7. 한쪽으로 늘어나는 흐름
해밀토니안이 ℋ = qp인 계를 생각하자(꼭대기에 거꾸로 선 진자 근처의 운동을 좌표를 45도 돌려 적으면 이 모양이 된다). 해밀턴 방정식을 풀고, 1 ≤ q ≤ 2, 1 ≤ p ≤ 2인 정사각형 안의 상태들이 시간 1, 2 뒤에 차지하는 영역의 가로, 세로, 넓이를 구하라. (풀어 본 뒤 위젯 2의 「문제 7 불러오기」로 확인해 보자.)

q̇ = ∂ℋ/∂p = q니까 q = q₀eᵗ예요. 시간 1이면 q가 e배, 2면 e² = 7.39배로 늘어나요. 정사각형이 한쪽으로 쭉쭉 늘어나니까 넓이도 7.39배가 되겠네요. 리우빌 정리가 안 맞는 예 아니에요?

p는 아직 안 봤잖아. ṗ = −∂ℋ/∂q = −p니까 p = p₀e⁻ᵗ, 거꾸로 줄어들어.

그럼 두 방향을 함께 보면 영역은 어떻게 되죠?

시간 1이면 가로가 e = 2.718, 세로가 1/e = 0.368이고, 시간 2면 가로 7.389, 세로 0.135예요. 곱하면 둘 다 1이네요. 넓이는 그대로예요.

발산으로 봐도 ∂q̇/∂q + ∂ṗ/∂p = 1 − 1 = 0이에요. 흐름을 한 번 적용하는 변환의 행렬식도 eᵗ × e⁻ᵗ = 1이고요. 어느 방향으로 늘어나면 다른 방향으로 꼭 그만큼 줄어드는 거네요.

그래요. 리우빌 정리는 모양이 그대로라는 말이 아니라 넓이가 그대로라는 말이에요. 등고선 qp = 상수는 쌍곡선이라서, 상태들은 쌍곡선을 따라 한쪽 축으로 몰리며 가늘고 길게 늘어나요.

아까 사진을 가로로 늘리고 세로로 누르는 편집이랑 같네요. 화면에서 차지하는 픽셀 수는 그대로인데 얼굴은 알아볼 수 없게 되는 거요.