자주 하는 실수와 요약
자주 하는 실수
| 실수 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 매일 목표 쪽으로 당기면 결국 목표에 붙는다고 봄 | 1 | 당기는 세기와 흔드는 세기의 비가 끝의 퍼짐을 정한다. 흔들림은 쌓여 하루 흔들림보다 커진다 |
| 랑주뱅 걸음의 잡음 크기는 빠르기만 바꾼다고 봄 | 2 | 잡음이 √(2η)일 때만 정상 분포가 p다. 계수가 c면 분산이 c²/2배인 분포에 머문다 |
| 잡음을 탐색용 양념으로 보고 크기를 대충 정함 | 3 | 잡음을 √η로 넣으면 표본의 분산이 반이 되어 구간이 좁아진다. 모델이 실제보다 자신 있다고 말한다 |
| 혼합 비중이 다르면 봉우리 곁의 바늘도 다르다고 봄 | 4 | log π는 상수라 미분하면 사라진다. 비중은 골짜기의 바늘에만 남는다 |
| 담금질만 하면 단계마다 걸음 수는 적어도 된다고 봄 | 5 | 점들이 그 단계 분포에 자리 잡기 전에 안개를 걷으면 뒤처진다. 같은 걸음 수라면 단계를 잘게 나눈다 |
| 분포를 바꾸지 않는 섞기는 아무 일도 하지 않는다고 봄 | 6 | 분포는 그대로지만 개개의 점은 처음 자리를 잊는다 |
| 거꾸로 흐르기에 잡음만 더하거나, 역방향 SDE에서 잡음만 뺌 | 7 | 바늘 몫 하나와 잡음은 한 쌍이다. 잡음만 남기면 퍼지고 바늘만 남기면 꼭대기로 몰린다 |
| 끌림의 방향만 뒤집으면 순방향 과정이 거꾸로 돈다고 봄 | 8 | 잡음이 퍼뜨린 것은 되감기지 않는다. −g²s 몫이 따로 있어야 한다 |
| 논문의 역방향 SDE 에 양수 시간 간격을 넣음 | 8 | 논문의 dt 는 음수다. dt = −Δt 를 넣고 x + (−f + g²s)Δt + g√Δt ε 로 걷는다 |
| 한 번만 뽑은 무작위는 확률이 아니라고 봄 | 9 | 처음 뽑기가 고르게 흩어져 있으면 그 뒤가 정해져 있어도 매 순간의 분포는 같다 |
| 확률 흐름 ODE 에 데이터 분포의 스코어를 넣음 | 10 | 넣는 것은 그 시간의 분포 pₜ 의 스코어다 |
| 바람이 없으면 확률 흐름 ODE 가 무너진다고 봄 | 10 | 무너지는 것은 바늘 몫을 그대로 두고 잡음만 끈 경우다. 바늘 몫을 절반으로 줄이면 같은 분포에 닿는다 |
| 같은 분포를 지나니 ODE 와 SDE 는 언제나 같은 결과를 낸다고 봄 | 11 | 출발이나 바늘이 틀리면 다르다. SDE 는 틀린 출발을 잊고 ODE 는 그대로 물려받는다 |
요약
고정된 분포 p의 바늘을 따라 걸으며 걸음마다 잡음 √(2η)ε를 섞으면(랑주뱅 샘플링), 바늘 쪽으로 옮기는 흐름과 잡음이 퍼뜨리는 흐름이 상쇄되어 p가 정상 분포가 된다. 잡음이 없으면 꼭대기로 몰리고, 크기가 틀리면 다른 분포에 머문다. 봉우리가 멀리 떨어지면 바늘은 봉우리 곁에서 비중을 모르고 걷는 점은 골짜기를 건너지 못해 비율이 출발 그대로 남는다. 잡음을 크게 섞은 지형에서 시작해 단계마다 줄여 가며 걸으면(담금질 랑주뱅) 비중대로 먼저 나뉜 뒤 내려앉는다. 안개를 연속으로 걷으며 거꾸로 흐르는 걸음에 랑주뱅 걸음 하나를 얹으면 역방향 SDE x − fΔt + g²sΔt + g√Δt ε가 된다(앤더슨 1982). 바늘 몫 하나와 잡음은 짝이라, 짝만 지키면 쌍을 몇 개 얹어도 같은 분포를 지나고, DDPM의 뽑는 걸음은 그 한 꼴이다. 쌍을 모두 빼면 잡음 없는 확률 흐름 ODE x − fΔt + ½g²sΔt가 되고, 이 책의 기본 일정에서는 퍼지는 흐름을 거꾸로 따라가던 걸음 그대로다. ODE는 출발점이 도착점을 정하므로 다양성은 처음 잡음에서 오고, 그림과 잡음을 오가는 지도를 준다. 잡음을 다시 넣는 길은 출발이나 바늘의 틀림을 잊는다.
flowchart LR A["바늘만 따라 오르기<br/>모두 꼭대기로"] -->|"잡음 √(2η)ε 를 섞으면"| B["랑주뱅 샘플링<br/>정상 분포 = p"] B -->|"봉우리가 멀면<br/>비율이 안 맞는다"| C["담금질 랑주뱅<br/>안개를 단계마다 걷으며"] C -->|"안개를 연속으로 걷고<br/>걸음마다 한 번만"| D["역방향 SDE<br/>거꾸로 흐르기 + 랑주뱅 한 쌍<br/>x − fΔt + g²sΔt + g√Δt ε"] D -->|"쌍을 모두 빼면"| E["확률 흐름 ODE<br/>x − fΔt + ½g²sΔt<br/>출발점이 도착점을 정한다"] D -->|"분산 보존 일정"| F["DDPM 의 뽑는 걸음"] E -->|"기본 일정 f = 0, g² = 2D"| G["퍼지는 흐름을<br/>거꾸로 따라가기"]
막힌 곳
이제 순수한 잡음에서 그림까지 걷는 길을 안다. 잡음을 다시 넣으며 걷는 역방향 SDE와 잡음 없이 걷는 확률 흐름 ODE는 같은 분포를 지나고, 어느 길이든 필요한 것은 모든 잡음 수준의 바늘뿐이다.
그런데 이 장의 장난감은 모두 1,000걸음, 2,000걸음씩 걸었다. 걸음마다 신경망을 한 번씩 불러야 하니, 그림 한 장에 신경망을 천 번 부르는 셈이다. 잡음 없이 걷는 확률 흐름 ODE의 길도 곧지 않다. 두 봉우리 데이터에서 그 길들은 잡음이 옅어지는 끝 무렵에 크게 휘며 두 봉우리로 갈라진다. 길이 휘어 있으면 큰 걸음으로 걸을 때 길에서 벗어난다. 처음부터 곧은 길을 정해 두고 그 길을 배울 수는 없을까?