예측의 대상: 잡음·속도장·이미지

자주 하는 실수와 요약

자주 하는 실수

실수 나온 문제 바로잡는 법
같은 측정 오차는 어느 변수로 적어도 같은 무게라고 봄 1 변수를 바꾸는 식의 기울기 제곱만큼 무게가 달라진다. km/L 로 고르게 줄이면 기름값으로는 화물차를 625분의 1만 본다
원래 그림을 맞히면 짙은 잡음에서 흐릿한 평균이 나와 나쁘다고 봄 2 끝까지 배운 답은 출력 꼴과 상관없이 같은 조건부 평균이다. 넉넉한 신경망에서 다른 것은 손실의 가중치뿐이다
출력 꼴이 다른 모델의 손실 값을 그대로 견줌 3 재는 공간이 달라 단위가 다르다. 출력을 한 공간(예: 속도)으로 바꿔 같은 시험 점에서 다시 잰다
출력 꼴과 손실 공간이 늘 짝지어져 있다고 봄 3 따로 고른다. 원래 그림을 내놓되 속도 공간에서 재면 옅은 잡음 쪽 오차가 무거워진다
받는 쪽이 이미 가진 것을 잊고 보낼 것의 길이를 셈 4 젖은 사진에서 원래 송장을 빼면 얼룩이 나온다. 좁은 곳에서 움직이는 쪽만 보내면 된다
출력이 D개의 수면 D개 방향을 모두 맞힐 수 있다고 봄 5 마지막 층 앞의 폭이 d 면 출력은 d차원의 평평한 곳에 갇힌다. 모든 방향에 퍼진 잡음·속도는 손실을 D − d 아래로 줄이지 못한다
원래 그림도 D개의 수라 잡음처럼 막힌다고 봄 5 원래 그림은 낮은 차원의 면 위에서만 움직인다. 잡음 몫은 식 속의 xₜ 가 채운다
원래 그림 예측의 데이터 쪽 끝에서 큰 속도 오차가 그림을 망친다고 봄 6 마지막 걸음에서 나눈 t 를 걸음 t 가 지워 x̂₀ 에 그대로 내려앉는다. 학습 때는 분모를 자른다
한 방식이 언제나 낫다고 봄 7 문 폭(폭 대 한 번에 내놓는 수)에 따라 갈린다. 문이 넓으면 분해는 손해다
DDPM 과 잠재 디퓨전이 몰라서 잡음을 골랐다고 봄 8 칸마다 내놓는 수가 폭의 50분의 1도 안 돼 벽이 없었고, 남은 차이는 배점이었다
매니폴드 가설이 맞으니 어디서나 원래 그림 예측이 낫다고 봄 9 벽이 없는 곳에서는 손실 공간과 배점이 고른다. 원래 그림의 큰 이점은 내놓는 수가 폭에 닿을 때 나온다

요약

신경망에게 맞히게 할 것은 섞은 잡음, 짝의 속도, 깨끗한 원래 그림 셋이고, 하나를 맞히면 나머지는 지금 자리와 시간으로 식 한 줄씩 계산된다. 제곱 오차로 끝까지 배운 답은 셋 다 그 자리를 지나는 짝들의 평균이라, 짙은 잡음에서의 흐릿함은 출력 꼴과 상관없이 같다. 다른 것은 학습 도중 오차를 어느 잡음 수준에서 얼마나 무겁게 보느냐, 곧 배점이다. 같은 오차를 다른 변수로 적으면 바꾸는 식의 기울기 제곱만큼 무게가 달라져, 원래 그림의 가중치 없는 제곱 오차는 옅은 잡음을, 잡음 오차를 원래 그림으로 바꾸면 짙은 잡음을 가볍게 본다. 출력 꼴과 손실을 재는 공간은 따로 고를 수 있다. 그림은 넓은 공간의 좁은 면 근처에 모여 있고(매니폴드 가설) 섞은 잡음은 모든 방향에 퍼져 있다. 신경망의 마지막 층 앞 폭 d 가 한 번에 내놓는 수 D 보다 작으면 출력은 d 차원의 평평한 곳에 갇혀, 잡음과 속도는 손실을 D − d 아래로 줄이지 못하지만 좁은 면 위의 원래 그림은 같은 신경망으로 맞힌다. 원래 그림 예측의 약한 끝은 데이터 쪽이고, 그 큰 속도 오차는 재는 자리의 문제라 분모를 잘라 다스린다. DDPM 의 U-Net 과 잠재 디퓨전은 칸마다 내놓는 수가 폭의 50분의 1도 안 돼 벽을 만나지 않았고, 그래서 배점이 출력 꼴을 골랐다. 잠재로 간 까닭은 계산과 눈에 띄지 않는 세부였다. 원래 그림 예측은 픽셀을 큰 조각으로 잘라 조각마다 수백 개를 내놓는 신경망에서 다시 나왔다.

flowchart LR
  A["세 출력 꼴<br/>잡음 · 속도 · 원래 그림"] -->|"끝까지 배우면"| B["같은 답<br/>짝들의 평균"]
  A -->|"학습 도중"| C["배점이 다르다<br/>어느 잡음 수준의 오차를 무겁게 보나"]
  C --> D["출력 꼴과 손실 공간은<br/>따로 고른다"]
  E["매니폴드 가설<br/>그림은 좁은 면, 잡음은 모든 방향"] --> F["한 번에 내놓는 수 D 가 폭 d 를 넘으면<br/>잡음·속도는 D − d 의 벽"]
  F --> G["원래 그림 예측만 버틴다"]
  H["DDPM U-Net · 잠재 디퓨전<br/>D / d ≈ 1/50"] -->|"벽이 없다"| C
  I["픽셀 큰 조각<br/>D ≈ d"] -->|"벽에 닿는다"| G

막힌 곳

이제 신경망에게 무엇을 맞히게 할지 고를 수 있다. 신경망이 한 번에 내놓는 수와 폭을 견주어 벽이 있는지 보고, 벽이 없으면 손실을 재는 공간으로 배점을 정한다. 무엇을 내놓든 샘플러는 그것을 원래 그림의 어림이나 속도로 바꿔 받는다.

그런데 샘플러가 그 어림을 받아 실제로 걷는 길은 여전히 휘어 있고, 컴퓨터는 그 길을 몇 번의 걸음으로 끊어서 걸을 수밖에 없다. 같은 신경망, 같은 출력 꼴로도 걸음을 어떻게 디디느냐에 따라 같은 20걸음이 깨끗한 그림을 내기도 하고 뭉개진 그림을 내기도 한다. 신경망을 부르는 횟수가 정해져 있을 때, 그 몇 번으로 휜 길을 가장 잘 따라가려면 어떻게 걸어야 할까?