Una Introducción Suave a los Lenguajes de Programación Probabilísticos

La programación probabilística se está convirtiendo en una de las áreas de desarrollo más activas en el espacio del aprendizaje automático. ¿Cuáles son los principales idiomas que deberíamos conocer?

Jesús Rodríguez

Seguir

el 7 de Agosto de 2020 · 7 min read

Fuente: https://devclass.com/2019/07/01/mit-presents-gen-to-get-probabilistic-programming-for-ai-up-and-running/

recientemente he comenzado un nuevo boletín de noticias se centran en IA educación. TheSequence es un boletín de noticias centrado en la IA sin BS( es decir, sin publicidad, sin noticias, etc.) que tarda 5 minutos en leerse. El objetivo es mantenerlo actualizado con proyectos de aprendizaje automático, documentos de investigación y conceptos. Por favor, inténtelo suscribiéndose a continuación:

El pensamiento probabilístico es una herramienta increíblemente valiosa para la toma de decisiones. Desde economistas hasta jugadores de poker, las personas que pueden pensar en términos de probabilidades tienden a tomar mejores decisiones cuando se enfrentan a situaciones inciertas. Los campos de probabilidades y teoría de juegos se han establecido durante siglos y décadas, pero no están experimentando un renacimiento con la rápida evolución de la inteligencia artificial(IA). ¿Podemos incorporar probabilidades como ciudadanos de código de software de primera clase? Bienvenido al mundo de los lenguajes de programación probabilísticos(PPLs)

El uso de estadísticas para superar la incertidumbre es uno de los pilares de un gran segmento del mercado del aprendizaje automático. El razonamiento probabilístico se ha considerado durante mucho tiempo uno de los fundamentos de los algoritmos de inferencia y está representado en todos los principales marcos y plataformas de aprendizaje automático. Recientemente, el razonamiento probabilístico ha sido adoptado por gigantes de la tecnología como Uber, Facebook o Microsoft, ayudando a impulsar la agenda de investigación y tecnología en el espacio. Específicamente, los PPLs se han convertido en una de las áreas de desarrollo más activas en el aprendizaje automático, lo que provocó el lanzamiento de algunas tecnologías nuevas y emocionantes.

Conceptualmente, los lenguajes de programación probabilísticos (PPLs) son lenguajes específicos de dominio que describen modelos probabilísticos y la mecánica para realizar inferencias en esos modelos. La magia de la PPL se basa en combinar las capacidades de inferencia de los métodos probabilísticos con el poder de representación de los lenguajes de programación.

En un programa PPL, las suposiciones se codifican con distribuciones anteriores sobre las variables del modelo. Durante la ejecución, un programa PPL lanzará un procedimiento de inferencia para calcular automáticamente las distribuciones posteriores de los parámetros del modelo en función de los datos observados. En otras palabras, la inferencia ajusta la distribución previa utilizando los datos observados para dar un modo más preciso. La salida de un programa PPL es una distribución de probabilidad, que permite al programador visualizar y manipular explícitamente la incertidumbre asociada con un resultado.

Para ilustrar la simplicidad de los PPL, usemos uno de los problemas más famosos de las estadísticas modernas: un lanzamiento de moneda sesgado. La idea de este problema es calcular el sesgo de una moneda. Supongamos que xi = 1 si el resultado del lanzamiento de la i-ésima moneda es cabeza y xi = 0 si es cola. Nuestro contexto asume que los lanzamientos de monedas individuales son independientes e idénticamente distribuidos (IID) y que cada lanzamiento sigue una distribución de Bernoulli con el parámetro θ: p(xi = 1 | θ) = θ y p(xi = 0 | θ) = 1 − θ. La variable latente (es decir, no observada) θ es el sesgo de la moneda. La tarea es inferir θ dados los resultados de lanzamientos de monedas observados previamente, es decir, p (θ / x1, x2,. . . , xN).

Modelar un programa simple como el lanzamiento de moneda sesgado en un lenguaje de programación de propósito general puede resultar en cientos de líneas de código. Sin embargo, PPLs como Edward expresan este problema en unos pocos gustos simples de code:

The Holy Grail: Deep PPL

Durante décadas, el espacio de aprendizaje automático se dividió en dos campos irreconciliables: las estadísticas y las redes neuronales. Un campamento dio origen a la programación probabilística, mientras que el otro estaba detrás de movimientos transformacionales como el aprendizaje profundo. Recientemente, las dos escuelas de pensamiento se han unido para combinar el aprendizaje profundo y el modelado bayesiano en programas individuales. La máxima expresión de este esfuerzo son los lenguajes de programación probabilísticos profundos(PPLs Profundos).

Conceptualmente, Profundo PPLs puede expresar Bayesianas, redes neuronales con probabilística de los pesos y sesgos. En la práctica, los PPLs profundos se han materializado como nuevos lenguajes probabilísticos y bibliotecas que se integran a la perfección con los populares marcos de aprendizaje profundo.

