mozzicone Che cos'è la discesa del gradiente? - Unite.AI
Seguici sui social
Corso di perfezionamento sull'intelligenza artificiale:

AI 101

Che cos'è la discesa del gradiente?

mm
aggiornato on

Che cos'è un gradiente discendente?

Se hai letto come vengono addestrate le reti neurali, quasi sicuramente ti sei già imbattuto nel termine "discesa del gradiente". Discesa in pendenza è il metodo principale per ottimizzare le prestazioni di una rete neurale, riducendo il tasso di perdita/errore della rete. Tuttavia, la discesa del gradiente può essere un po' difficile da comprendere per chi è nuovo al machine learning e questo articolo cercherà di darti un'intuizione decente su come funziona la discesa del gradiente.

La discesa del gradiente è un algoritmo di ottimizzazione. Viene utilizzato per migliorare le prestazioni di una rete neurale apportando modifiche ai parametri della rete in modo tale che la differenza tra le previsioni della rete e i valori effettivi/previsti della rete (indicati come perdita) sia il più piccola possibile. La discesa del gradiente prende i valori iniziali dei parametri e utilizza operazioni basate sul calcolo per regolare i loro valori verso i valori che renderanno la rete il più precisa possibile. Non è necessario conoscere molto il calcolo per capire come funziona la discesa del gradiente, ma è necessario avere una comprensione dei gradienti.

Cosa sono i gradienti?

Supponiamo che esista un grafico che rappresenta la quantità di errori commessi da una rete neurale. La parte inferiore del grafico rappresenta i punti di errore più basso mentre la parte superiore del grafico è dove l'errore è più alto. Vogliamo spostarci dalla parte superiore del grafico verso il basso. Un gradiente è solo un modo per quantificare la relazione tra errore e pesi della rete neurale. Il rapporto tra queste due cose può essere rappresentato graficamente come una pendenza, con pesi errati che producono più errori. La pendenza della pendenza/del gradiente rappresenta la velocità di apprendimento del modello.

Una pendenza più ripida significa che vengono effettuate grandi riduzioni di errore e il modello sta imparando velocemente, mentre se la pendenza è zero il modello si trova su un plateau e non sta imparando. Possiamo scendere lungo la pendenza verso un errore minore calcolando un gradiente, una direzione di movimento (cambiamento nei parametri della rete) per il nostro modello.

Spostiamo leggermente la metafora e immaginiamo una serie di colline e valli. Vogliamo arrivare in fondo alla collina e trovare la parte della valle che rappresenta la minore perdita. Quando partiamo in cima alla collina, possiamo fare grandi passi giù per la collina ed essere sicuri che ci stiamo dirigendo verso il punto più basso della valle.

Tuttavia, man mano che ci avviciniamo al punto più basso della valle, i nostri passi dovranno ridursi, altrimenti potremmo superare il vero punto più basso. Allo stesso modo, è possibile che quando si regolano i pesi della rete, gli aggiustamenti possano effettivamente portarlo più lontano dal punto di perdita più bassa, e quindi gli aggiustamenti devono ridursi nel tempo. Nel contesto della discesa di una collina verso un punto di minor perdita, il gradiente è un vettore/istruzioni che descrivono in dettaglio il percorso che dovremmo prendere e quanto dovrebbero essere grandi i nostri passi.

Ora che sappiamo che i gradienti sono istruzioni che ci dicono in quale direzione muoverci (quali coefficienti dovrebbero essere aggiornati) e quanto sono grandi i passi che dovremmo fare (quanto i coefficienti dovrebbero essere aggiornati), possiamo esplorare come viene calcolato il gradiente.

Calcolo dei gradienti e discesa del gradiente

La discesa del gradiente inizia in un punto di perdita elevata e, attraverso più iterazioni, compie passi nella direzione della perdita più bassa, con l'obiettivo di trovare la configurazione ottimale del peso. Foto: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Per poter effettuare la discesa in pendenza occorre prima calcolare le pendenze. Al fine per calcolare il gradiente, dobbiamo conoscere la funzione perdita/costo. Useremo la funzione di costo per determinare la derivata. Nel calcolo, la derivata si riferisce solo alla pendenza di una funzione in un dato punto, quindi in pratica stiamo solo calcolando la pendenza della collina in base a la funzione di perdita. Determiniamo la perdita eseguendo i coefficienti attraverso la funzione di perdita. Se rappresentiamo la funzione di perdita come "f", allora possiamo affermare che l'equazione per calcolare la perdita è la seguente (stiamo solo eseguendo i coefficienti attraverso la nostra funzione di costo scelta):

