← 커리큘럼 Phase 0 · Week 1 · Day 1 Day 2 →

Day 1 — 신경망을 함수근사로 다시 보기

"뉴런은 가중합+활성화"라는 그림은 이미 안다. 오늘은 그 그림을 버리고 한 단계 위에서 다시 본다. 신경망을 파라미터화된 함수족(parametric function family)으로, 학습을 함수공간에서의 최적화로, 깊이를 표현력(expressivity)의 지수적 이득으로 본다. 이 관점이 잡혀 있어야 Phase 3의 scaling law, Phase 1의 attention이 "왜 그렇게 설계됐는지"가 보인다. 오늘은 트랜스포머 전체를 떠받칠 수학적 좌표계를 세우는 날이다.

🎯 오늘의 목표

📖 개념 (수업)

0. 이 여정의 좌표계

우리가 6개월간 만들 모든 것 — micrograd, GPT, scaling 실험, 정렬 — 은 결국 같은 세 가지 객체의 변주다: (1) 파라미터화된 함수 $f_\theta$, (2) 목적함수 $\mathcal{L}(\theta)$, (3) $\theta$를 움직이는 최적화 동역학. 트랜스포머는 (1)의 특정 설계일 뿐이고, 정렬(RLHF/DPO)은 (2)를 바꾸는 일이며, scaling law는 (1)의 크기와 (3)의 예산을 (2)의 값에 연결하는 경험법칙이다. 오늘 이 세 객체를 정확히 정의해두면, 이후 모든 것이 이 좌표계 위의 점이 된다.

1. 학습을 한 줄로 — 경험적 위험 최소화

데이터 분포 $\mathcal{D}$에서 뽑힌 $(x,y)$에 대해, 우리가 진짜 최소화하고 싶은 것은 기대 위험(expected risk)이다:

$$R(\theta) = \mathbb{E}_{(x,y)\sim\mathcal{D}}\big[\ell(f_\theta(x),\, y)\big]$$

그런데 $\mathcal{D}$를 모르니 유한 표본 $\{(x_i,y_i)\}_{i=1}^N$으로 근사한 경험적 위험(empirical risk)을 대신 최소화한다:

$$\hat{R}(\theta) = \frac{1}{N}\sum_{i=1}^N \ell(f_\theta(x_i),\, y_i), \qquad \theta^\star = \arg\min_\theta \hat{R}(\theta)$$

딥러닝의 거의 모든 것이 이 한 줄의 변주다. $\ell$이 cross-entropy면 분류·언어모델, MSE면 회귀. 일반화 격차 $R(\theta)-\hat{R}(\theta)$ 를 다루는 것이 정규화·데이터증강·early stopping의 본질이고, Phase 2에서 train/val 곡선이 갈라지는 걸 볼 때 이 격차를 직접 관찰하게 된다.

미리 박아둘 통찰: 언어모델 사전학습은 $\ell$이 다음 토큰에 대한 cross-entropy인 ERM이다. "GPT 학습"이 신비한 게 아니라, $\mathcal{D}$가 인터넷 텍스트이고 $\ell$이 NLL인 거대한 ERM 문제일 뿐이다.

2. MLP = 함수 합성, 그리고 Jacobian

$L$층 MLP는 아핀변환과 비선형의 교대 합성이다. $\mathbf{h}_0 = x$로 두고,

$$\mathbf{h}_\ell = \sigma(W_\ell \mathbf{h}_{\ell-1} + b_\ell), \quad \ell=1,\dots,L, \qquad f_\theta(x) = \mathbf{h}_L$$

전체 모델은 합성 $f_\theta = f_L \circ f_{L-1} \circ \cdots \circ f_1$. 역전파는 결국 이 합성의 미분을 연쇄법칙으로 펼치는 것이고, 그 미분의 핵심 객체가 각 층의 야코비안(Jacobian)이다. 층 $f_\ell:\mathbb{R}^{d_{\ell-1}}\to\mathbb{R}^{d_\ell}$의 야코비안은

