Discesa del gradiente

Da testwiki.
Versione del 16 mar 2025 alle 21:03 di imported>Simone Biancolilla (Migliorato la pagina)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca
Illustrazione grafica del metodo per trovare il minimo su una superficie

In ottimizzazione e analisi numerica, il metodo di discesa del gradiente (detto anche metodo del gradiente, oppure metodo della massima discesa, o anche della discesa più ripida; Template:Inglese o steepest descent) è una tecnica che consente di determinare i punti di massimo e minimo di una funzione di più variabili. In particolare, il metodo va alla ricerca di punti che soddisfano condizioni di ottimalità (condizioni necessarie, sufficienti, necessarie e sufficienti all'ottimo).

Il metodo fu sviluppato, e pubblicato nel 1847, dal matematico francese Augustin-Louis Cauchy nel tentativo di risolvere il problema della determinazione dell'orbita di un corpo celeste a partire dalle sue equazioni del moto[1].

Esempio

Si supponga di voler minimizzare la funzionef(x1,x2,x3)=x12x2+x3 e si scelga come soluzione iniziale il vettore 𝐱0=[1,2,3]T. Allora

f(𝐱0)=2

e, muovendosi in un intorno di 𝐱0:

f(1.1,2,3)=2.21,f(0.9,2,3)=1.81,f(1,2.1,3)=1.9,f(1,1.9,3)=2.1,f(1,2,3.1)=2.1,f(1,2,2.9)=1.9.

Questi calcoli mostrano che, per individuare dei punti - vicini a 𝐱0 - in corrispondenza dei quali la funzione assume un valore minore di f(𝐱0), conviene spostarsi lungo direzioni che abbiano la prima e la terza componente x1,x3 più piccole o seconda componente x2 più grande. Inoltre esistono delle direzioni preferenziali lungo le quali la funzione f decresce più velocemente (per esempio scegliere una coordinata x1 più piccola è preferibile rispetto a far diminuire x3).

La procedura può essere iterata partendo da un nuovo punto, ad esempio 𝐱1=[0.9,2,3]T, fino a individuare un minimo per f. L'esempio mostra che una procedura che aggiorni la soluzione in modo iterativo sulla base delle informazioni disponibili localmente può portare a individuare un punto di minimo per la funzione assegnata.

Metodo

Descrizione

Con riferimento al seguente problema di ottimizzazione non vincolata,

{minf(x)xn

il metodo del gradiente è una tecnica iterativa per la risoluzione di problemi di ottimizzazione non vincolati in cui a ogni passo k, supposto f(xk) diverso da zero, si sceglie come direzione di ricerca quella corrispondente a dk=f(xk), ovvero la direzione dell'anti-gradiente (si ricordi a tal proposito che ogni generico vettore dn, con d0, identifica una direzione).

In particolare, il nome di steepest descent method deriva proprio da questa scelta. Non è difficile dimostrare infatti che la direzione dell'anti-gradiente è la direzione che minimizza (massimizza in modulo) il valore della derivata della funzione f nel punto xk rispetto a qualsiasi altra direzione a norma euclidea unitaria. Si noti soprattutto il riferimento alla particolare norma utilizzata. Una direzione è ottima per una particolare norma presa in considerazione.

Possiamo dunque affermare che a ogni iterazione la direzione dk=f(xk) è soluzione al seguente problema (vincolato)

{minf(xk)Tdkdk2=1

La dimostrazione è immediata.

L'importanza di tale scelta in realtà risiede in altro. Si noti infatti che a ogni iterazione, si ha che f(xk)Tdk<0 (angolo ottuso tra i due vettori), questo garantisce che se si fa uso di tecniche di ricerca unidimensionali nella scelta del passo lungo la direzione dell'anti-gradiente, si riesce a dare all'algoritmo proprietà di convergenza globali.

Se l'algoritmo ne fa uso, allora a ogni iterazione, lo stato di aggiornamento della successione di punti prodotta diventa

𝐱k+1=𝐱kαkf(xk)

dove αk+ corrisponde alla lunghezza del passo di discesa.

Esempi di tecniche di ricerca unidimensionali sono quelli che soddisfano le condizioni di accettabilità di Wolfe (sufficiente riduzione, sufficiente spostamento)

f(xk+akdk)f(xk)+γakf(xk)Tdk,γ(0,1/2)
f(xk+akdk)Tdkσf(xk)Tdk,σ(γ,1)

Ancora una volta è lasciata al lettore la possibilità di dare una interpretazione geometrica alla seconda condizione, condizione di sufficiente spostamento.

Si osservi tuttavia che l'algoritmo non garantisce convergenza a punti di minimo globale; in realtà non assicura nemmeno che il punto così trovato sia un punto di minimo locale. Tuttavia, se aggiungiamo a f ipotesi di convessità su tutto il suo dominio di definizione, allora non solo si ha convergenza a un punto di minimo locale ma tale punto è anche un punto di minimo globale per la funzione (unico nel caso di stretta convessità).

Algoritmo

Lo schema generale per l'ottimizzazione di una funzione f(𝐱) mediante metodo del gradiente è il seguente:

x0Rn,k=0while f(𝐱k)0calcolare la direzione di discesa 𝐝k:=f(𝐱k)calcolare il passo di discesa αk𝐱k+1=𝐱k+αk𝐝kk=k+1end.

Analisi della convergenza

Una volta descritto il metodo, il prossimo passo è studiarne la rapidità di convergenza. In particolare diamo un risultato (facilmente dimostrabile) circa la rapidità di convergenza (Q-convergenza) della successione di punti {xk} al punto x:f(x)=0.

Di conseguenza la prima ipotesi che si fa nello studio della rapidità di convergenza del metodo è la validità del seguente limite

{xk}xper  k

Se le ipotesi prima enunciate sono valide, ovvero l'algoritmo fa uso di tecniche di ricerca unidimensionale, e in particolare si assicura l'unicità del punto stazionario per la funzione, il limite sopra indicato converge.

Supponiamo allora di voler minimizzare la seguente funzione quadratica strettamente convessa

f(x)=xTQx

con Q matrice simmetrica definita positiva, e si indichino il suo autovalore massimo e minimo rispettivamente con λM e λm.

Tramite semplici passaggi algebrici, si arriva a dimostrare che

xk+1x2(λMλm)1/2(λMλmλM+λm)xkx2

dando al gradiente rapidità di convergenza Q-lineare.

Si noti come dipende dal rapporto tra il massimo e il minimo autovalore della matrice. Questo spiega perché il metodo non funziona bene nel caso di matrici mal condizionate.

Soluzione di sistemi lineari

Un caso particolare di applicazione del metodo del gradiente consiste nella risoluzione di sistemi lineari. Si può usare il metodo ordinario o alcune varianti.

Metodo del gradiente

Si supponga di risolvere un sistema lineare della forma

A𝐱=𝐛,

dove A è una matrice simmetrica e definita positiva. Per le proprietà di A la soluzione di tale problema è equivalente alla procedura di minimizzazione della forma quadratica associata:

Q(𝐱)=12𝐱TA𝐱𝐱T𝐛.

Infatti:

Q(𝐱)=A𝐱𝐛

da cui

Q(𝐱)=0A𝐱=𝐛.

Per la funzione Q si ha che la direzione di massima discesa nel punto 𝐱k è:

Q(𝐱k)=𝐛A𝐱k=:𝐫k,

coincidente con il residuo 𝐫k del sistema lineare. Dunque la direzione di discesa scelta a ogni iterazione è 𝐩k=𝐫k.

Inoltre vale la seguente relazione:

Q~(αk):=Q(𝐱k+αk𝐩k)=12(𝐩kTA𝐩k)αk2𝐩kT(𝐛A𝐱k)=𝐫kαk+12𝐱kTA𝐱k𝐱kT𝐛[2] che permette di calcolare analiticamente il passo αk ottimale[3]. Infatti, imponendo la condizione di stazionarietà
0=dQ~dαk(αk)=(𝐩kTA𝐩k)αk𝐩kT𝐫k

si ricava

αk=𝐩kT𝐫k𝐩kTA𝐩k.

L'algoritmo del metodo del gradiente per la risoluzione di sistemi lineari è dunque

k=0while 𝐫k𝟎calcolare la direzione di discesa 𝐩k:=𝐫k=𝐛A𝐱kcalcolare il passo di discesa αk:=𝐩kT𝐫k𝐩kTA𝐩k𝐱k+1=𝐱k+αk𝐩kk=k+1end.

In aritmetica floating point la condizione del ciclo while può essere valutata verificando che la norma del residuo 𝐫k non sia più piccola di una tolleranza impostata dall'utente.

Varianti

Metodo del gradiente precondizionato

In molti casi è possibile accelerare la velocità di convergenza dell'algoritmo migliorando le proprietà di condizionamento della matrice A. Si introduca a tal fine una matrice di precondizionamento P simmetrica e definita positiva.

Lo schema risolutivo in questo caso diventa[3]:

k=0while 𝐫k𝟎calcolare la direzione di discesa 𝐩k:=𝐫k=𝐛A𝐱ktrovare la soluzione 𝐳k del sistema P𝐳k=𝐩kcalcolare il passo di discesa αk:=𝐳kT𝐫k𝐳kTA𝐳k𝐱k+1=𝐱k+αk𝐳kk=k+1end.

Metodo del gradiente coniugato

Template:Vedi anche

Il metodo del gradiente coniugato costituisce una variante del metodo del gradiente in cui viene effettuata una scelta diversa, ma particolarmente conveniente nel caso di sistemi lineari simmetrici e definiti positivi, per le direzioni di discesa 𝐩k. Tale scelta garantisce la convergenza del metodo (in aritmetica esatta) in un numero di iterazioni pari al più alla dimensione del sistema da risolvere.

Analisi dell'errore

È possibile dimostrare che l'errore commesso alla k-esima iterazione del metodo del gradiente soddisfa la seguente stima[3]:

𝐞kAck𝐞k1A,

dove

c=κ(A)1κ(A)+1,

κ(A) indica il numero di condizionamento in norma 2 di A e 𝐱A:=𝐱TA𝐱 è la norma indotta da A.

Nel caso precondizionato vale la stessa stima con

c=κ(P1A)1κ(P1A)+1.

Esempio di implementazione

Si riporta un esempio di possibile implementazione del metodo del gradiente nella versione precondizionata compatibile con i linguaggi di programmazione Octave e MATLAB.

function [xk] = grad_prec(A, b, x0, nmax, toll)
    xk = x0;
    iter = 0;
    while ((norm(rk) >= toll) && (iter < nmax))
        rk = b - A * xk;
        zk = P \ rk;
        alphak = zk' * rk / ((A * zk)' * zk);
        xk = xk + alphak * zk;
        iter = iter + 1;
    end
    if iter == nmax
        warning('Convergenza non raggiunta in nmax iterazioni!');
    end
end

Approssimazione stocastica

Template:Vedi anche Quando la funzione obiettivo è troppo costosa da calcolare a ogni iterazione, ma può essere scomposta in una somma di molti addendi (per esempio, la somma del costo calcolato su ogni singolo record in un dataset), il gradiente può essere approssimato stocasticamente restringendo la somma su un sottoinsieme di addendi a ogni iterazione, metodo noto come discesa stocastica del gradiente.

Applicazione alle reti neurali artificiali

La discesa del gradiente è ampiamente utilizzata in statistica e apprendimento automatico per l'addestramento tramite apprendimento supervisionato di modelli come reti neurali artificiali e modelli grafici. Il principio è noto come regola delta, e consiste nel valutare il modello su un input il cui corrispondente output esatto sia noto, e correggere ciascun parametro del modello in una quantità proporzionale (ma di segno opposto) rispetto al suo contributo all'errore sul risultato. L'algoritmo usato nelle reti neurali per implementare questo principio è noto come retropropagazione dell'errore, che consiste in un'applicazione della discesa del gradiente, essendo il contributo di ciascun parametro all'errore del modello dato dalla derivata parziale della funzione di perdita rispetto al parametro stesso.

La regola, classificabile fra i metodi per l'apprendimento supervisionato, può essere applicata a reti neurali di tipo in avanti (cioè con propagazione unidirezionale dei segnali, Template:Inglese) e permette di calcolare la differenza tra i valori di output che la rete ottiene e quelli che invece dovrebbe apprendere. La regola deve essere applicata a reti che usano unità di output ad attivazione continua e differenziabile ed è l'elemento fondamentale dell'algoritmo di retropropagazione dell'errore (backpropagation), alla base dell'approccio connessionista.

Data una rete in avanti con le proprietà sopra descritte, l'obiettivo che ci si prefigge è minimizzare la diversità tra i valori di attivazione delle unità di output 𝐲 della rete (ottenuti sommando i segnali provenienti dalle diverse unità di input 𝐱 moltiplicati per l'efficacia, o pesi sinaptici 𝐰 delle connessioni in ingresso), e i valori 𝐭 della risposta desiderata. Tale diversità viene quantificata attraverso una funzione di perdita. La funzione obiettivo che si vuole minimizzare è il valore atteso della perdita (in pratica la perdita media sui dati).

Per applicare il metodo del gradiente, la funzione di perdita deve essere derivabile rispetto ai valori di output 𝐲. Una scelta adatta a problemi di regressione è lo scarto quadratico medio tra 𝐲 e 𝐭 (valutato per tutte le unità di output e per tutti i pattern d'apprendimento); per problemi di classificazione si può utilizzare la divergenza di Kullback-Leibler o equivalentemente l'entropia incrociata.

Nella fase di addestramento, variando i pesi sinaptici 𝐰 (parametri del modello) si può aumentare o diminuire la funzione obiettivo; la prestazione della rete sarà funzione delle variabili 𝐰, e sarà massima quando si raggiunge il minimo della funzione obiettivo, il che si ottiene applicando il metodo del gradiente e aggiornando iterativamente i valori dei pesi sinaptici.

Poiché nelle applicazioni pratiche le dimensioni dei modelli e dei relativi dataset usati nell'addestramento sono molto grandi, in pratica si fa generalmente uso della discesa stocastica del gradiente per l'addestramento delle reti neurali e di altri modelli statistici e di apprendimento automatico.

Note

  1. Template:Cita web
  2. Si è sfruttata la proprietà A𝐱𝐲=𝐱A𝐲, valida se A è simmetrica.
  3. 3,0 3,1 3,2 Template:Cita.

Bibliografia

Voci correlate

Altri progetti

Template:Interprogetto

Collegamenti esterni

Template:Portale