Analisi matematica: limiti, continuità, derivate
Ogni rete neurale che esiste è stata addestrata dalla stessa idea: prendi una funzione, chiedile la sua pendenza in un punto, muoviti contro quella pendenza, ripeti. La pendenza si chiama derivata, e la macchina che la calcola attraverso decine di strati si chiama regola della catena. Questo capitolo costruisce questi due oggetti da zero — partendo dal concetto che li rende possibili, il limite — per chi ha le basi del liceo e nient’altro. Alla fine, loss.backward() smette di essere un incantesimo.
Perché questo capitolo
Sezione intitolata “Perché questo capitolo”C’è un’asimmetria curiosa nel modo in cui gli sviluppatori imparano il machine learning. Si impara presto a usare un optimizer — loss.backward(), optimizer.step(), due righe — molto prima di sapere cosa quelle righe calcolano davvero.
Funziona, fino al giorno in cui il training diverge, o la loss si appiattisce e non scende più, o un gradiente esplode. A quel punto la scatola nera va aperta, e dentro non c’è magia: c’è analisi matematica del Seicento, formalizzata nell’Ottocento, riassemblata negli anni Ottanta del Novecento.
L’analisi matematica è la branca della matematica che studia il cambiamento e l’approssimazione. Tre concetti la fondano, in quest’ordine: il limite (cosa succede a una funzione quando ci si avvicina a un punto), la continuità (una funzione che non fa salti), la derivata (quanto velocemente una funzione cambia). Non è un caso che questi tre concetti siano l’oggetto del primo capitolo della Parte VI: tutto il resto della matematica avanzata — gradienti multivariabili, Hessiane, serie di Taylor, ottimizzazione — è costruito su di essi.
Il legame con l’AI non è un’analogia decorativa. È uso diretto dello strumento. Addestrare un modello significa trovare i valori dei pesi che minimizzano una funzione di errore; il metodo per minimizzarla — la discesa del gradiente — è interamente fatto di derivate.
La backpropagation, l’algoritmo che rende addestrabili le reti profonde, è l’applicazione sistematica di una sola regola di derivazione, la regola della catena, a una composizione di funzioni lunga decine di strati. E la ragione per cui certe funzioni di attivazione si possono usare e altre no è, letteralmente, una questione di derivabilità.
Chi salta questo capitolo può comunque seguire la wiki. Chi lo legge smette di trattare il training come una scatola chiusa.
Una nota di collocazione. La Parte IV ha già introdotto i gradienti “a intuito”, come frecce che indicano la direzione di massima discesa, senza mai definire formalmente cosa sia una derivata. Questo capitolo è il complemento: prende quell’intuizione e le mette sotto le fondamenta. Chi ha letto Gradienti e derivate direzionali senza analisi sa già cosa fa un gradiente; qui impara cos’è una derivata e perché esiste.
Una nota sulla portata. L’analisi matematica completa ha due metà: il calcolo differenziale, che studia il cambiamento istantaneo — limiti, derivate, è l’oggetto di questo capitolo — e il calcolo integrale, che studia l’accumulazione, l’area sotto una curva, la somma di infiniti contributi infinitesimi. Le due metà sono legate dal teorema fondamentale del calcolo, che mostra come derivazione e integrazione siano operazioni inverse. Per il percorso della wiki conta soprattutto la metà differenziale: è quella che alimenta l’ottimizzazione e quindi il training. L’integrale compare di striscio — nel calcolo di probabilità e valori attesi — ma non è il fuoco qui. Questo capitolo resta sul differenziale, e lo fa in profondità invece di toccare tutto in superficie.
Contesto
Sezione intitolata “Contesto”Il calcolo infinitesimale — l’altro nome dell’analisi, soprattutto nella sua parte differenziale — nasce nel Seicento, e nasce due volte.
Isaac Newton (1643-1727, fisico e matematico inglese, autore dei Principia del 1687 che fondano la meccanica classica) sviluppa quello che chiama il “metodo delle flussioni” tra il 1665 e il 1666, negli anni della peste, mentre è ritirato in campagna.
La sua impostazione è cinematica: pensa alle quantità come grandezze che “fluiscono” nel tempo, e alla derivata come alla velocità di quel flusso — la chiama appunto flussione. Newton usa il calcolo per anni nei suoi lavori di fisica, ma pubblica un resoconto della sua notazione solo tardi, intorno al 1693.
Gottfried Wilhelm Leibniz (1646-1716, filosofo e matematico tedesco, la stessa figura che in preistoria-intelligenza sogna un linguaggio universale per automatizzare il ragionamento) arriva allo stesso calcolo per una via diversa, algebrica, basata su quantità “infinitamente piccole” che chiama differenziali.
Leibniz pubblica per primo: il suo articolo Nova Methodus pro Maximis et Minimis (“Nuovo metodo per i massimi e i minimi”), apparso negli Acta Eruditorum di Lipsia nel 1684, è il primo resoconto a stampa del calcolo differenziale. Soprattutto, Leibniz inventa la notazione che usiamo ancora oggi: per la derivata, il simbolo allungato per l’integrale. Vinse perché era più maneggevole della notazione a puntini di Newton.
Ne seguì una delle dispute di priorità più velenose della storia della scienza. A partire dal 1699, con il picco intorno al 1712, le scuole matematiche inglese e continentale si accusarono a vicenda di plagio.
Il consenso storico moderno è che si trattò di invenzione indipendente: Newton arrivò prima ma pubblicò dopo, Leibniz arrivò poco dopo ma pubblicò subito. La disputa ebbe una conseguenza concreta e dannosa: isolò i matematici inglesi dal continente fino agli anni 1820, facendo loro perdere quasi un secolo di progressi.
Resta un problema di fondo. Per circa centocinquant’anni il calcolo funzionava — produceva risultati corretti in fisica e ingegneria — ma poggiava su un concetto logicamente traballante: l’infinitesimo, una quantità “più piccola di qualsiasi numero positivo ma diversa da zero”.
Il filosofo e vescovo George Berkeley, nel pamphlet The Analyst del 1734, li ridicolizzò chiamandoli “fantasmi di quantità defunte” (“ghosts of departed quantities”): se l’infinitesimo è zero, dividere per esso è illegale; se non è zero, non si può scartarlo a fine calcolo. La critica era giusta, e mise il dito su una contraddizione che il calcolo del Settecento risolveva solo con la disinvoltura.
La risposta arriva nell’Ottocento, con un’operazione che gli storici chiamano “aritmetizzazione dell’analisi”: rifondare tutto sui numeri e sulle disuguaglianze, eliminando gli infinitesimi vaghi.
- Bernard Bolzano (1781-1848, matematico, filosofo e sacerdote boemo) nel 1817 pubblica un lavoro che dà la prima definizione puramente analitica di continuità e dimostra il teorema del valore intermedio senza appellarsi a disegni o a infinitesimi, usando solo disuguaglianze tra numeri reali.
- Augustin-Louis Cauchy (1789-1857, matematico francese, uno degli architetti dell’analisi moderna) nel Cours d’analyse del 1821 costruisce il calcolo attorno al concetto di limite. Introduce i simboli ed a partire dal 1823, ma senza ancora fissare una relazione funzionale esplicita tra i due.
- Karl Weierstrass (1815-1897, matematico tedesco, soprannominato “il padre dell’analisi moderna”) intorno al 1861, nei suoi corsi a Berlino, dà la definizione di limite nella forma con e che si insegna ancora oggi, eliminando del tutto gli infinitesimi.
Da Weierstrass in poi, l’analisi è rigorosa. Il resto di questo capitolo segue lo stesso ordine logico: prima il limite, poi la continuità, poi la derivata. È l’ordine in cui i concetti dipendono l’uno dall’altro.
C’è una lezione, in questa storia, che vale oltre la matematica. Per centocinquant’anni uno strumento potentissimo è stato usato con successo pur poggiando su fondamenta logicamente difettose. Funzionava — finché non si toccavano i casi limite. La crisi non fu provocata da un fallimento pratico, ma da matematici che presero sul serio la domanda “perché funziona”. La risposta — limiti e disuguaglianze al posto degli infinitesimi — non cambiò un solo risultato di fisica, ma rese l’edificio solido abbastanza da poterci costruire sopra l’analisi del Novecento. È un pattern ricorrente: uno strumento che gira in produzione e una teoria che lo giustifica possono avere decenni di scarto. La differenza tra il calcolo del 1700 e quello del 1900 non è cosa calcola, ma quanto ci si può fidare quando si esce dal caso facile.
L’eredità delle notazioni
Sezione intitolata “L’eredità delle notazioni”Vale la pena fissare le tre notazioni della derivata, perché si incontrano tutte e tre e ognuna porta con sé un punto di vista.
La notazione di Lagrange, , con l’apice, è la più compatta: tratta la derivazione come un’operazione che prende una funzione e ne restituisce un’altra. È comoda quando si concatenano regole. La notazione di Leibniz, , è la più espressiva: rende visibile rispetto a quale variabile si sta derivando, e suggerisce — pur senza esserlo letteralmente — un rapporto tra due quantità piccole. È la notazione che rende la regola della catena quasi ovvia, come vedremo. La notazione di Newton, con il puntino sopra la lettera, sopravvive quasi solo in fisica, per le derivate rispetto al tempo. In questo capitolo useremo soprattutto Lagrange per la concisione e Leibniz quando serve mostrare la struttura.
L’intuizione: il limite
Sezione intitolata “L’intuizione: il limite”Il limite è il concetto più astratto dei tre, e quello su cui poggiano gli altri due. Conviene guardarlo da due angoli distinti prima di scrivere qualsiasi formula.
Angolo 1 — l’avvicinamento
Sezione intitolata “Angolo 1 — l’avvicinamento”Il limite risponde a una domanda precisa: verso che valore tende una funzione quando si avvicina a un punto , senza necessariamente arrivarci?
L’esempio canonico chiarisce perché la clausola “senza arrivarci” non è un cavillo. Considera la funzione
Nel punto questa funzione non è definita: numeratore e denominatore valgono entrambi zero, e non è un numero. Eppure qualcosa di sensato si può dire.
Per ogni diverso da , il numeratore si fattorizza come , e il fattore si semplifica con il denominatore. Quindi per ogni la funzione è semplicemente . E , quando è vicino a , vale circa .
Concludiamo: , anche se non esiste affatto. Questo è il cuore del concetto. Il limite parla del comportamento della funzione attorno al punto, non nel punto.
Il valore e il limite sono due oggetti diversi: a volte coincidono, a volte uno esiste e l’altro no, a volte esistono entrambi ma sono diversi. Tenerli separati nella testa è il primo passo per capire l’analisi.
Angolo 2 — il gioco a due mosse (epsilon-delta)
Sezione intitolata “Angolo 2 — il gioco a due mosse (epsilon-delta)”L’intuizione dell’avvicinamento ha un difetto: è vaga. “Si avvicina” — quanto vicino? E se si avvicina ma poi rimbalza via? La definizione rigorosa, quella di Weierstrass, trasforma l’avvicinamento in una proprietà verificabile. Vale la pena capirla, perché è il modello di tutto il rigore in analisi.
Pensa al limite come a una promessa, messa alla prova da una sfida. L’affermazione "" significa questo:
Per quanto stretta sia la fascia di tolleranza che mi imponi attorno al valore , io riesco a trovare un intorno attorno al punto tale che ogni in quell’intorno — escluso stesso — finisce dentro la fascia.
È un gioco a due mosse. Tu, lo sfidante, scegli una fascia di tolleranza attorno a : la chiamiamo (epsilon), un numero positivo piccolo a piacere. È la mossa “vediamo se ci arrivi davvero vicino”.
Io, per rispondere, devo trovare un raggio attorno a : lo chiamiamo (delta), anch’esso positivo. La mia promessa è: ogni entro distanza da produce un entro distanza da .
Se io riesco a rispondere a ogni sfida con un adeguato — non importa quanto piccolo tu faccia — allora è il limite. Se esiste anche una sola sfida a cui non so rispondere, non è il limite. Si noti l’asimmetria: tu muovi per primo scegliendo , io rispondo dopo con un che può dipendere da . Più stretta la fascia, più piccolo dovrà essere il mio raggio.
In forma simbolica:
Tre cose vanno lette con attenzione. Il simbolo significa “per ogni”, significa “esiste”. La scrittura è la distanza tra e , e è la distanza tra il valore della funzione e il limite candidato.
La condizione , con lo zero stretto a sinistra, esclude esplicitamente il caso : il limite, di proposito, ignora il punto stesso. È esattamente ciò che ci serviva per l’esempio del buco rimovibile, dove la funzione nel punto non era nemmeno definita.
Non useremo l’epsilon-delta per fare calcoli in questo capitolo. Ci serve l’idea: il limite non è un’esortazione poetica all’avvicinamento, è una garanzia che si può mettere alla prova. Questo è ciò che separa l’analisi rigorosa post-Weierstrass dal calcolo traballante che Berkeley criticava.
Avvicinarsi da due lati
Sezione intitolata “Avvicinarsi da due lati”C’è un dettaglio implicito nella definizione che vale la pena rendere esplicito. Quando si avvicina a , lo può fare da due direzioni: da valori più piccoli di (da sinistra, sul grafico) o da valori più grandi (da destra). Si parla allora di limite sinistro e limite destro. Il limite vero e proprio — il limite “bilatero” — esiste solo quando i due limiti unilaterali esistono e coincidono.
Questo non è un cavillo. È esattamente ciò che rende rigorosa l’idea intuitiva di “salto”. La funzione gradino, che vale per e per , ha limite sinistro e limite destro nel punto : i due valori non coincidono, quindi il limite bilatero in semplicemente non esiste. Sul grafico, lo si vede come uno strappo. La distinzione torna utile più avanti: lo spigolo della funzione valore assoluto e la non-derivabilità della ReLU si descrivono proprio in termini di un limite sinistro e un limite destro che non vanno d’accordo.
Come si calcola un limite, in pratica
Sezione intitolata “Come si calcola un limite, in pratica”Nella stragrande maggioranza dei casi, calcolare un limite non richiede di scomodare l’epsilon-delta. La ragione è che le funzioni “normali” — polinomi, esponenziali, seni e coseni, e le loro combinazioni — sono continue dove sono definite, e per una funzione continua il limite in un punto è semplicemente il valore della funzione in quel punto: si sostituisce e basta. Il limite di per è , senza alcun gioco di tolleranze.
I casi interessanti sono quelli in cui la sostituzione diretta fallisce, e producono una forma indeterminata — tipicamente . La forma indeterminata non è una risposta: è un segnale che il limite va estratto con un po’ di lavoro algebrico. Nell’esempio il lavoro era la fattorizzazione e la semplificazione del fattore comune. In altri casi serve razionalizzare, raccogliere, riscrivere. L’idea generale: la forma nasconde una cancellazione, e il mestiere è farla emergere. Esiste anche uno strumento sistematico per le forme indeterminate, la regola di de l’Hôpital, che le risolve usando le derivate — un’eco di come i tre concetti di questo capitolo si rinforzano a vicenda.
L’intuizione: la continuità
Sezione intitolata “L’intuizione: la continuità”Una volta che abbiamo il limite, la continuità è quasi gratis. Una funzione è continua in un punto se tre condizioni valgono insieme:
- esiste — la funzione è definita nel punto;
- esiste — la funzione tende a qualcosa, avvicinandosi al punto;
- i due valori coincidono: .
In parole povere: la funzione arriva dove dovrebbe arrivare. Il valore verso cui tende è esattamente il valore che assume.
L’immagine concreta è quella della penna sul foglio. Una funzione continua su un intervallo si può tracciare senza mai staccare la penna.
Tre cose tipiche rompono la continuità, e ognuna viola una delle tre condizioni. Un salto — come la funzione gradino, che vale fino a un punto e poi — viola la terza condizione: il limite da sinistra e da destra non coincidono. Un buco — il caso di prima — viola la prima: il limite esiste ma la funzione non è definita lì. Un asintoto verticale — la funzione che esplode verso l’infinito, come in — viola la seconda: il limite non esiste come numero finito.
Perché la continuità conta, e non solo per i disegnatori. La continuità è la garanzia formale che piccole variazioni dell’input producono piccole variazioni dell’output. Su una funzione continua, se sposti di pochissimo, si sposta di pochissimo. Su una funzione discontinua, un cambiamento infinitesimo dell’ingresso può far saltare l’uscita di una quantità arbitraria.
Questa proprietà — che chiameremo smoothness locale — è esattamente l’assunzione su cui poggia l’addestramento per gradiente: se muovere un peso di poco cambia la loss di poco, allora ha senso procedere a piccoli passi. Su un paesaggio di errore pieno di salti, fare passi piccoli non garantirebbe nulla.
C’è un teorema, semplice da enunciare e profondo nelle conseguenze, che cattura la forza della continuità. È il teorema del valore intermedio, dimostrato da Bolzano nel 1817 (è un teorema in senso stretto: relazione formalmente provabile, non analogia). Dice: se è continua su un intervallo chiuso e assume due valori diversi agli estremi, allora assume ogni valore intermedio tra quei due. Esempio concreto: se a mezzanotte la temperatura era gradi e a mezzogiorno , allora in qualche istante tra mezzanotte e mezzogiorno è stata esattamente gradi. Il teorema garantisce che quell’istante esiste; non dice quale sia. È una garanzia di esistenza, non una ricetta di costruzione — una distinzione che torna spesso in matematica.
Il teorema ha anche una ricaduta algoritmica concreta. Se una funzione continua è negativa in un punto e positiva in un altro, deve annullarsi da qualche parte in mezzo: questo è il principio della ricerca per bisezione, un metodo per trovare gli zeri di una funzione che dimezza ripetutamente l’intervallo di ricerca.
Funziona solo perché la funzione è continua; su una funzione con salti la bisezione potrebbe scavalcare lo zero senza accorgersene. È un primo esempio di come la continuità non sia un’astrazione estetica ma un prerequisito perché certi algoritmi numerici siano corretti.
Un esempio numerico chiude la sezione. Considera la funzione definita a tratti che vale per e vale per . È continua nel punto ? Il limite da sinistra è ; il valore della funzione e il limite da destra sono entrambi . Limite sinistro , limite destro : non coincidono, quindi la funzione salta in e lì non è continua. Se invece il primo tratto fosse , il limite sinistro sarebbe , uguale al destro: la funzione sarebbe continua, “incollata” perfettamente nel punto di giunzione. La continuità di una funzione a tratti è esattamente questo controllo: i pezzi si saldano senza strappi.
La meccanica: la derivata
Sezione intitolata “La meccanica: la derivata”Arriviamo all’oggetto centrale. La derivata misura quanto velocemente una funzione cambia. La sua definizione formale usa un limite — ecco perché il limite veniva prima.
Considera una funzione e un punto . Prendi un piccolo incremento dell’input, lo chiamiamo , e guarda di quanto cambia l’output: la variazione è .
Il rapporto incrementale è questa variazione divisa per l’ampiezza dell’incremento:
In parole: quanto è cambiato l’output, diviso quanto è cambiato l’input. È la variazione media della funzione su un intervallino di ampiezza . Il numeratore è la variazione dell’uscita, il denominatore è la variazione dell’ingresso.
La derivata è ciò che succede a questo rapporto quando l’intervallino si rimpicciolisce fino a sparire — cioè quando tende a zero:
Mandando , la variazione media su un intervallo diventa la variazione istantanea in un punto. Notazione: è la scrittura di Lagrange (con l’apice); Leibniz scriverebbe ; Newton, per le derivate rispetto al tempo, metterebbe un puntino sopra la lettera. Sono tre notazioni per lo stesso oggetto, e in questo capitolo useremo soprattutto le prime due.
Un punto che genera confusione e va fissato subito: non significa . Se ponessimo nel rapporto incrementale, otterremmo , che non è un numero.
La derivata è il valore verso cui il rapporto tende mentre si avvicina a zero senza mai raggiungerlo. È esattamente il concetto di limite della sezione precedente, applicato qui. È anche, in fondo, la risoluzione dell’obiezione di Berkeley: non si divide mai per zero, si prende il limite. L’infinitesimo “fantasma” sparisce, sostituito da un processo di avvicinamento ben definito.
L’idea dello zoom
Sezione intitolata “L’idea dello zoom”Prima delle tre letture formali, un’immagine che le tiene insieme. Prendi il grafico di una funzione liscia e ingrandiscilo attorno a un punto, come con lo zoom di una mappa. Più ingrandisci, più la curva, in quell’intorno sempre più piccolo, somiglia a una retta. Una funzione derivabile è, vista abbastanza da vicino, indistinguibile da una linea retta — e la pendenza di quella retta è la derivata.
Questa è l’essenza dell’analisi differenziale: una funzione complicata, su scala globale, diventa semplice — lineare — su scala locale. La derivata è il coefficiente di quella semplificazione locale.
È anche il motivo per cui la non-derivabilità si vede come uno “spigolo”: per quanto si ingrandisca attorno allo spigolo di in zero, l’angolo resta un angolo, non si appiattisce mai in una retta. Tenere a mente lo zoom rende le tre letture che seguono varianti dello stesso fatto.
Le tre letture della derivata
Sezione intitolata “Le tre letture della derivata”Lo stesso numero, , si può leggere in tre modi diversi. Tutti e tre dicono la verità; tenerli presenti insieme è ciò che rende la derivata uno strumento e non una formula.
Lettura geometrica — la pendenza della tangente. Disegna il grafico di . I due punti e stanno sulla curva, distanti in orizzontale. La retta che li congiunge è una secante, e il rapporto incrementale è esattamente la sua pendenza (salita diviso avanzamento).
Ora fai rimpicciolire : il secondo punto scivola lungo la curva verso il primo, e la secante ruota. Nel limite, quando i due punti si fondono, la secante diventa la retta tangente alla curva in quel punto. La derivata è la pendenza di quella tangente: dice quanto è ripida la curva, in salita o in discesa, in quel punto esatto.
Lettura fisica — la velocità. Sia la posizione di un oggetto al tempo . Allora è lo spazio percorso diviso il tempo impiegato: la velocità media nell’intervallo . Il limite per è la velocità istantanea — il numero che leggi sul tachimetro in un dato istante. Questa è esattamente l’interpretazione di Newton: la derivata come flussione, il tasso con cui una quantità fluisce nel tempo. E non vale solo per la posizione: il tasso di crescita di una popolazione, il ritmo di raffreddamento di un caffè, la velocità di una reazione chimica sono tutte derivate.
Lettura computazionale — la sensibilità. Questa è la lettura che conta per chi costruisce sistemi AI. La derivata risponde alla domanda: se cambio l’input di una quantità piccola, di quanto e in che direzione cambia l’output?
Se è grande e positivo, l’output è molto sensibile e cresce; se è negativo, l’output cala; se è vicino a zero, l’output è quasi insensibile a piccole variazioni dell’input — siamo vicini a un massimo, a un minimo, o a un plateau.
Nel machine learning, è la funzione di errore e è un peso del modello: la derivata della loss rispetto a un peso dice esattamente di quanto e in che verso muovere quel peso per ridurre l’errore. Stesso numero delle altre due letture, ruolo operativo diverso.
Le regole di derivazione
Sezione intitolata “Le regole di derivazione”In linea di principio ogni derivata si calcola dalla definizione, con il limite del rapporto incrementale. In pratica nessuno lo fa.
Si usano poche regole, dimostrate una volta per tutte dalla definizione, e poi applicate come un ricettario. Ecco quelle essenziali, con e funzioni e una costante.
- Costante: . Una funzione costante non cambia mai, quindi il suo tasso di variazione è zero.
- Potenza: . Esempio: la derivata di è .
- Somma: . La derivata distribuisce sulle somme.
- Prodotto: . Attenzione: non è . È uno degli errori più comuni.
- Quoziente: .
E poi c’è la regola che merita una sezione tutta sua.
La regola della catena
Sezione intitolata “La regola della catena”La regola della catena (in inglese chain rule) governa la derivazione delle funzioni composte — funzioni dentro altre funzioni. È la regola più importante di questo capitolo per chi lavora con l’AI, perché è il motore della backpropagation.
Supponi che dipenda da attraverso un passaggio intermedio: . C’è una funzione interna che trasforma in un valore intermedio, e una funzione esterna che trasforma quel valore intermedio in . La regola della catena dice:
Si legge meglio nella notazione di Leibniz, introducendo esplicitamente la variabile intermedia :
In parole povere: il tasso con cui cambia rispetto a è il prodotto di due tassi — il tasso con cui cambia rispetto a , moltiplicato per il tasso con cui cambia rispetto a .
In questa notazione la regola sembra quasi una banale semplificazione di frazioni: il “si cancella”. Non è letteralmente così — non è una vera frazione — ma la notazione di Leibniz è stata costruita apposta perché la regola risultasse mnemonica. È uno dei motivi per cui la sua notazione vinse su quella di Newton.
La metafora degli ingranaggi rende la cosa fisica. Immagina tre ruote dentate collegate in fila. La ruota A muove la ruota B con un rapporto di trasmissione — un giro di A produce tre giri di B. La ruota B muove la ruota C con rapporto .
Quanto muove A la ruota C? Il rapporto complessivo è . I rapporti di trasmissione si moltiplicano lungo la catena. La regola della catena dice esattamente questo: la sensibilità complessiva è il prodotto delle sensibilità locali.
Un calcolo concreto. Sia . La funzione esterna è , la funzione interna è . Applichiamo le regole: per la regola della potenza, e per somma e potenza combinate. La regola della catena assembla i pezzi:
La regola si estende a composizioni di qualunque lunghezza. Se , allora la derivata è il prodotto di tre fattori, una derivata locale per ogni anello della catena. Vale la pena vederlo su un caso a tre livelli, perché è la struttura esatta di una rete profonda. Sia il risultato della catena , con , , . Le tre derivate locali sono , , . La regola della catena le moltiplica tutte:
Il punto da notare: per ottenere la derivata rispetto a — la variabile all’inizio della catena — abbiamo dovuto conoscere il valore intermedio . È il motivo per cui la backpropagation procede in due fasi: prima un passaggio in avanti (forward pass) che calcola e memorizza tutti i valori intermedi, poi un passaggio all’indietro (backward pass) che li riusa per moltiplicare le derivate locali. E qui sta il ponte con l’AI, che svilupperemo nelle applicazioni: una rete neurale è una composizione di funzioni lunga decine di anelli, e calcolare come l’errore finale dipende da un peso nei primi strati significa proprio moltiplicare derivate locali lungo tutta la catena.
Derivare la derivata
Sezione intitolata “Derivare la derivata”La derivata è essa stessa una funzione: a ogni punto associa un numero, la pendenza lì. Niente vieta di derivarla di nuovo. La derivata seconda, scritta o , è la derivata della derivata: misura quanto velocemente cambia la pendenza.
L’interpretazione è la curvatura. Se la lettura fisica della derivata prima è la velocità, la derivata seconda è l’accelerazione — il tasso con cui la velocità cambia. Geometricamente, significa che la curva si piega verso l’alto (è “convessa”, come una conca che tiene l’acqua); significa che si piega verso il basso (è “concava”, come una cupola); segnala un possibile punto di flesso, dove la curvatura cambia segno.
Perché questo importa per l’ottimizzazione: la derivata prima vale (circa) zero in un minimo, in un massimo e su un plateau, senza distinguerli. La derivata seconda li separa.
In un punto dove , se siamo in un minimo (la curva si apre verso l’alto), se in un massimo. È la base di tutti i metodi di ottimizzazione “del secondo ordine”. L’estensione multivariabile della derivata seconda — la matrice Hessiana — è il tema del capitolo hessiane-curvatura (in preparazione).
Cinque esempi eterogenei: due numerici, uno in codice, uno scenario fisico, uno legato direttamente al machine learning.
Esempio 1 — derivata numerica per definizione
Sezione intitolata “Esempio 1 — derivata numerica per definizione”Calcoliamo la derivata di nel punto , partendo dalla definizione e poi verificandola con la regola. Il rapporto incrementale è:
Per ogni il rapporto vale . Quando , questo tende a . Quindi . La regola della potenza conferma: , e . Si vede anche, in piccolo, perché non può essere zero: nel passaggio centrale abbiamo diviso per . Lo abbiamo potuto fare solo perché ; il valore lo abbiamo ottenuto dopo, prendendo il limite.
Una verifica più “ingegneristica”: invece del limite esatto, mettiamo un piccolo ma concreto, diciamo . Il rapporto vale , vicinissimo a .
Questo è il principio della derivata numerica: si approssima il limite con un finito ma piccolo. I framework di calcolo la usano per controllare (il cosiddetto gradient checking) che le derivate calcolate analiticamente dall’autograd siano corrette — se i due valori divergono troppo, c’è un bug nel codice delle derivate.
Esempio 2 — la regola della catena in codice
Sezione intitolata “Esempio 2 — la regola della catena in codice”Una mini rete a due strati, scritta come composizione esplicita di funzioni, mostra la regola della catena al lavoro.
# Forward: una composizione loss(activate(linear(x)))def linear(x, w): # strato 1: scala l'input return w * x
def activate(z): # strato 2: una non-linearita (qui z**2) return z ** 2
def loss(a, target): # errore quadratico rispetto a un target return (a - target) ** 2
# Backward: chain rule, derivate locali moltiplicate a ritrosodef gradient(x, w, target): z = linear(x, w) a = activate(z) # derivate locali, anello per anello dloss_da = 2 * (a - target) # d loss / d a da_dz = 2 * z # d a / d z dz_dw = x # d z / d w # la chain rule e un prodotto lungo la catena return dloss_da * da_dz * dz_dwLa funzione gradient non fa nient’altro che la regola della catena: tre derivate locali — una per loss, una per activate, una per linear — moltiplicate insieme. Il risultato è la derivata della loss rispetto al peso w, cioè l’informazione che serve per aggiornare w.
Questo, ripetuto su milioni di pesi e su decine di strati, è la backpropagation. Un framework come PyTorch costruisce questa catena di moltiplicazioni automaticamente, registrando ogni operazione del forward pass in un grafo; il principio resta quello di queste poche righe.
Esempio 3 — velocità da una legge oraria
Sezione intitolata “Esempio 3 — velocità da una legge oraria”Un sasso cade. La fisica dice che la distanza percorsa dopo secondi è metri (il coefficiente è metà dell’accelerazione di gravità). Domanda: qual è la velocità del sasso esattamente al secondo ?
La velocità istantanea è la derivata della posizione. Con la regola della potenza, . Al secondo : metri al secondo. Si noti la differenza con la velocità media nei primi due secondi, che sarebbe m/s: la media su un intervallo e il valore istantaneo in un punto sono numeri diversi, ed è proprio per misurare il secondo che serve la derivata. Lo stesso ragionamento, fuori dalla fisica, si applica al tasso di crescita di un utente base, alla velocità di consumo di un budget, al ritmo di degrado di un modello in produzione. E la derivata seconda di è , costante: è l’accelerazione di gravità, il motivo per cui era nel coefficiente di partenza.
Esempio 4 — trovare un minimo con la derivata
Sezione intitolata “Esempio 4 — trovare un minimo con la derivata”Un esempio che chiude il cerchio verso l’ottimizzazione. La funzione è una parabola; vogliamo il suo punto più basso senza disegnarla.
Il minimo è dove la pendenza si annulla, cioè dove . Deriviamo termine per termine con la regola della potenza e quella della somma: . Poniamo , da cui . La derivata seconda è , positiva: conferma che è un minimo e non un massimo. Il valore minimo è .
Questo è, in miniatura, ciò che fa un optimizer — con la differenza che su una loss di una rete neurale l’equazione non si risolve a mano: ci sono miliardi di variabili e la funzione non è una parabola. Per questo non si risolve l’equazione, ci si avvicina alla soluzione un passo alla volta, ed è esattamente la discesa del gradiente.
Esempio 5 — la derivata di una funzione di attivazione
Sezione intitolata “Esempio 5 — la derivata di una funzione di attivazione”Un esempio che porta tutto insieme. La funzione sigmoid, una delle attivazioni storiche delle reti neurali, è definita come . Schiaccia qualunque numero reale in un valore tra e , con una forma a S.
La sua derivata ha una proprietà notevole. Applicando la regola del quoziente e quella della catena (il termine è una composizione), si arriva a un risultato compatto:
In parole: la pendenza della sigmoid in un punto si ottiene dal solo valore della sigmoid in quel punto, senza ricalcolare nulla. È il motivo per cui, durante il backward pass, il framework non rideriva la sigmoid da zero: riusa il valore già calcolato nel forward pass. Si vede anche subito il limite: è massima al centro, dove vale , e tende a zero alle estremità. Quel tetto di è esattamente il fattore che, moltiplicato lungo molti strati, produce il vanishing gradient della sezione successiva.
Applicazioni pratiche
Sezione intitolata “Applicazioni pratiche”Qui il legame con l’AI diventa diretto. Sono usi dello strumento, non analogie: dove possibile lo dichiariamo come tale.
La derivata come strumento di ottimizzazione. Addestrare un modello significa trovare i valori dei pesi che minimizzano una funzione di errore, la loss. Il metodo standard è la discesa del gradiente: si calcola la derivata della loss rispetto a ogni peso e si fa un piccolo passo nella direzione opposta a quella derivata.
Il perché del “opposta” è la lettura computazionale della derivata: dove la derivata è positiva la loss sta salendo, dove è negativa sta scendendo; per minimizzare bisogna quindi muoversi contro il segno della derivata. Confondere il verso — muoversi secondo il segno invece che contro — fa salire la loss invece di farla scendere, ed è un classico bug concettuale. Il dettaglio multivariabile è in Discesa del gradiente: SGD, momentum, Adam.
La regola della catena come motore della backpropagation. Una rete neurale è una composizione di funzioni: ogni strato prende l’output del precedente e lo trasforma. Schematicamente, .
Per addestrare la rete serve sapere come la loss finale dipende da ogni singolo peso, anche quelli nei primi strati, lontani dall’uscita. La regola della catena fornisce la risposta: si moltiplicano le derivate locali strato per strato, a ritroso dall’uscita verso l’ingresso. La backpropagation è esattamente questo procedimento, organizzato in modo da riusare i calcoli intermedi invece di rifarli — le derivate parziali condivise tra più pesi si calcolano una volta sola.
L’algoritmo fu reso canonico dal paper Learning representations by back-propagating errors di David Rumelhart, Geoffrey Hinton e Ronald Williams, pubblicato su Nature nel 1986. I framework moderni — PyTorch con autograd, JAX con grad, TensorFlow con GradientTape — implementano la differenziazione automatica: costruiscono il grafo delle operazioni e applicano la regola della catena meccanicamente, senza che lo sviluppatore scriva mai una derivata a mano.
Perché le funzioni di attivazione devono essere derivabili. Tra uno strato lineare e l’altro, una rete inserisce una funzione di attivazione — una non-linearità. La scelta di quale funzione usare non è libera: deve essere una funzione di cui si può calcolare la derivata, perché altrimenti la regola della catena si interrompe in quel punto e il gradiente non può propagarsi indietro. Senza gradiente, la discesa del gradiente non sa come aggiornare i pesi.
Le attivazioni storiche, sigmoid e tanh, sono derivabili ovunque. La ReLU — definita come , l’attivazione dominante nelle reti profonde — ha uno spigolo in : avvicinandosi da sinistra la pendenza è , da destra è , e in quel singolo punto la derivata non esiste.
In pratica funziona lo stesso, per due ragioni: l’input esattamente uguale a ha probabilità trascurabile, e i framework assegnano per convenzione un valore (un subgradiente, tipicamente o ) in quel punto. La regola operativa è “derivabile quasi ovunque”, non “derivabile ovunque”. Il dettaglio è in funzioni-attivazione-ml (in preparazione).
Il learning rate come dimensione del passo. Una volta noto il gradiente, resta da decidere quanto grande sia il passo che si fa nella sua direzione opposta. Quel fattore di scala è il learning rate. La derivata dà la direzione e l’intensità della pendenza nel punto attuale, ma quella informazione è affidabile solo localmente, in un intorno piccolo — è di nuovo l’idea dello zoom: vicino al punto la funzione è quasi lineare, lontano non più. Un learning rate troppo grande fa un passo che esce dalla zona dove l’approssimazione lineare vale, e può scavalcare il minimo o far divergere il training; troppo piccolo, e la convergenza diventa lentissima. La scelta del learning rate è, in fondo, una scommessa su quanto è ampia la regione in cui la derivata locale resta una buona guida.
La derivata fuori dal machine learning. Lo stesso strumento ha vita propria oltre l’AI. In finanza, le “greche” di un’opzione — delta, gamma — sono derivate prime e seconde del prezzo rispetto a parametri di mercato, e misurano l’esposizione al rischio.
In ingegneria del software, l’analisi di sensibilità di un modello di simulazione usa derivate per capire quali parametri di input contano davvero per l’output. Ovunque ci sia una quantità che dipende da un’altra e ci si chieda “se muovo questa, di quanto si muove quella”, la risposta è una derivata.
Dove si rompe
Sezione intitolata “Dove si rompe”La derivata è uno strumento potente ma non onnipotente, e capire dove smette di funzionare è importante quanto capire come funziona.
Continuità non implica derivabilità. Questo è il fraintendimento più comune. Le due proprietà non sono equivalenti: la derivabilità implica la continuità (se una funzione ha una pendenza ben definita in un punto, in particolare non fa salti lì), ma non vale il contrario.
La funzione valore assoluto è continua ovunque — la si traccia senza staccare la penna — eppure in non è derivabile, perché ha uno spigolo: la pendenza da sinistra è , da destra è , e non esiste un’unica retta tangente. È esattamente il caso di un limite sinistro e un limite destro del rapporto incrementale che non coincidono.
Il caso estremo è la funzione di Weierstrass, costruita da Weierstrass nel 1872: una funzione continua in ogni punto della retta e derivabile in nessun punto, tutta spigoli a ogni scala. La sua esistenza fu uno shock per i matematici dell’epoca, convinti che una funzione continua dovesse avere una tangente “quasi dappertutto”. È il motivo per cui la ReLU richiede la clausola “quasi ovunque”.
Il gradiente che svanisce. La regola della catena moltiplica derivate locali lungo la catena. Se ogni anello contribuisce un fattore minore di — come succede con la sigmoid, la cui derivata non supera mai — il prodotto di molti fattori piccoli collassa verso zero in modo esponenziale nella profondità della rete. È il vanishing gradient problem: nelle reti profonde il gradiente che arriva ai primi strati è così piccolo che quegli strati di fatto non imparano.
Un conto con i numeri rende il fenomeno tangibile. Supponi una rete di strati, ognuno con un’attivazione sigmoid che nel suo punto migliore contribuisce un fattore alla catena di moltiplicazioni.
Il gradiente che raggiunge il primo strato è proporzionale a , cioè circa : un millesimo di miliardesimo. Per il primo strato è indistinguibile da zero, e quei pesi restano praticamente fermi per tutto il training.
Lo specchio opposto è l’exploding gradient: se ogni fattore è, diciamo, , allora supera , e il gradiente diverge facendo esplodere l’aggiornamento dei pesi. Entrambi i fenomeni non sono bug del codice — sono conseguenze dirette della struttura moltiplicativa della regola della catena.
La diffusione della ReLU, la cui derivata vale esattamente su tutto il semiasse positivo e quindi non schiaccia né amplifica il gradiente, è in buona parte una risposta a questo problema. Le connessioni residue (gli skip connection di ResNet) sono un’altra risposta, che dà al gradiente una scorciatoia per saltare anelli della catena.
Punti critici ingannevoli. La lettura computazionale dice che derivata vicino a zero significa “siamo vicini a un massimo, un minimo o un plateau”. Il problema è che la derivata da sola non distingue i tre casi: in tutti e tre vale (circa) zero. Un optimizer che si limita a guardare la derivata prima può bloccarsi su un plateau, o su un punto di sella, scambiandolo per un minimo. Distinguere richiede informazione di ordine superiore — la derivata seconda, la curvatura — che è il tema del capitolo hessiane-curvatura (in preparazione).
Confondere pendenza e altezza. La derivata misura la pendenza di una funzione, non il suo valore. Una funzione può valere un milione ed essere perfettamente piatta lì (derivata zero); può valere zero ed essere ripidissima.
“Derivata grande” non significa “funzione grande”: significa “funzione che cambia in fretta”. Tenere separati i due concetti — quanto vale e quanto velocemente cambia — è essenziale per leggere correttamente un grafico di loss durante il training. Una loss alta e piatta e una loss bassa e ripida richiedono diagnosi opposte.
L’astrazione del limite non costruisce. Il limite e la derivata sono garanzie di esistenza e di comportamento, non istruzioni di calcolo numerico. Il teorema del valore intermedio assicura che una temperatura intermedia è stata raggiunta, ma non dice quando. La derivata dice che la tangente esiste, ma su un computer si lavora sempre con un piccolo e finito, mai con il limite esatto: ogni derivata numerica è un’approssimazione, soggetta a errori di arrotondamento. La distanza tra la matematica ideale del limite e l’aritmetica finita di una macchina è una fonte costante di bug sottili nel calcolo scientifico.
C’è anche una sottigliezza nello scegliere . L’intuizione dice “più piccolo è , più precisa è la derivata numerica”. Vero solo a metà.
Sotto una certa soglia, diventa così piccolo che la sottrazione perde cifre significative — i due numeri sono quasi identici e la macchina li rappresenta con precisione finita, così la differenza è quasi tutta rumore di arrotondamento. Esiste un ottimale, né troppo grande né troppo piccolo, e trovarlo è un problema concreto.
È uno dei motivi per cui i framework di deep learning non calcolano i gradienti per differenze finite ma per differenziazione automatica, che applica le regole esatte di derivazione e non soffre di questo problema.
La derivata locale non vede lontano. La derivata in un punto descrive il comportamento in quel punto e in un suo intorno piccolo. Non dice nulla di affidabile su cosa succede lontano. Un optimizer che segue il gradiente sta sempre prendendo una decisione basata su informazione locale: sa in che direzione la loss scende qui, non sa se quella direzione porta al minimo globale o a un minimo locale mediocre. È il limite strutturale di ogni metodo del primo ordine, e il motivo per cui il training di reti grandi è in parte un’arte di inizializzazione, scheduling e fortuna, non solo di matematica esatta.
Collegamenti
Sezione intitolata “Collegamenti”- Gradienti e derivate direzionali senza analisi — il gradiente è la derivata estesa a funzioni di più variabili, vista come freccia geometrica. Quel capitolo la usa a intuito; questo le mette sotto le fondamenta formali.
- Discesa del gradiente: SGD, momentum, Adam — l’algoritmo che usa la derivata per ottimizzare. Il “perché si va contro il segno della derivata” si chiarisce solo con la lettura computazionale di questo capitolo.
derivate-parziali-jacobiani(in preparazione) — il passo immediatamente successivo: derivare funzioni con più variabili di ingresso e più variabili di uscita. Estende la derivata di questo capitolo al caso multidimensionale.hessiane-curvatura(in preparazione) — la derivata seconda e la curvatura, l’informazione che distingue minimi, massimi e punti di sella là dove la derivata prima da sola non basta.serie-taylor(in preparazione) — la derivata come primo termine dell’approssimazione locale di una funzione: il modo in cui l’analisi rende “quasi lineare” qualunque funzione liscia, vicino a un punto.convessita(in preparazione) — la convessità si caratterizza con le derivate e lega la pendenza alla garanzia che un minimo trovato sia il minimo globale.mlp-backprop(in preparazione) — la backpropagation in dettaglio: la regola della catena di questo capitolo applicata, strato per strato, a una rete multilayer.funzioni-attivazione-ml(in preparazione) — ReLU, sigmoid, tanh e le altre attivazioni, con il dettaglio di perché la derivabilità (quasi ovunque) è un requisito e non un dettaglio.- Leibniz, Babbage, Lovelace, Turing: prima dei computer — Leibniz, qui co-inventore del calcolo, lì sognatore di un linguaggio universale per automatizzare il ragionamento: la stessa figura su due fronti.
Per andare oltre
Sezione intitolata “Per andare oltre”- Calculus di Michael Spivak (4ª ed., Publish or Perish, 2008) — il testo classico che costruisce limiti, continuità e derivate con rigore pieno ma con attenzione costante all’intuizione. Il riferimento per chi vuole vedere l’epsilon-delta usato sul serio.
- Calculus Made Easy di Silvanus P. Thompson (1910, ancora in stampa) — l’opposto stilistico di Spivak: introduzione informale e brillante alla derivata e all’integrale, scritta da un fisico per chi non sopporta il formalismo. Il sottotitolo originale dice tutto: “what one fool can do, another can”.
- Serie Essence of Calculus di 3Blue1Brown (Grant Sanderson, YouTube, 2017) — animazioni che rendono visibili la tangente come limite di secanti e la regola della catena. Il modo più rapido per vedere i concetti di questo capitolo.
- G. I. Sinkevich, On the history of epsilontics (arXiv:1502.06942, 2015) — ricostruzione storica della formalizzazione del limite, dal Bolzano del 1817 alla forma moderna di Weierstrass. Per chi vuole il dettaglio della sezione “Contesto”.
- D. Rumelhart, G. Hinton, R. Williams, Learning representations by back-propagating errors (Nature 323, 1986) — il paper che porta la backpropagation nel mainstream: la regola della catena di questo capitolo trasformata nell’algoritmo che addestra le reti profonde.