Articulo de referencia

Programación diferenciable

La programación diferenciable es un paradigma de programación en el que un programa informático numérico puede diferenciarse en todos sus aspectos mediante la diferenciación aut...

La programación diferenciable es un paradigma de programación en el que un programa informático numérico puede diferenciarse en todos sus aspectos mediante la diferenciación automática . [1] [2] [3] [4] [5] Esto permite la optimización basada en gradientes de los parámetros del programa, a menudo mediante el descenso de gradientes , así como otros enfoques de aprendizaje que se basan en información derivada de orden superior. La programación diferenciable ha encontrado uso en una amplia variedad de áreas, particularmente en la computación científica y el aprendizaje automático . [5] Una de las primeras propuestas para adoptar un marco de este tipo de manera sistemática para mejorar los algoritmos de aprendizaje fue realizada por el Equipo de Conceptos Avanzados de la Agencia Espacial Europea a principios de 2016. [6]

Aproches

La mayoría de los marcos de programación diferenciables funcionan construyendo un gráfico que contiene el flujo de control y las estructuras de datos del programa. [7] Los intentos generalmente se dividen en dos grupos:

  • Enfoques estáticos basados ​​en gráficos compilados como TensorFlow , [nota 1] Theano y MXNet . Tienden a permitir una buena optimización del compilador y una escalabilidad más sencilla a sistemas grandes, pero su naturaleza estática limita la interactividad y los tipos de programas que se pueden crear fácilmente (por ejemplo, aquellos que involucran bucles o recursión ), además de dificultar que los usuarios razonen de manera efectiva sobre sus programas. [7] Una cadena de herramientas de compilador de prueba de concepto llamada Myia usa un subconjunto de Python como interfaz y admite funciones de orden superior, recursión y derivadas de orden superior. [8] [9] [10]
  • Sobrecarga de operadores , enfoques basados ​​en gráficos dinámicos como PyTorch , el paquete autograd de NumPy y Pyaudi. Su naturaleza dinámica e interactiva permite escribir y razonar sobre la mayoría de los programas con mayor facilidad. Sin embargo, generan una sobrecarga del intérprete (en particular cuando se componen muchas operaciones pequeñas), una escalabilidad más pobre y un beneficio reducido de la optimización del compilador. [9] [10]

El uso de la compilación Just-in-Time ha surgido recientemente como una posible solución para superar algunos de los cuellos de botella de los lenguajes interpretados. El paquete heyoka de C++ y el paquete heyoka.py de Python hacen un amplio uso de esta técnica para ofrecer capacidades avanzadas de programación diferenciable (también a niveles superiores). Un paquete para el lenguaje de programación Julia , Zygote, trabaja directamente sobre la representación intermedia de Julia . [7] [11] [5]

Una limitación de los enfoques anteriores es que sólo pueden diferenciar el código escrito de una manera adecuada para el marco, lo que limita su interoperabilidad con otros programas. Los enfoques más nuevos resuelven este problema construyendo el gráfico a partir de la sintaxis del lenguaje o IR, lo que permite diferenciar código arbitrario. [7] [9]

Aplicaciones

La programación diferenciable se ha aplicado en áreas como la combinación de aprendizaje profundo con motores de física en robótica , [12] la solución de problemas de estructura electrónica con teoría funcional de densidad diferenciable , [13] el trazado de rayos diferenciable , [14] el procesamiento de imágenes , [15] y la programación probabilística . [5]

Aplicación multidisciplinaria

La programación diferenciable está dando pasos importantes en varios campos más allá de sus aplicaciones tradicionales. En el ámbito de la salud y las ciencias biológicas, por ejemplo, se está utilizando para el aprendizaje profundo en el modelado de mecanismos moleculares basado en la biofísica. Esto implica aprovechar la programación diferenciable en áreas como la predicción de la estructura de proteínas y el descubrimiento de fármacos. Estas aplicaciones demuestran el potencial de la programación diferenciable para contribuir a avances significativos en la comprensión de sistemas biológicos complejos y la mejora de las soluciones para la atención sanitaria. [16]

Véase también

Notas

  1. ^ TensorFlow 1 utiliza el enfoque de gráfico estático, mientras que TensorFlow 2 utiliza el enfoque de gráfico dinámico de forma predeterminada.