Perdita = f(coefficiente)

Quindi calcoliamo la derivata o determiniamo la pendenza. Ottenere la derivata della perdita ci dirà quale direzione è in salita o in discesa, fornendoci il segno appropriato per aggiustare i nostri coefficienti. Rappresenteremo la direzione appropriata come "delta".

delta = derivata_funzione(perdita)

Ora abbiamo determinato quale direzione è in discesa verso il punto di minor perdita. Ciò significa che possiamo aggiornare i coefficienti nei parametri della rete neurale e, si spera, ridurre la perdita. Aggiorneremo i coefficienti in base ai coefficienti precedenti meno la variazione di valore appropriata determinata dalla direzione (delta) e un argomento che controlla l'entità della variazione (la dimensione del nostro passo). L'argomento che controlla la dimensione dell'aggiornamento è chiamato "tasso di apprendimento” e lo rappresenteremo come “alfa”.

coefficiente = coefficiente – (alfa * delta)

Quindi ripetiamo semplicemente questo processo fino a quando la rete non è convergente attorno al punto di perdita più bassa, che dovrebbe essere vicino allo zero.

È molto importante scegliere il giusto valore per il tasso di apprendimento (alfa). Il tasso di apprendimento scelto non deve essere né troppo piccolo né troppo grande. Ricorda che mentre ci avviciniamo al punto di minor perdita, i nostri passi devono diventare più piccoli, altrimenti supereremo il vero punto di minor perdita e finiremo dall'altra parte. Il punto di minor perdita è piccolo e se il nostro tasso di variazione è troppo grande l'errore può finire per aumentare di nuovo. Se le dimensioni del passo sono eccessive, le prestazioni della rete continueranno a rimbalzare attorno al punto di minor perdita, superandolo da un lato e poi dall'altro. Se questo accade la rete non convergerà mai sulla vera configurazione di peso ottimale.

Al contrario, se il tasso di apprendimento è troppo piccolo, la rete può potenzialmente impiegare un tempo straordinariamente lungo per convergere sui pesi ottimali.

Tipi Di Gradiente Discendente

Ora che abbiamo capito come funziona la discesa del gradiente in generale, diamo un'occhiata ad alcune delle differenze tipi di discesa del gradiente.

Discesa del gradiente batch: questa forma di discesa del gradiente attraversa tutti i campioni di addestramento prima di aggiornare i coefficienti. È probabile che questo tipo di discesa del gradiente sia la forma di discesa del gradiente più efficiente dal punto di vista computazionale, poiché i pesi vengono aggiornati solo dopo che l'intero batch è stato elaborato, il che significa che ci sono meno aggiornamenti totali. Tuttavia, se il set di dati contiene un numero elevato di esempi di addestramento, la discesa del gradiente batch può richiedere molto tempo per l'addestramento.

Stochastic Gradient Descent: in Stochastic Gradient Descent viene elaborato un solo esempio di addestramento per ogni iterazione della discesa del gradiente e dell'aggiornamento dei parametri. Ciò si verifica per ogni esempio di addestramento. Poiché viene elaborato un solo esempio di addestramento prima dell'aggiornamento dei parametri, tende a convergere più rapidamente rispetto a Batch Gradient Descent, poiché gli aggiornamenti vengono effettuati prima. Tuttavia, poiché il processo deve essere eseguito su ogni elemento del set di addestramento, il completamento può richiedere molto tempo se il set di dati è di grandi dimensioni, pertanto è preferibile utilizzare uno degli altri tipi di discesa del gradiente.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent funziona suddividendo l'intero set di dati di addestramento in sottosezioni. Crea mini-batch più piccoli che vengono eseguiti attraverso la rete e quando il mini-batch è stato utilizzato per calcolare l'errore, i coefficienti vengono aggiornati. Mini-batch Gradient Descent rappresenta una via di mezzo tra Stochastic Gradient Descent e Batch Gradient Descent. Il modello viene aggiornato più frequentemente che nel caso di Batch Gradient Descent, il che significa una convergenza leggermente più rapida e robusta sui parametri ottimali del modello. È anche più efficiente dal punto di vista computazionale di Stochastic Gradient Descent

Blogger e programmatore con specialità in machine Learning ed Deep Learning temi. Daniel spera di aiutare gli altri a usare il potere dell'intelligenza artificiale per il bene sociale.