← Day 6
Phase 0 · Week 1 · Day 7
Week 2 →
Day 7 — 통합, AD 내부 대응, 첫 글
한 주를 하나의 이론으로 묶는다. micrograd가 PyTorch autograd·JAX와 어떻게 대응되는지 내부 수준에서 짚고,
스칼라 AD의 한계(파이썬 오버헤드, 벡터화 부재)를 정량화해 Week 2(텐서)의 필연성을 못박는다.
그리고 "reverse-mode AD를 처음부터"라는 기술 글을 완성한다 — 단순 복습이 아니라
네 연구 역량을 보여주는 포트폴리오의 첫 페이지.
🎯 오늘의 목표
- 1주차를 ERM·VJP·reverse-mode라는 하나의 틀로 통합한다
- micrograd ↔ autograd(grad_fn) ↔ JAX(함수변환) 대응을 정밀히 안다
- 스칼라 AD의 한계를 정량화해 텐서화 동기를 세운다
- 심화 자기점검을 통과한다
- 기술 글을 완성하고 공개한다
📖 1주차를 하나의 이론으로
| Day | 핵심 결과 | 한 줄 |
| 1 | ERM·표현력·다양체 | 학습=함수공간 최적화, 깊이=선형영역 지수증가 |
| 2 | 야코비안·JVP/VJP·복잡도 | 미분=선형사상, gradient는 단일 VJP, reverse가 $O(T)$ |
| 3 | 계산그래프·adjoint·checkpointing | fan-out=합(증명), 위상역순, 메모리 $O(\sqrt T)$ |
| 4 | define-by-run·VJP 클로저 | 그래프 자동구축, 노드가 자기 VJP를 보유 |
| 5 | backward·gradcheck·안정 CE | 위상정렬+adjoint, 복소스텝 검증, log-sum-exp |
| 6 | 초기화·옵티마이저·지형 | 분산보존(He), Adam, 비볼록 단면 시각화 |
한 문장 통합: 학습은 $\arg\min_\theta \hat R(\theta)$를 reverse-mode AD로 얻은 단일 VJP gradient에
적응적 1차 방법을 적용해 비볼록 지형을 항해하는 것이고, 그 모든 단계의 정확성은 gradcheck로, 안정성은
분산보존·log-sum-exp로 보장된다. 이 문장이 GPT 사전학습에서도 글자 그대로 성립한다 — 규모만 다르다.
micrograd ↔ 실전 프레임워크 (내부 수준)
| 개념 | micrograd | PyTorch | JAX |
| 그래프 | _prev 집합 + 클로저 | grad_fn 객체 DAG(define-by-run) | tracing으로 jaxpr 추출 |
| VJP 단위 | 노드별 _backward | Function.backward | 각 prim의 transpose 규칙 |
| gradient API | L.backward() | loss.backward() | jax.grad(f) (함수변환) |
| 패러다임 | 동적(eager) | 동적 + torch.compile | 함수형 + JIT(XLA) |
| 고차미분 | grad를 Value로 확장 필요 | create_graph=True | grad(grad(f)) 자연스러움 |
핵심 차이 한 줄: PyTorch는 "텐서가 자기 grad_fn을 들고 다니는" 우리 설계의 텐서·C++ 버전이고,
JAX는 "미분을 함수 변환으로 보는" 더 함수형 관점이다. 우리가 만든 건 정확히 PyTorch eager의 스칼라 원형이다.
스칼라 AD는 왜 못 쓰나 — 텐서화의 필연성
우리 엔진은 옳지만 느리다. $d\times d$ 행렬곱 하나가 micrograd에선 $O(d^3)$개의 Value 노드와
그만큼의 파이썬 객체·클로저를 만든다. $d=1000$이면 노드 10억 개 — 파이썬 인터프리터로는 불가능하다.
텐서는 이 연산을 하나의 노드로 묶고, VJP도 하나의 행렬곱($\bar X = \bar Y W^\top$ 등)으로 처리해
BLAS/GPU에 맡긴다. 즉 텐서화는 (1) 그래프 노드 수를 $O(d^3)\to O(1)$로, (2) 연산을 벡터화해 SIMD/GPU로 가속한다.
Week 2의 존재 이유가 이 두 줄이다.
🧪 심화 자기점검
- UAT가 보장하지 않는 세 가지는? 깊이가 너비를 이기는 정량적 근거는? (D1)
- reverse-mode가 스칼라 손실 gradient를 $O(T)$에 주는 이유를 한 문장으로. forward-mode면 왜 $O(nT)$? (D2)
- $\bar W = \bar y\,x^\top$ 를 $f(x{+}\delta)\approx f(x){+}J\delta$에서 유도하라. (D2)
- fan-out에서 adjoint가 합인 것을 다변수 연쇄법칙으로.
+= 필요성과의 연결은? (D3)
- checkpointing이 메모리를 $O(\sqrt T)$로 줄이는 메커니즘은? 추가 비용은? (D3)
- define-by-run의 장점 하나와, 그것이 동적 시퀀스에 왜 유리한지. (D4)
- log-sum-exp가 overflow와 underflow를 동시에 막는 이유. CE의 grad가 softmax−onehot인 유도. (D5)
- He 초기화 $2/d_\text{in}$의 2는 어디서? Adam의 $\sqrt{\hat v}$ 나눗셈이 하는 일은? (D6)
8문제를 막힘없이 유도까지 할 수 있어야 Week 2로 간다. 하나라도 "직관은 알지만 유도가 막힌다"면 그 Day로 돌아가라.
✍️ 메인 과제 — 기술 글
"Reverse-mode AD를 처음부터" 글을 완성하라 (
docs/01_reverse_mode_ad.md 또는 블로그).
대상 독자는
너와 같은 수준의 동료 — 초보용 튜토리얼이 아니라 정확하고 밀도 있는 글로.
추천 구성:
- 문제 설정 — ERM, 왜 gradient가 필요한가, 수치미분의 $O(nT)$ 한계
- 미분=선형사상, 연쇄법칙=야코비안 합성, JVP/VJP
- reverse-mode의 $O(T)$ 결과(Baur–Strassen) + 메모리 트레이드오프
- 구현 — define-by-run, VJP 클로저, 위상정렬, fan-out 합(증명 포함)
- 검증 — 복소스텝 gradcheck, 안정적 CE
- 학습 — 초기화·옵티마이저·지형 시각화로 two-moons 정복
- 한계와 다음 — 스칼라→텐서, 그리고 PyTorch와의 대응
왜 이 글이 무기인가: "autograd 써봤다"는 흔하지만, "reverse-mode를 $O(T)$ 복잡도와 fan-out 증명,
수치 안정성까지 포함해 처음부터 구현하고 글로 설명했다"는 학부 2학년에서 드물다. 랩 지원·면접에서
이해의 깊이를 즉시 증명한다. graphviz 그래프·gradcheck 표·손실 단면을 그림으로 넣어라.
(권장) 공개. micrograd 구현 + gradcheck + two-moons 노트북 + 이 글을 GitHub에.
README에 "Week 1: reverse-mode autodiff from scratch, gradient-checked, with optimizer & loss-landscape experiments."
✅ 1주차 졸업 체크
- gradcheck를 통과하는 reverse-mode AD 엔진을 가졌다
- 초기화/옵티마이저를 직접 구현해 two-moons를 학습시켰다
- 심화 퀴즈 8문제를 유도까지 답했다
- 기술 글을 동료 수준으로 완성했다
- 스칼라 AD의 한계로 텐서화 동기를 설명할 수 있다
📅 다음 주 — Week 2
텐서 AD & PyTorch 내재화 (Day 8–14). 스칼라 micrograd를 텐서로 올린다:
broadcasting의 VJP(축 합산으로 grad 환원), einsum과 그 미분, 선형층/LayerNorm/softmax의 텐서 VJP를
직접 유도·구현하고 torch.autograd.gradcheck로 검증한다. 그 다음 nn.Module·AdamW·mixed precision으로
실전 학습 루프를 세운다. Week 1의 모든 이론이 GPU 위에서 벡터화되어 돌아간다.
준비되면 "Day 8 써줘".
← Day 6
Week 1 완료 🎉
커리큘럼으로 →