Vai al contenuto

Programmazione differenziabile

Da Wikipedia, l'enciclopedia libera.

La programmazione differenziabile è un paradigma di programmazione in cui un programma numerico per computer può essere interamente differenziato tramite differenziazione automatica.[1][2][3][4] Ciò consente l'ottimizzazione basata sul gradiente dei parametri nel programma, spesso tramite discesa del gradiente, ed anche altri approcci di apprendimento basati su informazioni tratte da derivate di ordine superiore. La programmazione differenziabile ha trovato impiego in un'ampia varietà di settori, in particolare nel calcolo scientifico e nell'apprendimento automatico.[5] Una delle prime proposte per adottare tale framework in modo sistematico per migliorare gli algoritmi di apprendimento è stata fatta dall'Advanced Concepts Team presso l'Agenzia spaziale europea all'inizio del 2016.[6]

La maggior parte dei framework di programmazione differenziabili agiscono costruendo un grafo contenente il flusso di controllo e le strutture dati nel programma. Gli approcci generalmente rientrano in due gruppi:

  • Approcci statici basati su grafici compilati come TensorFlow,[7] Theano e MXNet. Essi tendono a consentire una buona ottimizzazione del compilatore e una più semplice scalabilità per sistemi di grandi dimensioni, ma la loro natura statica limita l'interattività e i tipi di programmi che possono essere creati facilmente (ad esempio quelli che coinvolgono loop o ricorsione), oltre a rendere più difficile per gli utenti ragionare efficacemente sui loro programmi. Una toolchain di compilazione proof-of-concept denominata Myia utilizza un sottoinsieme di Python come front-end e supporta funzioni di ordine superiore, ricorsione e derivate di ordine superiore.[8][9][10]
  • Sovraccarico degli operatori, approcci basati su grafici dinamici come PyTorch, il pacchetto autograd di NumPy e Pyaudi . La loro natura dinamica e interattiva consente di scrivere e ragionare più facilmente sulla maggior parte dei programmi. Tuttavia, comportano un sovraccarico dell'interprete (in particolare quando si compongono molte piccole operazioni), una minore scalabilità e una riduzione dei benefici dell'ottimizzazione del compilatore.[9][10]

Recentemente è emerso l'uso della compilazione just-in-time come possibile soluzione per superare alcuni dei colli di bottiglia dei linguaggi interpretati. Il pacchetto C++ heyoka e Python heyoka.py sfrutta ampiamente questa tecnica per offrire funzionalità avanzate di programmazione differenziabile (anche per la derivazione di ordine elevato). Un pacchetto per il linguaggio di programmazione Julia, denominato Zigote, è capace di lavorare direttamente sulla rappresentazione intermedia di Julia.

Un limite degli approcci precedenti sta nel fatto che essi sono in grado di differenziare solo codice scritto in modo adatto al framework, limitandone l'interoperabilità con altri programmi. Gli approcci più recenti risolvono questo problema costruendo il grafo a partire dalla sintassi del linguaggio o dall'IR, consentendo la differenziazione di codice arbitrario.[9]

La programmazione differenziabile è stata applicata in aree quali la combinazione di apprendimento profondo con motori fisici nella robotica, la risoluzione di problemi di struttura elettronica con la teoria del funzionale della densità differenziabile,[11] il ray tracing differenziabile,[12] l'imaging differenziabile,[13][14] l'elaborazione delle immagini,[15] e la programmazione probabilistica.

Applicazione multidisciplinare

[modifica | modifica wikitesto]

La programmazione differenziabile sta compiendo passi da gigante in vari settori, anche al di là delle sue applicazioni tradizionali. In ambito sanitario e delle scienze della vita, ad esempio, essa viene utilizzata per l'apprendimento approfondito nella modellazione biofisica dei meccanismi molecolari, in aree come la previsione della struttura proteica e la scoperta di nuovi farmaci. Tali applicazioni dimostrano il potenziale del paradigma nel contribuire a progressi significativi nella comprensione di sistemi biologici complessi e nel miglioramento delle soluzioni per cure sanitarie.[16]

Voci correlate

[modifica | modifica wikitesto]
  1. ^ Dario Izzo, Francesco Biscani e Alessio Mereta, Genetic Programming, Lecture Notes in Computer Science, vol. 10196, 2017, pp. 35–51, DOI:10.1007/978-3-319-55696-3_3, ISBN 978-3-319-55695-6.
  2. ^ Baydin, Automatic Differentiation in Machine Learning: a Survey, in Journal of Machine Learning Research, vol. 18, 2018, pp. 1–43.
  3. ^ Fei Wang, James Decker e Xilun Wu, NIPS'18: Proceedings of the 32nd International Conference on Neural Information Processing Systems, Curran Associates, 2018, pp. 10201–10212.
  4. ^ Innes, On Machine Learning and Programming Languages (PDF), in SysML Conference 2018, 2018.
  5. ^ Mike Innes, Alan Edelman e Keno Fischer, A Differentiable Programming System to Bridge Machine Learning and Scientific Computing, 18 luglio 2019, DOI:10.48550/arXiv.1907.07587.
  6. ^ Differential Intelligence, su esa.int, ottobre 2016. URL consultato il 19 ottobre 2022.
  7. ^ Come default TensorFlow1 usa l'approccio con grafo statico, mentre TensorFlow2 quello dinamico.
  8. ^ Bart van Merriënboer, Olivier Breuleux e Arnaud Bergeron, Automatic differentiation in ML: Where we are and where we should be going, vol. 31, 3 dicembre 2018.
  9. ^ a b c Breuleux, Automatic Differentiation in Myia (PDF), su sysml.cc, 2017. URL consultato il 24 giugno 2019.
  10. ^ a b TensorFlow: Static Graphs, su pytorch.org. URL consultato il 4 marzo 2019.
  11. ^ Li, Kohn-Sham Equations as Regularizer: Building Prior Knowledge into Machine-Learned Physics, in Physical Review Letters, vol. 126, 2021, Bibcode:2021PhRvL.126c6401L, DOI:10.1103/PhysRevLett.126.036401, PMID 33543980, arXiv:2009.08551.
  12. ^ Li, Differentiable Monte Carlo Ray Tracing through Edge Sampling, in ACM Transactions on Graphics, vol. 37, 2018, pp. 222:1–11, DOI:10.1145/3272127.3275109.
  13. ^ (EN) Chen, Differentiable Imaging: A New Tool for Computational Optical Imaging, in Advanced Physics Research, vol. 2, 2023, DOI:10.1002/apxr.202200118, ISSN 2751-1200 (WC · ACNP).
  14. ^ (EN) Chen, Differentiable Imaging: Progress, Challenges, and Outlook, in Advanced Devices & Instrumentation, vol. 6, 4 luglio 2025, Bibcode:2025AdDI....6..117C, DOI:10.34133/adi.0117, ISSN 2767-9713 (WC · ACNP).
  15. ^ Li, Differentiable Programming for Image Processing and Deep Learning in Halide, in ACM Transactions on Graphics, vol. 37, agosto 2018, pp. 139:1–13, DOI:10.1145/3197517.3201383.
  16. ^ AlQuraishi, Differentiable biology: using deep learning for biophysics-based and data-driven modeling of molecular mechanisms, in Nature Methods, vol. 18, ottobre 2021, pp. 1169–1180, DOI:10.1038/s41592-021-01283-4, PMID 34608321.