제로타이 2022. 10. 6. 11:14

Generative Model

생성 모델. 흔히 생각해볼 수 있는 생성 모델은 어떤 그림을 만들어주는 모델을 들 수 있다. 강아지 그림을 예시로 들어보자. 우리에게 일련의 강아지 그림이 주어졌다. 이때 우리의 모델은 이 입력값들을 토대로 강아지 그림을 그려내면 된다. 그러기 위해서 우리의 모델은 어떤 사진이 주어졌을 때 그것이 강아지인지 아닌지 구분해내는 능력도 갖춰야 한다. 
확률론적으로 말하자면 우리는 입력값들(그림)을 토대로 어떠한 확률분포probability distribution를 만들어낸 후에 이 확률분포를 따르는 어떤 그림을 만들 수 있어야 하며, 어떤 그림이 주어졌을 때는 이것이 확률분포에 따르는지 확인할 수 있어야 한다는 것. 우리의 모델이 정말 확률분포, 즉 모든 구간의 넓이가 1인 분포를 만들어 낼 수 있을 경우 우리는 이 모델을 명시적 모델explicit model이라 칭한다.

(아래에서 나오는 내용을 바탕으로 생각해보면, 생성은 하되 그것의 정확도를 측정할 수 없으면 암시적 모델implicit model,  정확도 측정까지 해낼 수 있다면 명시적 모델explicit model이라고 하는 듯하다. 그리고 명시적 모델이기 위해서는 결국 얼마나 정확한지 정도를 파악해야하기 때문에 분포를 만들어야 한다고 하는 듯하다.)

그럼 확률분포에 대해 더 알아보는 시간을 가져보자.

우리가 생각할 수 있는 가장 쉬운 확률분포는 베르누이 확률분포bernoulli distribution이다. 동전 던지기의 확률분포! 경우의 수가 딱 두 가지로 한정돼있어 한 쪽의 확률이 p라면 다른 한 쪽의 확률은 1-p가 된다.
이것에서 조금 더 나아가면 주사위 던지기의 확률분포도 생각해볼 수 있을 것이다. 이것은 카테고리 확률분포Categorical distribution이라 부른다.
이때 주의할 점은 이러한 이산적인 확률분포에서 각 경우에 대한 확률을 파라미터로 둘 경우에는 우리는 모든 경우의 수에서 1을 뺀 만큼의 파라미터가 필요하게 된다는 것이다. 가령 동전 던지기에서는 우리는 앞면이 나올 확률만 알면 된다. 줏위 던지기에서는 1,2,3,4,5 각각이 나올 확률만 알면 된다. 전체 확률이 1이기 때문에, 1에서 우리가 알고 있는 값들을 빼주면 남은 확률은 자동적으로 정해지기 때문이다(통계학에서 불편추정량 개념이랑 비슷한 것 같다). 

조금 더 실용적인 문제로 가보자. 한 픽셀의 색을 표현할 때 RGB로 표현하는데, 그 경우의 수는 $256 \times 256 \times 256$이다. 그리고 위에서 말했듯이 필요한 파라미터는 1을 빼면 된다.
여기에서 알아야 할 것은 확률분포를 정확하게 그려내기 위해서 필요한 파라미터의 수가 현실적으로는 매우 많다는 것이다. 우리 모델이 생성을 하기 위해 이만큼의 파라미터를 가지기는 힘들 것이다. 한 픽셀만 해도 $2^{24}$ 정도의 가짓수가 나오는데 어떻게 FHD 해상도의 그림을 표현할 수 있겠냐..
그래서 우리는 조금 더 파라미터를 줄일 방법을 고민할 필요가 있고, 그때 사용되는 개념 중 하나가 바로 독립성independence이다.

Conditional Independence

흑과 백으로만 이뤄진 사진

RGB는 한 픽셀만 해도 가짓수가 어질어질하니 명암 없는 흑백 사진을 예시로 생각해보자. 
MNIST 정도의 크기의 사진이라고 생각해도 28, 28의 크기를 가지고 있기 때문에 만들어질 수 있는 모든 사진의 경우의 수는 $2^{28 \times 28}$가 된다. 물론 파라미터의 수는 1을 빼야하고!