Referencias

  1. ^ Izzo, Dario; Biscani, Francesco; Mereta, Alessio (2017). "Programación genética diferenciable". Programación genética . Apuntes de clase en informática. Vol. 10196. págs.  35– 51. arXiv : 1611.04766 . doi :10.1007/978-3-319-55696-3_3. ISBN . 978-3-319-55695-6. Número de identificación del sujeto  17786263.
  2. ^ Baydin, Atilim Gunes; Pearlmutter, Barak A.; Radul, Alexey Andreyevich; Siskind, Jeffrey Mark (2018). "Diferenciación automática en el aprendizaje automático: una encuesta". Revista de investigación en aprendizaje de Marchine . 18 (153): 1– 43.
  3. ^ Wang, Fei; Decker, James; Wu, Xilun; Essertel, Gregory; Rompf, Tiark (2018). "Retropropagación con retrollamadas: fundamentos para una programación diferenciable eficiente y expresiva" (PDF) . En Bengio, S.; Wallach, H.; Larochelle, H.; Grauman, K (eds.). NIPS'18: Actas de la 32.ª Conferencia internacional sobre sistemas de procesamiento de información neuronal . Curran Associates. págs.  10201– 10212.
  4. ^ Innes, Mike (2018). "Sobre aprendizaje automático y lenguajes de programación" (PDF) . Conferencia SysML 2018. Archivado desde el original (PDF) el 2019-07-17 . Consultado el 2019-07-04 .
  5. ^ abcd Innes, Mike; Edelman, Alan; Fischer, Keno; Rackauckas, Chris; Saba, Elliot; Viral B Shah; Tebbutt, Will (2019). "Un sistema de programación diferenciable para unir el aprendizaje automático y la computación científica". arXiv : 1907.07587 [cs.PL].
  6. ^ "Inteligencia diferencial". Octubre de 2016. Consultado el 19 de octubre de 2022 .
  7. ^ abcd Innes, Michael; Saba, Elliot; Fischer, Keno; Gandhi, Dhairya; Marco Concetto Rudilosso; Neethu Mariya Joy; Karmali, tejano; Pal, Avik; Shah, viral (2018). "Modelado de moda con Flux". arXiv : 1811.01457 [cs.PL].
  8. ^ Merriënboer, Bart van; Breuleux, Olivier; Bergeron, Arnaud; Lamblin, Pascal (3 de diciembre de 2018). «Diferenciación automática en aprendizaje automático: dónde estamos y hacia dónde deberíamos ir». NIPS'18 . Vol. 31. págs.  8771– 81.
  9. ^ abc Breuleux, O.; van Merriënboer, B. (2017). «Diferenciación automática en Myia» (PDF) . Archivado desde el original (PDF) el 24 de junio de 2019. Consultado el 24 de junio de 2019 .
  10. ^ ab "TensorFlow: Gráficos estáticos". Tutoriales: Aprendiendo PyTorch . PyTorch.org . Consultado el 4 de marzo de 2019 .
  11. ^ Innes, Michael (2018). "No desenrolle el adjunto: diferenciación de programas en formato SSA". arXiv : 1810.07951 [cs.PL].
  12. ^ Degrave, Jonas; Hermans, Michiel; Dambre, Joni; Wyffels, Francis (2016). "Un motor de física diferenciable para el aprendizaje profundo en robótica". arXiv : 1611.01652 [cs.NE].
  13. ^ Li, Li; Hoyer, Stephan; Pederson, Ryan; Sun, Ruoxi; Cubuk, Ekin D.; Riley, Patrick; Burke, Kieron (2021). "Ecuaciones de Kohn-Sham como regularizador: incorporación de conocimientos previos a la física aprendida por máquina". Physical Review Letters . 126 (3): 036401. arXiv : 2009.08551 . Código Bibliográfico :2021PhRvL.126c6401L. doi : 10.1103/PhysRevLett.126.036401 . PMID  33543980.
  14. ^ Li, Tzu-Mao; Aittala, Miika; Durand, Fredo; Lehtinen, Jaakko (2018). "Trazado de rayos Monte Carlo diferenciable mediante muestreo de bordes". Transacciones ACM sobre gráficos . 37 (6): 222:1–11. doi : 10.1145/3272127.3275109 . S2CID  52839714.
  15. ^ Li, Tzu-Mao; Gharbi, Michaël; Adams, Andrew; Durand, Frédo; Ragan-Kelley, Jonathan (agosto de 2018). "Programación diferenciable para procesamiento de imágenes y aprendizaje profundo en Halide". ACM Transactions on Graphics . 37 (4): 139:1–13. doi : 10.1145/3197517.3201383 . S2CID  46927588.
  16. ^ AlQuraishi, Mohammed; Sorger, Peter K. (octubre de 2021). "Biología diferenciable: uso del aprendizaje profundo para el modelado de mecanismos moleculares basado en datos y basado en biofísica". Nature Methods . 18 (10): 1169– 1180. doi :10.1038/s41592-021-01283-4. PMC 8793939 . PMID  34608321. 
Retrieved from "https://en.wikipedia.org/w/index.php?title=Differentiable_programming&oldid=1261149815"