MNIST 3
서론
이번에는 한번 GAN을 만들어보자.
GAN은 ‘생성적 적대 신경망’의 줄임말로, 대표적인 생성 모델이다.
GAN
예전에 하도 많이 공부했던 내용이기는 하지만… GAN의 공식과 구조부터 일아보자.

조금 복잡한 식이기는 하지만 생각보다는 간단하다.
특히 머신러닝에서는 수학은 말빨이 좋던 나쁘던 상관없이 내가 생각한걸 정확히 다른 사람에게 전하기 위해서 사용되는 법이다.
즉 생각을 표현한 것이 수식이기 때문에 반대로 수식을 말로 풀어서 쓸 수도 있다는 것이다.
두 개의 네트워크인 G와 D가 있다.
Loss는 1. D에 실제 데이터가 들어왔을 때 1이 나오는 정도 + 2. D에 가짜 데이터(G(z))가 들어왔을 때 0이 나오는 정도로 결정된다.
G는 이 loss를 최소화하도록, D는 이 loss를 최대화하도록 학습된다.
이렇게 하면 두 네트워크는 서로 경쟁하며, 점점 더 좋은 결과를 내는 쪽으로 학습하게 될 것이다.
흔히 쓰는 예가 위폐범과 경찰이다. 원본 논문에 적혀있다고 했던 것 같다.
![]()
모델은 다음과 같다.
보면 알겠지만 단순한 Sequential로 만들 수 있는 모습은 아니다.
구현
Generator과 Discriminator는 nn.Module을 이용해서 만들어주면 될 것 같다.
Discriminator는 단순하지만, Generator는 살짝… 지금까지와 다른 접근이 필요할 것 같다.
굳이 그럴 필요는 없지만 그래프를 그리기 위해? 입력 노이즈는 2-튜플로 할 생각이다.
다음 시간
마저 구현하자.