우리는 어떻게 여기에서 파라미터의 수를 줄일 수 있을까? 한가지 방법이 바로 독립성을 생각하는 것이다. 이를 독립성 추정independence assumption이라 한다. 사실 경우의 수를 세면서 사용하는 곱의 법칙 자체도 독립성이 성립하기 때문에 가능한 것이긴 한데, 아무튼 각 픽셀이 서로 독립적이란 것을 알기때문에 우리는 각 픽셀을 파라미터로 두는 것이 가능하다. 각 파라미터는 0과 1의 값만을 가지는 것이다! 굳이 나올 수 있는 모든 경우의 수를 따져 각각의 파라미터를 만들 필요가 없는 것이다. 
사실 이렇게 파라미터를 줄이게 되면 자연스레 우리 모델의 표현력도 줄어들게 된다. 그냥 이렇게 각 파라미터의 독립성을 가정해버리면 의미있는 모양의 그림을 만드는 것이 불가능해지기 때문이다(왜일까?).

그래서 우리는 중간만 가고 싶다. 완전히 모든 파라미터의 독립성을 가정하지는 않으면서도 적당히 파라미터를 줄이는 방법.

그것을 위한 세가지 정도의 선행지식, 조건이 필요하다. 
연쇄 법칙과 베이즈 정리는 기본적으로 많이 공부해봐서 알고있는 내용이다.
세번째가 중요한 포인트인데 조건적 독립성으로 표현되는 저 수식은 z가 주어졌을 때, x와 y가 독립된다는 것을 나타낸다.
이것이 무엇을 의미하는가? y,z가 주어졌을 때 x의 확률은 y와 사실 독립적이니까 y를 떼도 생각해도 된다는 것을 의미한다. 
어떻게 법칙들이 적용되는지 보도록 하자.

먼저 연쇄법칙. 연쇄법칙은 가정을 두지 않고 성립하는 법칙이라 사실 파라미터를 줄일 건덕지도 없다. 파라미터의 수는 결국 우리가 위에서 처음에 봤던 갯수와 일치하게 된다. 이것은 사실 처음 나온 경우의 수를 다르게 표현한 것에 지나지 않기 때문이다.

마르코브 가정

그런데 여기에 조건적 독립성을 부여해보자. 정확하게는 마르코브 가정Markov assumption을 둘 것이다. i가 주어졌을 때 i+1은 다른 확률들과 독립된다는 가정인데 이러한 가정을 두면 식을 간소화시킬 수 있다. 
이러한 가정을 가하게 되면 생기는 파라미터의 수는 2n-1이 된다. 각 확률이 2의 경우의 수를 가지게 되기 때문이다($p(x_1)$만 경우의 수가 1이라 1을 뺀다).
이것은 분명 위에서 봤던 완전 독립성이었던 n보다는 크고, 가공을 가하지 않은 $2^n$보다는 작다. 그래서 이러한 가정을 넣게되면 조금 더 모델이 효율적으로 동작하면서 표현력도 갖출 수 있게 된다. 이러한 방식을 가장 잘 활용하는 것이 AutoRegressive Model이다.

Autoregressive model

연속적으로 참조하는 모델. 오늘의 날씨를 예측하기 위해 어제의 날씨를 참고하는, 자기회귀적인 모델을 말한다. 
방식은 방금 말한 것과 동일하다. $X_2$는 $X_3$에만 종속되고, $X_3$은 $X_4$에만 종속되는 방식으로 가정을 하고 모든 경우의 수를 계산한다. 

여기에는 그렇게 대단하진 않지만 아주 대단한 개념이 들어간다고 하는데, ordering이라고 한다. 원래 2차원으로 표현되던 이미지를 row-wise하도록, 1차원의 데이터로 만드는 것. 즉 자기회귀 모델에서는 데이터를 ordering하는 과정이 필요하다는 것이다.
이러한 기법을 AI에 처음 활용한 것이 바로 Neural Autoregressive Density Estimator라는 논문이라고 한다. 

이 모델은 이미지를 생성할 뿐만 아니라 주어지는 이미지의 정확도density를 측정하는 것도 가능하다 하여 명시적 모델이라고 한다.
어째서 density를 구할 수 있는 걸까? 확률이 연속적으로 계산되기 때문에 결국 모든 확률을 계산할 수 있기 때문이다(잘 이해가 되지 않는다).
또 이 모델은 단순히 이산적인 문제만이 아니라 연속적인 문제에 대해서도 적용할 수 있다는 것이 큰 장점이다. 

장점과 단점을 확실하게 나눠보자.

