Inizierò con un'osservazione generale: le informazioni del primo ordine (ovvero, usando solo i gradienti, che codificano la pendenza) possono solo darti informazioni direzionali: può dirti che il valore della funzione diminuisce nella direzione di ricerca, ma non per quanto tempo . Per decidere fino a che punto andare lungo la direzione di ricerca, sono necessarie ulteriori informazioni (la discesa del gradiente con lunghezze di passo costanti può non riuscire anche per problemi quadratici convessi). Per questo, hai sostanzialmente due scelte:
- 1
- Prova ed errore (per cui ovviamente intendo usare una corretta ricerca di linea come Armijo).
O(1)
α0>0g0:=∇f(x0)k=0,...
- sk=−α−1kgkxk+1=xk+sk
- gk+1=∇f(xk+1)yk=gk+1−gk
- αk+1=(yk)Tyk(yk)Tsk
f(xk+1)f(xk)σk∈(0,α−1k)γ ∈ ( 0 , 1 ) M M = 10
f(xk−σkgk)≤maxmax(k−M,1)≤j≤kf(xj)−γσk(gk)Tgk,
γ∈(0,1)MM=10
Un approccio alternativo (e, a mio avviso, molto migliore) sarebbe quello di utilizzare questa approssimazione delle differenze finite già nel calcolo della direzione di ricerca; questo è chiamato un metodo quasi-Newton . L'idea è quella di costruire in modo incrementale un'approssimazione dell'Assia usando le differenze di gradienti. Ad esempio, potresti prendere (la matrice identità) e per risolvi
e imposta
con come sopra e . (Questo si chiama aggiornamento di Broyden∇2f(xk)H0=Idk=0,…
Hksk=−gk,(1)
ykxk+1=xk+skHk+1=Hk+(yk−Hksk)T(sk)T(sk)Tsk
ykxk+1=xk+sked è usato raramente in pratica; un aggiornamento migliore ma leggermente più complicato è l'
aggiornamento BFGS , per il quale - e ulteriori informazioni - mi riferisco all'ottimizzazione
numerica del libro di Nocedal e Wright .) L'aspetto negativo è che a) ciò richiederebbe la risoluzione di un sistema lineare in ogni passaggio (ma solo delle dimensioni dell'ignoto che nel tuo caso è una condizione iniziale, quindi lo sforzo dovrebbe essere dominato risolvendo i PDE per ottenere il gradiente; inoltre, esistono regole di aggiornamento per approssimazioni dell'Assia
inversa , che richiedono solo il calcolo di una singola matrice -vector prodotto) eb) hai ancora bisogno di una ricerca per garantire la convergenza ...
Fortunatamente, in questo contesto esiste un approccio alternativo che utilizza ogni valutazione delle funzioni. L'idea è che per simmetrico e positivo definito (che è garantito per l'aggiornamento BFGS), risolvere equivale a minimizzare il modello quadratico
In un metodo di regione attendibile , lo faresti con il vincolo aggiuntivo che , dove è un raggio della regione di fiducia opportunamente scelto (che svolge il ruolo della lunghezza del passo ). L'idea chiave è ora di scegliere questo raggio in modo adattivo, in base al passo calcolato. In particolare, guardi il rapporto
(1) q k ( s ) = 1Hk(1)
qk(s)=12sTHks+sTgk.
∥s∥≤ΔkΔkσkρk:=f(xk)−f(xk+sk)f(xk)−qk(sk)
della riduzione effettiva e prevista del valore della funzione. Se è molto piccolo, il tuo modello era difettoso e scarti e riprova con . Se è vicino a , il modello è buono e si imposta e si aumenta . Altrimenti basta impostare e lasciare da solo. Per calcolare il minimizer effettivo di
ρkskΔk+1<Δkρk1xk+1=xk+skΔk+1>Δkxk+1=xk+skΔkskmin∥s∥≤Δkqk(s), esistono diverse strategie per evitare di dover risolvere l'intero problema di ottimizzazione vincolata; il mio preferito è
il metodo CG troncato di Steihaug . Per maggiori dettagli, mi riferisco di nuovo a Nocedal e Wright.