Equazioni differenziali: l'intuizione
Quasi nessuna legge che descrive il mondo dice “lo stato del sistema è X”. Dice come lo stato cambia: quanto velocemente cresce una popolazione, quanto in fretta si raffredda un caffè, come accelera un corpo sotto una forza. Una equazione differenziale ordinaria — una ODE — è il linguaggio matematico di questo modo di descrivere: una regola locale sul cambiamento istante per istante, da cui la traiettoria intera emerge per integrazione. Questo capitolo costruisce l’idea da zero — campo di direzioni, problema ai valori iniziali, crescita esponenziale, oscillatore, ritratti di fase, metodi numerici — e poi segue il filo fino al machine learning recente: i Neural ODE, la discesa del gradiente come gradient flow, i diffusion model nella loro forma SDE/probability-flow ODE. Il filo che tiene insieme tutto è una distinzione: quando un legame è analogia che ispira, e quando è equivalenza dimostrata.
Perché questo capitolo
Sezione intitolata “Perché questo capitolo”C’è un capovolgimento che attraversa tre secoli di scienza e che vale la pena vedere con chiarezza. Quando un fisico vuole descrivere il moto di un pianeta, non scrive la funzione che dà la posizione del pianeta a ogni istante futuro. Quella funzione, di solito, non sa scriverla. Scrive invece una regola molto più modesta: in ogni istante, l’accelerazione del pianeta è proporzionale alla forza che agisce su di esso.
È una regola locale — parla solo di cosa succede adesso, in questo punto — e da sola sembra non dire granché. Eppure, integrata nel tempo, quella regola genera l’intera orbita ellittica. Non hai più bisogno di indovinare la traiettoria: la regola del cambiamento, ripetuta, la costruisce.
Una equazione differenziale è esattamente questo: una equazione che non descrive lo stato di un sistema, ma il suo tasso di cambiamento. È un modo di pensare che, una volta visto, si riconosce ovunque.
Il decadimento radioattivo, il raffreddamento di un oggetto, la diffusione di un’epidemia, l’oscillazione di una molla, la crescita di un interesse composto: in ogni caso è più facile dire “ecco come la quantità cambia da un istante al successivo” che dire “ecco la formula della quantità in funzione del tempo”. L’equazione differenziale prende la prima e ne ricava, quando può, la seconda.
La ragione per cui un capitolo del genere appartiene a una wiki sull’intelligenza artificiale non è la fisica. È che almeno tre famiglie di idee centrali del deep learning recente sono equazioni differenziali travestite.
I Neural ODE reinterpretano le reti profonde come la versione discretizzata di una dinamica continua. La discesa del gradiente — il motore con cui ogni modello viene addestrato — è la versione a passi finiti di una equazione differenziale chiamata gradient flow. I diffusion model, i sistemi che generano immagini partendo dal rumore, sono stati unificati attorno a equazioni differenziali stocastiche e alle loro controparti deterministiche.
Chi conosce le ODE vede queste connessioni e le legge correttamente; chi non le conosce le prende come formule calate dall’alto, o peggio crede che siano identità là dove sono solo analogie utili. Distinguere il livello di ciascun legame — quando è metafora, quando è discretizzazione esatta, quando è teorema — è il filo che il capitolo tiene teso dalla prima all’ultima sezione.
Il capitolo non chiede di saper risolvere equazioni differenziali. Chiede di capire l’idea: cosa significa descrivere un sistema tramite il suo cambiamento, come si visualizza una dinamica senza risolverla, e dove tutto questo riappare nel machine learning. È matematica avanzata, ed è dichiaratamente opzionale — ma è anche uno dei ponti più diretti fra la matematica classica e i modelli del 2020.
Contesto
Sezione intitolata “Contesto”Questo è l’undicesimo capitolo della Parte VI, e poggia su diversi precedenti. Da Analisi matematica: limiti, continuità, derivate arriva l’idea di derivata come pendenza istantanea: una equazione differenziale è, letteralmente, una equazione che ha dentro una derivata. Da Derivate parziali, gradienti, Jacobiani arriva il gradiente, che ricomparirà nel gradient flow, e la matrice Jacobiana, che servirà per leggere la stabilità degli equilibri. Da Ottimizzare funzioni di funzioni arriva l’idea che l’equazione di Eulero-Lagrange — la condizione di stazionarietà di un problema variazionale — è essa stessa una equazione differenziale.
Le ODE non sono una materia separata: sono l’analisi della Parte VI applicata al problema di descrivere come le cose evolvono nel tempo.
Storicamente, le equazioni differenziali nascono insieme al calcolo infinitesimale. Isaac Newton (matematico e fisico inglese, 1643-1727) e Gottfried Wilhelm Leibniz (filosofo e matematico tedesco, 1646-1716) inventano il calcolo negli anni 1660-1680 proprio per trattare il moto, e il moto è governato da equazioni differenziali: la seconda legge di Newton, , è una equazione differenziale del secondo ordine mascherata, perché l’accelerazione è la derivata seconda della posizione.
Per tutto il Settecento la famiglia Bernoulli, Leonhard Euler (matematico svizzero, 1707-1783) e Joseph-Louis Lagrange (matematico italo-francese, 1736-1813) sviluppano i metodi di soluzione. Euler, in particolare, lascia il suo nome al primo metodo numerico per risolvere una ODE quando una formula chiusa non esiste — un metodo che, vedremo, è esattamente la struttura di una rete residua.
Nel grafo della wiki questo capitolo guarda in due direzioni. A monte sta l’analisi della Parte VI. A valle stanno la teoria dei sistemi (Parte IX), dove lo stato e la sua evoluzione sono il tema centrale, la control theory (Parte XI), che agisce sulle ODE per governarle, e — soprattutto, per i nostri scopi — il machine learning generativo, dove i Neural ODE e i diffusion model riusano lo stesso linguaggio. È un capitolo-ponte: la matematica è del Settecento, alcune delle applicazioni sono del 2018-2021.
L’ordine del capitolo segue la costruzione del concetto. Prima cos’è una ODE e cosa significa “descrivere il cambiamento”. Poi due angoli di intuizione visiva. Poi il problema ai valori iniziali e la questione dell’esistenza. Poi i casi fondamentali — crescita esponenziale, oscillatore, sistemi e ritratti di fase. Poi i metodi numerici. Poi un cenno alle PDE, giusto per delimitare il campo. Infine il ponte verso il machine learning, e una sezione lunga su dove l’intuizione si rompe e quali confusioni invita a fare.
L’intuizione, primo angolo: il campo di direzioni
Sezione intitolata “L’intuizione, primo angolo: il campo di direzioni”Cominciamo dalla forma più semplice di equazione differenziale ordinaria, quella del primo ordine:
Leggiamola in parole. A sinistra, è la derivata della funzione incognita rispetto al tempo : il suo tasso di variazione, quanto velocemente sta cambiando in questo istante. A destra, è una funzione nota — la regola — che prende il tempo corrente e lo stato corrente e restituisce un numero. L’equazione dice quindi: il tasso di variazione dello stato, in ogni istante, è dato da questa regola applicata al tempo e allo stato attuali. La funzione incognita è ; “ordinaria” significa che dipende da una sola variabile, il tempo.
Ora la domanda: come si visualizza una cosa del genere senza risolverla? Ecco il primo angolo di intuizione, ed è geometrico.
Disegna un piano con il tempo sull’asse orizzontale e lo stato su quello verticale. Prendi un punto qualsiasi di questo piano. La regola , applicata a quel punto, restituisce un numero. Quel numero è una pendenza: dice con che inclinazione una soluzione dovrebbe passare, se passasse proprio di lì. Allora disegna in quel punto un piccolo trattino con quella pendenza. Ripeti su tutta una griglia di punti. Ottieni un campo di direzioni — in inglese slope field o direction field — un tappeto di trattini che mostra, punto per punto, “dove tira” la dinamica.
A questo punto risolvere l’equazione diventa un gesto visivo. Una soluzione dell’ODE è una curva che, in ogni suo punto, è tangente al trattino disegnato lì. Cioè: posa la matita su un punto di partenza e muoviti sempre nella direzione che il trattino sotto la punta ti indica. La curva che tracci è una soluzione. Cambia il punto di partenza e ottieni un’altra soluzione. Il campo di direzioni non è una soluzione: è il paesaggio di tutte le soluzioni insieme.
Il valore di questo angolo è che ti fa capire il comportamento qualitativo della dinamica prima di scrivere una sola formula. Guardi il campo e vedi se i trattini convergono verso un livello (le soluzioni si stabilizzano), se divergono (le soluzioni esplodono), se girano (le soluzioni oscillano). Per moltissime ODE una formula chiusa non esiste affatto, e il campo di direzioni è uno dei pochi modi per dire qualcosa di vero sul sistema.
Vale la pena rendere l’idea ancora più concreta. Immagina che descriva la temperatura di una stanza, con il tempo e i gradi. La regola potrebbe dire: “se la stanza è più calda di 20 gradi raffreddati, se è più fredda riscaldati, e tanto più in fretta quanto più sei lontano dai 20”.
Disegnato come campo di direzioni, questo dà trattini che puntano tutti, da sopra e da sotto, verso la linea orizzontale : i trattini sopra scendono, quelli sotto salgono, e più ti allontani dalla linea più sono ripidi. Qualsiasi soluzione, da qualsiasi temperatura iniziale parta, finisce per appiattirsi su quella linea. Hai appena letto il destino del sistema — converge a 20 gradi — senza risolvere niente. Questo è il potere del primo angolo: trasforma una equazione in un paesaggio leggibile a occhio.
L’intuizione, secondo angolo: la pallina trascinata
Sezione intitolata “L’intuizione, secondo angolo: la pallina trascinata”Il primo angolo era una mappa statica. Il secondo è dinamico, e sarà quello che ci porterà dritti al machine learning.
Pensa allo stato del sistema come alla posizione di una pallina. L’equazione — qui prendiamo il caso in cui non dipende esplicitamente dal tempo, il caso autonomo — è il motore che muove la pallina: in ogni posizione , la regola dice con che velocità, e in che verso, la pallina si sposta.
La pallina non decide nulla. È trascinata: si trova in , la regola le impone una velocità, lei si muove, arriva in un punto nuovo, la regola le impone una nuova velocità, e così via. La traiettoria è il risultato di questo trascinamento continuo.
Questa immagine fa emergere un concetto subito. Cosa succede dove ? La velocità imposta è nulla: la pallina è ferma. Quel punto si chiama punto di equilibrio (o punto fisso, o stato stazionario). Se la pallina ci arriva, ci resta.
Ma non tutti gli equilibri si comportano allo stesso modo. Immagina di spostare leggermente la pallina da un equilibrio. Due scenari. Se la dinamica la riporta indietro verso l’equilibrio, quell’equilibrio è stabile: è come il fondo di una valle, una pallina spostata di poco ci ricasca dentro. Se invece la dinamica la allontana sempre di più, l’equilibrio è instabile: è come la cresta di una collina, basta un soffio e la pallina rotola via. Lo stesso sistema può avere equilibri stabili e instabili insieme.
Questo secondo angolo è il ponte. La discesa del gradiente, il motore con cui si addestra ogni rete neurale, è precisamente una pallina trascinata: si muove nella direzione che fa scendere la loss, e si ferma — almeno in teoria — in un equilibrio stabile, un minimo. Vedremo più avanti che questa non è solo una somiglianza poetica: la discesa del gradiente è, letteralmente, la versione a passi finiti di una particolare equazione differenziale. Ma per ora teniamo i due angoli: il campo di direzioni come mappa, la pallina trascinata come moto.
L’intuizione, terzo angolo: la regola iterata
Sezione intitolata “L’intuizione, terzo angolo: la regola iterata”C’è un terzo modo di guardare una ODE, e per un programmatore è il più naturale dei tre. Una equazione differenziale è una regola di aggiornamento applicata infinite volte, a passi infinitamente piccoli.
Pensa a un ciclo. Hai uno stato corrente. A ogni iterazione lo aggiorni di un pochino, secondo una regola che dipende dallo stato stesso. Se i passi sono finiti, hai un programma ordinario: stato = stato + passo * regola(stato), ripetuto. Se mandi l’ampiezza del passo a zero — passi sempre più piccoli, sempre più numerosi — quel ciclo, al limite, è una equazione differenziale. La ODE è il limite continuo di un loop di aggiornamento.
Questo angolo non è una curiosità: è esattamente il ponte verso il machine learning, e merita di essere tenuto a mente per tutto il resto del capitolo. Una rete residua è un loop di aggiornamento a passi finiti. La discesa del gradiente è un loop di aggiornamento a passi finiti. Entrambi, mandando il passo a zero, diventano una ODE.
E al contrario: quando una ODE non ha soluzione in forma chiusa, la si risolve facendo esattamente questo loop con passi finiti — è il metodo di Eulero, che incontreremo tra poco. Continuo e discreto sono le due facce della stessa idea: la regola continua è il limite del loop, il loop è la discretizzazione della regola continua. Tieni stretto questo, perché è la chiave di lettura di tutta la seconda metà del capitolo.
Il problema ai valori iniziali
Sezione intitolata “Il problema ai valori iniziali”C’è un dettaglio che entrambi gli angoli hanno reso evidente, e va reso esplicito. Una equazione differenziale, da sola, non identifica una soluzione unica. Il campo di direzioni ha infinite curve che lo seguono, una per ogni punto di partenza. La pallina ha infinite traiettorie possibili, una per ogni posizione da cui la lasci andare.
Per isolare una traiettoria sola serve un punto di partenza: una condizione iniziale. Si scrive e si legge “all’istante , lo stato vale ”. Una equazione differenziale più una condizione iniziale forma un problema ai valori iniziali — in inglese initial value problem, abbreviato IVP. È l’IVP, non l’ODE da sola, che descrive un sistema concreto: la regola dice come il sistema evolve, la condizione iniziale dice da dove parte.
Vale la pena notare che esiste anche un altro modo di vincolare la soluzione, diverso dal dare il punto di partenza: fissare lo stato a due istanti, all’inizio e alla fine. Si chiama problema ai valori al contorno (boundary value problem), ed è la forma in cui si pone, per esempio, la brachistocrona del capitolo sul calcolo delle variazioni — la curva è vincolata a partire da e ad arrivare a . I problemi ai valori al contorno sono in generale più delicati di quelli ai valori iniziali: possono non avere soluzione, o averne più di una. In questo capitolo restiamo sugli IVP, ma è utile sapere che il problema “data la regola, trova la traiettoria” si pone in più di un modo.
Sorge subito una domanda di buon senso: dato un IVP, esiste sempre una soluzione? Ed è unica? La risposta, a livello intuitivo, è data dal teorema di esistenza e unicità — noto anche come teorema di Picard-Lindelof, dai matematici Émile Picard (francese, 1856-1941) e Ernst Lindelöf (finlandese, 1870-1946).
L’enunciato, ridotto all’intuizione: se la regola è abbastanza regolare — continua, e che non cambi in modo troppo brusco al variare dello stato — allora dall’istante iniziale parte una e una sola soluzione, almeno per un intervallo di tempo attorno a .
L’intuizione geometrica è pulita. Se il campo di direzioni non ha salti né pendenze infinite, allora da ogni punto parte un solo trattino ben definito, e seguendolo si traccia una sola curva. Di più: due soluzioni distinte non possono mai incrociarsi. Se si toccassero in un punto, da quel punto partirebbero due curve diverse — e questo contraddice l’unicità. Le traiettorie di un IVP ben posto non si intersecano mai, come fili che non possono annodarsi.
Due avvertenze chiudono il discorso, e torneranno utili. La prima: l’unicità può fallire se non è regolare. L’equazione con ammette sia la soluzione (la pallina resta ferma) sia la soluzione (la pallina parte) — perché la radice quadrata, vicino a zero, cambia troppo bruscamente.
La seconda: l’esistenza è quasi sempre un fatto locale. L’equazione con ha come soluzione , che esiste benissimo per ma esplode all’infinito quando raggiunge . Si dice che la soluzione ha un blow-up in tempo finito. “Esiste una soluzione” è un enunciato che vale per un tratto, non necessariamente per sempre.
Perché tutto questo conta per chi scrive codice? Perché i metodi numerici che incontreremo tra poco assumono implicitamente che una soluzione esista e sia unica. Un solver di ODE è un loop che, a ogni passo, valuta la regola e avanza.
Se la regola non è regolare — se ha salti, discontinuità, pendenze infinite — il solver produce comunque dei numeri, ma quei numeri non approssimano niente: non c’è una traiettoria ben definita da approssimare. Allo stesso modo, se la soluzione vera esplode in tempo finito, il solver mostra numeri che crescono fino a inf senza che ci sia un bug nel codice. Il teorema di esistenza e unicità non è formalismo astratto: è la garanzia che il loop che stai eseguendo sta calcolando qualcosa di sensato.
La meccanica: crescita esponenziale e decadimento
Sezione intitolata “La meccanica: crescita esponenziale e decadimento”Passiamo dalle intuizioni ai casi concreti. Il più importante di tutti è anche il più semplice: l’ODE lineare del primo ordine.
In parole: il tasso di variazione dello stato è proporzionale allo stato stesso, con costante di proporzionalità . Più ce n’è, più velocemente cambia. Questa equazione descrive ogni processo in cui “quanto cresce” dipende da “quanto c’è già”: l’interesse composto (più capitale, più interesse), una popolazione senza limiti di risorse (più individui, più nascite), una reazione a catena.
La soluzione di questa equazione è:
dove è la condizione iniziale, il valore all’istante , ed è il numero di Eulero, la base dell’esponenziale naturale. Verifichiamola in prosa: la derivata di è , quindi la derivata di è volte — esattamente ciò che l’equazione chiede.
Il segno di decide il destino del sistema. Se , l’esponente cresce, e abbiamo crescita esponenziale: lo stato raddoppia, poi raddoppia ancora, in tempi sempre uguali. Se , l’esponente diventa sempre più negativo, e abbiamo decadimento esponenziale: lo stato si dimezza a intervalli regolari, tendendo a zero senza mai raggiungerlo. È la matematica del decadimento radioattivo, del raffreddamento di un caffè verso la temperatura ambiente, della scarica di un condensatore.
Vale la pena fermarsi su un fatto. L’esponenziale non è una funzione scelta tra tante. È l’unica funzione che è proporzionale alla propria derivata. Per questo è la firma matematica universale di ogni dinamica in cui il tasso di cambiamento è proporzionale allo stato: ovunque vedi una crescita o un decadimento esponenziale, sotto c’è una ODE della forma .
La versione lineare più generale, , aggiunge un termine che non dipende dallo stato — una forzante esterna — e ammette una costante variabile nel tempo. Si risolve con una tecnica chiamata fattore integrante, che qui non serve dettagliare.
Il punto da portare via è un altro: le ODE lineari godono del principio di sovrapposizione. La somma di due soluzioni è ancora una soluzione. È questa proprietà a rendere le ODE lineari completamente trattabili in forma chiusa — un lusso che, lo vedremo, scompare appena la regola diventa non lineare.
Un esempio numerico chiude la sezione, perché l’esponenziale è facile da maneggiare ma altrettanto facile da fraintendere. Prendi con — un caffè che parte a 100 unità sopra la temperatura ambiente e si raffredda. La soluzione è . A vale ; a vale ; a vale .
Nota il pattern: ogni due unità di tempo lo scarto si moltiplica per lo stesso fattore . Il decadimento esponenziale non sottrae una quantità fissa a ogni passo — ne sottrae una frazione fissa. Per questo il caffè non raggiunge mai esattamente la temperatura ambiente in tempo finito: si avvicina dimezzando lo scarto, all’infinito. Chi si aspetta che “prima o poi arrivi” sta proiettando un’intuizione lineare su una dinamica che lineare non è.
La meccanica: l’oscillatore armonico
Sezione intitolata “La meccanica: l’oscillatore armonico”Saliamo di un grado. L’oscillatore armonico è l’ODE del secondo ordine archetipica, e descrive ogni sistema con una forza di richiamo: una massa attaccata a una molla, un pendolo a piccole oscillazioni, un circuito elettrico LC.
A sinistra, è la derivata seconda della posizione — cioè l’accelerazione — moltiplicata per la massa . A destra, è la forza di richiamo: proporzionale allo spostamento e di segno opposto, perché tira sempre verso il centro. Più ti allontani, più forte vieni richiamato indietro. La costante misura la rigidità della molla.
La soluzione è una funzione oscillante:
dove è l’ampiezza (quanto larga è l’oscillazione), è la fase (dove l’oscillazione si trova all’istante zero), e è la frequenza angolare, che dipende solo dalla rigidità e dalla massa. La pallina oscilla avanti e indietro per sempre, con la stessa ampiezza, perché in questo modello idealizzato non c’è attrito a dissipare energia.
Qui entra un trucco che è la chiave di volta di tutto il trattamento numerico delle ODE. Una equazione del secondo ordine sembra un oggetto diverso da una del primo ordine. In realtà non lo è: ogni ODE di ordine si riscrive come un sistema di ODE del primo ordine, introducendo variabili ausiliarie. Per l’oscillatore, introduciamo la velocità . Allora l’equazione del secondo ordine diventa una coppia di equazioni del primo:
La prima dice la definizione di velocità; la seconda è la legge di Newton riscritta. Da una equazione del secondo ordine a un sistema di due del primo. Questo non è un dettaglio tecnico: è il motivo per cui un solver numerico può trattare qualsiasi ODE con un unico schema. I solver lavorano sempre e solo su sistemi del primo ordine. Tutto il resto si riconduce a quello.
La meccanica: sistemi di ODE e ritratti di fase
Sezione intitolata “La meccanica: sistemi di ODE e ritratti di fase”Una volta che lo stato ha più di una componente — posizione e velocità, due popolazioni che interagiscono, le concentrazioni di tre sostanze in una reazione — l’ODE diventa vettoriale:
dove è un vettore di stato e è una regola che a ogni vettore di stato associa un vettore di velocità. Il campo di direzioni del caso scalare diventa un campo vettoriale: in ogni punto dello spazio degli stati, una freccia che indica dove e quanto velocemente il sistema si muove.
Le traiettorie disegnate in questo spazio si chiamano ritratti di fase — in inglese phase portraits. Sono una delle immagini più potenti di tutta la teoria. Il ritratto di fase di un sistema mostra, in un colpo d’occhio, tutte le sue evoluzioni possibili: traiettorie che spiraleggiano verso un punto, orbite chiuse, traiettorie che divergono.
Gli equilibri di un sistema sono i punti dove : nessuna freccia, nessun movimento. La loro stabilità si legge con uno strumento che arriva direttamente dalla Parte IV. Vicino a un equilibrio, si approssima la regola con la sua parte lineare — la matrice Jacobiana, la matrice di tutte le derivate parziali di — e si guardano i suoi autovalori, i numeri che dicono come la trasformazione lineare stira o comprime lungo le sue direzioni proprie.
La lettura è la seguente. Se tutti gli autovalori hanno parte reale negativa, vicino all’equilibrio ogni perturbazione si spegne: l’equilibrio è stabile, un sink, un attrattore — le traiettorie ci cadono dentro. Se almeno un autovalore ha parte reale positiva, qualche perturbazione cresce: l’equilibrio è instabile, un source.
Se ci sono autovalori reali di segno opposto, l’equilibrio è un punto di sella: attrae lungo certe direzioni e respinge lungo altre. E se gli autovalori sono puramente immaginari, le traiettorie non convergono né divergono: girano in orbite chiuse — è il caso dell’oscillatore armonico, dove il ritratto di fase è una famiglia di ellissi concentriche, e ogni ellisse è un’oscillazione di ampiezza diversa.
Perché un autovalore con parte reale negativa significhi stabilità si capisce tornando alla crescita esponenziale. Vicino a un equilibrio, una perturbazione evolve approssimativamente come , dove è un autovalore della Jacobiana. È la stessa di prima, con al posto di .
Se la parte reale di è negativa, l’esponenziale si spegne e la perturbazione muore: stabilità. Se è positiva, l’esponenziale cresce e la perturbazione esplode: instabilità. Se è puramente immaginario, è un’oscillazione di ampiezza costante: orbite chiuse. La classificazione degli equilibri non è un elenco di casi da memorizzare — è la crescita esponenziale, letta nello spazio degli autovettori della Jacobiana. Questo è il motivo per cui autovalori e autovettori e equazioni differenziali sono, in fondo, lo stesso capitolo visto da due lati.
Un esempio classico di sistema non lineare chiude la sezione. Il modello preda-predatore di Lotka-Volterra:
dove è il numero di prede e il numero di predatori. Le prede crescono da sole (termine ) ma vengono mangiate (termine , proporzionale agli incontri tra le due specie); i predatori muoiono da soli (termine ) ma prosperano mangiando (termine ). Il ritratto di fase di questo sistema è fatto di orbite chiuse: prede e predatori oscillano in un ciclo perpetuo, sfasati tra loro. Nessuna formula chiusa elementare descrive e separatamente — eppure il ritratto di fase racconta tutta la storia.
La meccanica: i metodi numerici
Sezione intitolata “La meccanica: i metodi numerici”Arriviamo al punto pratico. La grande maggioranza delle equazioni differenziali non ha soluzione in forma chiusa. Lotka-Volterra non ce l’ha. Il problema dei tre corpi non ce l’ha. Quasi ogni ODE non lineare di interesse reale non ce l’ha. Quando non c’è formula, si risolve l’ODE numericamente: si discretizza il tempo in passi di ampiezza e si avanza lo stato un passo alla volta.
Il metodo più semplice si chiama metodo di Eulero esplicito — forward Euler — e la sua formula è una sola riga:
Leggiamola riga per riga. è lo stato all’istante corrente. è la regola dell’ODE valutata lì: la velocità in quel punto. è l’ampiezza del passo temporale. Quindi è “di quanto ti sposti”, e è lo stato dopo un passo. In una frase: il metodo di Eulero guarda la freccia del campo di direzioni nel punto in cui ti trovi, e ci cammina sopra per un tratto . È il modo più letterale di “seguire lo slope field a passi finiti”.
Eulero ha un difetto, e va capito perché. La freccia indica la direzione all’inizio del passo, ma la traiettoria vera curva durante il passo. Camminando dritto, ti scosti un po’ dalla curva.
Quanto? Il metodo di Eulero è un metodo del primo ordine: l’errore commesso in un singolo passo è proporzionale a , e l’errore accumulato fino a un dato istante è proporzionale a . Tradotto: se dimezzi il passo, dimezzi l’errore finale — ma raddoppi il numero di passi e quindi il costo di calcolo. E con passi troppo grandi Eulero non è solo impreciso: può diventare instabile numericamente, far divergere la simulazione anche quando l’ODE vera descrive un sistema perfettamente stabile.
Una via intermedia, prima di salire troppo, è il metodo di Eulero migliorato — noto anche come metodo di Heun. L’idea cattura bene lo spirito di tutto il resto. Eulero esplicito usa la pendenza a inizio passo e basta; Heun fa un passo di prova con quella pendenza, guarda la pendenza nel punto di arrivo provvisorio, e poi compie il passo vero usando la media delle due pendenze.
È come chiedere indicazioni a inizio strada e di nuovo a fine strada, e poi mediare le due. Con una valutazione in più di per passo, l’errore globale passa da proporzionale a a proporzionale a : il metodo sale di un ordine. È la stessa logica che, spinta a quattro valutazioni, dà RK4.
Il rimedio standard porta questa idea alla maturità: è la famiglia dei metodi di Runge-Kutta, dai matematici tedeschi Carl Runge (1856-1927) e Wilhelm Kutta (1867-1944). L’idea generale: invece di una sola valutazione della regola a inizio passo, farne più di una in punti intermedi e combinarle in una media pesata che cattura anche la curvatura della traiettoria, non solo la pendenza iniziale.
Il metodo più usato è RK4, di ordine quattro: fa quattro valutazioni di per passo — una a inizio passo, due nel mezzo, una alla fine — e le combina con pesi scelti in modo da cancellare i termini di errore fino al quarto ordine. Il suo errore locale è proporzionale a e quello globale a . RK4 è il cavallo di battaglia dei solver general-purpose.
Un esempio numerico rende concreto il guadagno. Riprendi l’IVP , , soluzione esatta , e integra fino a . Con Eulero esplicito e dieci passi da si ottiene circa contro il valore esatto : un errore di circa il 5 percento. Con RK4 e gli stessi dieci passi si ottiene — un errore dell’ordine di una parte su centomila.
Quattro valutazioni di per passo invece di una, cioè quattro volte il costo, in cambio di un errore migliaia di volte più piccolo. È il motivo per cui quasi nessuno usa Eulero esplicito per lavoro serio: non è che sia sbagliato, è che paga pochissimo per quanto è impreciso. Eulero resta prezioso per capire — la sua formula in una riga è la cosa più vicina a “vedere” cosa fa un solver — ma in produzione lascia il posto a RK4 e ai metodi adattivi.
Un raffinamento ulteriore sono i solver adattivi, come Dormand-Prince (il metodo dietro il classico RK45). Questi stimano l’errore a ogni passo e regolano di conseguenza: passo piccolo dove la dinamica è ripida e cambia in fretta, passo grande dove è dolce. È, in nuce, lo stesso trade-off costo/precisione che ritroveremo nei Neural ODE: profondità computazionale che si adatta a quanto è difficile il pezzo di dinamica che si sta attraversando.
Un cenno alle PDE, per delimitare il campo
Sezione intitolata “Un cenno alle PDE, per delimitare il campo”Tutto questo capitolo parla di ODE: equazioni con una sola variabile indipendente, il tempo. C’è una famiglia più ampia e più difficile, le PDE — partial differential equations, equazioni alle derivate parziali — che vanno nominate solo per distinguerle.
Una PDE ha più variabili indipendenti, e quindi derivate parziali. L’esempio canonico è l’equazione del calore: descrive come la temperatura di una barra di metallo varia sia nel tempo sia nello spazio. Lo stato non è un numero che evolve, ma un intero campo — una temperatura per ogni punto e per ogni istante. L’equazione delle onde, le equazioni di Navier-Stokes per i fluidi, l’equazione di Schrödinger della meccanica quantistica sono tutte PDE.
Le PDE sono di norma molto più difficili delle ODE. Non c’è un teorema di esistenza e unicità altrettanto pulito e generale; i metodi numerici (differenze finite, elementi finiti) sono più pesanti; intere PDE celebri sono ancora problemi aperti. Per i nostri scopi basta tenere la distinzione: le ODE descrivono dinamiche puntuali nel tempo, le PDE descrivono campi distesi nello spazio-tempo. Tutto ciò che segue, e tutto ciò che precede, resta dentro le ODE.
I tre esempi che seguono sono volutamente eterogenei: uno numerico tracciato a mano, uno in codice, uno scenario applicativo. Mostrano la stessa idea — la regola locale che genera la traiettoria — da angoli diversi.
Esempio numerico: un passo di Eulero a mano. Prendi l’IVP più semplice immaginabile, con . La soluzione esatta è . Proviamo ad approssimarla con Eulero esplicito e passo , e confrontiamo. Passo uno: . Passo due: . Passo tre: .
Dopo tre passi siamo a , e Eulero dice . Il valore esatto è . L’errore è circa il 25 percento, e tutto nello stesso verso: Eulero sottostima sistematicamente, perché a ogni passo usa la pendenza di inizio intervallo, che per una funzione che accelera è sempre troppo piccola. Dimezzando il passo a l’errore si dimezza — è la firma del metodo del primo ordine.
Esempio in codice: simulare l’oscillatore. Lo stesso schema, applicato al sistema dell’oscillatore armonico, in pseudocodice leggibile:
def simula_oscillatore(x0, v0, k, m, h, n_passi): x, v = x0, v0 traiettoria = [(x, v)] for _ in range(n_passi): # f del sistema: dx/dt = v, dv/dt = -(k/m) x dx = v dv = -(k / m) * x # passo di Eulero esplicito su entrambe le componenti x = x + h * dx v = v + h * dv traiettoria.append((x, v)) return traiettoriaDieci righe, e simula una molla. Ma nascondono la trappola della sezione “Dove si rompe”: se lanci questo codice con passo grande, la traiettoria nel piano non disegna un’ellisse chiusa — disegna una spirale che si allarga. L’ampiezza cresce a ogni ciclo, l’energia aumenta dal nulla. Non è un bug del codice: è Eulero esplicito che, su un sistema oscillante, è numericamente instabile. Sostituire le due righe del passo con RK4, o usare un integratore pensato per i sistemi conservativi, risolve.
Esempio applicativo: il modello SIR di un’epidemia. Un sistema di tre ODE accoppiate descrive la diffusione di un contagio in una popolazione divisa in suscettibili , infetti , guariti : , , . Il parametro misura quanto è contagiosa la malattia, quanto in fretta si guarisce.
Nessuna di queste tre funzioni ha una formula chiusa — il modello SIR si studia quasi sempre numericamente, integrando il sistema con RK4. Eppure dal sistema si legge un fatto qualitativo senza risolverlo: l’epidemia cresce solo se all’inizio , cioè se ogni infetto ne contagia in media più di uno prima di guarire. È la soglia , e si ricava guardando il segno di all’istante iniziale — esattamente lo spirito del campo di direzioni: capire il comportamento prima di calcolare la traiettoria.
Applicazioni pratiche
Sezione intitolata “Applicazioni pratiche”Fuori dalla matematica pura, le equazioni differenziali compaiono nel lavoro di chi costruisce sistemi AI in modi concreti.
Il primo è la modellazione di serie temporali irregolari. Le reti ricorrenti classiche assumono dati campionati a intervalli regolari. Molti dati reali — cartelle cliniche, transazioni finanziarie, log di sensori — arrivano a istanti sparsi e irregolari. I latent ODE, una delle applicazioni dirette dei Neural ODE, modellano la dinamica latente in tempo continuo: la si può valutare a qualsiasi istante, anche dove non ci sono osservazioni, perché la dinamica è definita da una ODE e non da una sequenza di passi discreti.
Il secondo è la generazione. I continuous normalizing flow stimano la verosimiglianza esatta dei dati senza i vincoli architetturali dei flow discreti. E i diffusion model in produzione sono, nella loro parte di sampling, integratori numerici: ogni sampler “a pochi passi” — DDIM, DPM-Solver e i loro successori — è un metodo numerico per la probability-flow ODE.
Scegliere il sampler e il numero di passi è, letteralmente, scegliere il punto sul trade-off costo/qualità di un solver di ODE. Sapere che dietro c’è un’equazione differenziale spiega perché aumentare i passi migliora la qualità con rendimenti decrescenti, e perché certi sampler convergono più in fretta di altri.
Il terzo è l’analisi dell’addestramento. Leggere la discesa del gradiente come discretizzazione del gradient flow non è solo eleganza teorica: dà strumenti per capire fenomeni concreti come l’implicit regularization (perché SGD tende a soluzioni con certe proprietà), la sensibilità al learning rate, il comportamento della loss vicino a un minimo. Quando un training diverge o oscilla, l’intuizione “questo è un solver di ODE con un passo troppo grande” è spesso quella giusta.
Il quarto è il controllo e la robotica. Simulare la dinamica di un sistema fisico — un braccio robotico, un drone, un veicolo — per pianificare un’azione, fare model predictive control, o addestrare in simulazione prima di passare al reale (sim-to-real), significa risolvere ODE con metodi numerici. La control theory, a cui una Parte intera della wiki è dedicata, agisce proprio sulle equazioni differenziali che descrivono il sistema da governare.
C’è infine un quinto uso, più trasversale: le ODE sono un modo di pensare che si presta a leggere qualsiasi sistema che evolve nel tempo. Un agente che esegue un loop percezione-azione, una pipeline che processa eventi, un sistema di rate limiting che si riempie e si svuota — non sono governati da equazioni differenziali in senso stretto, ma il vocabolario delle ODE (stato, tasso di cambiamento, equilibrio, stabilità, transitorio) dà un linguaggio per ragionarci. Quando un sistema oscilla, diverge, o si stabilizza, le categorie che questo capitolo costruisce sono quelle giuste per descrivere cosa sta succedendo, anche dove non si scrive nessuna equazione.
Il ponte verso il machine learning
Sezione intitolata “Il ponte verso il machine learning”Qui il capitolo cambia registro. Le sezioni precedenti erano matematica classica; questa è il motivo per cui sta in una wiki di AI. Tre idee del deep learning recente sono equazioni differenziali — e su ciascuna va detto con precisione che tipo di legame stiamo asserendo, perché è esattamente qui che la divulgazione scivola.
Neural ODE: la profondità come tempo continuo
Sezione intitolata “Neural ODE: la profondità come tempo continuo”Partiamo da un’osservazione su un’architettura di rete neurale, la rete residua o ResNet (introdotta da Kaiming He e colleghi di Microsoft Research nel 2015, vedi ResNet: residual learning, reti profonde addestrabili). Un blocco residuo non calcola direttamente la sua uscita: calcola una correzione da sommare all’ingresso. In formula, se è lo stato dopo blocchi:
Lo stato nuovo è lo stato vecchio più una funzione — la parte “residua” — con i suoi parametri .
Adesso rimetti accanto la formula del metodo di Eulero esplicito: . È la stessa identica struttura, con il passo fissato a . Un blocco residuo è, riga per riga, un passo di Eulero. Una ResNet con molti blocchi impilati è la discretizzazione di Eulero di una equazione differenziale, in cui la profondità della rete gioca il ruolo del tempo e la parte residua gioca il ruolo del campo di velocità .
Qui torna utile il terzo angolo di intuizione, la regola iterata. Una rete profonda trasforma l’input in output applicando, layer dopo layer, una sequenza di trasformazioni. In una rete generica ogni layer riscrive completamente lo stato; in una ResNet, invece, ogni layer aggiunge una piccola correzione. Lo stato non viene rifatto, viene spostato un po’.
E “spostare lo stato di un po’, secondo una regola che dipende dallo stato” è precisamente un passo di un loop di aggiornamento — il loop che, a passi infinitamente piccoli, diventa una ODE. La profondità della rete è il numero di iterazioni del loop; mandarla all’infinito con correzioni infinitesime dà la dinamica continua.
Da questa osservazione nasce il paper Neural Ordinary Differential Equations (Ricky T. Q. Chen, Yulia Rubanova, Jesse Bettencourt, David Duvenaud, NeurIPS 2018), che porta l’idea alla sua conseguenza naturale. Se una ResNet è una discretizzazione grossolana di una ODE, perché non prendere il limite con infiniti layer infinitamente sottili? Invece di impilare blocchi discreti, si parametrizza direttamente il campo di velocità con una rete neurale:
e si calcola l’uscita della rete affidando questa ODE a un solver numerico off-the-shelf. La “profondità” della rete diventa continua: non più un numero intero di layer, ma un intervallo di tempo da integrare.
I vantaggi dichiarati nel paper: il costo di memoria dell’addestramento diventa costante, indipendente dalla profondità, grazie a una tecnica chiamata metodo dell’aggiunto (adjoint sensitivity method) che non memorizza le attivazioni intermedie; la precisione numerica è regolabile a runtime; il costo di calcolo si adatta all’input, perché un solver adattivo spende più passi sugli ingressi difficili.
Vale la pena spendere una riga sull’intuizione del metodo dell’aggiunto, perché è dove le equazioni differenziali rientrano una seconda volta. Per addestrare una rete servono i gradienti, e calcolarli richiede di sapere come ogni stato intermedio influenza la loss. Una rete ordinaria memorizza tutti gli stati intermedi per la backpropagation — costo di memoria proporzionale alla profondità. Il metodo dell’aggiunto evita questo: definisce una seconda ODE, che descrive come la sensibilità della loss evolve all’indietro nel tempo, e la integra a ritroso. I gradienti escono risolvendo un’altra equazione differenziale, non conservando una pila di attivazioni. La profondità continua si addestra risolvendo ODE in avanti e all’indietro.
Lo stesso paper costruisce poi i continuous normalizing flow, modelli generativi in cui la formula del cambio di variabile si semplifica perché la trasformazione è continua, permettendo l’addestramento per massima verosimiglianza senza i vincoli architetturali dei normalizing flow discreti.
Ora la nota sulla classe di affermazione, che è il cuore della sezione. Il legame ResNet-Eulero-ODE è, in parte, filiazione documentata: il paper Neural ODE cita esplicitamente le ResNet come motivazione, e la stessa idea — interpretare il deep learning come un problema di controllo ottimo in tempo continuo — è proposta indipendentemente da Weinan E (matematico, in un articolo del 2017). C’è quindi un lineage tracciabile: l’osservazione “una ResNet assomiglia a un Eulero” ha ispirato un’architettura nuova.
Ma attenzione a non scivolare nell’equivalenza. Una ResNet già addestrata non “è” un’ODE e non risolve un’ODE ben posta. I suoi campi di velocità cambiano da layer a layer in modo arbitrario — non c’è una singola funzione liscia che li unifica; lo step size è inchiodato a e non lo si può ridurre; e niente garantisce che, infittendo i layer, il limite continuo esista davvero.
L’analogia è strutturalmente precisa e storicamente feconda: ha generato i Neural ODE. Non rende ResNet e ODE lo stesso oggetto matematico. È un’analogia che ha ispirato un’architettura, non un’identità — ed è proprio la distinzione che la sezione finale del capitolo riprenderà come confusione tipica.
Gradient flow: la discesa del gradiente come ODE
Sezione intitolata “Gradient flow: la discesa del gradiente come ODE”Il secondo ponte riguarda l’addestramento stesso. La regola di aggiornamento della discesa del gradiente è:
dove sono i parametri del modello, è la loss, è il suo gradiente e è il learning rate. Mettila accanto, di nuovo, all’Eulero esplicito. È la discretizzazione della equazione differenziale:
Questa ODE ha un nome: gradient flow. In parole, è la pallina del nostro secondo angolo di intuizione: in tempo continuo, i parametri scivolano lungo la superficie della loss, sempre nella direzione di massima discesa, verso un minimo che è un equilibrio stabile della dinamica.
Il learning rate gioca esattamente il ruolo del passo : la discesa del gradiente è la versione a passi finiti del gradient flow. Per inciso, anche una variante dell’addestramento — la proximal gradient — ha la sua controparte continua: corrisponde all’Eulero implicito della stessa ODE.
Questo legame chiarisce un fenomeno che ogni praticante ha incontrato. Perché un learning rate troppo grande fa divergere il training? Risposta dal nostro capitolo: il gradient flow continuo, su una loss con minimi, è una dinamica stabile — la pallina scende e si ferma. Ma la discesa del gradiente non è il gradient flow: è la sua discretizzazione di Eulero, e l’Eulero esplicito, con passo troppo grande, è numericamente instabile anche su dinamiche stabili.
Il learning rate troppo grande non è quindi un problema di ottimizzazione esotico: è la stessa instabilità dell’Eulero che farebbe esplodere la simulazione di un oscillatore. La loss che diverge è una traiettoria di Eulero che salta oltre il minimo a ogni passo, allontanandosene sempre di più. Vista così, la regola pratica “se il training diverge, abbassa il learning rate” diventa “se il solver è instabile, riduci il passo” — esattamente ciò che si fa con un solver di ODE.
L’utilità di questo ponte è concreta. Studiare il gradient flow in tempo continuo è spesso più semplice e più pulito che studiare la discesa del gradiente discreta: si dimostrano tassi di convergenza eleganti, si capisce il comportamento vicino ai minimi, si illumina perché certi learning rate funzionano e altri no. Quei risultati continui danno intuizione sul caso discreto.
Ma il passaggio dal continuo al discreto ha un prezzo, e va detto. Le dimostrazioni sul caso discreto richiedono ipotesi aggiuntive — regolarità della loss, passo sufficientemente piccolo — che il caso continuo non chiede.
E c’è una sottigliezza più importante: la discesa del gradiente stocastica, SGD, quella che si usa davvero, non valuta il gradiente esatto ma una sua stima rumorosa su un minibatch. Quel rumore rende SGD più simile alla discretizzazione di una equazione differenziale stocastica — una ODE con dentro un termine di rumore casuale — che non del gradient flow deterministico. Anche qui: il legame è un’analogia rafforzata da una relazione di discretizzazione esatta, non un’equivalenza che tiene in ogni caso.
Diffusion model: SDE e probability-flow ODE
Sezione intitolata “Diffusion model: SDE e probability-flow ODE”Il terzo ponte è il più recente, e il legame è il più forte dei tre. I diffusion model sono i sistemi che generano immagini partendo dal rumore — il loro forward e reverse process è il tema dello slug diffusion (in preparazione). Il paper che li ha unificati è Score-Based Generative Modeling through Stochastic Differential Equations (Yang Song, Jascha Sohl-Dickstein, Diederik P. Kingma, Abhishek Kumar, Stefano Ermon, Ben Poole, ICLR 2021).
L’idea del paper: i diffusion model si descrivono tutti come equazioni differenziali stocastiche — SDE, cioè ODE con in più un termine di rumore casuale. Il processo forward — quello che aggiunge progressivamente rumore a un’immagine, fino a trasformarla in rumore puro — è una SDE. Il processo reverse — quello che genera un’immagine ricostruendola all’indietro a partire dal rumore — è un’altra SDE, che dipende dalla funzione score (il gradiente del logaritmo della densità dei dati, che la rete neurale impara a stimare).
I diffusion model discreti che esistevano prima — DDPM, SMLD — si riguardano allora come discretizzazioni di queste SDE in tempo continuo, esattamente come una ResNet è una discretizzazione di una ODE. La SDE è la versione continua; il modello discreto è il loop a passi finiti che la implementa.
Il risultato chiave, per noi, è questo: a ogni SDE corrisponde una probability-flow ODE, una equazione differenziale deterministica le cui distribuzioni marginali, a ogni istante , coincidono esattamente con quelle della SDE stocastica. In parole povere: si può generare campioni risolvendo una ODE deterministica invece di una SDE rumorosa, e la distribuzione dei risultati è la stessa.
Questo abilita due cose pratiche: il calcolo esatto della verosimiglianza, e un sampling più efficiente — meno passi di solver per generare un’immagine. I sampler veloci dei diffusion model moderni, da DDIM in poi, sono in larga parte integratori numerici della probability-flow ODE: scegliere il sampler e il numero di passi è, letteralmente, scegliere il trade-off costo/qualità di un metodo numerico per ODE.
La classe di affermazione, qui, è più forte. La corrispondenza tra una SDE e la sua probability-flow ODE non è un’analogia didattica: è una relazione matematica dimostrata nel paper. Resta, come ogni risultato del genere, un teorema con ipotesi — vale sotto condizioni di regolarità sulla SDE e sullo score — non un’identità universale valida in ogni caso. Ma è il legame più solido dei tre: nei diffusion model, l’equazione differenziale non è una metafora, è la formulazione.
I tre ponti, messi in fila, mostrano una gradazione che vale la pena tenere a mente. Il ponte ResNet-ODE è un’analogia che ha ispirato un’architettura: i Neural ODE sono ODE perché qualcuno li ha costruiti apposta, la ResNet che li ha suggeriti no. Il ponte gradient flow-discesa del gradiente è un’analogia con in più una relazione di discretizzazione esatta: la discesa del gradiente è l’Eulero del gradient flow, ma SGD con il suo rumore se ne discosta. Il ponte diffusion-SDE/ODE è il più forte: una relazione provata, un teorema.
Tre legami, tre classi diverse — analogia, discretizzazione esatta, teorema — e il valore del capitolo sta tanto nel mostrare le connessioni quanto nel non confonderle tra loro. Quando un articolo divulgativo dice “le reti neurali sono equazioni differenziali”, sta comprimendo questa gradazione in uno slogan, e lo slogan è falso nella misura in cui cancella le differenze.
Dove si rompe
Sezione intitolata “Dove si rompe”Le equazioni differenziali sono uno strumento potente, ma l’intuizione che le accompagna invita a parecchie confusioni. Questa sezione le raccoglie, perché capirne i limiti conta quanto capirne i meccanismi.
ODE non significa PDE, e “differenziale” non implica “parziale”. È la confusione più elementare e più diffusa. Le ODE hanno una sola variabile indipendente e sono, relativamente, trattabili: c’è un teorema di esistenza e unicità pulito, ci sono solver robusti e maturi. Le PDE hanno più variabili, derivate parziali, e sono un altro ordine di difficoltà. Trattare le due cose come la stessa famiglia porta a sottostimare quanto le ODE siano docili e a sovrastimare quanto lo siano le PDE.
L’equazione da sola non dà una soluzione. Una ODE senza condizione iniziale ha infinite soluzioni — un’intera famiglia, parametrizzata dal punto di partenza. Solo il problema ai valori iniziali, ODE più condizione iniziale, isola la traiettoria. Chi dimentica questo crede che “risolvere l’ODE” produca una funzione unica; produce una famiglia.
L’esistenza globale non è garantita. Una soluzione può esistere solo per un intervallo finito di tempo e poi esplodere — il blow-up in tempo finito di . “Esiste una soluzione” è quasi sempre un enunciato locale. Per i sistemi simulati al computer questo si manifesta come numeri che diventano inf o NaN: a volte non è un bug del codice, è la dinamica vera che diverge.
Il metodo di Eulero non è “la” soluzione. È un’approssimazione, e il suo errore dipende dal passo. Con passi troppo grandi non produce solo una traiettoria imprecisa: produce una traiettoria qualitativamente sbagliata. Un oscillatore armonico, che fisicamente conserva l’energia e oscilla per sempre con la stessa ampiezza, simulato con Eulero esplicito a passo grande mostra un’ampiezza che cresce a ogni ciclo — l’energia aumenta dal nulla, per puro artefatto numerico. Il solver sta mentendo, e bisogna saperlo riconoscere.
ResNet “è” un’ODE è un’analogia, non un’identità. È il punto in cui la divulgazione scivola più spesso. Il salto da “una ResNet assomiglia a un passo di Eulero” (vero, e fecondo: ha ispirato i Neural ODE) a “una ResNet è un’ODE” (falso) avviene senza che nessuno marchi il passaggio. Una ResNet addestrata ha campi di velocità che cambiano arbitrariamente da layer a layer, uno step size fisso, nessuna garanzia di limite continuo. Il Neural ODE è un’ODE perché è stato costruito apposta per esserlo; la ResNet che lo ha ispirato no.
Gradient flow non è SGD. Il gradient flow è una dinamica deterministica e liscia. SGD, la discesa del gradiente stocastica realmente usata, ha rumore — la stima del gradiente su minibatch è imprecisa per costruzione.
Quel rumore non è un dettaglio: cambia il comportamento del sistema, e rende SGD più vicino alla discretizzazione di una equazione differenziale stocastica che del gradient flow. Trattare l’analisi del gradient flow continuo come se descrivesse esattamente SGD significa ignorare proprio la parte — il rumore — che spesso fa la differenza.
“Stabile” ha due significati che vanno tenuti separati. C’è la stabilità della dinamica: un equilibrio è stabile se attrae le traiettorie vicine. E c’è la stabilità numerica: un solver è stabile se non fa divergere la simulazione. Sono cose diverse. Un solver numericamente instabile può far esplodere la simulazione di un sistema fisicamente stabilissimo, semplicemente perché il passo è troppo grande. Quando una simulazione diverge, la prima domanda è “è la dinamica o è il solver?”.
La linearità è un’eccezione fortunata, non la norma. Le ODE lineari godono del principio di sovrapposizione, hanno soluzioni in forma chiusa, sono completamente comprese. Ma la stragrande maggioranza delle ODE di interesse reale è non lineare, e per le ODE non lineari non c’è quasi mai una formula. L’intuizione costruita sull’esponenziale e sull’oscillatore — i due esempi lineari per eccellenza — va estesa con cautela: il caso non lineare può avere comportamenti, come il caos, che il caso lineare semplicemente non conosce.
Il caos: deterministico non vuol dire prevedibile. Una ODE è completamente deterministica — niente caso, niente rumore, la regola e il punto iniziale fissano la traiettoria per sempre. Da questo si tende a concludere che, conoscendo la regola e lo stato iniziale, si possa predire il futuro a piacere. È falso per i sistemi caotici.
In un sistema caotico — l’esempio canonico è l’attrattore di Lorenz, tre ODE accoppiate che modellano in modo grezzo l’atmosfera — due traiettorie che partono da punti vicinissimi divergono esponenzialmente. Un errore minuscolo sulla condizione iniziale, dopo poco tempo, produce stati completamente diversi. La dinamica resta deterministica, ma la prevedibilità pratica è limitata: è la ragione per cui le previsioni del tempo si fermano a una decina di giorni. Determinismo e prevedibilità sono due cose distinte, e le ODE caotiche mostrano con esattezza quanto distino.
Un solver che converge non garantisce un risultato corretto. Anche con un metodo accurato come RK4 e un passo piccolo, il numero che esce è un’approssimazione, e gli errori si accumulano lungo l’integrazione. Su un orizzonte temporale lungo, o su un sistema caotico, una traiettoria numerica può allontanarsi dalla vera anche se ogni singolo passo è preciso.
Il fatto che il solver non lanci errori e produca una curva liscia non significa che quella curva sia la soluzione: significa solo che il loop è andato a termine. La verifica — confrontare con soluzioni note, ridurre il passo e controllare che il risultato non cambi, conservare quantità che la fisica dice conservate — resta a carico di chi usa il solver.
Stabilità dell’equilibrio non vuol dire convergenza rapida, né convergenza a quel minimo. Anche quando un equilibrio è stabile, l’intuizione “la pallina ci arriva” va maneggiata con cura. Vicino a un equilibrio molto piatto la dinamica rallenta drasticamente: la pallina ci si avvicina sempre più lentamente, e in pratica non ci arriva mai in tempo utile.
E un sistema con più equilibri stabili — più valli — porta la pallina nella valle del suo bacino di attrazione, che dipende da dove è partita: non necessariamente la più profonda. È esattamente la situazione della loss di una rete neurale, costellata di minimi locali: il gradient flow garantisce la discesa, non l’arrivo al minimo globale.
Collegamenti
Sezione intitolata “Collegamenti”- Analisi matematica: limiti, continuità, derivate — la derivata come pendenza istantanea è il mattone di base: una equazione differenziale è una equazione che ha dentro una derivata.
- Derivate parziali, gradienti, Jacobiani — il gradiente è il protagonista del gradient flow, e la matrice Jacobiana è lo strumento con cui si legge la stabilità degli equilibri di un sistema.
- Ottimizzare funzioni di funzioni — l’equazione di Eulero-Lagrange, la condizione di stazionarietà di un problema variazionale, è essa stessa una equazione differenziale: i due capitoli sono due facce della stessa analisi.
- Processi stocastici e dinamiche casuali — le equazioni differenziali stocastiche sono ODE con un termine di rumore, ed è lì che vivono i diffusion model nella loro formulazione SDE.
- Catene di Markov, stazionarietà, mixing — le catene di Markov sono dinamiche discrete nel tempo; le ODE sono il loro analogo a tempo continuo, e i concetti di equilibrio e convergenza si rispondono.
- Autovalori e autovettori a intuizione — la stabilità di un equilibrio di un sistema di ODE si legge interamente dagli autovalori della matrice Jacobiana.
- SGD, momentum, Adam — la discesa del gradiente è la discretizzazione di Eulero esplicito dell’ODE chiamata gradient flow: capire una illumina l’altra.
- ResNet: residual learning, reti profonde addestrabili — il blocco residuo ha la stessa struttura di un passo di Eulero, ed è l’osservazione storica da cui sono nati i Neural ODE.
- diffusion (Parte XVIII, in preparazione) — la formulazione moderna dei diffusion model è interamente in termini di SDE e probability-flow ODE.
- equilibrio-stabilita e stato-spazio-dinamica (Parte IX, in preparazione) — la teoria dei sistemi riprende stato, traiettoria, equilibrio e stabilità come temi centrali, costruiti sulle ODE.
- control-theory-intro e pid-control-intuizione (Parte XI, in preparazione) — il controllo classico agisce proprio sulle ODE per pilotare la dinamica di un sistema verso un obiettivo.
Per andare oltre
Sezione intitolata “Per andare oltre”- Neural Ordinary Differential Equations — Ricky T. Q. Chen, Yulia Rubanova, Jesse Bettencourt, David Duvenaud, NeurIPS 2018 (arXiv:1806.07366). Il paper fondante: ResNet come Eulero, profondità continua, adjoint method, continuous normalizing flow.
- Score-Based Generative Modeling through Stochastic Differential Equations — Yang Song et al., ICLR 2021 (arXiv:2011.13456). L’unificazione dei diffusion model sotto le SDE e la probability-flow ODE. Il blog post dell’autore su yang-song.net è un’ottima introduzione divulgativa.
- A Proposal on Machine Learning via Dynamical Systems — Weinan E, Communications in Mathematics and Statistics, 2017. La proposta indipendente di interpretare il deep learning come controllo ottimo in tempo continuo.
- Differential Equations di Paul Dawkins (tutorial.math.lamar.edu) — note di un corso universitario, gratuite e didatticamente solide, ottime per i fondamenti: campo di direzioni, ODE lineari, sistemi, ritratti di fase.
- Notes on Diffy Qs: Differential Equations for Engineers — Jiří Lebl, libro di testo open source. Copre con cura i metodi numerici (Eulero, Runge-Kutta) e i campi di direzioni, con figure e codice.