Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

trainlm

Retropropagazione di Levenberg-Marquardt

Descrizione

net.trainFcn = 'trainlm' visualizza la proprietà della rete trainFcn.

[trainedNet,tr] = train(net,...) addestra la rete con trainlm.

trainlm è una funzione di addestramento della rete che aggiorna i valori di pesi e bias secondo l'ottimizzazione di Levenberg-Marquardt.

trainlm è spesso l’algoritmo di retropropagazione più veloce nella toolbox ed è vivamente consigliato come algoritmo supervisionato di prima scelta, sebbene richieda più memoria rispetto ad altri algoritmi.

L’addestramento avviene secondo i parametri di addestramento trainlm, mostrati qui con i relativi valori predefiniti:

  • net.trainParam.epochs — Numero massimo di epoche per l’addestramento. Il valore predefinito è 1000.

  • net.trainParam.goal — Obiettivo di performance. Il valore predefinito è 0.

  • net.trainParam.max_fail — Errori di convalida massimi. Il valore predefinito è 6.

  • net.trainParam.min_grad — Gradiente di performance massimo. Il valore predefinito è 1e-7.

  • net.trainParam.mumu iniziale. Il valore predefinito è 0,001.

  • net.trainParam.mu_dec — Fattore di decremento per mu. Il valore predefinito è 0,1.

  • net.trainParam.mu_inc — Fattore di incremento per mu. Il valore predefinito è 10.

  • net.trainParam.mu_max — Valore massimo per mu. Il valore predefinito è 1e10.

  • net.trainParam.show — Epoche tra visualizzazioni (NaN per nessuna visualizzazione). Il valore predefinito è 25.

  • net.trainParam.showCommandLine — Generazione di output della riga di comando. Il valore predefinito è false.

  • net.trainParam.showWindow — Visualizzazione dell’interfaccia grafica di addestramento. Il valore predefinito è true.

  • net.trainParam.time — Tempo massimo di addestramento in secondi. Il valore predefinito è inf.

I vettori di convalida sono usati per interrompere l’addestramento in anticipo se la performance della rete sui vettori di convalida non riesce a migliorare o se resta uguale per max_fail epoche in una riga. I vettori di test sono usati come ulteriore controllo della corretta generalizzazione della rete, ma non hanno alcun effetto sull’addestramento.

esempio

Esempi

comprimi tutto

Questo esempio mostra come addestrare una rete neurale utilizzando la funzione di addestramento trainlm.

Qui viene addestrata una rete neurale per prevedere le percentuali di grasso corporeo.

[x, t] = bodyfat_dataset;
net = feedforwardnet(10, 'trainlm');
net = train(net, x, t);

y = net(x);

Argomenti di input

comprimi tutto

Rete di input, specificata come un oggetto di rete. Per creare un oggetto di rete, utilizzare ad esempio feedforwardnet o narxnet.

Argomenti di output

comprimi tutto

Rete addestrata, restituita come un oggetto network.

Record di addestramento (epoch e perf), restituito come una struttura i cui campi dipendono dalla funzione di addestramento della rete (net.NET.trainFcn). Può comprendere campi quali:

  • Funzioni e parametri di addestramento, divisione dei dati e performance

  • Indici di divisione dei dati per i set di addestramento, convalida e test

  • Maschere di divisione dei dati per i set di addestramento, convalida e test

  • Numero di epoche (num_epochs) ed epoca migliore (best_epoch).

  • Un elenco dei nomi degli stati di addestramento (states).

  • Campi per ciascun nome di stato che registrano il suo valore durante l'addestramento

  • Performance della rete migliore (best_perf, best_vperf, best_tperf)

Limitazioni

Questa funzione utilizza i calcoli jacobiani, che presuppongono che la performance sia una media o una somma degli errori quadratici. Quindi, le reti addestrate con questa funzione devono utilizzare la funzione di performance mse o sse.

Ulteriori informazioni

comprimi tutto

Algoritmo di Levenberg-Marquardt

Come i metodi quasi Newton, l’algoritmo di Levenberg-Marquardt è stato progettato per avvicinarsi alla velocità di addestramento di secondo ordine senza dover calcolare la matrice hessiana. Quando la funzione di performance ha la forma di una somma dei quadrati (come avviene di solito nelle reti feed-forward di addestramento), è possibile approssimare la matrice hessiana nel modo seguente

