※ 본 내용은 stanford에서 제공하는 cs231n 강의, 강의자료를 바탕으로 작성하였습니다.
Lecture 13에서는 unsupervise learning과 generative models(FVBN, Variational Autoencoder, GAN)에 대해 다룬다.
- Supervised vs Unsupervised Learning
Supervised learning과 Unsupervised learning의 가장 큰 차이는 label의 존재유무이다.
Supervised learning에서는 label을 통해 모델이 data와 label간의 mapping을 학습했다면,
Unsupervised learning에서는 주어진 데이터 자체에 내재된 구조, 특성을 학습한다.
Unsupervised learning의 대표적인 예시는 clurstering, dimensionality reduction 그리고 density estimation 등이 있다.
<Generative Models>
본 강의에서 다룰 Generative Models는 train data의 분포를 학습(density estimation)하여 새로운 sample을 생성하는 model이다.
Generative Models에도 여러 종류가 있다.
크게 Explicit density estimation / Inplicit density estimation으로 나뉘는데, -
Explicit density estimation은 실제 분포를 학습하는 방법이고,
Implicit density estimation은 분포를 직접적으로 정의하지 않고 생성하는 방법이다.
본 강의에서는 빨간 사각형으로 표시된 모델들(Pixel RNN/CNN, Variational Autoencoder, GAN)에 대해서만 다룬다.
- FVBN, Fully Visible Belief Nets : Pixel RNN/CNN
FVBN은 explicit density model로, image의 likelihood를 maximize하는 방법이다.
이때 $ \Pi{p(x_i | x_1, ..., x_{i-1})} $는 매우 복잡한 분포를 따른다.
따라서 해당 분포를 학습할 때 NN을 이용한다.
먼저 RNN을 이용한 방법이다.
좌측상단에서 pixel부터 image를 generate하고, 생성한 pixel들의 값을 input으로 이용하는 RNN(정확히는 LSTM, training 이미지로 분포를 학습)을 사용하여 계속하여 주변 pixel을 generate하는 방식이다.
순차적으로 전파되는 방식을 사용하기 때문에 느리다는 단점이 있다.
PixelCNN에서는 convolution을 이용해 generate하는 방식으로 속도를 개선한다.
여전히 좌측상단에서부터 시작하여 생성된 값을 바탕으로 인접 pixel을 생성하긴 하지만, RNN 방식보다 빠르게 동작한다.
Pixel RNN/CNN의 장단점은 위와 같다.
느리다는 단점뿐만 아니라 이미지 생성 자체에서도 자연스럽고 의미가 명확한 이미지를 생성하지 않는다.
- VAE, Variational Autoencoders
위 수식에서 확인할 수 있듯이 VAE에서는 Pixel RNN/CNN과는 다른 값을 maximize한다.
여기서 z는 image에 대응되는 feature vector라고 이해하면 된다.
먼저 autoencoder에 대해서 살펴보자.
Input date를 encoder를 통해 어떠한 features vector인 z로 표현한 후, decoder를 통해 reconstruction을 수행할 수 있도록 encoder와 decoder를 학습시키면(loss = $ \|x - \hat{x}\|^2$),
encoder는 original data에 대한 features를 표현할 수 있는 모델이 될 것이다.
(encoder를 거친 필터에 FC layers를 추가하는 방식으로 supervised learning에 이용할 수도 있다.)
VAE는 sample features로부터 분포를 학습하여, 이미지를 생성하는 방법이다.
임의의 분포(일반적으로 Gaussian)를 따르는 z로부터 training data x가 생성되었다고 가정하고, $ p_{\theta*}(x | z^{(i)})$ 를 학습하는 방법이다.
여기에서도 마찬가지로 $ p_{\theta}(x|z)$를 나타내기 복잡하므로 NN을 이용하여 이를 학습하고,
학습시에는 $ p_{\theta}(x) = \int_{}^{} p_{\theta}(z)p_{\theta}(x|z)$를 maximize하는 방식을 이용한다.
그러나 이때 $ p_{\theta}(x|z)$의 적분은 매우 어려울 것이다.
따라서 maximize하고자 하는 수식을 조금 변경한다.
Lower bound of likelihood를 maximize하고자 수식을 변경하면, train이 가능하다.
먼저 encoder network를 추가한다.
Encoder network에서는 $ q_{\Phi}(z | x)$를 학습하고, decoder에서는 다시 $ p_{\theta}(x|z)$를 학습한다.
학습 시에는 위 식과 같은 log likelihood를 maximize하는 방향으로 학습한다.
식의 형태를 조금 변경하면 위와 같이 나타낼 수 있다.
각각 term의 의미는 위와 같다.
가장 우측의 항은 역시 intractable하지만, 정의에 의해 양수이므로 likelihood의 lower-bound를 maximize하는 것이 가능해지는 것이다.
Training 과정은 위와 같다.
실제 데이터를 생성할 때는 z를 N(0, 1)에서 sample한 후, Decoder network에 전달하면 된다.
앞서 z가 어떠한 features를 나타내는 vector라고 했는데, 실제로 z값을 임의로 조정하면 생성된 이미지가 달라진다.
위 예시에서는 웃는 정도, 얼굴의 각도 등이 달라지고 있다.
장단점은 위와 같다.
여전히 feature representation을 통해 다른 task에도 의미를 갖는다.
그러나 GAN과 같은 SOTA 기술에 비해서 low quality를 출력한다.
- Generative Adversarial Networks (GAN)
GAN은 explicit density modeling을 포기하고, train distribution으로의 transform을 nueral network를 통해 나타내는 방법이다.
Input으로 random noise가 주어지면 GAN을 거쳐 training distribution을 따르는 image가 생성된다.
GAN은 two-player game의 방식으로 training이 이뤄진다. 두 개의 network가 존재하고, 각각 다음과 같다.
Generator network : Discriminator가 구분하지 못하도록 실제와 같은 이미지를 생성하는 network
Discriminator network : Real image와 fake image를 구분하는 network
Training은 위와 같이 이뤄진다.
Discriminator는 real image에 대한 probability output을 최대화하고,
Generator는 generator가 생성한 이미지를 가짜이미지로 생각할 확률을 최소화하도록 objective function이 정의된다.
(1). Gradient ascent를 통해 discriminator가 real을 구분할 확률을 키우도록 학습
(2). 다시 gradient ascent를 통해 generator의 출력을 discrminator가 '틀릴 확률'을 최대화
(1), (2)를 반복하며 training은 이뤄진다. ((2) 한 번당 (1)을 여러번 수행하기도 한다.)
(2) 과정이 discirminator가 가짜 이미지로 생각할 확률을 최소화하는 것에서, 진짜 이미지로 생각할 확률을 최대화하도록 변경했는데, 그 이유는 위 슬라이드 우측하단의 그래프를 통해 확인할 수 있다.
학습이 잘 이뤄지게 하기 위해서인데, 초록색으로 표현된 그래프가 바뀐 수식이고, 파란색으로 표현된 그래프가 이전의 방식이다.
초록색으로 표현된 그래프에서는 현재 real image로 생각할 확률이 낮다면 gradient값이 크기때문에 빠르게 학습이 이뤄진다.
Traing과정을 pseudo code로 나타내면 위와 같다.
앞서 언급했듯이 discriminator를 k steps 학습한 후, generator를 1 step 학습할 수 있다.
보통 k > 1이고, 이 또한 hyperparameter이지만 이 값의 선택에 대한 고민을 줄이기 위한 연구들이 존재하므로 확인하면 좋다고 한다.
실제 생성된 이미지들로, 자연스러운 이미지를 생성한다.
Generator나 discrimator를 CNN으로 구현할 수도 있다고 한다.
CNN으로 구현하기 위한 가이드 라인은 위와 같이 소개하고 있다.
CNN 기반 구조로 생성된 이미지로, 매우 정교한 이미지를 생성한다.
'Computer Vision > cs231n' 카테고리의 다른 글
[Lec 15] Efficient Methods and Hardware for Deep Learning (0) | 2022.02.04 |
---|---|
[Lec 14] Reinforcement Learning (0) | 2022.01.29 |
[Lec 12] Visualizing and Understanding (0) | 2022.01.24 |
[Lec 11] Detection and Segmentation (0) | 2022.01.24 |
[Assignment 2] Convolution 역전파, Spatial Batch Normalization (1) | 2022.01.21 |