8장 — 플로우 매칭: 길을 통째로 배우기

자주 하는 실수와 요약

자주 하는 실수

실수 나온 문제 바로잡는 법
흐름선이 출발점과 도착점을 잇는 직선이라고 봄 1 서로 상관없이 섞으면 표준편차가 √((1 − t)²a² + t²)로 곡선이다. 흐름선은 곧지 않다
생성할 때 속도 v 를 그대로 더함 2 v 는 데이터 → 잡음 쪽(t 가 커지는 쪽)의 속도다. t 를 줄이며 걸으니 −v 쪽으로 간다
짝의 속도가 일정하니 신경망이 배우는 속도도 일정하다고 봄 2, 4 한 자리를 여러 짝이 지나간다. 신경망은 그 평균, 곧 주변 속도를 배우고 그것은 자리와 시간마다 다르다
정답이 갈릴 때 더 많은 쪽 하나를 고름 3 제곱 오차를 가장 작게 하는 값은 평균이다
x_t = (1 − t)x₀ + tε 의 분산을 1로 씀 4 잡음에 t 가 곱해져 분산은 t² 이다. 분산이 틀리면 속도의 방향까지 뒤집힌다
속도장이 정확하면 한 걸음으로도 데이터가 나온다고 봄 5 잡음 쪽 끝의 속도는 데이터 평균을 가리킨다. 휜 흐름은 큰 걸음으로 못 따라간다
남은 시간이 짧을 때 목적지 짐작의 작은 차이를 작게 봄 6 속도 = (자리 − 짐작)/남은 시간. 짐작의 오차가 남은 시간에 반비례해 커진다
다리 식의 0/0을 속도장이 무한대인 것으로 읽음 7 정의로 돌아가 극한을 잰다. 잡음 쪽 끝은 식의 가짜, 데이터 쪽 끝은 데이터에 폭이 없을 때만 진짜다
같은 정보이니 무엇을 맞혀도 오차가 같다고 봄 8 바꿔 읽는 식에 1 − t 나 t 로 나누는 곳이 있으면 그 끝에서 오차가 부푼다. 속도를 맞히면 양 끝에서 고르다
앞자리가 비면 거기로 가는 짝짓기가 가장 싸다고 봄 9 제곱 비용에서는 엇갈리는 짝을 풀면 늘 싸진다. 1차원에서는 순서대로 짓는 짝이 최소다
짝을 바꿔도 잡음 쪽 끝의 속도가 y − E[x₀] 라고 봄 10 그 식은 잡음과 그림이 서로 상관없을 때만 맞다. 순서대로 지은 짝은 자리마다 짝이 하나라 속도가 그 짝의 속도다
리플로우 뒤에도 다리 식으로 스코어를 꺼냄 11 트위디 공식은 잡음이 그림과 상관없을 때만 성립한다. 리플로우 짝에서는 다리가 끊긴다
출발할 때의 빠르기로 끝까지 가면 된다고 봄 12, 14 구간 전체로는 평균 속도가 필요하다. 순간 속도로 한 걸음 가면 빗나간다
평균 속도의 t 미분을 0으로 둠 13 끝 시각 t 를 움직이면 구간이 바뀌어 평균도 바뀐다. 실제 모델에서는 자리도 함께 움직인다

요약

자리와 시간을 넣으면 그 자리의 점이 움직이는 빠르기와 방향이 나오는 함수가 속도장이고, 생성은 잡음에서 출발해 t 를 1에서 0으로 줄이며 −v 쪽으로 속도장을 따라가는 일이다. 그림 x₀ 와 잡음 ε 를 짝지어 직선 xₜ = (1 − t)x₀ + tε 로 이으면 짝 하나의 속도는 ε − x₀ 로 일정하다. 신경망이 이 짝의 속도를 제곱 오차로 맞히게 하면(플로우 매칭) 그 자리를 지나는 짝들의 평균, 곧 주변 속도 v(y, t) = (y − E[x₀ ∣ y])/t 를 배우고, 이 주변 속도장이 잡음 분포를 데이터 분포로 옮긴다. 주변 속도와 스코어는 v = −(y + t s)/(1 − t) 로 서로 바뀌는 같은 정보이고(x̂₀ = y − t v, ε̂ = y + (1 − t)v), 속도를 맞히면 다른 어림으로 바꿀 때 오차가 어느 끝에서도 부풀지 않는다. 짝마다 길은 곧아도 짝의 직선들이 엇갈리면 평균한 흐름은 휘고, 큰 걸음은 데이터 평균 쪽으로 빗나간다. 흐름이 만든 짝으로 다시 배우는 리플로우나 묶음 안에서 최적 수송으로 짝을 짓는 방법은 엇갈림을 줄여 길을 편다. 대신 리플로우 뒤에는 트위디 공식이 서지 않아 스코어를 꺼낼 수 없다. 순간 속도 대신 구간의 평균 속도 v̄ 를 배우면(MeanFlow) 한 걸음 x₀ = ε − v̄(ε, 0, 1) 로 닿을 수 있고, 항등식 v̄ = v − (t − r)dv̄/dt 덕에 흐름을 돌리지 않고 배운다.

flowchart LR
  A["스코어 + 걷는 규칙<br/>(레이더를 보는 참가자)"] --> B["속도장 v(x, t)<br/>(길 수첩)"]
  B --> C["짝 하나의 직선<br/>속도 ε − x₀"]
  C -->|"제곱 오차로 맞히면 평균"| D["플로우 매칭<br/>주변 속도 = 짝 속도의 평균"]
  D -->|"트위디 공식"| E["다리<br/>v = −(y + t s)/(1 − t)"]
  D -->|"짝이 엇갈리면 흐름이 휜다"| F["리플로우 · 최적 수송 짝<br/>길을 편다"]
  F -->|"곧을수록 쉽다"| G["평균 속도 v̄ (MeanFlow)<br/>한 걸음 x₀ = ε − v̄(ε, 0, 1)"]
  D --> G

막힌 곳

이제 잡음과 데이터 사이의 길을 정하는 법을 두 가지로 안다. 스코어에 걷는 규칙을 붙이는 길과, 속도장을 직접 배우는 길이다. 둘은 같은 정보로 이어져 있고, 길을 곧게 펴거나 구간의 이동표를 배우면 걸음 수를 크게 줄일 수 있다는 것도 보았다.

그런데 보통의 모델이 배운 길은 여전히 휘어 있다. 신경망을 부르는 횟수가 정해져 있을 때, 그 몇 번으로 휜 길을 가장 잘 따라가려면 어떻게 걸어야 할까? 걸음마다 지금 자리의 빠르기로 곧장 가는 것 말고, 한 걸음 앞을 미리 물어 보고 걸음을 고칠 수는 없을까? 걸음마다 잡음을 조금씩 다시 넣는 걸음은 이 길 위에서 어떤 쓸모가 있을까? 그리고 걸음을 디딜 시각은 0과 1 사이에 고르게 놓아야 할까, 어딘가에 몰아야 할까?