La programación diferenciable es un paradigma de programación en el que un programa informático numérico se puede diferenciar a través de la diferenciación automática . [1] [2] [3] [4] Esto permite la optimización basada en gradientes de los parámetros en el programa, a menudo a través del descenso de gradientes . La programación diferenciable ha encontrado uso en una amplia variedad de áreas, particularmente en computación científica e inteligencia artificial . [4]
Enfoques
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. [5] Los intentos anteriores 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 un escalado más fácil a sistemas grandes, pero su naturaleza estática limita la interactividad y los tipos de programas que se pueden crear fácilmente (por ejemplo, los que involucran bucles o recursividad ), además de dificultar el razonamiento de los usuarios. eficazmente sobre sus programas. [5] [6] [7]
- Sobrecarga del operador , enfoques basados en gráficos dinámicos como PyTorch y AutoGrad . Su naturaleza dinámica e interactiva permite escribir y razonar sobre la mayoría de los programas con mayor facilidad. Sin embargo, conducen a unasobrecarga del intérprete (particularmente cuando se componen muchas operaciones pequeñas), una escalabilidad más pobre y dificultades para beneficiarse de la optimización del compilador. [6] [7] [4]
Ambos enfoques iniciales solo pueden diferenciar el código escrito de una manera adecuada para el marco, lo que limita su interoperabilidad con otros programas.
Un paquete más reciente para el lenguaje de programación Julia , Zygote , resuelve los problemas que enfrentaron los intentos anteriores al tratar la sintaxis del lenguaje como un gráfico. La representación intermedia de código arbitrario se puede diferenciar directamente, optimizar y compilar. [5] [8]
Un lenguaje de programación "actualmente en desarrollo y aún no está listo para su uso" llamado Myia [6] permite definir un modelo usando un subconjunto de Python , que se compila en Myia.
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 , resolución de problemas de estructura electrónica con teoría funcional de densidad diferenciable , trazado de rayos diferenciables , procesamiento de imágenes y programación probabilística . [9] [10] [11] [12] [13] [4]
Ver también
- Función diferenciable
- Aprendizaje automático
Notas
- ^ TensorFlow 1 usa el enfoque de gráfico estático, mientras que TensorFlow 2 usa el enfoque de gráfico dinámico de forma predeterminada.
Referencias
- ^ Baydin, Atilim Gunes; Pearlmutter, Barak; Radul, Alexey Andreyevich; Siskind, Jeffrey (2018). "Diferenciación automática en aprendizaje automático: una encuesta" . Revista de investigación sobre aprendizaje automático . 18 : 1–43.
- ^ Wang, Fei; Decker, James; Wu, Xilun; Essertel, Gregory; Rompf, Tiark (2018), Bengio, S .; Wallach, H .; Larochelle, H .; Grauman, K. (eds.), "Backpropagation with Callbacks: Foundations for Efficient and Expressive Differentiable Programming" (PDF) , Advances in Neural Information Processing Systems 31 , Curran Associates, Inc., págs. 10201–10212 , consultado el 2 de febrero de 2019. -13
- ^ Innes, Mike (2018). "Sobre aprendizaje automático y lenguajes de programación" (PDF) . Conferencia SysML 2018 .
- ^ a b c d Innes, Mike; Edelman, Alan; Fischer, Keno; Rackauckas, Chris; Saba, Elliot; Viral B Shah; Tebbutt, Will (2019), ∂P: Un sistema de programación diferenciable para unir el aprendizaje automático y la informática científica , arXiv : 1907.07587
- ^ a b c Innes, Michael; Saba, Elliot; Fischer, Keno; Gandhi, Dhairya; Rudilosso, Marco Concetto; Joy, Neethu Mariya; Karmali, Tejan; Pal, Avik; Shah, viral (31 de octubre de 2018). "Modelado de moda con Flux". arXiv : 1811.01457 [ cs.PL ].
- ^ a b c "Diferenciación automática en Myia" (PDF) . Consultado el 24 de junio de 2019 .
- ^ a b "TensorFlow: gráficos estáticos" . Consultado el 4 de marzo de 2019 .
- ^ Innes, Michael (18 de octubre de 2018). "No desenrolle adjunto: programas de forma de diferenciación de SSA". arXiv : 1810.07951 [ cs.PL ].
- ^ Degrave, Jonas; Hermans, Michiel; Dambre, Joni; wyffels, Francis (5 de noviembre de 2016). "Un motor de física diferenciable para el aprendizaje profundo en robótica". arXiv : 1611.01652 [ cs.NE ].
- ^ Li, Li; Hoyer, Stephan; Pederson, Ryan; Sun, Ruoxi; Cubuk, Ekin D .; Riley, Patrick; Burke, Kieron (2021). "Ecuaciones de Kohn-Sham como regularizador: construcción de conocimientos previos en física aprendida por máquina" . Cartas de revisión física . 126 (3): 036401. doi : 10.1103 / PhysRevLett.126.036401 .
- ^ "Trazado de rayos de Monte Carlo diferenciable a través del muestreo de bordes" . people.csail.mit.edu . Consultado el 13 de febrero de 2019 .
- ^ "Hoja de ruta de organización de software de código abierto SciML Scientific Machine Learning" . sciml.ai . Consultado el 19 de julio de 2020 .
- ^ "Programación diferenciable para procesamiento de imágenes y aprendizaje profundo en haluro" . people.csail.mit.edu . Consultado el 13 de febrero de 2019 .