capstone — 한 번은 어렵게 짜보기
GAN 을 깔끔한 train_step() override 로 짠 건 이미 봤어. 이번 lesson 은 같은 모델을 fully manual loop 으로 — fit() 도, train_step() 도 없이 — 짜. 이유는 하나야: fit() 이 짊어지고 있던 게 전부 얼마나 무거운지 직접 느껴보는 거. epoch loop, tape 두 개, metric 출력, checkpoint 로직을 손으로 짜보면 '위 칸의 가치' 가 추상적 주장이 아니라 라인 수로 보여.
manual GAN loop 가 실제로 하는 일
mechanics 는 안 바뀌어 — 책임자만 바뀔 뿐. 각 step 은 여전히 real+fake 섞은 batch 로 discriminator 학습 → generator 가 그걸 속이게 학습, 네트워크마다 optimizer 따로. 아래 뼈대는 two-tape 핵심만 보여줘. 진짜 실행이면 progress 출력, 주기적 sample 이미지 저장, checkpoint 를 직접 감싸야 해 — override 버전이 공짜로 상속하던 것들.
- discriminator 는 real + fake 를 함께 학습
- generator 는 discriminator 를 속이려 시도하며 학습
- 네트워크마다 optimizer 따로
- 두 loss 모두 모니터링 — 건강한 학습은 둘이 긴장 속에 진동 하지, 0 으로 무너지지 않아