장점 샘플링이 굉장이 쉽다. 입력을 기본적으로 쪼개가면서 받기 때문에 나누는 작업도 쉬운 것.
명시적인 모델이다. 즉 이미지를 만드는 모델을 만들 수는 있지만 그 이미지의 정확도를 측정하는 것은 쉬운 일이 아니다. 
단점에 병렬화가 불가능하다 말하지만, 쪼개서 구하는 작업 자체는 병렬화가 가능하다고한다. 
연속변수에도 활용할 수 있다.
단점 모든 데이터를 연속적으로 대하기 때문에 병렬화가 불가능하다. i를 위해서는 i-1의 정보가 필요하고, 그런 식이 쭉 이어진다..

 

근사도 측정

생성 모델을 만들 때 주요 포인트가 되는 지점은 우리는 볼 수 없지만 데이터를 통해 얼추 확인되는 확률 분포, 모형을 잘 따라하는 것이라고 할 수 있다. 선형회귀가 모든 데이터를 잘 설명하는 선을 찾으려고 했던 것과 비슷하게 우리가 원하는 모델을 최대한 잘 따라하는 모델을 만든다면 모델은 성공적이라고 할 수 있을 것이다. 최대한 비슷하게(likely) 하는 것이 좋다하여, Maximum Likelihood Learning이라고 표현한다. 
강아지 그림을 만들어주는 어떤 분포가 있다고 가정한 뒤에, 강아지 사진 데이터를 마구 넣어서 그 분포를 찾아가는 것, 그것이 생성 모델의 요점이 되시겠다.  

그림으로는 요레 표현된다.

그림에서 볼 수 있듯이, 우리는 우리의 데이터를 이용해 나오는 분포와 실제로 어딘가에 있을 $\theta$의 분포의 거리를 좁히면 좁힐수록 우리의 모델은 잘 작동하는 것이라고 볼 수 있을 것이다. 

거리를 좁히는 것이 중요하다고 했는데, 그럼 거리를 어떻게 정의해야 할까? 이것은 선형대수학이 아니기에 노름을 사용할 수 없다. 이럴 때 주로 사용되는 것은 바로 쿨백 라이블러 발산KLD이다.

KLD

식이 어려워보이지만, KLD가 기본적으로 뜻하는 것이 바로 두 분포 상의 유사도이다. 엔트로피하고도 연결되는 개념인데 이건 추후에.. 
간단하게 말하자면 구하고자 하는 P를 기준으로 계산된 Q의 평균 정보량과 P를 기준으로 계산된 평균 정보량의 차이. 이것은 P를 근사하는 Q를 사용했을 때 일어나는 오차(엔트로피)의 변화량을 나타내는 값이다. 결국 내 모델과 실제 분포의 차이를 나타내는 값이라는 것. 그러니 이 값이 줄어들면 좋겠지?
아무튼 이것은 정확하게는 거리를 뜻하지는 않는다. 왜냐하면 우리가 말하는 거리는 흔히 A에서 B를 가는 것과 B에서 A를 가는 것이 같은데, KLD는 그것이 성립하지 않기 때문이다. 이것을 해결하고자 하는 것이 Jenson-Shannon 발산인데, 이건 나중에 보게 될 것이다.
아무튼 이게 거리처럼 쓸 수 있다는 것처럼 쓸 수 있다는 것이 요점이다. KLD를 줄이는 방향으로 나아가면 모델이 잘 학습될 것이라는 것이다. 위의 식에서 $E_{x~P_{data}}[\log P_{data}(x)]$는 우리가 계산할 수 없는 영역이기에, $E_{x~P_{data}}[\log P_{\theta}(x)]$ 이 부분을 학습시키면서 가면 우리가 원하는 목표를 이룰 수 있다. 앞에 음수가 붙어있으니 이 값을 최대화시키면 된다는 것!

(우리가 모르는 것이 세타인가 데이터인가?)

하지만 알다시피 우리는 정확한 $\theta$는 알 길이 없다. 그래서 경험적으로나마 표본을 뽑았다고 치고, 그것을 급수로 표현하며 옮기게 되니(몬테카를로 샘플링처럼 하는 것 같다),

결과적으로 이런 모양이 나온다.
이걸 경험적인 위협요소를 최소화한다하여 Empirical Risk Minimization이라고 부른다.
여기에서 발생할 수 있는 문제점은 바로 과적합이다. 한정된 데이터를 가지고 학습을 하기 때문에 쉽게 학습 데이터에만 치중되는 문제가 발생한다.
이것을 막기 위해서 모델 성능의 한계를 짓는 방식을 취한다고(hypothesis space를 줄인다는 게 무슨 뜻인가)..
모델이 어떤 분포를 할지도 모르는데 일단 모델의 분표를 특정해서 단정지어 버리는 방식이다. 가장 만만한 것이 정규분포를 따른다고 가정하고 데이터를 학습시키기도 하는데, 이제 모델은 언더피팅의 문제가 생기게 된다.

