← 커리큘럼 Phase 0 · Week 1 · Day 1 Day 2 →
🎯 오늘의 목표
📖 개념 (수업)
우리가 6개월간 만들 모든 것 — micrograd, GPT, scaling 실험, 정렬 — 은 결국 같은 세 가지 객체의 변주다: (1) 파라미터화된 함수 $f_\theta$, (2) 목적함수 $\mathcal{L}(\theta)$, (3) $\theta$를 움직이는 최적화 동역학. 트랜스포머는 (1)의 특정 설계일 뿐이고, 정렬(RLHF/DPO)은 (2)를 바꾸는 일이며, scaling law는 (1)의 크기와 (3)의 예산을 (2)의 값에 연결하는 경험법칙이다. 오늘 이 세 객체를 정확히 정의해두면, 이후 모든 것이 이 좌표계 위의 점이 된다.
데이터 분포 $\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 곡선이 갈라지는 걸 볼 때 이 격차를 직접 관찰하게 된다.
$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$ 벡터라, 행렬-행렬곱 대신 벡터-행렬곱만 하면 된다.)
$\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에서 직접 증명한다.
UAT(Cybenko 1989, Hornik 1991): 비다항 활성화를 가진 은닉층 하나짜리 신경망은 컴팩트 집합 위 임의의 연속함수를 임의 정밀도로 근사한다. 멋지지만, 시험에 나오는 함정은 그 한계다:
그래서 실무는 "얕고 넓게"가 아니라 "깊게" 간다. 왜 깊이가 이기는지가 다음 절이다.
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는 "얕은 망이 흉내 내려면 너비가 지수적으로 필요한 함수가 깊은 망엔 존재한다"는 분리정리로 못박았다.
자연 데이터(이미지, 텍스트)는 명목 차원은 거대하지만($224\times224\times3 \approx 15$만 차원), 실제로는 훨씬 낮은 차원의 다양체(manifold) 근처에 집중되어 있다는 가설이다. "고양이 사진들"은 15만 차원 공간을 균일하게 채우지 않고, 얇은 곡면 위에 모여 있다. 신경망의 각 층은 이 다양체를 점점 펴서(disentangle) 선형 분리가 가능한 표현으로 바꾸는 좌표변환의 연쇄로 볼 수 있다. 이것이 "표현 학습(representation learning)"의 기하학적 그림이고, 트랜스포머의 residual stream도 같은 렌즈로 읽을 수 있다.
✍️ 직접 해보기 (강도 ↑)
torch.cuda.is_available()==Truex=torch.randn(3,requires_grad=True); y=(x@x); y.backward(); print(x.grad) — 손으로 $\nabla_x(x^\top x)=2x$ 와 일치 확인✅ 스스로 확인
📝 오늘의 기록
docs/00_day01.md:
← 커리큘럼 Day 1 끝 Day 2 — 미분·야코비안·AD →