Lesson 19. 생성 모델 (Generative Models)

조지아텍 온라인 석사과정 CS7647 ‘딥 러닝’ Lesson 19 필기 내용

전체 필기 링크 (구글독스)

Lesson 19. 생성 모델 (Generative Models)


1. 소개

1) 소개

  • 이번 강의에서는 비지도학습 중 ‘밀도추정’ 과 관련된 부분, x에 대한 p(x)를 추정하는 부분에 대해 배울 것이다. 그리고 그 p(x)를 바탕으로 새로운 x를 생성하는 법을 배울 것이다. 
  • 딥러닝의 재부상 이전에도 이러한 관점은 존재했다. (예: 가우시안 혼합 모델 (gaussian mixture model)) 

2) 판별 모델 vs 생성 모델 (Discriminative vs. Generative Models)

  • 판별 모델 : P(y|x)를 구하고자 함. 
  • 예: 신경망, SVM 등
  • 생성 모델 : P(x)를 구하고자 함. 
  • 우리의 모델을 P(x,θ)로 파라미터를 설정하고, 최대우도법을 이용하여 라벨없는 데이터셋에 대해 파라미터를 최적화할 수 있다. 
  • 이를 통해 샘플을 생성할 수 있기 때문에 생성 모델이라 불리운다. 
  • 예: multivariate gaussian with estimated parameters μ, σ
  • 이는 고차원 데이터일수록 어려운 작업이 된다. 
  • 가장 흔한 방법 3가지를 살펴볼 것이다. 
  • PixelRNN: Joint distribution as explicit, tractable density
  • VAE : Joint distribution as explicit, approximate density
  • GAN: Implicit density


2. PixelRNN & PixelCNN

1) Factorizing P(x) : 상황을 단순화하기 위해 연쇄법칙을 사용해 결합확률분포를 decompose할 수 있다. 

  • 결합확률분포를 여러 조건확률분포의 곱으로 factorize한다
  • 베이지안 네트워크, 언어 모델과 비슷하다. 
  • 변수들의 순서정리를 필요로 한다. 
  • 이후 이 조건확률분포를 신경망으로 추정할 수 있다. 

2) 이미지용 모델

  • 훈련시 픽셀단위로 이동하며 이를 시퀀스로 취급하고 언어모델처럼 훈련시킬 수 있다. teacher forcing을 사용한다. 
  • 단점 : 시퀀스가 순서대로 생성되므로 과정이 느리다. 각 픽셀에 대해 context pixel이 매우 적다. 

3) Pixel CNN

  • 아이디어: 조건확률분포를 합성곱 계층으로 표현한다.
  • 보다 넓은 context를 고려할 수 있다. 
  • 실제 구현시, 마스크를 적용하고, 아직 고려대상이 아닌 픽셀은 0처리한다
  • 훈련 속도가 빠르지만 시퀀스 생성은 여전히 느리다 -> 작은 이미지에만 적용가능하다
  • 예시: Image Completion, Image Generation
  • 생성과정에서 sequence에 대한 assumption이 들어가므로, 디테일을 살폈을 때 실제와 거리가 먼 이미지들이 생성된다. 


3. 적대적 생성 신경망 (GAN: Generative Adversarial Network)

파라미터가 있는 density function을 배우는 것이 아니라, 파라미터가 있는 생성 과정을 배운다. 

1) 암시적 모델 (Implicit models)

  • 암시적 생성 모델은 p(x)의 명시적 모델을 배우지 않고, p(x)로부터 샘플을 생성하는 법만 배운다. 
  • 적절한 feature representation을 학습
  • data augmentation 시행
  • 강화학습을 위한 world model을 배움 (시뮬레이터)
  • 어떻게?
  • 신경망의 아웃풋에서 샘플링하는 법을 학습
  • 적대적 훈련: 한 신경망의 예측으로 다른 신경망을 훈련시킴 (동적인 손실함수)
  • 안정적인 최적화를 위한 여러 트릭이 존재


2) 샘플링 학습

  • 아이디어 : 단순한 확률분포 (가우시안)에서 샘플링 -> 샘플을 신경망을 거쳐 p(x)로 변환
  • 인풋 : 독립적인 가우시안 랜덤 숫자 벡터 -> CNN으로 이미지 생성
  • 처음엔 완전히 랜덤한 이미지가 생성될 것. 어떻게 사실적인 이미지를 생성하도록 학습시킬 수 있을까? 
  • 아이디어: 생성된 이미지를 ‘판별모델’ 네트워크에 통과시켜 진짜인지 거짓인지 구분하게 함. 판별모델도 생성모델과 동시에 학습하게 함. 

