최근 딥러닝 공부를 하면서 GAN(Generative Adversarial Networks)에 대해 깊이 파보게 되었다. 처음엔 단순히 '가짜 이미지를 잘 만드는 기술' 정도로만 이해했는데, 이론을 파보니 정말 정교하고 우아한 수학적 원리가 숨어있더라.
개념 자체는 간단하다. 두 개의 네트워크가 서로 경쟁하며 학습한다. 하나는 가짜 데이터를 만드는 '생성자(Generator)', 또 하나는 진짜와 가짜를 구분하는 '판별자(Discriminator)'다. 마치 위조지폐범과 경찰이 서로 경쟁하며 실력을 키우는 것과 비슷하다고 볼 수 있다.
1. Generator(생성자)
: 랜덤 노이즈를 입력받아 가짜 데이터를 생성한다. 목표는 진짜 같은 가짜를 만드는 것이다.
2. Discriminator(판별자)
: 진짜 데이터와 가짜 데이터를 입력받아 각각이 진짜일 확률을 0~1 사이 값으로 출력한다. 목표는 진짜와 가짜를 정확히 구분하는 것이다.
3. 교대 학습
: 두 네트워크는 동시에 학습할 수 없다. 한쪽을 고정하고 다른 쪽을 학습시키는 방식을 반복한다.
GAN의 목적 함수는 다음과 같다:
min max V(D,G) = E[log D(x)] + E[log(1-D(G(z)))]
G D
판별자 입장: 이 값을 최대화하려 한다 (진짜는 1로, 가짜는 0으로 판별)
생성자 입장: 이 값을 최소화하려 한다 (가짜를 1로 판별되도록)
이것이 바로 "Two-player minimax game"이다.
1. 초기 단계: 생성자는 아무것도 못 만들고, 판별자가 압도적으로 유리하다.
2. 판별자 학습: 생성자를 고정하고 판별자를 여러 번 업데이트한다. 진짜와 가짜를 더 잘 구분하게 된다.
3. 생성자 학습: 판별자를 고정하고 생성자를 업데이트한다. 판별자가 높은 점수를 주는 방향으로 데이터를 생성하려 한다.
4. 반복: 이 과정을 계속 반복하면, 생성자가 만든 가짜 데이터의 분포가 점점 진짜 데이터 분포에 가까워진다.
수학적으로 증명된 바에 따르면, 최적 상태에서는:
판별자가 어떤 데이터를 봐도 진짜일 확률을 50%로 출력한다
이는 생성자가 만든 가짜 데이터의 분포가 진짜 데이터 분포와 완전히 일치한다는 의미다
이 지점이 바로 Global Optimum이고, 이때 두 분포의 JS Divergence가 0이 된다.
1. 이론과 현실의 차이: 수학적으로는 완벽하지만, 실제로는 학습이 불안정하다. 판별자가 너무 빨리 학습되면 생성자가 gradient를 제대로 받지 못한다.
2. 학습 초기의 어려움: 생성자가 의미있는 이미지를 만들기까지 시간이 오래 걸린다. 이 문제를 해결하기 위해 다양한 기법들이 개발되었다.
3. 균형의 중요성: 두 네트워크의 학습 속도 균형이 매우 중요하다. 한쪽이 너무 강해지면 학습이 실패한다.
처음엔 단순한 아이디어라고 생각했는데, 깊이 파보니 정말 정교한 수학적 기반 위에 세워진 기술이더라. 특히 두 분포가 같아질 때만 JS Divergence가 0이 된다는 성질을 이용한 점이 정말 영리하다고 생각한다.
앞으로도 이런 이론적 기반을 제대로 이해하고 실무에 적용하는 것이 중요할 것 같다. 단순히 '잘 작동하는 코드'를 넘어서, '왜 작동하는지'를 이해하는 것이 진짜 실력이라는 생각이 든다.
이 글이 GAN을 공부하는 분들께 조금이나마 도움이 되었으면 좋겠다.