우리는 생성모델하면 강아지나 고양이 이미지를 만들어내는 것을 생각할 수 있다.
과연 생성모델을 학습한다는 것은 어떤 의미가 있는 생각해본적이 있나?
우리가 input으로 강아지 사진이 들어왔다고 가정해보자
우리는 input에 대한 distribution을 학습해야 한다.
우리가 distribution을 학습했을 때 할 수 있는 것은 무언가를 새롭게 만들어 내는 것이다.
우리가 이미지가 주어지고 생성모델을 학습했다면 새로운 이미지를 얻어낼 수 있어야 한다. 그리고 그렇게 나온 이미지는 강아지처럼 생겨야 할 것이다.
이처럼 우리가 생성모델을 다룰 때 고려하는 topic이지만 이것 외에도 중요한 topic이 있다.
그게 바로 density estimation이다.
앞에서는 새로운 강아지 모습을 얻어내는 것에 집중했다면, 다음에는 어떤 사진이 주어 졌을때 강아지 같은지 아닌지를 구분하는 일을 하는 것에 집중해야 한다.
좀더 구체적으로 p(x)에 강아지 혹은 어떤 이미지를 집어 넣을 때 강아지와 유사하면 값이 높아지고 아니면 낮아지게 된다.
p(x) 확률분포라고 가정했을 때 값이 항상 0보다 커야되고 모든 가능한 input에 접근했을 때 1이되는 어떤 normalization을 만족한다면 우리는 이것을 probability distirbution이라고 한다.
이러한 probal 한 p(x)를 만들어 내는 모델링을 explicit model이라고 한다.
자 그러면 좀더 실용적인 문제로 들어가서 p(x)를 어떻게 학습하고 어떻게 표현할 수 있는지 알아보자
이를 위해서는 몇가지 확률 분포에 대해서 알아야 한다.
우리가 가장 쉽게 생각할 수 있는 분포는 베르누이 분포(Bernoulli distribution)이다.
예를 동전하나를 던져서 앞이 나올지 뒤가 나올지!!가 베르누이이다.
이 분포는 나올 수 있는 경우의 수가 2개이고 파라미터는 하나이다.
이렇게 우리가 랜덤분포를 정의할 때 나올 수 있는 경우의 수와 파라미터를 체크하는 습관을 들이는 것이 중요하다!
동전을 주사위로 바꾸면 카테고리 분포(category distribution)이다.
이 분포는 만약 주사위가 m개의 면이라면 파라미터는 m-1개이다.
왜냐하면 m-1개를 통해 나머지 하나의 확률을 알 수 있기 때문이다.
예시로 컬러이미지의 한 픽셀이 가질 수 있는 값의 개수는?
256x256x256개 이다. 그러므로 파라미터는 256x256x256-1이다.
예시로 하나의 픽셀이 아닌 하나의 이미지를 다루어 보자
이때 RGB이미지로 다루면 너무 복잡해지니 0과1을 갖는 흑백이미지로 생각할 것이다. 하나의 이미지가 갖는 픽셀의 숫자는 N개이다.
0과1을 갖기 때문에 이미지가 갖을 수 있는 경우의 수는 이다
그리고 파라미터는 이다.
이렇듯 우리가 어떤 확률분포를 정확하게 표현하기 위해서 혹은 모든 경우의 수를 고려해서 표현하기 위한 파라미터의 숫자가 엄청나다는 것을 알 수 있다.
우리가 모든 가능한 경우의 수를 고려한 확률분포를 모델링하는 것은 거의 불가능하다..(파라미터가 데이터의 수보다 많으면 학습도 잘 안되기 때문이다.)
이러한 파라미터 숫자가 너무나 많기 때문에 이런것을 조금더 간략하게 하는 기계학습 방법론이 발전해왔다.
이때 가장 기본이 되는 성질 중에 하나가 독립이라는 성질이다.(independence)
독립이란 결합분포(joint distribution)가 각각의 개별적인 확률분포(marginal distirbution)으로 쪼개질 수 있음을 이야기 한다.
즉, 이미지로 생각하면 서로 다른 이미지의 픽셀들은 서로에게 아무런 영향을 주지 않는다는 것이다.
그럼 다시 예시로 돌아가 보면 경우의 수는 으로 같다는 것을 알 수 있다. 그 이유는 우리가 독립적인 구조를 주는 건 변수에 주는 것이라서 경우의 수는 변하지 않는다.
하지만 파라미터의 개수는 N개이다!! 엄청나게 줄어든 것을 볼 수 있다.
이게 의미하는 것이 뭘까? 독립적인 가정은 우리가 굉장히 많은 기계학습 분야에서 사용해왔다. (vae모델에서 latent layer사이의 독립 가정이 주어진다 등등)
독립가정을 한다는 것은 우리가 표현할 수 있는 표현력을 굉장히 줄여버린다. 우리가 독립가정을 한 상태로 흑백이미지를 모델링 한다면 우린 절대로 의미있는 숫자,이미지를 얻을 수 없다. 각각의 픽셀들이 모두다 indepent하기 때문이다. 그래서 독립가정은 파라미터의 숫자를 줄여주는 효과는 있지만 유의미한 분포를 모델링 함에 있어서는 되게 좋지 않다.
그래서 이제는 그 중간 어딘가를 하고 싶겠지! 지금까지 배운게 너무 극과극이니깐! 그래서 조건부 독립을 이용하게 된다.
조건부 독립을 이해하기 위해서는 3가지 규칙들을 알아야 한다.

