Autoregressive Model
Chain rule을 기반으로 데이터의 결합 확률 분포를 조건부 확률로 분해하여, 각 변수의 값이 이전 변수들의 값에 의존하도록 모델링하는 확률 모델을 의미한다
Neural Models for classification
- Setting: 인풋 가 주어졌을 때 을 구분하는 것
- 분류를 위해 을 구해야 해서 다음을 가정
- 여기서 를 어떻게 가정하는가가 모델을 구분하는 핵심적인 요소
- Logistic regression
- Non-linear dependence
Motivating Example: MNIST
- 각 이미지는 784 픽셀로 구성되어, 0(블랙)이거나 1(화이트)임
- 목표: 이미지의 확률분포를 구하는 것
- 인 를 구하는 것
- 를 했을 때 가 digit처럼 보여야 한다
- 두 단계로 이뤄짐
- Model family 를 파라미터화 하는 것
- 학습 데이터셋에 기반해 모델 파라미터를 찾는 것
Fully Visible Sigmoid Belief Network (FVBSN)
Parameterization
- 베이지안 네트워크를 만들기 위해, random variable의 어떤 한 ordering을 골라 Chain rule을 적용해 보자
- 너무 복잡하니 다음과 같이 가정하자
- 즉,
- 여기서 각 항이 나타내는 바
- ,
- 학습 대상은 (1개)
-
- 학습 대상은 (2개)
-
- 학습 대상은 (3개)
- Model assumption일 뿐 꼭 이렇게 해야 하는 것은 아니다. → FVBSN의 핵심 아이디어!
- 다시 정리하자면 이렇다
- 여기서 은 의 근사값
- 파라미터의 갯수는 개가 필요. 약
학습
- CPT 테이블에서 값을 배정해 학습
- 데이터를 가지고 학습
- 데이터를 가지고 학습
- …
- 데이터를 가지고 학습
Evaluation
- 를 evaluate하는 방법 : 모든 factor를 곱셈
Sampling
- 순차적으로 샘플링
Performance
- 개 별로다
- 복잡한 분포를 나타내기에 적합하지 않다
- 학습해야 하는 파라미터가 개
NADE: Neural Autoregressive Density Estimation
- 아이디어 1: 로지스틱 회귀 대신 One layer neural network를 사용하자
- 아이디어 2: weight를 바인딩하자
- 을 , , 에 재활용
- 이렇게 하는 이유 : 파라미터 수를 줄일 수 있다.
- 라면, 전체 파라미터는
- Weights
- biases
- vector
- 총 개로 줄일 수 있음
- 새로운 은닉층 가 학습해야 하는 파라미터의 개수 :
- 라면, 전체 파라미터는
- 파라미터 수를 줄여서 확률 evaluation도 만에 가능
- 이렇게 하는 이유 : 파라미터 수를 줄일 수 있다.
Performance
- FVSBN 보다는 낫다
- 개 파라미터만 학습하면 된다
- 픽셀 수(n)에 linear
General discrete distributions
- 픽셀이 0과 1이 아닌 랜덤 변수일 경우에는 어떻게 해야 할까?
- 즉,
- e.g. 픽셀이 0에서 255 사이 값을 가질 수 있음
- 한가지 솔루션: 를 카테고리 분포로 파라미터화하자
- (여기까지는 동일함)
-
- 는 카테고리 분포
- 0, 1의 값을 갖는 베르누이 분포와 달리 여러 값을 가질 수 있음
- 일반적으로 K개 베르누이 분포 벡터를 가지는 다변수 확률 분포로 가정해 사용
- 즉 는 K개 카테고리 중 하나를 선택하는 분포로 해석 가능
- 따라서 는 가 번째 범주를 선택할 확률
- 는 카테고리 분포
-
- Softmax는 를 일반화하여 K 개 숫자의 백터를 K개 possibility로 변환하는 함수
RNADE
- 연속확률변수는 어떻게 모델링 해야 할까?
- Idea: 를 연속 분포로 파라미터화하자
- e.g. K gaussian의 uniform mixture
Autoregressive model vs Autoencoder
Autoencoder
- Encoder
- e.g.
- Decoder
- e.g.
- 데이터를 압축 및 복원하는 과정을 통해 데이터의 특징을 학습하는 비지도학습 알고리즘
- 의미있는 압축을 했는가? == 제대로 된 특징을 학습했는가?
- Vanilla autoencoder는 생성형 모델으로 사용하기 어렵다
- Autoencoder는 샘플의 대상이 되는 distribution over x 를 정의하지 않기 때문임
Autoregressive autoencoders
- Autoencoder를 베이지안 네트워크에 대응하게 만들 수 있다.
- Ordering(for DAG)을 만들면 된다!
- e.g.
- 은 어디에도 의존하지 않음
- 은 에 의존
- 은 에 의존
- 출력층이 조건부확률 를 학습하게 한다
- 마스킹을 통해 예측 시점 이후의 데이터의 영향을 제거하고 DAG처럼 만든다
MADE: Masked Autoencoder for Distribution Estimation
- 마스킹을 통해 일부 path를 불가능하게 만듬
Masking 과정
- Ordering이 , , 이라고 가정하자 (는 아무데도 의존안하고, 은 에, 은 , 에 의존)
- 은닉층 각각의 노드에 1부터 n-1까지 랜덤한 숫자 배정
- 부모 노드의 숫자가 자식 노드의 숫자보다 작거나 같으면 가만히 있어
- 부모 노드의 숫자가 자식 노드의 숫자보다 크면(의존 안함) 마스킹으로 연결 제거
- 위 그림에서는 까맣게 칠해서 연결을 제거하고 있음
RNN: Recurrent Neural Nets
- Seqeuntial data를 받아 그 다음 데이터를 예측하는 모델
- Challenge: Model 에서 history에 해당하는 부분이 계속 길어진다
- NADE에서 hidden vector 구하려고 A 백터랑 곱해지는 그 대상이 너무 길어진다는 뜻
- Idea: Summary를 유지하고 재귀적으로 update하자
- 첫번째 은닉층 을 초기화한다
- 시퀀스의 첫번째 데이터 을 입력합니다
- 두번째 은닉층 을 이전 시점의 은닉층 과 으로 업데이트
- 다음 은닉층을 다음과 같이 업데이트
- 시퀀스의 길이 에 대해 반복
- 첫번째 은닉층 을 초기화한다
- 출력층은 과 같이 계산
Example: Character RNN
- 예측을 softmax(o) 로 계산한 결과임
Pros and Cons
Pros
- 임의 길이의 모든 시퀀스에 적용 가능
- General
Cons
- 마찬가지로 Ordering을 필요로 함 (이게 왜 문제지?)
- Sequential하게 우도를 평가하기 때문에 학습이 너무 느려
- Sequential generation (autoregressive model에서는 어쩔 수 없다)
- 학습하기 어려운 케이스들이 생김 (시퀀스 길이가 길어짐에 따른 기울기 소실/폭주 문제)