AI를 공부하면서 GAN(Generative Adversarial Networks)이라는 기술을 접하게 되었는데, 처음에는 복잡해 보였지만 하나씩 뜯어보니 생각보다 명확한 아이디어들이었다. 누군가에게 도움이 될까 싶어 핵심 모델 4가지를 정리해본다.
Progressive growing GAN의 아이디어는 우리가 그림을 그릴 때와 똑같다. 처음부터 디테일한 부분을 그리는 것이 아니라, 전체 윤곽을 잡고 점점 세밀하게 다듬어가는 방식이다.
핵심 원리:
4×4 저해상도부터 시작해서 점차 1024×1024까지 해상도를 높여감
각 단계마다 Generator와 Discriminator에 레이어를 추가
이미 학습된 낮은 해상도 부분은 유지하면서 새로운 레이어만 추가 학습
왜 이렇게 할까? 처음부터 고해상도 이미지를 만들려고 하면 네트워크가 학습할 내용이 너무 많아서 제대로 배우지 못한다. 하지만 단계별로 나누면 각 단계에서 집중할 부분이 명확해진다. 초기에는 전체 윤곽(global structure)을, 후반에는 세밀한 텍스처(fine details)를 학습하게 된다.
기본 GAN은 랜덤하게 이미지를 생성한다. 하지만 "7이라는 숫자를 그려줘"라고 구체적으로 요청할 수는 없었다. Conditional GAN은 이 문제를 해결한다.
핵심 원리:
Generator에 랜덤 노이즈뿐만 아니라 조건(condition) 정보도 함께 입력
Discriminator도 실제 데이터와 조건을 함께 보고 판별
조건은 주로 라벨 정보 (숫자, 클래스 등)를 원-핫 인코딩으로 표현
활용 예시: MNIST 데이터에서 특정 숫자만 생성하거나, 나이대별로 얼굴 이미지를 생성하는 것이 가능하다. 실제로 같은 사람의 다양한 나이대 얼굴을 만드는 연구도 있다.
Pix2Pix는 "이미지-투-이미지 번역"이라는 새로운 개념을 제시했다. 스케치를 실제 사진으로, 흑백사진을 컬러사진으로 바꾸는 것이다.
핵심 구조:
Generator: U-Net 구조 사용 (인코더-디코더 + 스킵 커넥션
Discriminator: PatchGAN 구조로 이미지를 패치별로 판별
손실함수: GAN Loss + L1 Distance Loss
왜 U-Net과 PatchGAN을 쓸까?
U-Net: 입력 이미지의 공간 정보를 보존하면서 변환하기 위해
PatchGAN: 전체 이미지보다는 세밀한 디테일 부분에 집중하여 판별하기 위해
L1 Loss: 픽셀 단위로 입력과 출력의 구조적 유사성을 보장하기 위해
한계: 입력과 출력이 정확히 쌍을 이루는 데이터가 필요하다는 점이다.
CycleGAN은 Pix2Pix의 한계를 극복했다. 정확히 쌍을 이루지 않는 데이터로도 이미지 변환이 가능하게 만들었다.
핵심 아이디어:
두 개의 Generator 사용 (A→B, B→A)
순환 일관성 손실(Cycle Consistency Loss) 도입
A → B → A로 변환했을 때 원본 A와 같아야 한다는 제약
손실함수 구성:
GAN Loss (두 개) : 각각의 Generator와 Discriminator 쌍
Cycle Consistency Loss : 순환 변환 후 원본과의 L1 거리
활용 예시:
말 ↔ 얼룩말 변환
여름 풍경 ↔ 겨울 풍경 변환
실제 사진 ↔ 모네 스타일 그림 변환
왜 이렇게 작동할까? 단순히 A를 B로 바꾸기만 하면 원본의 정보가 손실될 수 있다. 하지만 다시 A로 복원할 수 있어야 한다는 제약이 있으면, 변환 과정에서 핵심 정보를 보존하게 된다.
이 4가지 모델을 보면 각각 명확한 문제의식에서 출발했다는 것을 알 수 있다. Progressive growing GAN은 "어떻게 고화질을 만들까?", Conditional GAN은 "어떻게 원하는 것만 만들까?", Pix2Pix는 "어떻게 이미지를 변환할까?", CycleGAN은 "쌍 데이터 없이도 가능할까?"라는 질문들이다.
복잡해 보이는 기술도 결국 명확한 문제를 해결하려는 시도들의 연속이었다. 이런 관점으로 보면 다른 AI 기술들도 이해하기 쉬워질 것 같다.