생성형 인공지능 이미지 생성 GAN, diffusion
GAN
- GAN(Generative Adversarial Networks : “적대적 생성 신경망”)은 AI기술 중 하나
- 실제에 가까운 이미지나 사람이 쓴 것과 같은 글 등 여러 가짜 데이터들을 생성하는 모델
- 서로 다른 두 개의 네트워크를 적대적으로(adversarial) 학습시키며 실제 데이터와 비슷한 데이터를 생성(generative)해내는 모델
- 생성된 데이터에 정해진 label값이 없기 때문에 비지도 학습 기반 생성모델로 분류됩니다.
학습 방법
- GAN은 Generator(G,생성모델/생성기)와 Discriminator(D,판별모델/판별기)라는 서로 다른 2개의 네트워크로 이루어져 있음
- 이 두 네트워크를 적대적으로 학습시키며 목적을 달성. 생성모델(G)의 목적은 진짜 분포에 가까운 가짜분포를 생성하는 것이고 판별모델(D)의 목적은 표본이 가짜분포에 속하는지 진짜분포에 속하는지를 결정
- 이 2가지 모델을 포함한 GAN의 궁극적인 목적은 “실제 데이터의 분포”에 가까운 데이터를 생성하는 것이며, 따라서 판별기가 진짜인지 가짜인지를 한 쪽으로 판단하지 못하는 경계(가짜와 진짜를 0과 1로 보았을 때 0.5의 값)에서 가짜 샘플과 실제 샘플을 구별할 수 없는 최적 솔루션으로 간주
평가지표
- 정성적 지표 : 사람이 이미지 평가(비용 많이 듦)
- Nearest Neighbor, Rating and Preference Judgement, Rapid Scene Categorization
- 정량적 지표 :
- FID(Freechet Inception Distance), IS(Inception Score), Mode Score, Maximum Mean Discrepancy
한계
- 기술적으로 고해상도 이미지를 생성할 수 없음
- 학습이 불안정
- 악용 가능성도 존재
종류 (한계 극복 방안)
- DCGAN :CNN을 이용해서 discriminator 구현하고, deep convolutional neural network을 이용해서 generator를 만듦
- SRGAN
- CycleGAN
- cGAN(Conditional Generative Adversarial Networks) :판별기가 훈련하는 동안 추가 정보를 사용해 조건이 붙는 생성적 적대 신경망 → label값 필요
https://youtu.be/AVvlDmhHgC4?feature=shared
-
- 분류모델과의 구분 : 분류모델은 특정한 decision boundary를 학습한다면, 생성모델은 각각의 클래스에 대해서 적절한 분포를 학습
- 목표 : 이미지 데이터의 분포를 근사하는 모델 G를 만드는 것 모델 G의 학습이 잘 되었다면 통계적으로 평균적인 특징을 가지는 데이터를 쉽게 생성생성모델 : 실존하지 않지만 있을 법한 이미지를 생성할 수 있는 델
- GAN
생성자 : 노이즈 벡터(z는 하나의 노이즈를 샘플링할 수 있는 Distribution)로 부터 입력을 받아서 새로운 이미지를 만듦/ 가짜 이미지가 판별자에 의해 진짜라고 구분될 수 있도록(1에 가깝도록) 학습
판별자 : 진짜와 가짜를 받아서 진짜에는 1, 가짜에는 0을 부여할 수 있도록 학습
목적함수 : 생성자인 G는 V의 값을 낮추고자함, 판별자인 D는 V의 값을 높이고자함
- GAN의 수렴 과정
공식의 목표 = 생성자의 분포가 원본학습데이터의 분포를 따르도록 만드는것
판별자는 가짜와 진짜를 구분할 수 없어 확률값을 항상 1/2을 내보냄
- GAN 알고리즘 (프로그래밍상에서의 구현)
-
-
- for k steps do : k번 discriminator 학습 m개의 노이즈를 뽑은 뒤 m개의 원본데이터 샘플링 → 기울기값을 구하고 경사를 타고 ascending → 식의 값을 최대화end for : generator 학습 m개의 노이즈를 뽑은뒤 m개의 가짜 이미지를 만듦 → 기울기값을 낮추는 방향으로 생성자 학습for the number of training iterations do : 학습의 반복횟수만큼 반복(epoch)
-
-
- 실습 https://colab.research.google.com/drive/1V-zDvefmaGmbJrC5kDgA0bXg6QAOhb9P?authuser=1#scrollTo=K54Z7PNIqTkO
https://youtu.be/odpjk7_tGY0?feature=shared
- DCGAN
CNN을 이용해서 discriminator 구현하고, deep convolutional neural network을 이용해서 generator를 만듦
- 특징 : 산술적 연산 가능 (안경낀 남자- 남자 +여자= 안경낀 여자)
- LSGAN Gradient Vanishing문제를 해결
cross entropy loss를 least squares loss로 변경
- Semi-Supervised GAN discriminator가 클래스를 구분. fake class를 추가하여 discriminator는 이를 fake label로 구분해야함 generator는 input으로 준 one-hot vector와 output이 똑같이 나올수 있도록 학습
- CycleGAN
- StackGAN 텍스트를 주고 텍스트에 대한 이미지를 만듦 https://medium.com/humanscape-tech/paper-review-stackgan-6e6605be6ae9
- BEGAN loss함수를 정의하고 이 값이 줄어들때 학습이 잘 되고 있다고 판단 가능
https://youtu.be/v3CShIspUfE?feature=shared
참고
GAN 소개
https://pseudo-lab.github.io/Tutorial-Book/chapters/GAN/Ch1-Introduction.html
GAN 구조 처음 나온 논문(DCGAN)
https://arxiv.org/abs/1511.06434
https://ysbsb.github.io/gan/2020/12/05/DCGAN.html
https://velog.io/@wilko97/논문리뷰-DCGANs-ICLR-2016
== DCGANs이라는 CNN기반의 GANs 네트워크가 unsupervised learning에서도 강력히 사용될 수 있다
Diffusion model
https://process-mining.tistory.com/182
https://ffighting.net/deep-learning-paper-review/diffusion-model/diffusion-model-basic/
https://velog.io/@hewas1230/StableDiffusion