9장(2) VAE(2)

꼼댕이·2023년 7월 6일
0

딥러닝 교과서

목록 보기
11/11

이전 글에서는 가우시안 혼합 분포를 알기 위한 기본적인 개념을 알아봤다.

이제부턴 혼합 분포를 기반으로 VAE 모델 아키텍처까지 가기위한 기본적인 개념들을 알아보자.

가우시안 무한 혼합 신경망, 몬테카를로 추정

가우시안 분포가 셀 수 있을 때는 \sum으로 처리하면 되지만 혼합 분포가 셀수 없이 많을 때는 \int로 처리해줘야 한다.

p(x)=p(xz)p(z)dzp(x) = \int p(x|z)p(z)dz

가우시안 무한 혼합 신경망은 다음과 같다. (나중에 사진 ㄱ)

pθ(xz)=N(μθ(z),σθ2(z))p_\theta(x|z) = N(\mu_\theta(z), \sigma^2_\theta(z))

위의 식을 쓰기 위해선 적분 안쪽이 신경망으로 구성되기 때문에 zz를 무한히 샘플해야하지만, 실제로는 불가능하기 때문에 몬테카를로 추정 방식을 사용한다.

적분식을 기댓값 형태로 변환 뒤, N번 무작위 샘플링해서 평균을 취한다.

p(x)=p(xz)p(z)dz =Ezp(z)[p(xz)] 1Nzp(xz)p(x) = \int p(x|z)p(z)dz \\ \ \\ = \mathbb{E}_{z \sim p(z)} [p(x|z)] \\ \ \\ \approx {1\over {N}} \sum_z p(x|z)

zp(z)z \sim p(z)의미 : "zz라는 변수가 p(z)p(z)분포를 따른다"

확률분포 추정

x={x1,x2,...,xN}x = \{x_1, x_2, ..., x_N\} (관측데이터)
z={z1,z2,...,zN}z = \{z_1, z_2, ..., z_N\} (관측데이터에 대응되는 잠재변수)

최대우도 추정을 위한 최적화 문제정의
확률 p(x)p(x)를 최대우도 추정 방식으로 추정하자.

모델이 예측한 확률분포 pθ(X)p_\theta(X)는 N개의 sample의 우도 pθ(xi)p_\theta(x_i)의 곱이다.

pθ(X)=i=1Npθ(xi)p_\theta(X) = \prod_{i=1}^N p_\theta(x_i)
log 우도 = pθ(X)p_\theta(X) = logi=1Npθ(xi)=i=1Nlogpθ(xi)log\prod_{i=1}^N p_\theta(x_i) = \sum_{i=1}^N logp_\theta(x_i)

따라서 최대우도 추정을 위한 최적화 문제는 다음과 같이 정의된다.

θargmaxθi=1Nlogpθ(xi)\theta \leftarrow argmax_{ \theta} \sum_{i=1}^N logp_\theta(x_i)

잠재변수 모델로 확장

pθ(xi)p_\theta(x_i)는 복잡한 확률분포이기 떄문에 가우시안 무한 혼한 분포로 정의된다고 가정한다.
p(zi)p(z_i)는 사전확률분포이므로 파라미터 θ\theta와 관련이 없다고 가정한다.

p(xi)=pθ(xizi)p(zi)dzp(x_i) = \int p_\theta(x_i|z_i)p(z_i)dz

앞의 최적화 문제에 pθ(xi)p_\theta(x_i)를 대입하면 최적화 문제는 다음과 같이 확장된다.

θargmaxθi=1Nlogpθ(xizi)p(zi)dz\theta \leftarrow argmax_{ \theta} \sum_{i=1}^N log \int p_\theta(x_i|z_i)p(z_i)dz

p(zi)p(z_i)는 가우시안 분포로 가정하고 p(zi)p(z_i)에서 pθ(xizi)p_\theta(x_i|z_i)를 추정할 떄는 신경망 모델을 사용하며, 적분식은 기댓값 형태로 변환해서 몬테카를로 추정을 한다.

θargmaxθi=1NEzip(zi)[logpθ(xizi)]\theta \leftarrow argmax_{ \theta} \sum_{i=1}^N \mathbb{E}_{{z_i} \sim {p(z_i)}} [logp_\theta(x_i|z_i)]

잠재공간의 분화를 위한 사후분포 사용

위 식으로 훈련하면, ziz_i는 사전 분포로만 정의되고, xix_i를 표현하도록 정의된 상태가 아니기 때문에 pθ(X)p_\theta(X)의 분포를 따르는 데이터를 생성할 수 없다.
즉, 사전 분포로 정의된 ziz_i가 있는 잠재 공간은 데이터의 특징을 반영하지 않은 상태이다.

ziz_ixix_i를 잘 표현하려면 xix_i에서 ziz_i를 구해서 잠재 공간이 ziz_i별로 잘 분화되도록 해야한다. (-> 이게 제일 뭔 소린가 싶었음)

잠재 공간이 잘 분화되도록 사후 분포 pθ(zixi)p_\theta(z_i|x_i)를 구해서 사전 분포 p(zi)p(z_i)대신 적용하면 최적화 문제가 다음과 같이 재정의된다

θargmaxθi=1NEzipθ(zixi)[logpθ(xizi)]\theta \leftarrow argmax_{ \theta} \sum_{i=1}^N \mathbb{E}_{{z_i} \sim {p_\theta(z_i|x_i)}} [logp_\theta(x_i|z_i)]

사후 확률분포의 변분 근사

그런데 사후 분포 p(zixi)p(z_i|x_i)는 매우 복잡한 분포이기 때문에 추정하기 어렵다.

이와 같이 확률분포를 추정하기 어려운 경우 qθ(zixi)q_\theta(z_i|x_i)함수로 근사할 수 있으며 이를 변분 근사(variable approximation), 변분 추론(variable inference)이라고 한다.

θargmaxθi=1NEziqϕ(zixi)[logpθ(xizi)]\theta \leftarrow argmax_{ \theta} \sum_{i=1}^N \mathbb{E}_{{z_i} \sim q_\phi(z_i|x_i) } [logp_\theta(x_i|z_i)]

qθ(zixi)q_\theta(z_i|x_i)는 변분 함수이며, 간단한 가우시안 분포를 기반으로 사후 분포를 근사하게끔 도와주는 함수이다.

(사진은 그냥 참고용으로 q가 가우시안 분포를 따른다는 것만 알고 넘어가자)

profile
사람을 연구하는 공돌이

0개의 댓글