최근 몇 년간 딥러닝을 공부하고 연구하면서, GAN이라는 기술에 대해 깊이 생각해볼 기회가 많았다. 2014년 이안 굿펠로우가 처음 발표한 이후, 수백 가지의 변형 모델들이 나왔을 정도로 영향력이 큰 기술이다. 그동안 공부하며 정리한 GAN의 핵심 내용들을 누군가에게 도움이 될까 하여 간단히 정리해본다.
GAN의 가장 큰 장점은 '비지도 학습'이라는 점이다. 라벨이 없는 데이터만으로도 학습할 수 있어서, 기존에 다루기 어려웠던 방대한 양의 데이터를 활용할 수 있게 되었다. 또한 생성 모델로서 기존의 VAE(Variational Autoencoder)보다 훨씬 선명하고 고품질의 이미지를 만들어낸다.
VAE는 데이터를 약간 변형해서 생성하다 보니 흐릿한 결과물이 나오는 경우가 많았는데, GAN은 판별자가 가짜를 구분해내려 하기 때문에 생성자가 더욱 정교한 이미지를 만들어낼 수밖에 없는 구조다. 또한 기존의 신경망과 마찬가지로 역전파(Backpropagation)를 그대로 적용할 수 있다는 것도 큰 장점이다.
하지만 GAN을 실제로 구현하고 학습시켜보면 정말 까다롭다. 가장 큰 문제점들이 세 가지 있다.
첫째는 '수렴 보장이 안 된다'는 점이다. GAN은 본질적으로 두 명이 겨루는 게임(minimax game) 구조인데, 이 게임에서 균형점(Nash Equilibrium)에 도달한다는 보장이 없다. 생성자가 좋아지면 판별자 성능이 떨어지고, 판별자가 좋아지면 생성자가 어려워지는 식으로 계속 진동할 수 있다.
둘째는 '기울기 소실' 문제다. 판별자가 너무 잘하게 되면 생성자가 만든 모든 이미지에 대해 거의 0에 가까운 점수를 주게 되고, 그러면 생성자는 어떤 방향으로 개선해야 할지 알 수 없게 된다. 반대로 판별자가 너무 못하면 생성자가 대충 만들어도 속일 수 있어서 발전이 없다.
셋째는 '모드 붕괴'라는 현상이다. 예를 들어 숫자 7을 잘 그리는 법을 익힌 생성자가, 다른 숫자들은 배우지 않고 7만 계속 그리는 경우다. 다양성이 떨어지는 치명적인 문제다. 실제 데이터는 보통 여러 개의 모드(peak)를 가진 멀티모달 분포인데, GAN은 특정 모드에만 집중하는 경향이 있다.
GAN을 학습시킬 때는 마치 아이를 돌보는 베이비시터 같은 세심함이 필요하다. 하이퍼파라미터 설정이 매우 민감해서, 학습 초기에 생성자와 판별자의 균형을 잘 맞춰줘야 한다.
또한 기존 지도학습처럼 명확한 성능 평가 지표가 없어서, 언제 학습을 멈춰야 할지, 어떤 모델이 더 좋은지 판단하기 어렵다. 생성된 이미지의 품질과 다양성을 동시에 평가하는 것은 매우 까다로운 일이다.
2015년에 나온 DCGAN은 CNN을 GAN에 적용해서 처음으로 고품질 이미지 생성에 성공한 모델이다. 몇 가지 중요한 특징들이 있다:
풀링 레이어 대신 Strided Convolution 사용
Batch Normalization 적용
생성자에는 ReLU, 판별자에는 LeakyReLU 사용
판별자에 Fully Connected Layer 사용하지 않음
DCGAN에서 가장 흥미로운 발견은 잠재 공간에서 '벡터 연산'이 가능하다는 점이었다.
예를 들어:
"안경 쓴 남자" 이미지들의 평균 벡터
"안경 안 쓴 남자" 이미지들의 평균 벡터
"안경 안 쓴 여자" 이미지들의 평균 벡터
이 세 벡터를 이용해서 '(안경 쓴 남자) - (안경 안 쓴 남자) + (안경 안 쓴 여자) = (안경 쓴 여자)'라는 연산이 가능하다. 이는 잠재 공간에서 의미론적 연산이 가능함을 보여주는 놀라운 결과였다.
또한 두 잠재 벡터 사이를 선형 보간하면, 자연스럽게 변화하는 이미지 시퀀스를 만들 수 있다는 것도 흥미로운 발견이었다.
GAN의 성능을 평가하는 것은 두 가지 관점에서 이루어져야 한다:
1. 이미지 품질: 생성된 이미지가 얼마나 실제와 비슷한가?
2. 다양성: 얼마나 다양한 종류의 이미지를 생성할 수 있는가?
하지만 이 두 가지를 객관적으로 측정할 수 있는 표준적인 지표가 없다는 것이 큰 문제다. Inception Score나 FID(Fréchet Inception Distance) 같은 지표들이 제안되었지만, 여전히 완벽하지는 않다.
GAN은 분명 어려운 기술이지만, 그만큼 잠재력이 큰 기술이기도 하다. 수렴성 문제, 모드 붕괴, 평가 지표 등의 근본적인 문제들을 해결하기 위한 다양한 연구들이 계속되고 있다.
AI를 공부하는 분들께 한 가지 말씀드리고 싶은 건, GAN의 이론적 한계들을 이해하는 것만큼이나 실제로 구현해보는 경험이 중요하다는 점이다. 논문으로만 보던 '모드 붕괴'를 직접 겪어보고, 하이퍼파라미터 조정의 어려움을 체감해봐야 진짜 이해가 된다.
이 글이 GAN을 처음 접하는 분들께 조금이나마 도움이 되었으면 한다. 어려운 기술이지만, 차근차근 이해해나가다 보면 분명 의미 있는 결과를 얻을 수 있을 것이라 믿는다.