해당 포스팅은 네이버 부스트캠프 AI Tech 학습 정리 자료임을 알려드립니다.
1. 강의 정리
최성준 교수님 - Generative Models 1
1) Generative Models
Generative Model은 단순히 이미지나 문장을 생성하는 것이 전부가 아닙니다. 우리가 알고 있는 부분보다 더 많은 부분을 차지하고 있는 것이 Generative Model입니다. 만약에 강아지 이미지 데이터셋이 주어졌다고 가정해보면, 이 데이터셋을 가지고 우리는 무엇을 할 수 있을까요? 데이터셋에 없는 강아지 이미지를 새로 생성해 줄 수 있습니다(Generation). 어떤 이미지가 모델에 들어왔을 때, 강아지인지 아닌지 구분하는 이상탐지도 할 수 있습니다(Density estimation). explicit 모델은 어떤 입력이 주어졌을 때, 그것에 대한 확률값을 얻어낼 수 있는 모델입니다. 단순히 Generation을 하는 모델을 implicit 모델이라고 부릅니다. 또한 스탠포드에서는 생성모델을 활용해서 feature learning을 수행할 수 있다고 합니다. 여기서 나오는 $p(x)$를 만들기 위해서는 기본적인 분포들을 이해해야 합니다.
Bernoulli distribution은 이항분포로 표현하는 변수는 $p$하나가 존재합니다. Categorical distribution에서는 몇개의 변수가 필요할까요? 만약 n개의 경우가 존재한다고 했을 때, n-1개의 변수를 알면 되겠죠? 모든 확률의 합은 1이 되니까 n-1개만 알아도 나머지 한개는 자연스럽게 알 수 있게 됩니다. 하지만, 변수가 많아지면 많아질수록 학습은 더욱 어렵게 됩니다. 어떻게 파라미터의 수를 줄일 수 있을까요? n개의 사건들이 독립적이라는 가정을 해보는 것입니다. 물론, 이 가정은 말이 안되는 가정입니다. 이 경우에서도 얻어지는 possible states는 $2^{n}$이 됩니다(선택지는 2가지일 경우). 이 때 필요한 파라미터의 수는 $n$개가 됩니다. 이렇게 나올 수 있는 이유는 각 변수들이 서로 독립이기 때문에 그렇습니다.
그래서 저희는 처음에 얻었던 $2^{n}$개와 $n$개의 사이 어딘가를 구해보고 싶습니다. 여기에 필요한 내용 3가지가 있습니다. 첫 번째, chain rule을 활용하게 되는 데, chain rule은 $n$개의 joint distribution을 $n$개의 conditional distribution으로 바꿔주는 방법입니다. chain rule은 각 변수끼리의 독립여부와 상관없이 항상 만족합니다. $$p(x_{1}, ..., x_{n}) = p(x_{1})p(x_{2} | x_{1})p(x_{3}|x_{1},x_{2}) ... p(x_{n}|x_{1}, ... , x_{n-1})$$
두 번째, Bayes' rule도 활용이 됩니다. Bayes' rule은 많이 아시겠지만 아래와 같은 수식을 만족하며, 이것도 항상 만족합니다.
$$ p(x|y) = \frac{p(x,y)}{p(y)} = \frac{p(y|x)p(x)}{p(y)}$$
마지막으로 Conditional independence입니다. z가 주어졌을 때, x와 y가 독립이라면, 아래의 수식을 만족합니다.
$$p(x|y,z) = p(x|z)$$
Markov assumption(i+1번째의 사건은 i번째 사건에만 종속)을 가정해보면, joint distribution은 아래와 같이 표현할 수 있습니다.
$$p(x_{1}, ..., x_{n}) = p(x_{1})p(x_{2} | x_{1})p(x_{3}|x_{2}) ... p(x_{n}|x_{n-1})$$
이렇게 가정하면 parameter는 $2n-1$개가 됩니다. 이런 모델을 Auto-regressive Model이라고 부릅니다.
2) Auto-regressive Model
Markcov assumption에 의해 $i$번째가 $i-1$에만 종속인 것뿐만 아니라 $i$번째가 $1 \sim i-1$까지 종속인 것도 Auto-regressive model 입니다.
NADE(Neural Autoregressive Density Estimator)는 위에서 말했던 것처럼 $i$번째 값이 모든 이전의 값과 종속인 상태의 auto-regressive model입니다. NADE는 explicit model로 주어진 input들의 확률을 계산할 수 있습니다. 만약에 continuous random variables라면, Gaussian mixture 모델을 활용해서 continuous distribution을 만들 수 있습니다.
Pixel RNN은 pixel을 생성하기 위한 auto-regressive 모델입니다. 이 모델의 특징은 RNN을 통해서 Generate를 했다는 것입니다. Pixel RNN은 Row LSTM과 Diagonal BiLSTM이 있는데, Row LSTM은 해당 픽셀의 위쪽에 있는 픽셀들을 활용하고, Diagonal BiLSTM은 i번째 이전의 정보를 활용하는 차이가 있습니다.
최성준 교수님 - Generative Models 2
1) Latent Variable Models
Variational inference (VI)의 목적은 posterior distribution$\, p_{\theta}(z|x)$을 찾는 것입니다. 여기서 posterior distribution이라는 것은 나의 관찰값이 주어졌을 때, 내가 관심있는 random variable에 대한 확률분포입니다. 이 식에서 z와 x가 바뀐 것을 보통 likelihood라고 합니다. Variational distribution$\, q_{\phi}(z|x)$은 일반적으로 posterior distribution을 구하기 어려울 때가 많이 있어서 이 분포에 근사하는 분포를 말합니다. VI에서는 KL divergence라는 metric을 활용해서 variational distribution과 posterior를 줄입니다. posterior가 뭔지 모르는 데 어떻게 근사할 수 있을까요? 이것을 가능하게 하는 것이 바로 ELBO 트릭입니다.
$$ln p_{\theta}(D) = \mathbb{E}_{q_{\phi}(z|x)}[ln p_{\theta}(x)] = \mathbb{E}_{q_{\phi}(z|x)}[ln \frac{p_{\theta}(x,z)}{q_{\phi}(z|x)}] + D_{KL}(q_{\phi}(z|x)||p_{\theta}(z|x))$$
위의 식처럼 앞의 식을 전개하면 맨 마지막의 식을 얻을 수 있습니다. 뒤의 항을 줄이는 것이 목적이기 때문에 앞의 항인 ELBO를 최대화하는 방식을 활용합니다. ELBO는 아래와 같이 전개가 됩니다.
$$\mathbb{E}_{q_{\phi}(z|x)}[ln \frac{p_{\theta}(x,z)}{q_{\phi}(z|x)}] =\int ln \frac{p_{\theta}(x|z)p(z)}{q_{\phi}(z|x)}q_{\phi}(z|x)dz = \mathbb{E}_{q_{\phi}(z|x)}[p_{\theta}(x|z)] - D_{KL}(q_{\phi}(z|x)||p(z))$$
맨 마지막 수식의 첫 번째 항을 우리는 Reconstruction Term이라고 부르며, auto-encoder의 reconstruction loss에 해당됩니다. 두 번째 항은 Prior Fitting Term으로, latent distribution이 prior distribution과 비슷하도록 해주는 Term입니다.Variational Auto-Encoder는 explicit한 모델이 아니기 때문에 가능도를 추정하기 어렵습니다. 또한 prior fitting term은 미분가능해야 합니다. 그래서 diverse latent prior distributions을 사용하기 어렵습니다. 모든 아웃풋 차원이 서로 독립인 isotropic Gaussian을 사용하게 됩니다.
$$ D_{KL}(q_{\phi}(z|x)||N(0,1)) = \frac{1}{2}\sum_{i=1}^{D}(\sigma_{z_{i}}^{2}+\mu_{z_{i}}^{2} - ln(\sigma_{z_{i}}^{2})-1)$$
2) Adversarial Auto-encoder
앞에서 언급한 VAE의 경우 Gaussian이 아닌 경우에는 활용하기가 어렵습니다. Adversarial Auto-encoder는 GAN을 활용해서 latent distributions의 분포를 맞춰주는 방법입니다.
3) Generative Adversarial Network
GAN은 Generator는 Discriminator를 속이기 위해 학습하고, Discriminator는 Generator가 생성한 것을 판별하기 위해 계속 발전하는 방법론입니다. 학습 원리를 살펴보면, 먼저 discriminator 입장에서 아래와 같은 식을 얻을 수 있습니다.
$$ \underset{D}{max}V(G,D) = E_{x \sim p_{data}}[log D(x)] + E_{x \sim p_{G}}[log(1 - D(x))]$$
이 식을 최대화 하는 D는 $D_{G}^{*}(x) = \frac{p_{data}(x)}{p_{data}(x) +p_{G}(x)}$라고 할 수 있습니다. 이것을 다시 generator 입장에 넣었을 때, 다음과 같은 식을 얻을 수 있습니다.
$$V(G, D_{G}^{*}(x)) = D_{KL}[p_{data}, \frac{p_{data}(x)+p_{G}}{2}]+ D_{KL}[p_{G}, \frac{p_{data} +p_{G}}{2}] - log 4$$
여기서 앞의 식을 Jenson-Shannon Divergence라고 부르며, 이것을 최소화하는 것이 목적이 될 수 있습니다. 하지만, 실질적으로 Discriminator가 수렴한다는 보장할 수 없고 Generator가 학습이 잘될 수 있다는 보장이 없어서 애매한 부분이 있습니다.
2. 피어 세션 정리
수업 내용 질문 및 다음주 시간 활용관련 토의
1. 다음주에 어떤 공부를 했는 지에 대해 slack으로 알려주기
2. daum에서 크롤링해서 데이터 추가하기