H = JTJ(1)

ed è possibile calcolare il gradiente come segue

g = JTe(2)

dove J è la matrice jacobiana che contiene le prime derivate degli errori di rete rispetto ai pesi e ai bias e e è un vettore degli errori di rete. La matrice jacobiana può essere calcolata con una tecnica di retropropagazione standard (vedere [HaMe94]), che è molto meno complessa rispetto al calcolo della matrice hessiana.

L’algoritmo di Levenberg-Marquardt usa questa approssimazione della matrice hessiana nel seguente aggiornamento di tipo Newton-like:

xk+1=xk[JTJ+μI]1JTe

Quando lo scalare µ è zero, si tratta semplicemente di un metodo di Newton, che utilizza la matrice hessiana approssimata. Quando µ è maggiore, diventa la discesa del gradiente con una dimensione di fase ridotta. Il metodo di Newton è più veloce e accurato vicino a un errore minimo, quindi l’obiettivo è spostarsi verso tale metodo il prima possibile. Pertanto µ diminuisce dopo ogni fase corretta (riduzione della funzione di performance) e aumenta solo quando una fase preliminare aumenterà la funzione di performance. In questo modo, la funzione di performance si riduce sempre a ogni iterazione dell’algoritmo.

La descrizione originale dell’algoritmo di Levenberg-Marquardt è data in [Marq63]. L’applicazione di Levenberg-Marquardt all’addestramento della rete neurale viene descritto in [HaMe94] e nella pagine da 12 a 19 di [HDB96]. L’algoritmo sembra essere il metodo più veloce per l’addestramento delle reti neurali feed-forward di dimensioni moderate (fino a pesi di diverse centinaia). Viene anche implementato in modo efficiente nel software MATLAB®, perché la soluzione dell’equazione della matrice è una funzione integrata, quindi i suoi attributi sono ancora più pronunciati in un ambiente MATLAB.

Utilizzo della rete

È possibile creare una rete standard che utilizza trainlm con feedforwardnet o cascadeforwardnet. Per preparare una rete personalizzata da addestrare con trainlm,

  1. Impostare NET.trainFcn su trainlm. Questa operazione imposta NET.trainParam sui parametri predefiniti di trainlm.

  2. Impostare le proprietà di NET.trainParam sui valori desiderati.

In entrambi i casi, chiamare train con la rete che si ottiene addestra la rete con trainlm. Per gli esempi, vedere feedforwardnet e cascadeforwardnet.

Algoritmi

trainlm supporta l’addestramento con i vettori di convalida e di test se la proprietà NET.divideFcn della rete è impostata su una funzione di divisione dei dati. I vettori di convalida sono usati per interrompere l’addestramento in anticipo se la performance della rete sui vettori di convalida non riesce a migliorare o se resta uguale per max_fail epoche in una riga. I vettori di test sono usati come ulteriore controllo della corretta generalizzazione della rete, ma non hanno alcun effetto sull’addestramento.

trainlm può addestrare qualsiasi rete, a condizione che le funzioni di peso, input netto e trasferimento abbiano funzioni derivate.

La retropropagazione viene utilizzata per calcolare la matrice jacobiana jX della performance perf rispetto alle variabili di pesi e bias X. Ogni variabile viene regolata secondo il metodo di Levenberg-Marquardt,

jj = jX * jX
je = jX * E
dX = -(jj+I*mu) \ je

dove E indica tutti gli errori e I indica la matrice di identità.

Il valore adattivo mu aumenta di mu_inc fino a quando la modifica sopra non produce un valore di performance ridotto. La modifica viene poi apportata alla rete e mu diminuisce di mu_dec.

L’addestramento si interrompe quando si verifica una delle condizioni seguenti:

  • Viene raggiunto il numero massimo di epochs (ripetizioni).

  • Viene superata la quantità massima di time.

  • La performance è minimizzata al goal.

  • Il gradiente di performance massimo scende al di sotto di min_grad.

  • mu supera mu_max.

  • La performance di convalida (errore di convalida) è aumentata di oltre max_fail volte dall’ultima riduzione (usando la convalida).

Cronologia versioni

Introduzione prima di R2006a