¿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
Respuesta
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).
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
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
Probablemente, el artículo iba a publicarse el día de los inocentes. Aquí hay otro artículo fechado a fines de marzo del año pasado. http://dspace.mit.edu/handle/1721.1/44963
¿Sabes qué describe mejor la Iglesia de lo que dije? Este artículo de MIT: http://web.mit.edu/newsoffice/2010/ai-unification.html
Es un poco más hiperbólico, pero entonces, no soy inmune al optimismo presente en este artículo.
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:
- Infer.NET, escrito en C# por el Microsoft Research lab in Cambridge, UK
- stan, escrito en C++ por las estadísticas departamento en Columbia
- 1. UML para el lenguaje de programación C
- 2. Diferencia entre el lenguaje de programación de sistemas y los lenguajes de programación de aplicaciones
- 3. Siri lenguaje de programación
- 4. .NET lenguaje para programación simultánea
- 5. ¿cuál es el mejor lenguaje de programación para el selenio?
- 6. El controlador PostgreSQL para el lenguaje de programación Go
- 7. ¿Qué lenguaje de programación para cloud computing?
- 8. lenguaje de programación universal para Windows
- 9. Mejor lenguaje de programación para el procesamiento de imágenes médicas
- 10. ¿El mejor lenguaje de programación para la enseñanza de econometría?
- 11. biblioteca de álgebra lineal para el lenguaje de programación D
- 12. Lenguaje de programación más nuevo que Prolog para programación lógica
- 13. desarrollo de aplicaciones con el lenguaje D
- 14. ¿La velocidad de un lenguaje de programación es importante para las aplicaciones web?
- 15. CMS en el lenguaje de programación funcional
- 16. ¿Piensas utilizar el lenguaje de programación Factor?
- 17. ¿Lenguaje de programación para navegar automáticamente en el sitio web?
- 18. EBNF o BNF para el lenguaje de programación LOGO
- 19. Lenguaje de programación y compilador
- 20. lenguaje de programación de scripting más rápido?
- 21. Windows: ¿Qué lenguaje de programación?
- 22. IntelliJ IDE y Lua lenguaje de programación para que las aplicaciones Corona
- 23. Plataforma para crear un lenguaje de programación visual
- 24. GBA ROM Lenguaje de programación
- 25. ¿Hay alguna aplicación escrita en el lenguaje de programación Io? (O, distribuyendo aplicaciones Io.)
- 26. ¿Cómo aprender R como lenguaje de programación?
- 27. más dinámico lenguaje de programación dinámico
- 28. Lenguaje de script PHP o lenguaje de programación?
- 29. Primeros Embedded con D (el lenguaje de programación)
- 30. ¿Qué lenguaje de programación funcional debería elegir como primer lenguaje de programación funcional?
Slashdot, supongo? – Jacob
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
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