저는 Prof. Prathosh AP의 공개 강의인 Mathematical Foundations of Generative AI를 공부하고 있습니다. 이 플레이리스트가 핵심 줄기입니다. 여기의 노트들은 각 섹션에 대한 저의 심층 분석 자료이며, 그림이 중요한 부분에서는 시각 자료로, 선행 지식이 필요한 곳에서는 우회 설명으로, 그리고 공식은 제가 이해한 말로 정리했습니다.
섹션 1: 데이터셋과 문제 정의
플레이리스트의 이후 내용들, 즉 GANs, VAEs, 확산 모델(diffusion), 트랜스포머(transformers), 상태 공간 모델(state-space models), 그리고 선호도 조정(preference tuning)은 모두 동일한 설정에서 시작합니다. 저는 모델을 다루기 전에 이 부분을 확실히 이해하고 싶습니다.
제가 가지고 있는 설정은 다음과 같습니다:
데이터 $D = {x_1, x_2, \dots, x_n} \overset{\text{iid}}{\sim} P_x$ (미지), 여기서 $x_i \in \mathbb{R}^d$ 이며, $d$는 데이터의 차원입니다.
예시: $x_i$가 이미지인 경우, $400 \times 400 \times 3$이므로 $d = 480{,}000$입니다.
목표: $P_x$를 추정하고 이 분포에서 샘플링하는 방법을 학습하는 것입니다.
직관적 이해 (Intuition)
어딘가에는 모든 고양이 사진, 모든 영어 문장, 모든 음성 클립을 만들어낸 숨겨진 레시피, 즉 확률 분포가 존재합니다. 저는 그 레시피를 알지 못합니다. 제가 얻는 것은 그것이 생산해낸 예제들의 더미일 뿐입니다. 생성 모델링은 이 더미들을 사용하여, 동일한 주방에서 새로운 예제들을 만들 수 있을 만큼 충분히 잘 레시피를 재구성하는 것입니다.
점검할 수 있는 비유 (An analogy I can check)
제가 검사할 수 있는 비유를 생각해 봅시다. 요청 처리 과정을 들여다볼 수 없는 운영 웹 서비스가 있다고 가정합니다. 제가 가진 것은 단지 1,000개의 요청에 대한 접근 로그뿐입니다. 저는 실제 사용자와 구별할 수 없는 합성 트래픽을 생성하는 부하 테스트 도구를 원합니다. 즉, 동일한 엔드포인트 조합, 동일한 페이로드 크기, 동일한 타이밍이어야 합니다.
| 부하 테스트 비유 | 표기법 |
|---|
| 실제의 미지 사용자 행동 | $P_x$, 진정한 데이터 분포 |
| ... | |
숨겨진 2차원 분포가 $P_x$의 역할을 합니다. 처음에는 점들, 즉 데이터셋만 보입니다. $P_x$를 드러내서 보통은 눈에 보이지 않는 것을 보고, $n$을 조절해서 더 많은 데이터가 어떻게 모양을 드러내는지 확인해 보세요.
'새로운 데이터셋 그리기(Draw a new dataset)'를 할 때마다 다른 $D$와 동일한 녹색 $P_x$가 아래에 나타납니다. 데이터셋은 무작위입니다. 분포는 제가 찾고자 하는 고정된 것입니다. $n = 5$일 때는 모양이 추측에 불과합니다. 하지만 $n = 1000$일 때는 두 개의 군집(clumps)이 명확하게 보입니다.
공식 이전에 필요한 내용들
랜덤 변수와 랜덤 벡터. 랜덤 변수는 주사위 굴림($X ext{은 } {1, ext{부터 }6}$)처럼 우연에 의해 값이 결정되는 양입니다. 랜덤 벡터는 높이와 무게처럼 여러 숫자가 한 번에 있는 경우로, 같은 개념을 가지며 $X ext{은 } ext{R}^2$과 같습니다. 대문자 $X$는 일반적으로 무작위적인 것을 의미하고, 소문자 $x_i$는 실제로 나온 특정 값을 의미합니다.
분포와 밀도. $P_x$는 각 가능한 값이 얼마나 발생할 가능성이 높은지 알려줍니다. 주사위의 경우 표(table)로 나타나며, 각 면은 1/6의 확률을 가집니다. 반면, 픽셀 강도와 같은 연속적인 값의 경우에는 공간에 대한 히트맵인 밀도 $p_x(x)$로 표현됩니다. 높은 밀도는 그 값들이 자주 발생한다는 것을 의미합니다. 위의 차트에서 녹색 음영이 바로 이 밀도를 나타냅니다.
제가 지속적으로 필요하게 될 두 가지 사실:
$$
p_x(x) ext{은 } 0 ext{보다 크거나 같다} ext{ 그리고 } ext{R}^d ext{ 전체에 대한 적분값은 } 1 ext{이다}
$$
두 번째는 모든 확률 질량(probability mass)이 합하여 1이 된다는 것을 의미합니다. 저는 분포와 그 밀도 모두를 $P_x$라는 용어를 느슨하게 사용하여 지칭할 것입니다. 이는 표준적인 방식이며, 차이가 중요할 때는 명확히 밝힐 것입니다.
iid (독립적이고 동일하게 분포된).
- 동일하게 분포됨(Identically distributed): 모든 $x_i$는 동일한 $P_x$에서 나옵니다. 모든 로그 라인은 생산 환경(production)의 것이 아니라, 일부가 생산 환경에서, 일부가 테스트 환경에서 온 것이 아닌, 동일한 사용자 집단에서 왔어야 합니다.
- 독립적(Independent): $x_3$을 안다고 해서 $x_7$에 대해 추가적인 정보를 얻지 못합니다. 주사위를 처음 굴린 것이 두 번째 굴림에 영향을 미치지 않습니다.
표기법으로는 $x_i ext{는 } x_j ext{와 독립적이며} (x_i ext{은 } x_j ext{와 무관함}) ext{ 그리고 } x_i ext{는 } P_x ext{를 따른다}$.
공식
$$\begin{equation*} D = {x_1, x_2, \dots, x_n} \overset{\text{iid}}{\sim} P_x, \qquad x_i \in \mathbb{R}^d \end{equation*}$$
읽어주기: 데이터셋 $D$는 $n$개의 점들로 구성된 집합입니다. 각 점은 동일한 미지의 분포 $P_x$에서 독립적으로 추출됩니다 (independent draw). 각 점은 $d$개의 실수로 이루어진 벡터입니다.
| 기호 | 의미 | 유형 / 형태 | 역할 |
|---|
| $D$ | 데이터셋 | $n$개 벡터의 집합 | 제가 실제로 관찰하는 유일한 것 |
| ... | | | |
| '미지(unknown)'가 전체 문제인 이유. 만약 제가 $P_x$를 알고 있다면, 그 분포에서 샘플링하여 끝낼 것입니다. 이 플레이리스트에 있는 모든 모델은 오직 샘플만을 통해 $P_x$로 작업하는 다른 트릭들입니다. | | | |
iid(독립 동일 분포)가 중요한 이유. 이는 기댓값, 즉 $P_x$에 대한 평균을 데이터셋에 대한 평균으로 대체할 수 있게 해줍니다. 이것이 바로 대수의 법칙(law of large numbers)입니다:
$$rac{1}{n}\sum_{i=1}^n h(x_i) ; o_{n\to\infty} \mathbb{E}_{x\sim P_x}[h(x)]$$
이 수식은 나중에 나올 모든 학습 손실(training loss)의 근간입니다. 이 차트는 작은 버전을 보여줍니다: 샘플 평균이 $n$이 증가함에 따라 안정화되는 것을 볼 수 있습니다.
$d$가 매우 큰 이유. 400×400 RGB 이미지는 $\mathbb{R}^{480{,}000}$ 공간의 한 점이며, 각 픽셀마다 색상 채널별로 하나의 좌표를 가집니다. 실제 이미지는 그 공간의 얇은 영역을 차지합니다. 무작위 픽셀 벡터는 TV 정지 화면처럼 보입니다. 이것이 바로 매니폴드 가정(manifold hypothesis)이며, 단순한 GAN 학습이 실패할 때 다시 등장하게 됩니다.
하나의 목표 속에 숨겨진 두 가지 작업
$D$가 주어졌을 때, $P_x$를 추정하고 그 분포에서 샘플링하는 방법을 배우는 것입니다. 이들은 서로 다른 작업이며, 각기 다른 모델들이 서로 다른 부분에 중점을 둡니다.
| 작업 | 의미 | 강조하는 모델 |
|---|
| 밀도 추정 (Density estimation) | | |
수면 시간과 마신 커피 개수를 나타내는 임의의 사람에 대한 점들로 구성된 데이터셋 $D$를 생각해 봅시다.
$$
D = {x_1, x_2, x_3} = {(7, 1), \ (6, 2), \ (8, 0)}
$$
여기서 각 $x_i \in \mathbb{R}^2$이므로 차원(dimension) $d = 2$입니다. 여기서 $x_2 = (6, 2)$는 수면 시간 6시간과 커피 2잔을 의미합니다. iid란 동일한 모집단에서 개별적으로 조사된 세 명의 다른 사람을 의미합니다.
저는 알려지지 않은 확률 분포 $P_x$ 하에서의 $\mathbb{E}[ ext{coffees}]$를 알고 싶습니다. 제가 가지고 있지 않은 분포에 대해서는 적분할 수 없습니다. iid라는 가정 덕분에 샘플로부터 이를 추정할 수 있습니다: $\tfrac{1}{3}(1 + 2 + 0) = 1$.
생성(generative) 목표는 $(7.5, 0.5)$와 같은 새로운 쌍을 출력하는 기계입니다. 이 값은 그저 그럴듯한 것이어야 하며 $D$에서 복사된 것이 아니어야 합니다. 더 많은 수면 시간은 적은 커피 소비와 경향이 있습니다. 좌표 간의 이러한 의존성(dependency)이야말로 $P_x$가 포착하는 것이며, 단순히 각 열별 평균만으로는 불가능합니다.
차원 $d = 480{,}000$이고 $n$이 수백만 개에 달할 때 같은 그림은 이미지 생성입니다.
제가 이해한 바를 바탕으로 플레이리스트의 나머지 부분
| 단계(Stretch) | 모델(Model) | "데이터셋 $D$로부터 $P_x$ 학습하기" 접근 방식 |
|---|
| 초기(Early) | GAN / 발산 최소화 (divergence minimisation) | $z \sim \mathcal{N}(0, I)$를 통해 $g_{\theta}$로 통과시키고 f-발산을 $P_x$로 축소한다 |
| ... | | |