✍ 해당 시리즈 포스팅은 미시간 대학의 EECS 498-007 강의 내용을 정리한 글입니다.
Variational Autoencoders

지난 시간까지 Autoencoders의 encoder와 decoder의 역할 및 loss가 설정되는 과정까지 알아보았다.
Fully-Connected VAE
이제 28x28 크기의 이미지를 입력 받아서 784차원으로 flatten한 x를 받아서 20차원의 latent vector z를 얻는 과정을 예시로 보자.

처음 784차원의 x를 encoder의 입력으로 받아서 400차원으로, 그리고 이후 20차원으로 linear layer를 거치면서 z를 얻게되는데, 이 때 x에 대한 z의 distribution을 정의하는 평균 μz∣x와 분산 Σz∣x를 출력하여, 이 분포는 보통 가우시안 분포 N(μz∣x, Σz∣x)로 가정되고, z는 어떤 고정된 값이 아닌, 입력 x를 받아 해당 분포에서 샘플링되는 방식이다. (decoder의 768은 784 오타)
Variational Autoencoders : Training

이를 자세히 살펴보면, 먼저 encoder는 x를 받아서 해당 이미지의 분포를 얻어내고, 이렇게 출력되는 z는 z의 prior distribution인 p(z)와 유사해야 하는데(DKL(qϕ(z∣x),p(z)를 최소화), 이 분포는 우리가 unit gaussian으로 설정해 놓았다.

이렇게 얻은 encoder의 output qϕ(z∣x)로부터 latent variable z를 샘플링한다.

이렇게 샘플링된 z를 decoder에 입력하여 데이터 분포를 출력한다. 이렇게 z를 기반으로 입력 x와 유사한 데이터 샘플을 얻게 된다.

이렇게 얻어진 x^는 원래 input data x와 비슷하도록, variational lower bound를 최소화하는 방향으로 학습이 진행된다. 첫 번째 term인 기댓값의 내부는 z의 예측 분포에서 x의 우도(likelihood)를 최대화하는 데이터의 reconstruction term이라고 보면 된다.
그러면서도 두 번째 term인 두 분포 간 KL divergence를 최소화하도록(qϕ(z∣x)를 최대한 표준 정규분포 형태로) 학습이 진행된다.
Variational Autoencoders: Generating Data
이제 학습된 decoder를 통해 새로운 데이터를 만들어내는 과정을 보자.

- prior p(z)로부터 z를 샘플링한다.
- 샘플링된 z를 decoder에 통과시켜 data x에 대한 분포를 얻는다.
- Step 2에서 얻은 분포로부터 샘플링을 진행하여 새로운 데이터 x^를 생성해낸다.

위 슬라이드는 CIFAR-10 데이터셋과 얼굴 데이터셋에서 학습한 VAE를 통해 생성해낸 이미지들이다.

MNIST를 예시로 학습된 VAE에서 z의 각 차원 요소를 변화시킴에따라 생성되는 이미지를 시각화한 것인데, 이렇게 p(z)는 diagonal gaussian으로 설정되었기 때문에 각 차원은 독립적으로 작용하게 되고, 변동성을 독립적인 요소로 분해하는 것을 확인할 수 있다.
Variational Autoencoders: Edit Images
이렇게 학습된 VAE를 통해 원본 이미지를 다양하게 조정도 가능하다.

- 편집하고자 하는 이미지를 encoder에 통과시켜 latent code의 distribution을 얻는다.
- Step 1에서 얻은 output으로부터 sample code z를 샘플링한다.
- 샘플링 된 z의 몇몇 차원의 값을 조금씩 바꾼다.
- 수정된 z를 decoder에 입력하여 데이터 샘플의 distribution을 얻는다.
- Step 4에서 얻은 distribution에서 새로운 데이터를 샘플링한다.

예를 들어 우리가 학습시킨 z에서 첫 번째 차원은 얼굴의 웃음 정도를 조절하는 차원이고, 두 번째 차원은 머리 포즈를 조절하도록 할 때, 웃음기만 바꾸고 싶다면 첫 번째 차원 값을 조정해주면 된다. 각 차원이 이미지 변화에 대한 요소들을 독립적으로 학습하기에 가능한 부분이다.

VAE의 장단점은 아래와 같다.
장점
- 매우 체계적인 접근법으로 생성 모델을 설계한다.
- Input x에 대한 qϕ(z∣x)를 추정 가능하고, 이는 유용한 feature representation으로써 다른 task에 활용될 수 있다.
단점
- VAE는 likelihood의 lower bound를 최대화하도록 학습되지만, 이는 데이터 분포의 평가에 있어서 최적의 지표는 아님
- 강의 시점인 2019년도 기준으로 SOTA인 모델들과 비교하여 blurry하고 조금 낮은 퀄리티를 보인다.

지난시간부터 배웠던 두 가지 종류의 생성모델의 특징이다.
Autoregressive models
- 직접적으로 p(x)를 최대화한다.
- 높은 퀄리티의 이미지를 생성한다.
- 생성에 시간이 오래 걸린다.
- 명시적인 latent codes가 없다.
Variational models
- p(x)의 lower-bound를 최대화한다.
- 이미지가 가끔 blurry하다.
- 생성 속도가 매우 빠르다.
- 다양한 latent codes를 학습한다.
VQ-VAE2

Autoregressive한 방식과 VAE를 결합한 아키텍처 중 하나로, latent feature vector 대신 latent feature grid를 학습하고, PixelCNN을 사용하여 샘플링하여, 훨씬 높은 퀄리티의 이미지를 생성할 수 있다.
Overview

Autoregressive Models는 직접적으로 training data의 likelihood를 최대화하는 방식으로 학습되고, Variational Autoencoders는 latent z를 도입하고 likelihood의 lower bound를 최대화하도록 학습되었다.
이제 알아볼 Generative Adversarial Networks(GAN)은 이미지의 밀도 함수를 명시적으로 모델링하려는 시도는 완전히 포기하고, Generator와 Discriminator의 적대적 학습을 통해 샘플을 생성한다.
Generative Adversarial Networks (GANs)

Setup
- 우리에게 주어진 데이터 xi는 실제 데이터들의 distribution인 pdata(x)로부터 나왔다고 가정
Idea
- 매우 간단한 prior p(z)로부터 latent variable z를 샘플링하고, 이를 Generator network에 통과시켜 x=G(z)를 얻는다.
- 이렇게 생성된 x는 Generator distribution인 pG로부터 샘플링 된 것이고, 최종 학습 목표는 이러한 pG를 실제 데이터의 distribution인 pdata와 거의 같아지도록 하는 것이다.

그리고 이렇게 생성된 fake data에 대해 discriminator network를 따로 두어 가짜인지 진짜인지 판별하도록 학습 시키고, generator는 discriminator가 생성된 이미지를 실제 이미지로 착각하도록 학습하게 된다.
이러한 네트워크 학습을 통해 pG가 pdata와 최대한 유사해지는 것을 목표로 한다.
Training Objective

위의 minimax loss 함수값을 generator는 minimize 하도록, discriminator는 maximize하도록 학습된다.

- 첫 번째 term은 discriminator가 실제 pdata에서 얻은 x를 0으로 판별할지, 1로 판별할 지에 대한 기댓값이다.
- Discriminator만 해당 term에 관여하고, 최대한 실제 데이터 x에 대해서는 1로 판별하도록 유도된다.
- 두 번째 term은 generator가 p(z)로부터 생성한 이미지를 discriminator가 0으로 판별할 지, 1로 판별할 지에 대한 기댓값이다.
- Discriminator는 해당 생성 이미지들을 최대한 0으로 예측하도록(가짜를 잘 판별하도록), 즉 해당 term을 maximize 하는 방향으로 학습된다.
- Generator는 해당 생성 이미지들이 최대한 1로 잘못 예측되도록(discriminator를 속이도록), 즉 해당 term을 minimize하는 방향으로 학습된다.

참고로 여기서 보이는 식 전체 그대로를 한 번에 학습하는 게 아니라, discriminator와 generator를 각각 한 번씩 번갈아가며 학습을 진행한다.
즉, 처음엔 D에 대한 미분을 통해서 gradient ascent 방식으로 식을 maximize하도록 하고, 직후 G에 대한 미분을 통해 gradient descent 방식으로 식을 minimize하는 방향으로 번갈아가며 학습된다.
하지만 이렇게 각각의 loss가 서로 의존도가 높은 학습이기에, 만약 D가 너무 판별을 잘 하면 G의 loss는 매우 커지게 될 수 있기에, GAN은 학습이 불안정하다는 단점을 가진다.

또한 학습 처음부터 G가 이미지를 잘 생성해낼 순 없기에, D(G(z))가 0에 가까운 상태를 유지하므로 vanishing gradient 문제가 발생할 수 있다. 따라서, −log(D(G(z))를 최소화하도록 대체하여 학습 초기에 강한 gradients를 가질 수 있도록 한다.
Optimality

어떻게 해당 식이 pG=pdata를 만족할 때 global minimum에 도달한다는 걸까?

- 먼저 두 번째 term의 variable D(G(z))를 D(x)로 바꾼다.
- Expectation 정의에 따라 적분으로 확장한다.

- maxD를 integral 안으로 집어넣는다.

- 이는 어떠한 f(y) 형태인 것을 알 수 있고, 미분한 f′(y)=0인 y값도 구할 수 있다. 이는 pdata(x)+pG(x)pdata(x)와 같고, 최적의 discriminator지만, 우리가 평가할 수 없는 pdata(x)를 포함하기때문에 직접 계산할 순 없다. 하지만, 이 값이 최적이라는 것은 알기에 maxD logD(x)를 logD∗(x)로 대체할 수 있다.


- 마찬가지로 expectation 정의를 적용하고,


- 해당 식은 다시 Kullback-Leibler 발산 형태로 다음과 같이 변형이 가능하다.

- 그리고 이는 또 다시 Jensen-Shannon 발산 형태로 변형 가능하다.
- Jensen-Shannon 발산은 항상 음이 아닌 값을 가지고, 두 분포가 동일할 때 최소값인 0을 가지는 특징을 가지므로, 결론적으로 2 ∗ JSD(pdata,pG)−log4 를 최소화하는 G는 pG=pdata를 만족시켜야 한다.

하지만 해당 이론은 몇 가지 한계를 가지는데,
- 실제 D와 G는 고정된 신경망 구조를 갖고, 그 구조가 너무 단순하다면 representation이 제한적이어서 실제 구현에서는 최적 해를 달성하지 못할 수 있다.
- 이러한 수식은 최적 해가 존재한다는 것을 보장할 뿐, 실제로 그 해에 수렴 가능한지는 다루지 않는다.
Results

위는 GAN을 통해 생성된 샘플과 그에 대한 train set의 nearest neighbor를 보여준다.
DC-GAN

Generator와 Discriminator 모두 5개의 convolution layers를 사용한 아키텍처이다.

이를 통해 기존 GAN보다 더 나은 이미지를 생성할 수 있었다.

이러한 DCGAN의 latent space에서 두 점 사이를 interpolation하여 이미지 시퀀스를 시각화했을 때, 데이터의 의미 있는 특징을 효과적으로 캡처했음을 보여준다.
Vector Math

생성된 이미지를 종류 별로 사용된 latent vector z들의 평균을 낸 뒤, 각각에 대하여 덧셈 뺄셈을 적용하여 해당 카테고리를 추가하고 없앨 수 있는 신기한 연구도 있다.
웃는 여자 - 웃지 않는 여자 + 웃지 않는 남자 = 웃는 남자 샘플들을 생성해내는 결과를 볼 수 있다.
GAN Improvements

이처럼 2017년도 이후로 GAN에 대한 연구가 아주 활발히 있었고, 다양한 발전이 있었다.
Improved Loss Functions

- Loss function을 손 본 Wasserstein GAN
Higher Resolution

- 더 높은 해상도의 이미지를 생성해 낼 수 있는 StyleGAN 연구도 진행되었다.
Conditional GANs

p(x)대신 p(x∣y)를 학습하여 generator와 discriminator 모두 y를 추가로 받아 conditional하게 만들 수도 있다.
Conditional Batch Normalization

- 각 category에 대한 별도의 γ와 β를 학습하여 label 정보를 GAN에 융합할 수 있다.
Spectral Normalization

- Spectral normalization을 통해 카테고리에 맞는 이미지를 생성
Self-Attention

- Self-Attention을 통해서 이미지를 생성
BigGAN

Text to Image

Low-Res to High-Res

- 이미지를 input으로 받아서 높은 해상도로 이미지를 upsampling해주는 기법
Pix2Pix

CycleGAN

- 각 pair에 대해서 이미지를 전환할 수 있는 CycleGAN
Label Map to Image

- Label map(semantic map)과 style image를 입력 받아서 둘을 합치는 방법
Trajectory Prediction

- 이미지 뿐 아니라, 사람들이 걸어갈 길을 예측하는 것에도 GAN은 쓰일 수 있다.
Reference
유튜브 강의: https://www.youtube.com/watch?v=qcSEP17uKKY&list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r&index=4
PDF: https://web.eecs.umich.edu/~justincj/slides/eecs498/FA2020/598_FA2020_lecture20.pdf