• Home
  • Chi sono
  • Risorse
  • Contatti
  • Approfondimenti
  • Cerca nel sito

Lorenzo Govoni

Business e Tecnologia

  • Big Data
  • Business
  • Excel
  • Intelligenza Artificiale

Algoritmo Discesa del Gradiente

discesa del gradiente

L’obiettivo di qualsiasi algoritmo di apprendimento automatico è quello di ridurre, se non eliminare, la differenza tra i valori previsti e quelli effettivi di un modello di apprendimento.

Questo perché un errore inferiore tra i valori effettivi e quelli previsti indica che l’algoritmo ha svolto un buon lavoro nell’apprendimento.

Ridurre questa differenza altro non significa che ridurre al minimo una funzione di costo, od obiettivo, su cui si basa il modello che si sta costruendo.

Uno dei modi più comuni per raggiungere questo scopo è utilizzare l’algoritmo di discesa del gradiente, argomento centrale di questo articolo.

 

Cos’è la discesa del gradiente?

Un gradiente è una funzione a valore vettoriale che rappresenta la pendenza della tangente del grafico della funzione, indicando la direzione della massima velocità di aumento della funzione.

Non ci hai capito molto vero?

Per farla semplice, supponi di essere perso tra le montagne in una fitta nebbia; puoi solo sentire la pendenza del terreno sotto i tuoi piedi. Il tuo obiettivo è raggiungere la valle inferiore, ossia il punto più basso della montagna.

Come fare allora?

Dovrai fare dei passi e spostarti verso la direzione della pendenza più alta. Lo fai iterativamente, muovendo un passo alla volta fino a raggiungere finalmente alla valle della montagna.

Questo è esattamente ciò che fa la discesa del gradiente. Il suo obiettivo è raggiungere il punto più basso di una funzione (in questo esempio la montagna).

Detta in termini più tecnici, il gradiente rappresenta una derivata che indica la pendenza o l’inclinazione della funzione di costo.

 

Concetti base

In matematica, la derivata è il tasso di variazione o la pendenza di una funzione in un determinato punto.

Come esempio, prendi la funzione f (x) = x². La derivata di f (x), è un’altra funzione f ‘(x) che calcola la pendenza di f (x) in un determinato punto x. In questa situazione, per x = 2, la pendenza di f (x) = x² è 2x o 2 * 2 = 4.

Quindi, il valore della derivata è l’inclinazione della pendenza in un punto specifico.

E la cosa buona è che il gradiente è esattamente la stessa cosa. Con un’eccezione: il gradiente è una funzione a valore vettoriale che memorizza derivate ​​parziali.

E ciò significa che, il gradiente è un vettore e ciascuno dei suoi componenti è una derivata parziale rispetto a una specifica variabile.

Per capirci meglio, prendi la funzione, f (x, y) = x² sin(y) come altro esempio. Qui, f (x, y) è una funzione multi-variabile (per la precisione a due variabili, x e y). Il suo gradiente è un vettore, contenente le derivate parziali di f (x, y). Il primo rispetto a x, e il secondo rispetto a y. Se calcoliamo i parziali di f (x, y) otteniamo:

La prima di queste due espressioni viene detta derivata parziale rispetto ad x, mentre la seconda derivata parziale rispetto ad y.

Quindi il gradiente è il seguente vettore:

Che nell’esempio diventa:

Quest’ultima espressione non è altro che una funzione che rappresenta un punto in uno spazio bidimensionale, o un vettore bidimensionale.

Nota che ogni componente indica qual è la direzione della salita più ripida per ciascuna delle variabili della funzione. Quindi, il gradiente punta verso la direzione in cui la funzione aumenta maggiormente.

Allo stesso modo, se ottenessimo una funzione con 4 variabili, otterremmo un vettore gradiente con 4 derivate parziali. Generalmente, una funzione con n variabili si traduce in un vettore gradiente n-dimensionale.

Per la discesa a gradiente, tuttavia, non vogliamo massimizzare f il più velocemente possibile, ma vogliamo minimizzarla, ossia trovare il punto più piccolo che minimizzi la funzione.

Per farlo avremo bisogno anche di specificare ciò che chiamiamo il tasso di apprendimento (o Learning Rate).

Il Learning Rate

Dall’esempio proposto precedentemente, la montagna rappresenta i dati tracciati in uno spazio, il quanto ci si muove rappresenta la velocità di apprendimento.

Con un alto tasso di apprendimento possiamo coprire più terreno ad ogni passo, ma rischiamo di superare il punto più basso poiché la pendenza della montagna cambia costantemente.

Con un tasso di apprendimento molto basso, possiamo spostarci con sicurezza nella direzione del gradiente negativo poiché lo ricalcoliamo frequentemente. Un basso tasso di apprendimento è più preciso, ma il calcolo del gradiente richiede molto tempo, quindi ci vorrà molto tempo per arrivare in fondo.

 

