AI 정리
GAN(Generative Adversarial Networks)
dawon-project
2025. 3. 31. 23:42
GAN : 서로 다른 두 개의 네트워크를 적대적(adversarial)으로 학습시키며 실제 데이터와 비슷한 데이터를 생성(generative)해내는 모델
-> Discriminator(판단자)는 Supervised Learning(지도 학습)
-> Generator(생성자)는 Unsupervised Learning(비지도 학습)
GAN Architecture
- Generator(G) : 임의의 노이즈 벡터로부터 가짜 데이터 생성
- Discriminator(D): 입력이 진짜(real)인지 가짜(fake)인지 판별
- G는 D를 속이려고 학습하고 , D는 G를 잡아내기 위해 학습
-> 게임 이론적 최적화
-> 생성자는 내가 만든 지폐는 위조 지폐가 아니야라고 말하고 판단자는 생성자 너꺼 위조지폐야 하면서 계속 경쟁을 하다 결국엔 생성자가 위조지폐를 진짜 지폐라고 속이게 만드는 이미지를 생성해내는 과정에 이르는 것
Vanillar GAN 구조
- 가장 기본적인 GAN 형태
- 노이즈 z -> Generator -> fake Image
- Discriminator는 Fake vs Real 판별
- Loss : G는 D의 판별 실패 유도, D는 올바른 판별 학습
=> 파라미터 미분을 따로 수행할 수있도록 생성자와 판별자의 최적화함수들을 따로 정의해서 사용해야함
GAN Loss Function -> 근본은 BCELoss이다.
- Discriminator Loss : Real은 1, Fake는 0에 가깝도록 분류
- Gererator Loss : Fake 이미지를 Real로 착각하도록 학습
cGAN(conditional GAN)
- 조건부 GAN : 특정 레이블이나 정보를 조건으로 주고 생성
-> 조건 y를 입력에 추가하여 조건 제어된 생성 가능 - ex) "3이라는 숫자 생성" , "여자 얼굴 생성" 등
-> 기본적인 Vanilla Gan은 어떤 이미지가 나올지 예측할 수 없으나 CGAN은 어떠한 형태의 이미지를 만들라고 한정시켜서 학습시키는 형태
cGAN Loss Function
- 기본 GAN의 loss에 조건 정보 y를 추가한 형태
- Generator와 Discriminator 모두 condition y 를 입력으로 사용
GAN계열의 한계 및 단점 => AI가 판단자를 속이는 구역을 알아서 꼼수로 학습해서 정답이 아닌것 같은 그림이 정답이라 말하게 만드는 상황이 생긴다.
<문제점>
- 고해상도 생성 어려움 -> 초기 GAN은 64 x 64 정도로 작은 이미지 ex) MNIST
- 학습 불안정 -> G와 D의 경쟁이 균형이 맞지 않으면 collapse
- Density estimation 어려움 -> 생성된 분포의 확률 밀도를 명확히 알기 어려움
- 평가 지표 부족 -> 생성된 이미지 품질 평가가 주관적일 수 있음
- 노이즈와 이미지 간의 매핑 해석 어려움 -> 어떤 z가 어떤 이미지인지 설명 불가
DCGAN(Deep Convoltuion GAN) : Vanilla GAN을 CNN 기반으로 확장한 구조
- ConvTranspose2D 사용(업샘플링)
- BatchNorm, LeakyReLU 등 활용
- 더 안정적인 학습과 고해상도 이미지 생성 가능
-> 하지만 여전히 고해상도 이미지 생성이 어려움
training 방법 자체는 GAN계열은 동일하나 어떤 Layer를 쓰느냐에 따라 모델 구조가 달라진다
DCGAN의 벡터 연산 특징
- latent vector(z)의 연산으로 의미 있는 조작 가능
ex) 남자 + 안경 - 여자 = 남자 안경 쓴 얼굴(벡터의 의미적 조작)
GAN을 활용한 응용 기술
- 사람, 동물, 등 가짜 이미지 생성
-> 실재하지 않는 사실적인 이미지를 생성할 수 있다. - 다른 스타일 이미지로 변환
- 상상이나 개념을 이미지로 번역
- 낙서 같은 의미론적 이미지를 실제 사진으로 변환할 수 있다.