이번에는 간략하게 생성 모델 중 하나인 GAN에 대해서 리뷰해보고자 합니다.
1. GAN (Generative Adversarial Network)
- 일반적인 분류 모델은 아래 그림과 같이 Input 이미지를 넣어서 Latent 상에 feature map들을 만들고 그 feature map의 정보를 압축해서 Dense Layer 통해 분류 결과를 만듭니다.
- 이에 반해, 생성 모델은 이미 생성되어있는 Latent를 활용해서 원본과 유사한 또는 새로운 결과물을 만들어 내는 것입니다.
- GAN은 설명드린 생성 모델 중 하나입니다. GAN은 Geneartor와 Discriminator의 싸움으로도 표현이 되는데요
* Generator는 실제와 같이 착각하게 만들 수 있는 fake 이미지를 만들기 위해 노력하고
* Discriminator는 실제 이미지와 생성된 fake 이미지를 구별하기 위해 노력합니다.
- 이를 조금 더 자세히 알아보면 GAN의 핵심 아이디어는 아래와 같습니다.
* 사용자가 모집단으로부터 추출된 샘플 데이터 x를 가지고 있다고 할때,
* 생성 모델은 가지고 있는 샘플 데이터를 바탕으로 새롭게 나타날 데이터의 확률 분포를 예측하기 위해 활용됩니다.
* 실제로 이를 알기 위해서는 많은 수의 데이터가 필요하지만, 이는 쉬운 일이 아니며, 이를 위해 실제 데이터 x를 의미있는 latetent space 상에 latent variable인 z로 만든 뒤 해당 z의 분포를 활용해서 생성을 해내는 것입니다.
- 이를 통해 알 수 있는 GAN의 핵심 목표는 샘플링 된 x를 가지고 전체 x를 추정해보자는 것입니다.
- 이때 학습에 활용될 목적함수는 아래와 같으며, Generator는 생성 데이터를 Discriminator를 통해 가짜라고 판별받지 않게 하기위해 노력하며, Discriminator는 Generator가 제시한 이미지를 진짜인지 혹은 가짜인지를 잘 구별해내는, 둘 간의 MinMax Game을 하다보면
"진짜 같지만 진짜가 아닌 가짜 데이터"를 생성해내는 것을 목적하고 있음을 알 수 있습니다.
- 이를 확률 분포상으로 표현해보면 아래와 같습니다.
* 최초에는 real data의 distribution과 sample 된 데이터를 통해 생성된 data의 distribution이 차이가 크지만, 점차 real data의 distribution을 추정해나가는 것이라고 보면 되겠습니다.
- 하지만 이와 같은 GAN 모델에서는 Generator를 평가하는 데에 있어서 문제가 발생합니다.
1) 다른 딥러닝 신경망 모델들은 손실 함수를 활용해 수렴 할 때까지 학습하지만, GAN의 경우 실제와 유사한 어느정도 시점에서 학습을 종료해야하는데 학습 종료 시점이 명확하지 않다는 것입니다.
2) 이로 인해 Computation에 활용할 목적함수를 정의하기가 명확치 않으며, 또한 생성자와 판별자 모델이 함께 학습되면서 균형을 유지해야하는 문제가 생기게 됩니다. 만일 판별자가 너무 강하면 생성자는 원본 이미지와 똑같은 이미지만을 만들어내는 Mode Collapse에 빠지게되고, 판별자가 너무 약하면 원본 이미지와는 너무 다른 이미지를 만들어 내기 때문입니다.
'딥러닝 with Python' 카테고리의 다른 글
[딥러닝 with Python] 디퓨전 모델(Diffusion Model) (2) DDIM (0) | 2024.11.11 |
---|---|
[딥러닝 with Python] 디퓨전 모델 (1) (Diffusion Model) : DDPM (0) | 2024.11.10 |
[딥러닝 with Python] Vision Transformer(ViT) 파이썬 코드 구현(파이토치 / 코랩) (2) | 2024.11.08 |
[딥러닝 with Python] Segment Anything / Segment Anything Model(SAM) (0) | 2024.11.08 |
[딥러닝 with Python] 비전 트랜스포머(Vision Transformer / ViT) (2/2) (0) | 2024.11.08 |
댓글