[신입생 세미나] Lecture 19: Generative Models, Part 1 [DL for CV]

뱅모·2023년 2월 14일
0

2023 신입생 세미나

목록 보기
10/11
post-thumbnail

본 게시물은 고려대학교 스마트생산시스템 연구실 2023년 동계 신입생 세미나 활동입니다.
Michigan 대학의 Justin Johnson 교수님의 강의를 공부하는 형식입니다.
관련 유튜브 영상은 여기에서 확인 가능합니다.

Lecture 19: Generative Models, Part 1 강의에서는 배울 수 있는 내용은 다음과 같습니다.
- Supervised vs Unsupervised Learning
- Discriminative vs Generative Models
- Taxonomy of Generative Models
- Autoregressive models
- PixelRNN & PixelCNN
- Variational Autoencoders


Supervised vs Unsupervised Learning

Supervised Learning과 Unsupervised Learning의 비교는 위와 같습니다.

먼저 Supervised Learning(지도학습)의 경우 입력데이터 x가 주어지고 라벨 y가 주어집니다.
이 때 목표는 입력데이터 x가 주어졌을 때 라벨 y로 매핑하는 함수를 학습하는 것입니다.
대표적인 예시는 분류, 회귀, Object detection, Semantic segmentation, 이미지 캡셔닝 등이 있습니다.

다음으로 Unsupervised Learning(비지도학습)의 경우 입력데이터 x는 주어지지만 라벨 y가 주어지지 않습니다.
이 때 목표는 데이터 x 자체가 내포하고 있는 어떠한 구조 자체를 학습하는 것입니다.
예시로는 군집화, 차원축소, Feature Learning, Density estimation 등이 있습니다.

두 학습을 비교해놓은 이유는 이제부터 살펴볼 생성모델의 경우 비지도학습 상황에서 상당히 중요하기 때문입니다.
생성모델을 설명할 때 항상 나오는 예시는 리처드 파인만 교수님의 "만들 수 없다면 이해하지 못한 것이다." 라는 명언입니다.
즉 데이터를 잘 분류하기 위해서는 데이터가 내포한 어떠한 특징들을 학습해야하고 이를 가장 잘 학습했다고 볼 수 있는 것은 데이터를 직접 만들어낼 수 있도록 학습시키는 것입니다.


Discriminative vs Generative Models

지금부터는 Discriminative Model과 Generative Model의 차이점을 살펴보겠습니다.

먼저 Discriminative Model 입니다.
학습해야할 확률 분포를 보시면 무엇을 하려는지 알 수 있습니다.
p(yx)p(y|x) 입력데이터 x가 주어졌을 때 라벨 y를 매핑하는 학습을 하는 것입니다.
여기서 확률 분포는 밀도함수로 값이 높게 나올 수록 x가 더 나오기 쉽다는 것을 의미합니다.

위 그림을 보시면 고양이가 입력데이터 x로 주어졌고, 그러한 상황에서는 cat이라는 라벨로 매핑하게 됩니다. 각 입력데이터 x마다 모든 라벨들에 일정하게 매핑될 확률이 나오며 다 더하면 1입니다.

입력데이터 x가 달라지면 어떠한 밀도로 라벨이 매핑될지 경쟁하게 됩니다.
이 말은 즉 이미지들 간에 얼마나 차이가 있는지를 보는게 아니라
각각의 이미지들이 어떤 라벨을 갖게 될지를 보는 것이기에 차이가 있습니다.

Discriminative model의 단점도 있습니다.
위 그림과 같이 unreasonable한 input 이미지에 대해서도 사전에 정의된 라벨을 부여하도록
모델이 학습하게 되고 이는 모델이 왜곡된 정보를 판단하도록 강제합니다.

반면 Generative model은 모든 가능한 이미지들에 대해서 likelihood 혹은 density을 계산하도록 학습됩니다.
이 말은 즉 앞서 Discriminative model이 unreasonable한 input 이미지 또한 학습한다는 단점이 있었는데, Generative model의 경우 unreasonable한 input 이미지에 대해서는 낮은 likelihood 값을 부여하기 때문에 "reject" 할 수 있도록 학습된다는 것입니다.

Conditional Generative model은 모든 이미지들이 각각 어떤 class에 있을 때 likelihood가 높을 지를 계산하여, 분석가가 원하는 라벨로 이미지를 생성해낼 때 쓰는 것입니다.

앞서 말한 3가지 모델들은 Bayes' Rule에 의해서 한 번에 설명 가능합니다.

