서론

이번에는 한번 GAN을 만들어보자.

GAN은 ‘생성적 적대 신경망’의 줄임말로, 대표적인 생성 모델이다.

GAN

예전에 하도 많이 공부했던 내용이기는 하지만… GAN의 공식과 구조부터 일아보자.

gan-eq

조금 복잡한 식이기는 하지만 생각보다는 간단하다.

특히 머신러닝에서는 수학은 말빨이 좋던 나쁘던 상관없이 내가 생각한걸 정확히 다른 사람에게 전하기 위해서 사용되는 법이다.

즉 생각을 표현한 것이 수식이기 때문에 반대로 수식을 말로 풀어서 쓸 수도 있다는 것이다.

두 개의 네트워크인 G와 D가 있다.

Loss는 1. D에 실제 데이터가 들어왔을 때 1이 나오는 정도 + 2. D에 가짜 데이터(G(z))가 들어왔을 때 0이 나오는 정도로 결정된다.

G는 이 loss를 최소화하도록, D는 이 loss를 최대화하도록 학습된다.

이렇게 하면 두 네트워크는 서로 경쟁하며, 점점 더 좋은 결과를 내는 쪽으로 학습하게 될 것이다.

흔히 쓰는 예가 위폐범과 경찰이다. 원본 논문에 적혀있다고 했던 것 같다.

gan-model

모델은 다음과 같다.

보면 알겠지만 단순한 Sequential로 만들 수 있는 모습은 아니다.

구현

Generator과 Discriminator는 nn.Module을 이용해서 만들어주면 될 것 같다.

Discriminator는 단순하지만, Generator는 살짝… 지금까지와 다른 접근이 필요할 것 같다.

굳이 그럴 필요는 없지만 그래프를 그리기 위해? 입력 노이즈는 2-튜플로 할 생각이다.

다음 시간

마저 구현하자.