우리는 이전 강의까지 다양한 Supervised Learning을 이용한 task에 대해서 알아봤습니다.
이번에는 다른 학습 방법인 Unsupervised Learning과의 차이점에 대해 알아보겠습니다.
Supervised Learning
- Data - (x,y) 형태, x = Data, y = Label
- Goal - x -> y를 mapping해주는 함수를 학습
- Task - classification, regression, object detection, semantic segmentation, image captioning
Unsupervised Learning
- Data - x만 존재, x = Data , No Label
- Goal - Data의 숨어있는 기본적인 구조를 학습
- Task - clustering, dimensinality reduction, feature learning, density estimation
Generative Model은 Training data를 주면, 동일한 ditribution으로부터 새로운 sample들을 만드는 Task를 말합니다. 이는 Unsupervised Learning에 해당하고, Density estimation(분포 추정)이 핵심 문제입니다.
Density Estimation 방법
- Explicit Density Estimation - 생성 모델 P_model(x)를 명시적으로 나타내 주는 방법
- Implicit Density Estimation - 생성 모델 P_model(x)를 정의하지 않고 Sample을 얻어내는 방법
Generative Model의 task는 Realistic Samples for artwork, Super-resolution, Colorization등이 있습니다.
Generative Model의 분류는 위와같습니다. 이번 13강에서는 PixelRNN / CNN, Variational AutoEncoder, GAN 에 대해서 알아봅니다.
Explicit Density Estimation에서 계산 가능 가능한 Density를 다루는 방법 중 하나입니다.
Explicit Density Model을 만들기 위해 Chaine Rule을 이용하여 Image x를 1차원 distribution간의 곱의 형태로 분해합니다.이 작업을 거치면, Pixel x_i에 대한 P(x_i | coditions)를 정의할 수 있습니다. training data의 likelihood를 maximize해야 모델을 학습시킬 수 있는데, Pixel Value간 복잡한 분포들은 Neural Network를 이용하여 알아냅니다.
PixelRNN/CNN
화살표 방향으로 순차적으로 Pixel을 생성합니다. 이렇게 방향성을 기반으로 Pixel들간의 종속성을 RNN(LSTM)을 이용하여 모델링합니다. 하지만 이러한 방법은 순차적인 생성 방식이라 속도가 느리다는 단점이 있습니다.
왼쪽 코너에서부터 이미지를 생성하는 것은 동일하지만, Pixel들간의 모든 종속성을 고려해야하는 RNN 대신에 CNN으로 모델링을 한다는 차이점이 있습니다. 회색 영역은 이미 생성된 Pixel들을 의미하는데, 이미 생성된 Pixel들 중에서도 특정 영역만 이용하여 새로운 Pixel을 생성합니다. PixelRNN과는 다르게 Pixel을 생성하는데 특정 영역만을 이용하기에 속도가 더 빠르다는 장점이 있습니다.
AutoEncoder
- UnLabel 데이터로부터 저차원의 feature representation을 학습하기 위한 Unsupervised Learning방법
- Input data x가 있고, 특징 z를 학습
- Encoder는 입력 데이터 x를 입력으로 받아 더 낮은 차원의 z로 매핑시킨 후, z를 출력
- Decoder는 Encoder가 출력한 z를 입력으로 받아 입력 데이터 x와 유사하고 x와 같은 차원을 출력
- UnLabel 데이터로부터 양질의 general feature representation을 학습할 수 있다는 장점이 존재
- 학습시킨 feature representation을 데이터가 부족한 지도학습 모델의 초기 가중치로 이용 가능
Variational AutoEncoders(VAE)
학습데이터 x_i(i = 1~N)가 우리가 관측할 수 없는 latent representation z에 의해 생성된다고 가정하고, 벡터 z의 각 요소들은 데이터의 변동 요소를 잘 포착합니다. 즉, 벡터 z가 다양한 종류의 속성을 담고있는 것을 의미합니다. z에 대한 prior로부터 샘플링을 수행. 이때, prior는 어떤 event가 발생할 기대값을 의미합니다. 다양한 속성들이 어떤 분포를 다르는지에 대한 prior를 정의해줘야 합니다.
Decoder는 latent representation z를 받아서 이미지로 디코딩하는 역할을 수행합니다 모델의 파라미터들을 추정하기 위해 모델을 학습시켜야 합니다. 가장 쉬운 학습 방법은 모델 파라미터가 학습 데이터의 likelihood를 최대화하도록 학습하는 것입니다.
하지만 likelihood p(x)를 최대화하려고 할 때, p_θ(x)의 적분식을 계산할 수 없습니다. p_θ(x|z)를 구하려면 모든 z에 대해 알아야 하는데, 모든 z를 알아낼 수 없습니다. 고로 p(x)를 직접 최적화하는 것은 힘듭니다.
추가적으로 Encoder를 정의하는 방법이 있습니다. VAE의 Goal은 데이터의 확률론적 생성 모델을 만드는 것입니다. Encoder의 출력은 평균과 공분산, Decoder의 출력도 평균과 공분산 2가지 입니다.Decoder에는 파라미터 theta가 있고, z given x와 x given z를 얻으려면 분포로부터 샘플링해야 합니다. Encoder/Decoder network는 각각 z와 x에 대한 분포를 생성하고 실제 값을 뽑기 위해 이 분포로부터 샘플링 진행하게 됩니다.Encoder는 z given x를 추론하기에 'recognition/inference network'라고 부르고, Decoder는 generation network라고 부릅니다.
VAE를 학습시키기 위해서 앞서 구한 lower bound가 최대화되도록 최적화시키면 됩니다. 즉, data likelihood의 lower bound를 최적화 시키는 것을 말합니다. lower bound를 최대화시키기 위해서는 파라미터 theta와 phi를 구해야 합니다.
입력 데이터 x를 encoder에 통과시켜서 q(z given x)를 얻고, 이 분포로부터 잠재 변수 z를 샘플링합니다. 그리고 샘플링한 z를 decoder에 통과시킵니다. Decoder network의 출력 p(x given z)에 대한 평균과 분산입니다. 이 분포를 바탕으로 샘플링을 하면 샘플 출력이 만들어집니다. 그리고 training time에는 log p(학습 이미지 given z)가 최대가 되도록 학습합니다. 이런 식으로 모든 미니배치에 대해서 forward pass를 계산합니다. 이렇게 구한 모든 항은 미분이 가능하므로 backprop 할 수 있습니다. 그레디언트를 계산하여 encoder/decoder의 파라미터 phi와 theta를 업데이트하고 이를 통해 train data likelihood 를 최대화시킵니다.
VAE는 계산할 수 없는 형태의 확률 분포를 이용하여 계산할 수 있는 형태로 근사시켜 모델을 만든다는 특징이 있습니다. 하지만 직접 최적화를 진행하는 PixelRNN/CNN보다 만들어진 이미지의 Quality가 떨어진다는 단점(blur)이 있습니다.
Generative Adversarial Network(GAN)
GAN은 2가지 Network로 구성됩니다.
- Generator Network - Discriminator를 속여 실제처럼 보이는 가짜 이미지를 만들어내는 것이 목적
- Discriminator Network - 진짜 이미지와 생성된 이미지를 구별해 내는 것이 목적
GAN의 Objective function은 위와 같습니다. 첫번째 항은 실제(real) 데이터 x에 대한 discriminator의 출력값으로, 실제 데이터(x)가 데이터 분포 p_data에 속할 likelihood입니다. 두번째항은 Generator에 의해 생성된 가짜 이미지에 대한 Discriminator의 출력입니다. D(x)의 경우 실제 데이터이므로 1에 가까울수록 좋고, D(G(z))는 생성된 데이터이므로 0에 가까울수록 좋습니다.
위와같이 GAN을 이용하면 다양한 이미지를 생성할 수 있습니다.
'Lecture > CS231n' 카테고리의 다른 글
CS231n 16강 (0) | 2024.02.23 |
---|---|
CS231n 11강 (0) | 2024.02.06 |
CS231n 10강 (0) | 2024.02.01 |
CS231n 9강 (0) | 2024.02.01 |
CS231n 8강 (0) | 2024.02.01 |
댓글