즉 조건부 독립은 z라는 랜덤변수가 주어졌을 때 x와y가 독립인 것을 말한다. 항상 독립이 아닌 z가 주어졌을 때 독립이다.
이 조건부 독립을 이용해 chain rule에 있는 conditional part를 떼내어 줄 수 있다. 자세히 알아보자
chain rule 거의 항상 만족하는 조건이다.
아까와 같은 예시를 들어보자 N개의 binary pixel이 있을 때 joint distribution을 chain rule로 쪼갰다고 생각해보자
아직 아무런 조건이 주어지지 않아서 파라미터의 개수는 여전히 이다.
단순히 쪼개기만 했을 뿐이기 때문에 결과는 바뀌지 않는다.

chain rule한 것을 조건부 독립을 가할때 사용하는 방식이다.
이 가정은 x1은 그 자체로 존재하고 x3은 x1,x2에 의존했는데 우리가 x3은 직전에 있는 x2에만 의존한다고 가정하는 것이다.(x4,x5,...다)

원래 chain rule에서 길었던 조건부 파트가 다 쪼개졌다.
이렇게 조건부 독립(마르코프 가정)을 가한 joint distribution의 파라미터 숫자는 2N-1이다.
p(x1)를 표현하는 파라미터의 수는 1개, p(x2|x1)은 2개,p(x3|x2)도 2개... 이므로 2N-1이다.
이 숫자는 우리가 전체 독립 가정을 한 파라미터 수보다는 많고,
독립 가정을 하지 않은 것보다는 적다.(가장 실용적이라고 할 수 있다.)
조건부 독립을 가장 잘 활용하는 모델이 Autoregressive Model(순차적으로 한 개씩 만들어 나가는 것)이다.
통계에서는 오늘 날씨를 예측할 때 어제와 그저께의 날씨를 이용하여 예측하는 모델을 Autoregressive Model이라고 한다.
이번에도 N개의 픽셀을 가진 binary image의 분포를 학습하는 것이 우리의 목적이라고 해보자! 어떻게 파라미터화 해야할까
위에서 배운대로 joint distribution을 chain rule을 통해 conditional distribution으로 쪼갠다.
그리고 markov assumption을 통해 autoregresssive model을 만드는 것이다.
이때 어떤 제약(ordering)이 필요하다. 이미지라는 건 2차원으로 존재하는데 Autoregressive Model는 1차원의 시퀀스가 필요하다.
그래서 2차원의 이미지를 이 모델에 넣을 때는 1차원, 한줄로 피는 ordering 작업이 필요하다
Autoregressive Model을 딥러닝 뉴럴 네트워크에 가장 먼저 활용했던 모델이 NADE이다.


NADE는 explicit한 모델이다. 단순히 무언가를 생성할 수 있을 뿐만 아니라 어떤 새로운 입력이 주어졌을 때 그 입력,이미지가 얼마나 우리가 모델링하는 것에 likely한지를 나타내는 density를 구할 수 있다는 뜻이다.
어떻게 probability density를 구할 수 있을까?
joint distribution은 각각의 conditional distribution의 곱으로 표현할 수 있고, NADE는 모든 조건부 분포를 구할 수 있게 설계되었기 때문에 각각의 이미지가 주어졌을 때 모든 항을 구해 다 곱해 전체 결합분포를 구할 수 있는 것이다.
이러한 방법론의 가장 큰 장점은 단순히 이산형만 고려할 수 있는 것이 아니라 연속형도 고려할 수 있다.(이런 경우는 mixture of gaussian을 이용하자)
장점
샘플링이 쉽다.(전체 인풋을 한번에 넣는것이 아닌 쪼개서 넣기 때문에 샘플링하기 쉽다.)
첫번째를 샘플링하고 그것을 고정한 상태에서 조건부 분포로 다음 샘플링을 하고 하는 것이다.
두번째 장점은 다른 생성모델들은 새로운 입력이 주어졌을 때 조건부 분포를 구할 수 없는데 Autoregressive Model은 구할 수 있다.(explicit 하니깐!!~)
세번째 장점은 연속형 변수로 확장하기 쉽고(기존의 다른 생성모델들은 힘들다), 결합분포를 쪼개서 구할때 병렬처리가 가능하다는 점이다.(생성할 때는 안됨)
단점
우리 이미지의 픽셀수만큼 neural net을 sequantial하게 통과해야 한다.
병렬화 할수없다.(i번째를 할려면 i-1이 필요하니깐)
그래서 생성이 느리다.

2022년에 diffusion이 나왔다.
Diffusion based Generative Model의 출현 (Ver. 2022)
[이미지 출처 : https://makeavideo.studio/]

2021년 : latent diffusion
2022년 : stable diffusion