Generative Models 인트로
Generative Model을 학습한다는 것이 어떤 의미일까?
→ input에 대한 distribution을 학습하는 것
만약 우리가 강아지 사진들에 대한 분포를 학습했다면
- 생성한 샘플 이미지는 강아지처럼 생겨야 함
- 그 이미지가 얼마나 강아지 같은지를 추정
분포의 파라미터 수?
우리가 분포를 활용할 때, 그 분포의 경우의 수와 필요한 파라미터 수를 확인하는 것은 중요함.
예를들어, 베르누이 분포이면 경우의 수는 2, 파라미터 수는 1
1. RGB Image의 Pixel 하나를 관찰해보자
경우의 수: $ 256 \times 256 \times 256 $
필요한 파라미터 수: $ 256 \times 256 \times 256 - 1 $
2. MNIST 이미지의 Pixel 하나를 관찰해보자 (흑백 Binary 이미지)
경우의 수: $ 2^{28 \times 28} $
필요한 파라미터 수: $ 2^{28 \times 28} - 1 $
MNIST 데이터는 일반적으로 간단한 이미지라고 생각하는데,
그럼에도 불구하고 전체 경우를 고려하려면 굉장히 많은 파라미터가 필요하다.
여기서 Independence 가정을 추가해보자!
Independence
$$ P(X_1, \ldots , X_n) = P(X_1)P(X_2) \ldots P(X_n) $$
이 때 MNIST 이미지의 Pixel 하나를 관찰해보자
경우의 수: $ 2^{28 \times 28} $ (동일)
필요한 파라미터 수: $ n $
Independence 가정을 적용하니까 필요한 파라미터 수가 확 줄어들었다.
다만, 이러면 유의미한 분포 모델링에 좋지 않다.
적절한 타협점을 찾아보자
Conditional Independence가 좋은 대안이 된다!
Conditional Independence
1. Chain rule
$$ p(x_1, \ldots , x_n) = p(x_1)p(x_2|x_1)p(x_3|x_1, x_2) \ldots p(x_n|x_1, \ldots , x_{n-1}) $$
2. Bayes' rule
$$ p(x|y) = \cfrac{p(x, y)}{p(y)} = \cfrac{p(y|x)p(x)}{p(y)} $$
3. Conditional Independence
$$ \text{If } x \perp y | z \text{, then } p(x|y, z) = p(x|z)$$
MNIST 예시에서 $ X_{i+1} \perp X_1, \ldots , X_{i-1} | X_i \; \text{(Markov assumption)} $ 을 가정하면,
Chain rule과 Conditional Independence로 다음과 같이 표현 가능하다.
$$ P(X_1, \ldots, X_n) = P(X_1)P(X_2|X_1)P(X_3|X_1,X_2) \ldots P(X_n|X_1, \ldots, X_{n-1}) $$
$$ = P(X_1)P(X_2|X_1)P(X_3|X_2) \ldots P(X_n|X_{n-1}) $$
필요한 파라미터 수
$ P(X_1) $: 1개
$ P(X_2|X_1) $: 2개
$ P(X_3|X_2) $: 2개
$ \ldots $
총 $ 2n - 1 $ 개이다.
이렇게 Markov assumption을 이용하면, 폭발적인 파라미터 수의 감소가 가능!
이런 Conditional independency를 가장 잘 활용하는 모델이 바로 Autoregressive Models!
Autoregressive Models
Autoregressive Model이 뭐지?
- 연속해서 등장하는 것
- 예시: 내일의 날씨를 예측할 때 오늘의 날씨를 활용하자
- joint distribution을 conditional distribution으로 쪼개자
- chain rule과 markov assumption을 이용하자
- ordering (2차원 이상을 한 줄로 핌) 하자
장점
- 전체 Input에서 Dimension마다 쪼개서 모델링하기 때문에 샘플링이 쉬움
- discrete, continuous 둘 다 고려하기 쉬움
- explicit model일 가능성이 높음
단점
- Sequential하게 통과하기 때문에 병렬화할 수 없어서 생성이 느림
이를 딥러닝에서 가장 먼저 활용한 것이 NADE: Neural Autoregressive Density Estimator
NADE
explict model이다.
- 단순 생성뿐만 아니라
- 어떤 새로운 입력이 주어졌을 때 그 입력이 우리가 모델링하는 것에 얼마나 가까운지 확인 가능!
앞서 말한 Autoregressive model의 특징처럼 각 conditional distribution을 구해서 곱하는 것으로 joint distribution을 구할 수 있음
MNIST를 예시로 들어보면 다음과 같음
$$ p(x_1, \ldots , x_{784}) = p(x_1)p(x_2|x_1) \ldots p(x_{784} | x_{1:783}) $$
'boostcamp AI Tech > 기타 정리' 카테고리의 다른 글
[DL Basic] Optimization (0) | 2023.03.21 |
---|---|
[DL Basic] Neural Networks 기본 (0) | 2023.03.20 |
[DL Basic] 딥러닝의 개념과 역사 (0) | 2023.03.20 |
[torchtext, sklearn] get_tokenizer(), vocab(), get_stoi(), get_itos(), CountVectorizer() (0) | 2023.03.17 |