연두색 박스는 training set에서 직접 개수를 세서 확률을 계산하면 됩니다.
연두색 박스까지 계산했다면, Discriminative model, Generative model, Prior over labels 들을 조합하여 Conditional Generative Model을 계산할 수 있습니다.

각 3개의 모델을 정리해보겠습니다.
Discriminative Model을 가지고 지도학습 상황에서 데이터에 라벨을 부여할 수 있습니다.
Generative Model을 가지고 비지도학습 상황에서 Feature Learning을 할 수 있고, Outlier 탐지도 할 수 있고, 새로운 데이터를 생성해낼 수도 있습니다.
Conditional Generative Model을 가지고 Outlier는 제거하면서 라벨을 부여할 수 있고, 라벨에 따라 새로운 데이터를 생성해낼 수도 있습니다.


Taxonomy of Generative Models

생성모델에 대한 Taxonomy는 위와 같습니다.
본 강의에서 다루는 모델들은 Autoregressive Model, VAE, GAN 정도입니다.


Autoregressive Models

첫번째로 살펴볼 생성모델은 Autoregressive Models 입니다.
AR 모델의 경우, input 데이터에 따른 직접적인 확률분포를 찾아내는 걸 목표로 합니다.

먼저 모든 explicit 밀도 추정 방식의 공식을 살펴보겠습니다.
데이터셋이 주어졌을 때, training data의 확률을 maximize하도록 하는 W를 규정합니다.
다음으로 log transform을 통해 product를 sum으로 바꿔줍니다.
그렇게 만들어진 W를 최대화하는 loss function을 gradient descent를 통해 학습시킵니다.

Autoregressive model은 결국 explicit function p(x)=f(x,W)p(x)=f(x,W)를 찾아야합니다.
이를 찾아가는 과정은 위에 나와있는데 보시면,
x=(x1,x2,x3,...,xT)x=(x_1, x_2, x_3, ...,x_T)로 먼저 input data를 subparts로 쪼갭니다.
그리고 xx에 대한 확률은 chain rule을 통해서 계산합니다.

확률을 계산할 때 이전 모든 subparts로 다음 subpart의 확률을 계산하게 되는데 해당 과정은 Language Model을 RNN으로 학습시킬 때와 유사합니다.


PixelRNN & PixelCNN

PixelRNN

앞서 말했듯이 AR 모델은 RNN과 유사하기 때문에 해당 아이디어를 차용한 PixelRNN이라는 모델도 존재합니다.

Pixel RNN은 왼쪽 위 모서리부터 시작해서 pixel을 하나씩 생성해내는 방법입니다.
왼쪽과 위로부터의 RGB 값과 hidden state에 따라서 각 픽셀의 hidden state를 계산합니다.
각 픽셀에서, red, blue, green 3 채널의 값을 0~255 값으로 예측하게 됩니다.
바로 직전 픽셀에 영향을 받게되면 explicit 하지만 이 경우 그 이전의 모든 픽셀에 의해서 영향을 받을 수 있기 때문에 implicit 합니다.

PixelRNN의 단점은 sequential하게 계산을 해나가야하기 때문에 학습과 추론 시에 느립니다.


PixelCNN

유사하게 PixelCNN도 있는데 해당 방법 또한 코너에서부터 이미지 픽셀을 생성해내는 방식입니다.

이번에는 CNN을 통해 context region의 픽셀 정보에 따라 픽셀 값을 생성해냅니다.

PixelCNN은 PixelRNN보다는 학습이 빠르지만, 여전히 생성 작업이 Sequential 하게 진행되기 때문에 Test 시에는 느립니다.

AR 생성모델의 장단점에 대해서 다시 살펴보면 위와 같습니다.

Explicit 하게 likelihood p(x)p(x)를 계산할 수 있고, 이에 따라 좋은 evaluation metric에 의해 성능을 보장받을 수 있습니다.
하지만 단점으로는 generation 과정이 너무 느립니다.


Variational Autoencoders

앞서 AR 모델들은 explicit하게 density function을 parameterize 할 수 있다는 장점은 있었습니다.

지금부터 살펴볼 VAE의 경우 intractable density를 규정하기 때문에 explicit 하게 계산하거나 최적화할 수는 없습니다.
그래서 lower bound을 최적화하는 방식으로 학습이 진행됩니다.

용어는 Variational 이랑 Autoencoders로 되어있습니다.
그래서 교수님께서는 Autoencoder를 먼저 간단하게 살펴보고 넘어가십니다.

