CS231n 13강. Generative Models
Stanfoard CS231n 2017 13강을 요약한 글입니다. 정리 목적이라 자세하게 작성하지 않은 부분도 있습니다. CS231n의 나머지 14강~16강은 작성하지 않을 예정입니다!
Overview
- Unsupervised Learning
- Generative Models
- PixelRNN and PixelCNN
- Variational Autoencoders (VAE)
- Generative Adversarial Networks (GAN)
Supervised vs Unsupervised Learning
Supervised Learning
- Data : (x, y)
- x is data, y is label
- Goal : Learn a function to maxp x -> y
- Examples : Classification, regression, object detection, semantic segmentation, image captioning, etc
Unsupervised Learning
- Data : x
- just data, no labels
- Training data is cheap
- Goal : Learn som underlying hidden structure of the data
- Holy grail : Solve unsupervised learning => understand structure of visual world
- Examples : Clustering, dimensionality reduction, feature learning(autoencoders), density estimation
Generative Models
- Train 데이터가 주어지면, 이 데이터의 분포와 동일한 새로운 samples을 생성
- \(p_{model}(x)\)와 \(p_{data}(x)\)가 유사하도록 학습
- Density estimation
- Several flavors
- Explicit density estimation : \(p_{model}(x)\)을 확실히 정의하고 estimation (MLE)
- Implicit density estimation : 확실히 정의하지 않고 \(p_{model}(x)\)의 샘플 생성
Why Generative Models?
- Data로부터 실제와 같은 샘플을 얻을 수 있음(artwork, super-resolution, colorization 등)
- time-series data의 generative model들은 simulation과 planning할 때 사용 가능(강화학습!)
- Generative model을 학습하는 것은 일반적인 특징을 찾을때 유용한 latent representation(잠재적인 representation을 추론할 수 있음
- High dimensional prob, distribution을 추출해서 다룰 수 있음
- Semi-supervised learning에서 활용될 수 있음
Taxonomy of Generative Models
- Generative Model의 분류
- 이 수업에선 3가지만 다룰 예정입니다
PixelRNN and PixelCNN
Fully visible belief network
- Explicit density model
- 1-d 차원의 이미지 x의 likelihood를 decompose하기 위해 chain rule 사용
- 그 후, training data의 likelihood를 최대화
- n-dim vector의 확률을 n개의 확률곱으로 나타냄. WaveNet
- 샘플 요소들을 하나하나 차례로 생성해야하기 때문에 매우 느림
- pixel value들의 복잡한 분포 => Neural Network를 사용해 표현!
- previous pixels의 순서를 정의해야 함
PixelRNN
- corner부터 시작해 이미지 픽셀 생성
- RNN/LSTM을 사용해 이전 픽셀에 dependency
- 그러나, sequential generation은 느림!!
PixelCNN
- corner부터 시작해 이미지 픽셀 생성
- CNN over context region을 사용해 이전 픽셀에 dependency
- Training : maximize likelihood of training images
- PixelRNN보단 빠름
- Training 이미지의 context region values로 convolution을 병렬화
- 그러나 sequentially하기 때문에 여전히 느림
Generations Samples
Summary
Variational Autoencoders (VAE)
- VAE는 latent z를 가진 intractable(다루기 힘든) 밀도 함수를 정의
- 직접적으로 최적화할 수 없고, likelihood에 대한 lower bound(하한)으로 유도하고 최적화
background first: Autoencoders
- unlabeled training data로 저차원의 feature representation을 만드는 unsupervised 접근
- Encoder는 계속 변하고 있음
- 차원 축소를 하는 이유는?
- 의미있는 데이터 변동 factor를 찾을 수 있는 Feature를 얻기 위해
- How to learn this feature representation?
- original data를 재설계할 수 있는 feature를 학습
- Autoencoding은 encoding 그 자체!
- Decoder도 Encoder처럼 계속 변하고 있음
- Encoder는 supervised model을 initialize하기 위해 사용할 수 있음
- 그렇다면 autoencoder로 새로운 이미지를 생성할 수 있을까? => VAE
Variational Autoencoders
- true parameters \(\theta^*\)를 estimate하고 싶음
- How should we represent this model?
- prior \(p(z)\)는 간단하게 선택. (ex. 가우시안)
- conditional \(p(x\mid z)\)는 복잡 (이미지 생성)
- Neural network로 표현
- How to train the model?
- learn model parameters to maximize likelihood of training data
- \[p_{\theta}(x) = \int p_{\theta}(z)p_{\theta}(x\mid z)dz\]
- What is the problem with this?
- Intractable!
Intractabiltiy
- decoder network 모델링에 추가하기 위해 encoder network를 정의(\(p_{\theta}(z\mid x)\)를 근사할)
Generating Data
Summary
Generative Adversarial Networks (GAN)
- PixcelCNN은 다루기 쉬운 밀도 함수를 정의하고, training data의 likelihood를 optimize했습니다
- VAEs는 대조적으로 잠재변수 z를 가진 다루기 힘든 함수를 정의합니다. z는 좋은 속성을(property) 많이 가지고 있습니다
- 직접 optimize하지 못하고, likelihood의 lower bound를 optimize하도록 유도합니다
- 명시적으로 밀도를 모델링하는 것을 포기하고, sample을 얻으면 어떨까요?
- GANs : 명시적인 밀도 함수를 적용하지 않고 게임 이론으로 접근합니다
- 2 player game의 training 분포를 사용해 생성하는 것을 학습
- Problem
- 복잡하고 고차원의 샘플을 원함
- 이것을 직접적으로 할 방법이 없음
- Solution
- 간단한 분포의 sample을 얻음(예를 들어 random noise)
- 간단한 분포로부터 변형을 학습
- Q) What can we use to represent this complex transformation?
A) Neural Network!
- Input : Random noise
- Output : Sample from training distribution
Training GANs: Two-player game
- Generator network : 실제와 같은 이미지를 생성해 discriminator를 속입니다
- Discriminator network : 실제와 가짜 이미지를 구별합니다
- Generator가 진짜같은 이미지를 생성해낸다면!!
- Discriminator는 objective를 최대화.
- \(D(x)\)는 1에 가깝고 \(D(G(z))\)는 0에 가까워야 합니다
- Generator는 objective를 최소화
- \(D(G(z))\)는 1에 가까워야 함
- generator에서 graident ascent 사용
- GAN training algorithm
- training 후, 새 이미지를 생성하기 위해 generator 네트워크를 사용합니다
Generated samples
Convolutional Architectures
- Gan이 더 잘 생산할 수 있도록 도와주는 아키텍쳐
- 이런 작업들도 진행 가능
- Vector의 연산이 가능 (Word2Vec처럼)
2017: Year of the GAN
- 다양한 종류의 GAN이 연구되고 있습니다
- The GAN Zoo : GAN 관련 논문들을 정리한 repo
- ganhacks : GAN들을 학습할 때 트릭과 팁을 주는 repo
Summary
Recap
Reference
- Stanfoard CS231n 2017
- 엄태웅님 포스팅
- GAN tutorial 2016 정리(1)
- 알기쉬운 Variational AutoEncoder
- What is variational autoencoder?
- GAN(Generative Adversarial Network) 기초
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)