Neural Process 를 알아보자

쓰여진 날: by Creative Commons Licence

Neural Process

딥마인드는 2018 ICML 에서 Conditional Neural Process 와 Neural Process 를 소개했습니다. 이전에 없던 새로운 supervised learning 으로 Gaussian Process 와 Neural Network 의 특징을 결합한 논문으로 쉽게 신경망을 기반으로한 확률 모델입니다. Gaussian process 의 확률에 기반해 uncertainty를 잡는 것과 적은 수의 데이터로도 꽤 정확한 추론을 할 수 있다는 점, 그리고 Neural Net의 학습 계산량의 scalability와 많은 데이터가 존재할 때 높은 정확도를 얻을 수 있다는 각각의 장점을 합쳤죠. 따라서 Neural Process는 적은 수의 학습 데이터를 보고도 꽤 정확한 예측을 하며 복잡한 태스크와 큰 데이터셋에도 적용할 수 있습니다. 저자는 Conditional NP 와 NP를 한 학회에서 발표하였고, 논문에 따르면 Conditional NP 의 latent variable 버전이 NP라고 하네요.

Conditional Neural Process

신경망 모델은 엄청나게 많은 데이터를 가지고 하나의 함수를 학습하는 방식입니다. 학습과 예측 과정에서 효율적인 계산량을 가지죠. 반면 Gaussian process 는 stochastic process를 이용해 함수의 분포를 학습하고 이용해 적은 양의 데이터로도 좋은 예측을 보이죠. 그렇지만 계산량이 매우 크고 최적의 kernel을 찾기 위한 최적화 과정도 있어야합니다.

NP 는 신경망을 이용해 stochastic process를 approximation 합니다. 이 과정에서 계산량이 대폭 줄고 학습에 필요한 데이터도 줄게 되었죠.

a에서 $x_{1} ~ x_{3}$ 은 관측된 데이터이고 그에 따른 라벨 $y_{i} = f(x_{i})$ 을 가지고 있습니다. 그리고 라벨이 없는 타겟 데이터가 있죠. b에서 보이는 건 일반적인 supervised learning 입니다. 신경망이 이런 방식으로 학습 데이터를 이용해 하나의 함수 $g$ 를 학습한 후 이 하나의 함수 $g$ 를 이용해 예측을 하죠. c는 CNP 모델입니다. 각각의 관측된 데이터쌍에서 인코더 $h$ 를 이용해 각각의 함수들 $r_{i}$ 를 찾습니다. 여기서의 $r_{i}$ 가 stochastic process의 근사값이 되겠죠. 다음 각각의 $r_{i}$ 를 합쳐 하나의 $r$ 을 만듭니다. 이 과정을 aggregation 이라고 하는데 논문에서는 단순히 각각의 $r_{i}$ 함수들의 평균 값을 구하는 것이 가장 잘 작동한다고 합니다. 이렇게 관측된 데이터로부터 얻은 $r$과 타겟데이터를 generator를 이용해 타켓 라벨을 예측합니다. 사실 굉장히 간단한 모델이죠.

generator를 어떻게 하냐에 따라 이 모델은 regression, classfication, image completion을 할 수 있게 됩니다.

Neural Process

NP 는 단지 CNP의 확률적인 버전입니다. Autoencoder와 Variational autoencoder 처럼요. z 라는 latent variable이 mean, std 를 근사하게 하면서 z를 확률변수로 보니 확률 모델이 되는것이죠.

NP 에서는 관측된 데이터를 CNP와 같은 방법으로 각각의 함수 $r_{i}$ 를 학습하면 aggregation 으로 관측된 데이터를 가장 잘 표현하는 하나의 함수 $r$ 를 만듭니다. CNP 와 다른점으로 이 $r$ 을 이용해 latent variable z를 인코딩한다는 겁니다. z 는 mean, std를 아웃풋으로 가지죠. 이렇게 근사된 z는 학습할 떄는 사후 분포이지만 예측할 때는 사전 분포로 시용하게 됩니다. 즉 uncertainty를 측정하게 해주죠.

그런데 z 가 확률변수인게 또 문제가 됩니다. 확률변수이니 back prop이 안된다는거죠. 여기서는 VAE와 같은 방식으로 reparametrize trick을 사용하고 variational inference 방식으로 학습을 진행합니다. 즉 variational lower bound인 ELBO를 최대화하는 방식으로요.

구현

https://github.com/jusonn/Neural-Process