2010-03-31 10 views
12

¿Alguien ha trabajado con el lenguaje de programación Church? ¿Alguien puede recomendar aplicaciones prácticas? Acabo de descubrirlo, y si bien parece que soluciona algunos problemas de larga data de la inteligencia artificial y el aprendizaje automático, soy escéptico. Nunca había oído hablar de él, y me sorprendí al descubrir que realmente ha existido por algunos años, después de haber sido anunciado en el documento Church: a language for generative models.Aplicaciones para el lenguaje de programación de iglesias

+0

Slashdot, supongo? – Jacob

+0

En el mejor de los casos, las preguntas de discusión se deben marcar como wiki de la comunidad. La mayoría de las veces no son el formato adecuado para Stack Overflow. – danben

+1

Después de leer el wiki y los documentos del proyecto, está claro que este es solo otro lenguaje de juguete sin futuro serio. Ninguno de los ejemplos fue específico de Church y podría duplicarse fácilmente en casi cualquier idioma. Los artículos que trajeron esto a mi atención claramente sobrevaloraron y tergiversaron el alcance del proyecto. Vote para cerrar. – Cerin

Respuesta

6

No estoy seguro de qué decir sobre el tema de las aplicaciones prácticas. ¿Modelar las habilidades cognitivas con modelos generativos constituye una "aplicación práctica" en tu mente?

La importancia clave de Church (al menos ahora) es que nos permite a los que trabajamos con soluciones de inferencia probabilística para los problemas de IA una forma más sencilla de modelar. Es esencialmente un subconjunto de Lisp.

No estoy de acuerdo con Chris S en que se trata de un lenguaje de juguete. Si bien algunos de estos problemas de inferencia se pueden replicar en otros lenguajes (he creado varios en Matlab) generalmente no son muy reutilizables y realmente hay que amar trabajar en 4 y 5 para bucles profundos (lo odio). En lugar de abordar el problema de esa manera, Church usa las ventajas recursivas de lamda calaculus y también permite algo llamado memoriamiento que es realmente útil para modelos generativos ya que su modelo generativo a menudo no es el mismo juicio tras ensayo, aunque para la prueba, realmente necesitas esto.

Yo diría que si lo que estás haciendo tiene algo que ver con Bayesian Networks, Hierarchical Bayesian Models, soluciones probabilísticas para POMDP o Dynamic Bayesian Networks, entonces creo que Church es de gran ayuda. Por lo que vale, he trabajado con Noah y Josh (dos de los autores de Church) y nadie tiene un mejor manejo de la inferencia probabilística en este momento (en mi humilde opinión).

+0

Lamda calaculus se ha implementado en docenas de bibliotecas para varios idiomas. Y la memorización es un patrón de diseño que es tan antiguo como el tiempo. No hay nada nuevo aquí. Todavía no tengo claro por qué sintieron que necesitaban inventar Yet Another Lisp Dialect en lugar de simplemente usar Common Lisp o Scheme. – Cerin

+1

Cerin, el objetivo del lenguaje no es ni el cálculo lambda per se, ni la memorización, sino la capacidad de representar un modelo probabilístico del "mundo", escribiendo un programa que lo simula, y luego haciendo preguntas sobre la probabilidad de eventos específicos . Por ejemplo, si escribe un programa que describa cómo se proyectan los objetos 3D en una imagen 2D, podría preguntar: dada esta imagen, ¿cuáles son los objetos 3D que la generaron? Es decir, pasas automáticamente de un problema de proyección de imagen relativamente simple al problema * de visión * mucho más difícil. Usted da * salida * y obtiene * entrada *, con probabilidades. – user118967

2

Church forma parte de la familia de lenguajes de programación probabilísticos que permite separar la estimación de un modelo de su definición. Esto hace que el modelo probabilístico y la inferencia sean mucho más accesibles para las personas que desean aplicar el aprendizaje automático, pero que no son en sí mismos investigadores de aprendizaje automático.

Durante mucho tiempo, la programación probabilística significaba que tenía que idear un modelo para sus datos y derivar la estimación del modelo usted mismo: tiene algunos valores observados, y desea aprender los parámetros. La estructura del modelo está estrechamente relacionada con la forma en que se estiman los parámetros, y debe tener un conocimiento bastante avanzado del aprendizaje automático para realizar los cálculos correctamente. Los recientes lenguajes de programación probabilísticos son un intento de abordar eso y hacer las cosas más accesibles para los científicos de datos o las personas que realizan trabajos que aplican el aprendizaje automático.

Como analogía, considere lo siguiente:

usted es un programador y desea ejecutar un código en un ordenador. En la década de 1970, tenía que escribir el lenguaje ensamblador en tarjetas perforadas y alimentarlas en un mainframe (para el cual tenía que reservar tiempo) para ejecutar su programa.Ahora es 2014, y hay idiomas de alto nivel y fáciles de aprender en los que puede escribir código incluso sin saber cómo funciona la arquitectura de la computadora. Todavía es útil entender cómo funcionan las computadoras para escribir en esos idiomas, pero no tiene tiene, y mucha más gente escribe código que si tuviera que programar con tarjetas perforadas.

Los lenguajes de programación probabilísticos hacen lo mismo para el aprendizaje automático con modelos estadísticos. Además, Church no es la única opción para esto. Si usted no es un devoto de programación funcional, también puede echa un vistazo a los siguientes marcos para la inferencia bayesiana en modelos gráficos:

Cuestiones relacionadas