Come abbiamo detto, il gradiente è una funzione valutata in base al vettore e, in quanto vettore, ha sia una direzione che una grandezza. L’algoritmo di discesa gradiente moltiplica il gradiente per un numero (velocità di apprendimento o dimensione del passo) per determinare il punto successivo.

Ad esempio: avendo un gradiente pari a 4.2 e un tasso di apprendimento di 0,01, l’algoritmo di discesa gradiente selezionerà il punto successivo a 0,042 dal punto precedente.

Per capire meglio come funziona, puoi vedere visivamente a questo link gli effetti del tasso di apprendimento.

Come fa però il gradiente a capire in che direzione andare?

Semplicemente guardando la direzione: quella opposta al gradiente ci dirà dove la funzione di costo si riduce e sarà quella favorita dall’algoritmo per esplorare lo spazio. Una volta raggiunto il punto più basso della montagna, troviamo il valore (o i pesi) dove il costo della funzione ha raggiunto il suo minimo (altro non sono che i parametri in cui il modello presenta una maggiore precisione).

Così: se la derivata è positiva, significa che la pendenza sale (quando si va a destra!) Se la derivata è negativa, significa che la pendenza scende. Se la derivata è uguale a 0, significa che non va né su nè giù.

Step algoritmo

L’algoritmo discesa del gradiente conosce solo due cose: il gradiente (per quella posizione, o parametri) e la larghezza del passo da compiere (tasso di apprendimento).

Con tali informazioni, il valore corrente di ciascun parametro viene aggiornato e con i nuovi valori dei parametri, il gradiente viene ricalcolato e il processo viene ripetuto.

Dopo molti passaggi, una volta che si rende conto che il costo non migliora di molto ed è bloccato molto vicino a un punto particolare, si ha quello che è definita convergenza (o la fermata dell’algoritmo). Il valore dei parametri nell’ultima fase è noto come il “migliore” insieme di parametri.

Tutto ciò può essere riassunto nel seguente modo:

  1. Dato il gradiente, calcola la variazione dei parametri con il tasso di apprendimento.
  2. Ricalcola il nuovo gradiente con il nuovo valore del parametro.
  3. Ripeti il ​​passaggio 1 e 2 fino a che non si raggiunge la convergenza.

Varianti di discesa del gradiente

Esistono tre varianti di discesa del gradiente in base alla quantità di dati utilizzati per calcolare il gradiente:

  • Discesa del gradiente Batch;
  • Discesa del gradiente stocastica;
  • Discesa del gradiente mini-batch.

 

Discesa del gradiente Batch

La discesa del gradiente Batch, noto anche come Batch Gradient Descent (BGD), calcola l’errore per ogni osservazione nel set di dati ma esegue un aggiornamento solo dopo che tutte le osservazioni sono state valutate.

La discesa con gradiente batch non viene spesso utilizzata, poiché rappresenta un enorme consumo di risorse computazionali, poiché l’intero set di dati deve rimanere in memoria.

 

Discesa del gradiente stocastica

La discesa stocastica del gradiente, o Stochastic Gradient Descent (SGD) esegue un aggiornamento dei parametri per ogni osservazione. Quindi, invece di eseguire il ciclo su ogni osservazione, è sufficiente uno per eseguire l’aggiornamento dei parametri.

L’SGD è in genere più veloce della discesa del gradiente batch, ma i suoi frequenti aggiornamenti causano una maggiore varianza nel tasso di errore, che a volte può aumentare invece di diminuire.

 

Discesa del gradiente mini-batch

È una combinazione di discesa gradiente batch e discesa gradiente stocastica. La discesa gradiente mini-batch esegue un aggiornamento per una serie di osservazioni. È l’algoritmo di scelta per le reti neurali e le dimensioni dei lotti sono in genere da 50 a 256, in modo da raggiungere più velocemente la convergenza.

 

Conclusione

In questo articolo abbiamo visto la discesa a gradiente, una tecnica che potrebbe non garantire una soluzione ottimale globale, ma che trova un buon locale ottimale molto rapidamente per essere utile.

La discesa gradiente in generale è stata spesso considerata lenta o inaffidabile. In passato, l’applicazione della discesa gradiente a problemi di ottimizzazione non convessa era considerata folle o priva di principi.

Oggi molti modelli di apprendimento automatico funzionano molto bene se addestrati con la discesa del gradiente.

  • Modello di regressione lineare tramite algoritmo Gradient Descent in Python
    Modello di regressione lineare tramite algoritmo…
  • Come utilizzare il Pert per determinare la durata di un progetto
    Come utilizzare il Pert per determinare la durata di…
  • Modello ARIMA: come prevedere le serie temporali
    Modello ARIMA: come prevedere le serie temporali
  • Valutazione delle rimanenze di magazzino: 3 metodi principali
    Valutazione delle rimanenze di magazzino: 3 metodi…
Share
Pin1
Share
Tweet

Intelligenza Artificiale Machine Learning, modello predittivo

  • Home
  • Archivio
  • Risorse
  • Newsletter
  • Cerca nel sito

Copyright © 2021 · Lorenzo Govoni - Privacy Policy