Path: blob/master/site/es-419/probability/examples/FFJORD_Demo.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Preparación
Primero, instale los paquetes que se usan en esta demostración.
Biyector FFJORD
En este Colab, demostramos el biyector FFJORD, propuesto originalmente en el artículo de Grathwohl, Will, et al. enlace de arxiv.
En pocas palabras, la idea detrás de este enfoque es establecer una correspondencia entre una distribución base conocida y la distribución de datos.
Para establecer esta conexión, necesitamos lo siguiente:
Defina un mapa biyectivo , entre el espacio en el que se define la distribución base y el espacio del dominio de datos.
Realice un seguimiento eficiente de las deformaciones que realizamos para transferir la noción de probabilidad a .
La segunda condición se formaliza en la siguiente expresión para la distribución de probabilidad definida en :
El biyector FFJORD logra esto al definir una transformación
Esta transformación es invertible, siempre que la función que describe la evolución del estado se comporte bien y el log_det_jacobian
se pueda calcular integrando la siguiente expresión.
En esta demostración, entrenaremos un biyector FFJORD para deformar una distribución gaussiana en la distribución definida por el conjunto de datos moons
. Esto se hará en 3 pasos:
Definición de distribución base
Definición del biyector FFJORD
Minimización de la probabilidad logarítmica exacta del conjunto de datos
Primero, cargamos los datos.
A continuación, creamos una instancia de una distribución base.
Usamos un perceptrón multicapa para modelar state_derivative_fn
.
Si bien no es necesario para este conjunto de datos, a menudo resulta beneficioso hacer que state_derivative_fn
dependa del tiempo. Aquí logramos esto concatenando t
a las entradas de nuestra red.
Ahora construimos una pila de biyectores FFJORD. Cada biyector cuenta con ode_solve_fn
y trace_augmentation_fn
y su propio modelo state_derivative_fn
, de modo que representen una secuencia de diferentes transformaciones.
Ahora podemos usar TransformedDistribution
, que es el resultado de deformar base_distribution
con el biyector stacked_ffjord
.
Ahora definimos nuestro procedimiento de entrenamiento. Simplemente minimizamos la probabilidad logarítmica negativa de los datos.
Trace muestras a partir de distribuciones base y transformadas.
0%| | 0/40 [00:00<?, ?it/s]
Entrenarlo durante más tiempo con una tasa de aprendizaje da como resultado mejoras más importantes.
No convertido en este ejemplo, el biyector FFJORD admite la estimación de traza estocástica de Hutchinson. El estimador particular se puede proporcionar mediante trace_augmentation_fn
. De manera similar, se pueden usar integradores alternativos mediante la definición personalizada de ode_solve_fn
.