3) GAN 구조

  • 2개의 경쟁하는 네트워크가 있으므로 min-max 2player 게임과 같음. 게임이론과 연관점 있음. 
  • min-max 목표 : 
  • D(x): 판별기가 출력하는 실제이미지일 확률 [0,1]
  • x: 실제이미지. G(z): 생성된 이미지.

  • 판별기 : D(x)와 1-D(G(z)) 를 모두 1로 올리고 싶어한다. 즉 D(x)는 1로, D(G(z))는 0으로 하려 한다.
  • 생성기: D(x)는 무관. 1-D(G(z))를 0으로 낮추고 싶어한다. 즉 D(G(z))를 1로 올리고 싶어 한다. 

4) Max-Max game으로 변환

  • 생성기 부분의 gradient가 좋지 않다. D(G(z))가 높을때, 즉 판별기가 틀렸을때 gradient가 높다. 우리는 샘플이 나쁠때 (즉 판별기가 맞을때) 생성기가 개선되기를 원한다. 
  • 따라서 생성기에 대해 다른 목표를 설정해줄 수 있다. 

5) 전체 알고리즘


5) GAN의 단점 : 훈련이 어려움

  • mini-max 때문에 훈련이 어려움
  • 그간의 발전사항 : 보다 안정적인 아키텍처, 최적화 개선을 위한 규제, 점진적인 훈련 및 스케일링
  • DCGAN : batch norm 사용, FCL 없앰, relu 사용 등. 

6) 규제

  • 생성기가 훈련데이터를 그냥 외우거나, 아님 확률분포의 일부분만 생성한다면?
  • mode collapse: 훈련분포의 일부 mode 만 잡아낸다면? (예: 남성얼굴만 생성)
  • 간단한 규제방법 : 실제샘플에 노이즈를 추가함


4. 변분 오토인코더 (VAE: Variational Autoencoder)

1) 생성 모델 (디코더 부분) 

  • 우리가 원하는 것은 임베딩 벡터가 이미지 생성에 필요한 여러 요소들을 갖추고 있는 것이다 (위치, 스케일 등) 

위의 P(X) likelihood는 적분때문에 최대화할 수가 없다. 대신 variational lower bound (VLB)를 최대화한다. 

2) 변분 오토인코더 : 디코더

  • 확률적 관점, 샘플링, 오토인코더, 그리고 추정치 최적화를 모두 하나로 모을 수 있다
  • 보다 단순한 확률분포에서 샘플링된 Z가 있다. 이를 디코더에 통과시켜 ‘확률분포의 파라미터’를 출력한다. 예) 가우시안 분포의 μ와 σ 

3) 변분 오토인코더 : 인코더

  • 확률적 관점, 샘플링, 오토인코더, 그리고 추정치 최적화를 모두 하나로 모을 수 있다
  • 주어진 이미지에 대해 Z를 추정한다.
  • 이번에도, ‘확률분포의 파라미터’를 출력한다. 

4) Likelihood 최대화

  • 어떻게 2개의 신경망에 대한 파라미터를 최적화할 수 있을까? 
  • 데이터의 log likelihood는 아래와 같다


  • 참고 : KL-Divergence : 항상 0 이상인 값을 가짐


  • 따라서 log likelihood의 최종형태는 아래와 같다

  • 참고사항 :

5) 변분 오토인코더 최종형태 정리

6) Reparameterization Trick

  • 문제점 : 샘플링 함수에 대해서는 역전파가 불가하다
  • 해결책 : Reparameterization Trick 
  • 설명 : 샘플링시의 무작위성이 인코더 아웃풋으로부터 독립적이도록 한다. 
  • 가우시안 분포 예시
  • 기존 : 인코더 아웃풋 = 랜덤 변수 z~N(μ, σ)
  • 바꾼뒤 : 인코더 아웃풋 = [μ, σ]
  • z = μ + ε*σ, ε~N(0,1)

7) 요약

  • VAE는 approximate maximum likelihood optimization을 할수있는 원칙을 제공해준다. (단 몇 가지 전제가 필요하다. 예: 가우시안분포)
  • VAE로 생성된 샘플은 대체로 GAN 샘플만큼 뛰어나지는 않다
  • 비지도학습으로 학습한 latent features 가 다른 과업 (downstream tasks) 적용시 효과적인 경우들이 있다.  



Share: X (Twitter) Facebook LinkedIn