인공지능의 궁극적인 목표중의 하나는 ‘인간의 사고를 모방하는 것’ 입니다. GAN 역시 인간의 사고를 일부 모방하는 알고리즘이라고 할 수 있습니다. 머릿속에 ‘사람의 얼굴’을 떠올려봅시다. 우리는 어렵지 않게 사람의 얼굴을 떠올릴 수 있습니다. 또한 그림 그리는 실력만 좋다면 그걸 그려낼 수도 있습니다. 태어나서 한번도 보지 못했던 새로운 얼굴도 그려낼 수 있죠. 그게 가능한 이유는 우리는 지금까지 살면서 수많은 사람의 얼굴을 보고 학습해왔기 때문입니다. 우리는 그림을 어떻게 그려야 그게 사람 얼굴이 되는지를 알고 있습니다. GAN은 이러한 방식의 우리 사고를 모방합니다.
GAN(Generative Adversarial Network)은 Generator와 Discriminator의 경쟁적인 학습을 통해 Data의 Distribution을 추정하는 알고리즘입니다. 여기서 Data의 Distribution은 쉽게 말하면 ‘어떻게 생겨먹었는가’를 의미합니다. 예를 들면, 사람 얼굴 이미지를 생성해 내는 알고리즘은 사람의 얼굴을 그럴듯하게 만들어 내기 위하여 ‘사람의 얼굴이 대충 어떻게 생겼는가’, ‘어떤 식으로 생겨야 사람 얼굴이라고 하는가’를 먼저 학습해야 할 필요가 있습니다. 이것을 바로 ‘사람 얼굴 이미지의 Distribution’이라고 할 수 있고, GAN은 그 것을 학습합니다.
이 포스트에서는 2014년 첫 논문을 시작으로 하여 DiscoGAN 알고리즘 까지 제가 직접 공부하고 구현해 봤던 기본적인 이미지 관련 GAN 알고리즘들을 한 단계 씩 따라가면서 그들의 원리와 Tensorflow 소스코드까지 소개해 보려고 합니다. 논문 리뷰가 아닌 만큼 필요한 부분만 간단하게 다룰 예정이니, 구체적인 정보가 궁금하신 분들은 각 포스트에 인용된 논문들을 참고해주시길 바랍니다. 질문이나 피드백은 언제든지 환영이니, 자유롭게 댓글 남겨주세요!
이런 분들께 도움이 되기를 기대합니다.
- 딥러닝은 알지만, GAN에 관한 지식이 전무하신 분들
- 이미지 처리에 사용되는 기초적인 수준의 GAN 알고리즘의 발전 흐름을 알고 싶으신 분들
- GAN 논문(Generative Adversarial Network)의 수식들이 쉽게 이해 되지 않으신 분들
- 그 외에 다양한 지식과 관심사를 가진 분들의 방문도 환영합니다!