아무튼, 이러한 방식 때문에 VAE가 등장하기 이전까지는 생성 모델로 이미지를 만든다는 것은 매우 어려운 일로 받아들여졌다. 

Variable Auto-Encoder

Latent Variable Model.
오토인코더. 입력을 인코딩하고 다시 디코딩하는 작업을 하는 모델을 생성 모델이라고 볼 수는 없다. 그런데 지금 설명할 모델은 오토인코더이면서도 생성 모델인데 왜 그런지 보자.

우리의 목표는 아까와 같다. 우리의 목표 분포를 상정하고 최대한 비슷하게 따라하는 것. 그런데 그러기 위해 데이터를 학습시키면 데이터에만 과적합하는 문제가 발생해서 이를 해결하기 위해 가능한 분포를 특정하고, 그러니 오히려 언더피팅 문제가 발생하고. 
VAE는 Variational Inference의 방법을 취한다. 

인코더를 학습시켜서 데이터셋으로부터 최대한 추정하고자하는 분포에 근사시키는 것.

으아악

뭐, 대충 수식적으로는 이렇게 표현할 수 있다는데, 우리가 하고자하는 것은 Evidence Lower BOund를 최대화시키는 것이다. Variational Gap은 최소화하고 싶지만 이것은 우리가 건드릴 수 없는 영역이기에 ELBO를 최적화시키게 된다.

으아아악

그래서 이 ELBO란 식을 뜯어보면, 이 각각을 또 학습시켜야 한다는 듯.

흐름 캐치가 잘 안 돼서, 그런갑다 하고 넘기는 중..

아무튼 이 VAE에도 단점이 있단다.
위의 그림에서 PFT가 미분이 가능해야 한다고 한다. 이 놈이 핵심적으로 학습되는 놈인데 이 놈의 분포를 알 수가 없어 함부로 손댈 수가 없다. 그래서 이놈은 정규분포로 치고 학습시킨다는 듯.

Generative Adversarial Networks

줄여서 GAN.

표현이 잘 돼있다.

두 가지 모델이 있다. 아래는 Discriminator로 들어온 이미지가 진짜인지, 가짜인지 판별하는 작업을 한다. 이 놈의 정확도는 높아지는 것이 좋다. 위는 Generator로 가짜를 만드는 일을 한다. 진짜처럼 만드는 게 좋으므로 진짜와의 오차는 낮아지는 것이 좋다. 이 둘이 싸움을 붙이는 것이 바로 GAN이다. 한 놈은 속이고, 한 놈은 거른다. 이게 정교해질수록 G는 점차 진짜같은 가짜를 만들어낼 것이고, 결국 우리가 원하는 잘 생성하는 모델이 되어갈 것이다. 

이 두 모델을 따로 떼어서 살펴보자

Discriminator

G를 고정하고 D를 최대화시키기.

Generator

D를 고정하고 G를 최소화시키기.

나는 너무 어지럽다..아무튼 이렇게 해서 잘 학습이 된다는 듯. GAN의 아이디어 이후로 이를 따라하며 나오는 모델들은 엄밀하게 이러한 목적식이 나오지는 않는다고 한다.
또한 양 쪽의 모델을 잘 맞물리도록 설계하는 것이 매우 어려운 작업.

Diffusion Model

이건 2020년에 나온 따끈한 모델이다. 근데 수식으로 이해하려면 조금 힘들기에 키 아이디어만 어떤지 살펴보자. 

노이즈로부터 이미지를 만드는 것이 바로 DM의 핵심이다. 이때 노이즈를 점진적으로 변경시키면서, 가령 1000 단계를 밟으면서 바꿔나가는 것.
단계가 길기에 걸리는 시간도 길다. 그러나 성능은 가장 좋다고 받아들여지고 있다.

사실 이 모델은 이미지에 노이즈를 넣는 방식으로 작동한다. 노이즈를 계속 집어넣어 이미지를 노이즈로 만드는 것. 
그럼 모델은 무엇을 학습하는가? 이렇게 마구 들어간 노이즈를 제거하는 학습을 한다. 이게 바로 키 컨셉이다.
오랜 시간을 걸쳐서 노이즈를 없애는 과정을 학습하는 것이다.

개신기하다

이것을 활용하여 만들어진 것이 바로 DALL-E2이다. 이 모델의 장점 중 하나가 이미지 수정이 가능하다는 것. 그리고 그것을 자연스럽게 넣는 과정이 가능하다는 게 큰 포인트다!