GAN (Generative Adversarial Network)
이미지 생성에 자주 쓰이는 모델로 학습 데이터 셋과 유사한 이미지를 만들도록 학습됨.
unlabeled data를 사용하며 Generator는 데이터의 확률 분포를 학습함
- 파란색 점선: Discriminator distribution
- 검은색 점선: Real data distribution
- 초록색 실선: Fake data distribution
Generator가 실제 이미지의 분포를 학습하는 과정이며 Discriminator는 Generator의 학습 방향을 안내함
백쿼리 backquery
기본적으로 신경망은 데이터셋의 정보를 감소하고 정제하고 축약하는 과정에 쓰인다
-> CNN의 classification을 예시로 들면 3x32x32의 '3'이 적힌 이미지가 축약되어 '3'이라는 결과가 나온다
반대로 '3'을 넣고 3x32x32 이미지를 만들 수 있을까?라는 아이디어에서 시작하였다.
위의 경우 Network가 스스로 데이터를 생성하는 것이 가능하다.
이 경우를 백쿼리(역질의) backquery라고 부른다.
백쿼리를 통해서 만들어진 이미지는 같은 원 핫 인코딩 벡터면 같은 결과를 출력하고, 특정 레이블을 나타내는 모든 훈련 데이터의 평균적인 이미지가 나온다.
이 글을 읽는 순간 의문점이 떠오른다. 각각 서로 다르면서 하나의 특정 레이블을 가리키는 데이터는 만들지 못하나?, 평균처럼 애매모호한 이미지가 아닌 실제 train dataset과 같이 만들 수는 없을까?
이는 백쿼리로는 할 수 없기에 다른 네트워크 구조가 제안된다.
Generative model
lan GoodFellow는 GAN tutorial을 위의 표와 같이 분류하였고 Maximum Likelihood 기반의 생성 모델은 Explicit density(명시적 밀도), Implicit density(암시적 밀도) 방식으로 나눠진다.
Explicit density
Explicit density는 학습 데이터로 부터 분산, 표준편차와 같은 확률 매개 변수를 명시적으로 정의하여 데이터를 생성하는 방법이다.
Trackable density - PixelCNNS
Approximate density - VAEs
Implicit density
실제 데이터의 분포와 비슷하게 mapping 하여 결과를 얻는 방식으로 GANs이 여기에 속한다.
VAEs의 경우 생성된 데이터의 품질이 낮고 흐리며 Implicit models이 더 자연스러운 데이터를 생성한다.
최적화
최적화(Optimization)란 손실 함수의 값을 최소화하는 파라미터를 구하는 과정이고 GAN은 일반적인 모델 최적화랑은 조금 다르다.
Traditional Machine Learning
기존의 모델들은 손실함수가 주어졌을 때 가장 최소의 값을 가지는 지점으로 모델을 학습시켰는데 GAN은 2개의 모델이 적대적으로 학습하기 때문에 다른 모양을 가진다.
Adversarial Machine Learning
Discriminator와 Generator가 min-max게임을 하는 형태로 학습이 진행된다.
2개의 모델이 최적점에 도달하는 상태를 Nash Equilibrium이라고 한다.
GAN 학습
Generator
- Neural Network로 구성되어 있음
- 데이터의 probability distribution을 학습함
- Discriminator를 속이는 것을 목적으로 생성된 이미지는 True로 판별되어함
Discriminator
- Neural Network로 구성되어 있음
- 진짜 데이터인지 가짜 데이터인지 판별하는 역할을 함
latent variables
무작위 변수로 직접적으로 관찰되지 않지만 관찰된 다른 변수들로부터 기본적인 확률 분포 속성을 추론함
학습 과정
Binary Classification
참(1)과 거짓(0)을 분류하는 모델
고양이와 고양이가 아닌 것을 분류하는 모델로 출력값이 단일값으로 나와야 한다
진짜 고양이 사진인지 아닌지를 분류하는 모델
달라진 건 없고 신경망은 종류가 서로 다른 이미지를 분류하도록 훈련된다
Fake 고양이를 만드는 생성 장치를 추가한다.
가짜 이미지를 준비하는 것 대신, 가짜 이미지를 생성해 주는 장치는 달았음
여기까지 기본 idea이고 이다음이 중요하다
생성기에서 아무 이미지나 만들지 않고 실제 이미지와 비슷한 이미지를 생성하도록 해야 한다
생성기를 Generator, 분류기를 Discriminator라고 부른다
이를 주로 경찰(Discriminator)과 위조지폐범(Generator)에 비유한다
Generator
$$ \nabla _{\theta_{g}} \frac{1}{m} \sum_{i=1}^m (1-D(G(z^{i}))) $$
- 위조지폐범으로 비유하여 설명하면 경찰을 속이는 지폐를 만들면 상을 주고 그렇지 못하면 벌을 주는 형태로 학습한다
- random noise vector z를 사용하여 가짜 데이터를 만듦
- Disciriminator를 이용하여 분류함 이때, Discriminator를 속이기 위해 1로 학습함
- Disciriminator는 가짜이미지를 0으로 분류해야 하기 때문에 Generator만 Backpropagation을 실행함
Discriminator
$$ \nabla _{\theta_{d}} \frac{1}{m} \sum_{i=1}^m [logD(x^{i})+log(1-D(G(z^{i})))] $$
- 경찰로 비유하여 설명하면 위조지폐범이 만드는 지폐를 바르게 판별하면 상을 주고 그렇지 못하면 벌을 주는 형태로 학습한다.
- 진짜 이미지는 1 가짜 이미지는 0으로 분류하여 Generator가 진짜 같은 이미지를 만들도록 함
Generator와 Discriminator는 서로 적대적 관계로 훈련을 하게 되고 궁극적으로는 Generator는 Discriminator를 속이기 위해 진짜 이미지와 유사한 이미지를 만들기 시작한다
위와 같은 구조를 생성적 적대 신경망 GAN (Generative Adversarial network)이라고 한다.
'Generative model' 카테고리의 다른 글
[GAN] Simple 1010 pattern (0) | 2022.12.30 |
---|---|
[GAN] GAN 학습 (1) | 2022.12.29 |
[GAN] GANs Generative Adversarial Networks (0) | 2022.12.26 |
[VAE] Variational AutoEncoder (0) | 2022.10.14 |
[GAN] 확률 밀도 함수 추정, 샘플링 (0) | 2022.10.14 |