3 PPLs Profundos Que necesita conocer

El campo de los lenguajes de programación probabilísticos(PPLs) ha estado explotando con investigación e innovación en los últimos años. La mayoría de esas innovaciones provienen de la combinación de PPLs y métodos de aprendizaje profundo para crear redes neuronales que puedan manejar la incertidumbre de manera eficiente. Gigantes de la tecnología como Google, Microsoft o Uber han sido responsables de empujar los límites de los PPLs Profundos hacia escenarios a gran escala. Esos esfuerzos se han traducido en pilas de PPLs profundas completamente nuevas que se están volviendo cada vez más populares dentro de la comunidad de aprendizaje automático. Exploremos algunos de los avances más recientes en el espacio Profundo de la PPL.

Edward

Edward es un lenguaje de programación probabilístico completo Turing (PPL) escrito en Python. Edward fue defendido originalmente por el equipo de Google Brain, pero ahora tiene una extensa lista de colaboradores. El artículo de investigación original de Edward se publicó en marzo de 2017 y, desde entonces, la pila ha sido adoptada en gran medida por la comunidad de aprendizaje automático. Edward fusiona tres campos: estadística bayesiana y aprendizaje automático, aprendizaje profundo y programación probabilística. La biblioteca se integra a la perfección con marcos de aprendizaje profundo como Keras y TensorFlow.

Pyro

Pyro es un lenguaje de programación probabilístico profundo (PPL) lanzado por Uber AI Labs. Pyro está construido sobre PyTorch y se basa en cuatro principios fundamentales:

  • Universal: Pyro es una PPL universal – puede representar cualquier distribución de probabilidad computable. ¿Cómo? Comenzando desde un lenguaje universal con iteración y recursión (código Python arbitrario), y luego agregando muestreo aleatorio, observación e inferencia.
  • Escalable: Pyro escala a grandes conjuntos de datos con poca sobrecarga por encima del código escrito a mano. ¿Cómo? Mediante la construcción de modernas técnicas de optimización de cajas negras, que utilizan mini-lotes de datos, para aproximar la inferencia.
  • Mínimo: Pyro es ágil y se puede mantener. ¿Cómo? Pyro se implementa con un pequeño núcleo de abstracciones potentes y componibles. Siempre que sea posible, el trabajo pesado se delega a PyTorch y a otras bibliotecas.
  • Flexible: Pyro apunta a la automatización cuando lo desee y al control cuando lo necesite. ¿Cómo? Pyro utiliza abstracciones de alto nivel para expresar modelos generativos y de inferencia, al tiempo que permite a los expertos personalizar fácilmente la inferencia.

Al igual que otros PPLs, Pyro combina modelos de aprendizaje profundo e inferencia estadística utilizando una sintaxis simple como se ilustra en el siguiente código:

Infer.Net

Microsoft de código abierto recientemente Infer.Net un marco de trabajo que simplifica la programación probabilística para desarrolladores de.Net. Microsoft Research ha estado trabajando en Inferir.Net desde 2004, pero solo recientemente, con la aparición del aprendizaje profundo, el marco se ha vuelto realmente popular. Infer.Net proporciona algunos diferenciadores fuertes que lo convierten en una opción sólida para los desarrolladores que se aventuran en el espacio profundo de PPL:

  • Lenguaje de modelado enriquecido » Soporte para variables univariadas y multivariadas, tanto continuas como discretas. Los modelos se pueden construir a partir de una amplia gama de factores que incluyen operaciones aritméticas, álgebra lineal, restricciones de rango y positividad, operadores booleanos, discretos de Dirichlet, gaussianos y muchos otros.
  • Algoritmos de inferencia múltiple» Los algoritmos incorporados incluyen Propagación de Expectativas, Propagación de Creencias (un caso especial de EP), Transmisión de Mensajes Variacionales y muestreo de Gibbs.
  • Diseñado para inferencia a gran escala: Infer.NET compila modelos en código fuente de inferencia que se puede ejecutar de forma independiente sin sobrecarga. También se puede integrar directamente en su aplicación.
  • Extensible por el usuario: el usuario puede agregar distribuciones de probabilidad, factores, operaciones de mensajes y algoritmos de inferencia. Inferir.NET utiliza una arquitectura de plug-in que la hace abierta y adaptable.

Veamos nuestro ejemplo de lanzamiento de monedas en Infer.Net

El campo de la PPL profunda se está convirtiendo constantemente en un bloque fundamental importante del ecosistema de aprendizaje automático. Pyro, Edward y Infer.Net son solo tres ejemplos recientes de PPLs Profundos, pero no los únicos relevantes. La intersección de los marcos de aprendizaje profundo y los PPL ofrece una gran huella para la innovación y es probable que los nuevos casos de uso superen los límites de los PPLs profundos en un futuro cercano.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.