$$J_\ell = \frac{\partial \mathbf{h}_\ell}{\partial \mathbf{h}_{\ell-1}} = \mathrm{diag}\big(\sigma'(W_\ell \mathbf{h}_{\ell-1}+b_\ell)\big)\, W_\ell \;\in\; \mathbb{R}^{d_\ell \times d_{\ell-1}}$$

그리고 출력에서 입력까지의 전체 야코비안은 야코비안들의 행렬곱이다: $\frac{\partial \mathbf{h}_L}{\partial \mathbf{h}_0} = J_L J_{L-1}\cdots J_1$. Day 2~3에서 reverse-mode AD가 이 곱을 왼쪽에서 벡터로 효율적으로 처리하는 이유를 본다. (스포일러: gradient는 $1\times d_L$ 벡터라, 행렬-행렬곱 대신 벡터-행렬곱만 하면 된다.)

심화 야코비안 곱 $J_L\cdots J_1$의 스펙트럼이 학습 안정성을 지배한다. 곱의 특이값이 1에서 멀어지면 gradient가 지수적으로 폭발/소실한다 — 이것이 RNN이 긴 의존성에서 실패한 이유이고, residual connection($J_\ell \approx I + \text{작은 항}$)과 LayerNorm이 등장한 동기다. Phase 1 Week 5에서 이 관점으로 residual을 다시 본다.

3. 비선형의 필요성 — 형식적으로

$\sigma$가 없으면 합성이 붕괴한다. 아핀변환의 합성은 아핀변환이므로:

$$W_2(W_1 x + b_1) + b_2 = (W_2 W_1)x + (W_2 b_1 + b_2) = W' x + b'$$

깊이 $L$이든 1이든 표현 가능한 함수족은 $\{x \mapsto Wx+b\}$로 동일하다. 즉 깊이가 표현력에 기여하려면 비선형이 필수다. 이건 "직관"이 아니라 선형대수의 사실이다. 과제 1에서 직접 증명한다.

4. 보편근사정리 — 그리고 그것이 말하지 않는

UAT(Cybenko 1989, Hornik 1991): 비다항 활성화를 가진 은닉층 하나짜리 신경망은 컴팩트 집합 위 임의의 연속함수를 임의 정밀도로 근사한다. 멋지지만, 시험에 나오는 함정은 그 한계다:

그래서 실무는 "얕고 넓게"가 아니라 "깊게" 간다. 왜 깊이가 이기는지가 다음 절이다.

5. 깊이의 표현력 — 선형영역의 지수적 증가

ReLU 망은 구간 선형(piecewise linear) 함수다. "복잡함"의 한 측정치는 입력공간을 자르는 선형영역(linear region)의 개수다. 핵심 결과(Montúfar et al. 2014, Telgarsky 2016 등): 너비 $n$, 깊이 $L$인 ReLU 망이 만들 수 있는 선형영역 수는 깊이에 대해 지수적으로, 너비에 대해 다항적으로 증가한다. 대략

$$\#\text{regions} = \Omega\!\left(\left(\tfrac{n}{d}\right)^{(L-1)d} n^d\right)$$

직관: 각 층이 앞 층이 만든 접힘(fold)을 다시 접는다. $L$번 접으면 접힘이 곱해져 지수가 된다. 즉 같은 파라미터 예산이면 깊게 쌓는 편이 훨씬 복잡한 함수를 표현한다. 이것이 "deep" learning의 정량적 근거이고, Telgarsky는 "얕은 망이 흉내 내려면 너비가 지수적으로 필요한 함수가 깊은 망엔 존재한다"는 분리정리로 못박았다.

각 ReLU 층이 입력공간을 접는다 → 접힘이 합성되며 영역 수가 곱해짐 1층: 2영역 2층: 4영역 3층: 8영역 …

6. 다양체 가설 — 왜 고차원에서 통하나

자연 데이터(이미지, 텍스트)는 명목 차원은 거대하지만($224\times224\times3 \approx 15$만 차원), 실제로는 훨씬 낮은 차원의 다양체(manifold) 근처에 집중되어 있다는 가설이다. "고양이 사진들"은 15만 차원 공간을 균일하게 채우지 않고, 얇은 곡면 위에 모여 있다. 신경망의 각 층은 이 다양체를 점점 펴서(disentangle) 선형 분리가 가능한 표현으로 바꾸는 좌표변환의 연쇄로 볼 수 있다. 이것이 "표현 학습(representation learning)"의 기하학적 그림이고, 트랜스포머의 residual stream도 같은 렌즈로 읽을 수 있다.

오늘의 한 문장: 신경망은 다양체를 펴는 좌표변환의 합성이고, 깊이는 그 변환을 지수적으로 풍부하게 하며, 학습은 그 변환의 파라미터를 ERM으로 맞추는 최적화다. 트랜스포머는 이 틀의 특정 — 매우 잘 작동하는 — 인스턴스다.

✍️ 직접 해보기 (강도 ↑)

과제 1 — 선형 붕괴 증명 + 반례 탐색.
과제 2 — 선형영역 세기 (실험).
입력 $x\in\mathbb{R}$(1차원)에서, 무작위 초기화한 ReLU MLP의 출력 $f(x)$를 $x\in[-5,5]$에서 촘촘히 평가하고 기울기가 바뀌는 지점(=영역 경계) 수를 세어라. 너비를 고정하고 깊이 $L=1,2,3,4$로, 그리고 깊이 고정하고 너비를 키우며 영역 수를 측정해 로그 스케일로 플롯해라. 깊이에 대한 지수적 증가, 너비에 대한 다항적 증가가 보이는가? (numpy만으로 가능)
과제 3 — 야코비안 손유도.
2층 MLP $f(x)=W_2\,\sigma(W_1 x + b_1)+b_2$에 대해 $\frac{\partial f}{\partial x}$를 야코비안 곱으로 적고 ($\sigma$는 원소별), $\frac{\partial f}{\partial W_1}$을 텐서 형태로 유도해라. 차원을 명시하고($W_1\in\mathbb{R}^{d_1\times d_0}$ 등), 결과를 작은 수치미분으로 검산해라.
과제 4 — 환경 + autograd 확인.
도전 이중강하(double descent) 미리보기. 과제 2의 망 용량을 계속 키우면 (보간 임계점 너머) test 거동이 어떻게 될지 가설을 세워 적어두고, Phase 3에서 직접 재현할 때 비교해라. (참고: Belkin et al. 2019, Nakkiran et al. 2019)

✅ 스스로 확인

📝 오늘의 기록

docs/00_day01.md:
다음 (Day 2): 미분을 선형사상으로 재정의하고, 연쇄법칙을 야코비안 곱으로 본다. forward-mode vs reverse-mode AD를 복잡도 관점에서 비교해, 왜 ML이 reverse-mode를 쓰는지($d_{\text{out}}\ll d_{\text{in}}$)를 정량적으로 못박는다. VJP(vector-Jacobian product)라는, micrograd와 PyTorch의 진짜 원자 연산을 도입한다.

← 커리큘럼 Day 1 끝 Day 2 — 미분·야코비안·AD →