기본 오토인코더는 위 설명과 같이 어떠한 라벨 정보 없이 입력 데이터 x로부터 feature vectors를 학습하는 비지도 방법입니다.

여기서 Feature vectors는 Downstream task를 수행하는데 유용한 정보들을 추출해낼 수 있어야 합니다.

유용한 feature vectors를 추출해내기 위해서 오토인코더는 Decoder를 접목시킵니다.
Decoder를 통해 input data x를 복원하는 과정을 거치게 됩니다.

복원된 x^\hat{x}와 원본 input x의 차이를 최소화하게 된다면 결국 feature vectors는 복원하는데 필요한 정보를 잘 담고 있도록 학습이 됩니다.
따라서 Loss를 input과 reconstructed data의 L2 Distance인 x^x22||\hat{x}-x||^2_2 로 설정하여 학습을 수행하게 됩니다.
Loss 함수를 보면 알 수 있듯, 라벨 정보는 전혀 필요하지 않습니다.
그리고 일반적으로 Feature vector의 차원은 원본 input의 차원보다 작습니다.

학습이 다 이뤄진다면 Decoder는 날리고 Encoder만을 feature extractor로 사용하여 Downstream task를 수행하게 됩니다.
Downstream task 데이터셋에 맞게 Fine-tune해서 지도 학습을 수행할 수도 있습니다.

이처럼 오토인코더는 어떠한 라벨 정보 없이도 latent feature를 학습할 수 있습니다.
그리고 지도학습 모델을 시작할때 feature로서 활용할 수 있습니다.
해당 과정은 Not Probabilistic하고, 학습된 모델로부터 새로운 데이터를 Sample 해낼 수는 없습니다.

다음으로 Variational 용어가 붙은 이유를 살펴보겠습니다.
먼저 오토인코더의 단점으로 학습된 모델로부터 새로운 데이터를 Sample 해낼 수는 없고,
학습된 데이터만 Sample 해낼 수 있다는 점이 있었습니다.
새로운 데이터를 만들어내지 못한다면 생성모델이라고 볼 수 없겠죠?

오토인코더를 통해 새로운 데이터을 생성해내기 위해서 VAE는 Decoder를 Probabilistic하게 만듭니다.
위 그림을 보시면 Encoder를 통해 학습된 Latent variable zz에 따라 평균과 공분산을 Sampling하고 이를 통해 새로운 데이터를 생성해내게 됩니다.

이러한 모델을 학습시키는 방법은 maximize likelihood of data입니다.
입력값 x로부터 z를 observe할 수 있다면, 곧바로 conditional generative modelp(xz)p(x|z)를 학습할 수 있습니다.
하지만 z는 observe할 수 있는 대상이 아니기 때문에 marginalize 과정이 필요합니다.

위 식에서 pθ(z)p_\theta(z)는 Gaussian으로 가정했습니다.
pθ(xz)p_\theta(x|z) 를 통해 decoder network를 계산할 수 있게 됩니다.
즉 위 식만 풀어주면 되는데 여기서 문제는 모든 zz에 대해서 적분하는 것은 불가능합니다.
그래서 marginalize 과정은 폐기!

다음으로 고려해볼 방법은 Bayes' Rule 입니다.

Bayes' Rule도 문제가 있는데 위 식처럼 pθ(zx)p_\theta(z|x)를 계산할 수 없습니다.
하지만 이전 방법과는 다르게 해결 방법이 있습니다.

입력값 x로부터 z를 만들어내도록 학습하는 Encoder를 대신 사용하는 방법입니다.

정리하자면 이렇습니다.
Autoencoder는 원래 입력값을 잘 보존하는 Latent space를 만들어내기 위해, 혹은 차원축소를 하기 위해 나온 모델로 Encoder를 위해서 Decoder가 도입된 모델입니다.
VAE는 이와 다르게 Decoder로 새로운 데이터를 잘 생성해내기 위해서 Encoder가 도입된 모델입니다.
관점의 차이가 좀 존재합니다.
그림으로 다시 표현하면 아래와 같습니다.

그리고 위에서 설명드린 Bayes' Rule 수식을 쭉 정리하다보면

이러한 Variational lower bound를 얻어낼 수 있습니다.
이제 해당 Lower bound를 maximize 하여서 간접적으로 encoder와 decoder를 jointly하게 학습시키면 VAE 생성모델을 끝입니다.

profile
KU. SPS Lab 대학원생

0개의 댓글