Path: blob/master/site/ko/probability/examples/FFJORD_Demo.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
설정
이 데모에 사용된 패키지를 먼저 설치합니다.
FFJORD bijector
이 colab에서는 Grathwohl, Will 등의 논문(arxiv 링크)에서 처음 제안된 FFJORD bijector를 시연합니다.
간단히 말해서 이러한 접근 방식의 기본 개념은 알려진 기본 분포와 데이터 분포 간의 대응 관계를 설정하는 것입니다.
이 연결을 설정하려면 다음을 수행해야 합니다.
기본 분포가 정의된 공간 와 데이터 도메인의 공간 사이에 전단사 맵(bijective map) , 을 정의합니다.
확률 개념을 로 이전하기 위해 수행하는 변형을 효율적으로 추적합니다.
두 번째 조건은 에 정의된 확률 분포에 대한 다음 식으로 공식화됩니다.
FFJORD bijector는 다음과 같은 변환을 정의하여 이를 수행합니다.
상태 의 변화를 설명하는 함수 가 제대로 동작하고 다음 식을 통합하여 log_det_jacobian
을 계산할 수 있는 한 이 변환은 반전 가능합니다.
이 데모에서는 FFJORD bijector를 훈련하여 가우시안 분포를 moons
데이터세트에 의해 정의된 분포로 왜곡합니다. 이는 3단계로 수행됩니다.
기본 분포 정의하기
FFJORD bijector 정의하기
데이터세트의 정확한 로그 가능성 최소화하기
먼저 데이터를 로드합니다.
다음으로 base_distribution을 인스턴스화합니다.
state_derivative_fn
을 모델링하기 위해 다층 퍼셉트론을 사용합니다.
이 데이터세트에는 필요하지 않지만, 시간에 따라 state_derivative_fn
을 만드는 것이 유익한 경우가 많습니다. 여기서는 t
를 네트워크의 입력에 연결하여 이를 달성합니다.
이제 FFJORD bijector의 스택을 구성합니다. 각 bijector는 ode_solve_fn
및 trace_augmentation_fn
과 함께 제공되며 자체 state_derivative_fn
모델이므로 서로 다른 변환의 시퀀스를 나타냅니다.
이제 stacked_ffjord
로 base_distribution
을 왜곡한 결과인 TransformedDistribution
을 사용할 수 있습니다.
이제 훈련 절차를 정의합니다. 간단하게 데이터의 음의 로그 가능성을 최소화합니다.
기본 및 변환된 분포에서 샘플을 플롯합니다.
0%| | 0/40 [00:00<?, ?it/s]
학습률로 더 오래 훈련하면 훨씬 더 개선됩니다.
이 예에서 수렴되지 않은 FFJORD bijector는 hutchinson의 확률적 추적 추정을 지원합니다. 특정 estimator는 trace_augmentation_fn
통해 제공될 수 있습니다. 마찬가지로 사용자 정의 ode_solve_fn
을 정의하여 대체 적분기를 사용할 수 있습니다.