Variational Auto Encoder 정리
용어 정의
- 잠재 변수 모형: 직접적으로 관측할 수 있는 데이터 x와 직접적으로 관측되지 않지만 x의 분포에 영향을 미치는 잠재 변수 z를 갖는 모형.
- Inference: 파라미터 θ를 갖는 잠재 변수 모형을 고려하자. 이 모형의 pθ(z∣x)를 계산하는 걸 inference라 한다.
- variational inference: pθ(z∣x)를 계산하기 어려운 경우가 종종 생긴다. 이 때, pθ(z∣x)를 다른 parametric 모델 qϕ(z∣x)로 추정하는 것을 variational inference라 부른다.
- amortized variational inference: 전통적으로 variational inference는 데이터 포인트 한 개에 대해 진행했다. 이렇게 하는 대신, 데이터 포인트 x를 잠재 변수의 사후 분포에 매핑하는 함수 qϕ(z∣x)를 학습할 수 있다. 이를 amortized variational inference라 부른다.
- 오토 인코더: 입력과 출력이 같아지도록 학습한 뉴럴 네트워크를 말한다. 일반적으로 데이터를 압축하기 위해 사용하기 때문에, 중간 층의 차원 수가 입력 벡터의 차원 수 보다 낮도록 설정한다.
VAE가 무엇인가?
- Variational Auto Encoder의 약자로, amortized variational inference를 수행하는 오토 인코더다.
- 인코더는 qϕ(z∣x)를 출력으로 갖고 디코더는 pθ(x∣z)를 출력으로 갖는다. 즉 잠재 벡터인 z의 분포를 모델링하는 인코더와 잠재 벡터를 입력으로 받아 데이터 x의 분포를 모델링하는 디코더로 나뉜다.
왜 inference를 수행하나?
- 데이터를 잘 설명하는 z를 추정할 수 있다. 예시로 pθ(z∣x)를 최대화하는 z 값은, 데이터를 고려했을 때 타당한 z 값으로 볼 수 있다.
- z를 추정하는 이유:
- 차원 감소를 수행하기 위해 추정하기도 한다. 잠재 벡터 z의 차원 수가 데이터 x의 차원 수보다 작다면, pθ(z∣x)를 사용하여, 데이터 x를 잘 나타내면서 동시에 더 낮은 차원 수를 갖는 잠재 벡터 z를 얻을 수 있다.
- 잠재 변수를 측정하기 위해 추정하기도 한다. 예시로 지능 검사지를 만드는 경우를 고려해보자. 지능을 직접적으로 관측할 수 없지만, 지능을 요구하는 다양한 문제를 풀어보게 함으로써 간접적으로 관측할 수 있다. 지능을 잠재 변수 z로, 문제에 대한 답을 관측 가능한 변수 x로 모형화한다. 그 후, 문제에 대한 답 x를 고려했을 때 지능 z의 값이 어떨지 추론하여 지능을 측정할 수 있다.
왜 VAE를 사용하나?
- VAE는 잠재 변수 모형으로써 복잡한 분포를 모델링할 수 있다는 장점이 있다.
- pθ(x)=∫pθ(x∣z)p(z)dz
- 여기에서 pθ(x∣z)와 사전분포 p(z)가 가우시안 분포와 같이 잘 알려져있는 분포를 갖더라도 pθ(x)는 복잡한 분포를 가질 수 있다.
- Inference를 ‘빠르게’ 수행할 수 있다.
- pθ(z∣x)를 계산이 쉬운 qϕ(z∣x)로 추정하기 때문에, inference 속도가 빠르다는 장점이 있다. 물론 qϕ(z∣x)를 계산하는 네트워크인 인코더의 크기가 커지면, inference의 속도가 느려진다.
학습 방법
- 아래에 나올 로그 우도의 lower bound를 최대화한다.
- 로그 우도를 최대화하지 않고 lower bound를 최대화하는 이유는 추후에 설명하고 우선 왜 lower bound를 최대화했을 때 로그 우도를 최대화하는 것과 비슷한 결과를 얻을 수 있는지 생각해보자.
- 로그 우도는 lower bound보다 항상 크거나 같기 때문에, lower bound가 커지면 로그 우도도 커질 것이라 기대할 수 있다. 다만 lower bound와 로그 우도의 차이가 충분히 작지 않으면, 로그 우도가 커지지 않을 수도 있다. 그렇기에 lower bound를 잘 선택하는 것이 중요하다.
- log(pθ(x))=log(∫pθ(z∣x)∗pθ(x))=log(∫pθ(z∣x)∗pθ(x)∗qϕ(z∣x)qϕ(z∣x))=log(Eqϕ(z∣x)[qϕ(z∣x)pθ(z∣x)∗pθ(x)])≥Eqϕ(z∣x)[log(qϕ(z∣x)pθ(z∣x)∗pθ(x))]=Eqϕ(z∣x)[log(pθ(x))−log(pθ(z∣x)qϕ(z∣x))]=Eqϕ(z∣x)[log(pθ(x))]−DKL(qϕ(z∣x)∣∣pθ(z∣x))=log(pθ(x))−DKL(qϕ(z∣x)∣∣pθ(z∣x))=LELBO
- 이 lower bound를 Evidence Lower Bound(ELBO)라 부르기도 한다.
- ELBO를 사용하는 이유
- ELBO와 로그 우도의 차이가 "충분히" 작을 것이라 기대할 수 있기 때문. log(pθ(x))와 log(pθ(x))−DKL(qϕ(z∣x)∣∣pθ(z∣x))의 차이는 정확히 p와 q의 KL divergence와 같다. 그런데 lower bound가 커지기 위해서, log(pθ(x))는 커져야 하고 KL divergence는 작아져야 함에 주목하자. 즉 lower bound를 최대화하는 과정에서 lower bound와 로그 우도의 차이가 작아질 것이라 추측할 수 있다.
- 또한, 이 lower bound를 최대화하면 DKL(qϕ(z∣x)∣∣pθ(z∣x))가 작아질 것에 주목하자. 이는 우리가 원하던 바이다. pθ(z∣x)의 계산이 어렵기 때문에, 더 계산이 쉬운 qϕ(z∣x)를 사용하는데, 위의 lower bound를 최대화하면 pθ(z∣x)와 qϕ(z∣x)의 차이가 작아진다. 즉 우리는 pθ(z∣x)를 더 잘 추론할 수 있게 된다.
- ELBO를 계산이 가능한 형태로 다시 정리해보자
- Eqϕ(z∣x)[log(qϕ(z∣x)pθ(z∣x)∗pθ(x))]=Eqϕ(z∣x)[log(qϕ(z∣x)pθ(x∣z)∗p(z))]=Eqϕ(z∣x)[log(pθ(x∣z))−log(p(z)qϕ(z∣x))]=Eqϕ(z∣x)[log(pθ(x∣z))]−DKL(qϕ(z∣x)∣∣p(z))
- DKL(qϕ(z∣x)∣∣p(z)) 계산 방법
- 일반적으로 VAE를 사용할 때 p(z)와 qϕ(z∣x) 둘 다 가우시안 분포를 갖는다고 가정한다. 두 가우시안 분포의 KL divergence는 닫힌 형태의 결과를 갖기 때문에 계산할 수 있다. 이는 구글링하면 찾을 수 있다.
- Eqϕ(z∣x)[log(pθ(x∣z))] 계산 방법
- 몬테 카를로 방법을 사용하여 추정할 수 있다.
- ELBO 경사 계산
- ∇θLELBO=∇θEqϕ(z∣x)[log(pθ(x∣z))]−∇θDKL(qϕ(z∣x)∣∣p(z))=∇θEqϕ(z∣x)[log(pθ(x∣z))]=Eqϕ(z∣x)[∇θlog(pθ(x∣z))]
- 이는 몬테 카를로 방법을 사용하여 추정할 수 있다.
- ∇ϕLELBO=∇ϕEqϕ(z∣x)[log(pθ(x∣z))]−∇ϕDKL(qϕ(z∣x)∣∣p(z))
- DKL(qϕ(z∣x)∣∣p(z))는 닫힌 형태로 표현 가능하다.
- 그러나 첫 번째 항의 계산은 어렵운데 심지어는 ∇ϕEqϕ(z∣x)[log(pθ(x∣z))]=Eqϕ(z∣x)[∇ϕlog(pθ(x∣z))]이기에 몬테 카를로 방법을 사용할 수도 없다.
- 이런 경우에 REINFORCE를 사용하거나 reparameterization trick을 사용해서 추정할 수 있는데, 여기에서는 reparameterization trick을 사용해 추정하겠다.
- qϕ(z∣x)가 가우시안 분포이기 때문에 확률 변수 z의 확률적인 부분을 표준 정규 분포를 갖는 확률 변수 ϵ으로 옮길 수 있다. z∣x의 평균이 μx,ϕ, 표준편차가 σx,ϕ일 때, z=μx,ϕ+ϵσx,ϕ=g(ϵ,x,ϕ). 그러면 ∇ϕEqϕ(z∣x)[log(pθ(x∣z))]=∇ϕEϵ[log(pθ(x∣g(ϵ,x,ϕ)))]=Eϵ[∇glog(pθ(x∣g(ϵ,x,ϕ)))∗∇ϕg(ϵ,x,ϕ)]
- Grad 연산자가 기댓값 안에 위치하기 때문에, 이제 몬테 카를로 방법을 사용하여 추정할 수 있다.