2013-06-25 7 views
5

Ho imparato la discesa gradiente attraverso le risorse online (ovvero l'apprendimento automatico presso la coursera). Tuttavia, le informazioni fornite dicono solo di ripetere la discesa del gradiente fino a quando converge.Convergenza di discesa dei gradienti Come decidere la convergenza?

La loro definizione di convergenza era quella di utilizzare un grafico della funzione di costo relativa al numero di iterazioni e osservare quando il grafico si appiattisce. Quindi presumo che avrei fatto il seguente:

if (change_in_costfunction > precisionvalue) { 
      repeat gradient_descent 
} 

In alternativa, mi chiedevo se un altro modo per determinare la convergenza è quello di guardare l'approccio coefficiente è vero valore:

if (change_in_coefficient_j > precisionvalue) { 
      repeat gradient_descent_for_j 
} 
...repeat for all coefficients 

Così è la convergenza basata su la funzione di costo oi coefficienti? E come determiniamo il valore di precisione? Dovrebbe essere un% del coefficiente o della funzione di costo totale?

+2

convergenza è sempre "nessun cambiamento" (o troppo piccolo cambiamento) nelle variabili di ottimizzazione, che dovrebbe riflettere direttamente sul costo nella maggior parte dei casi. –

risposta

5

Si può immaginare come Gradient Descent (GD) lavori pensando di gettare il marmo all'interno di una ciotola e si inizia a scattare foto. Il marmo oscillerà fino a quando l'attrito lo fermerà sul fondo. Ora immaginando di essere in un ambiente che l'attrito è così piccolo che il marmo impiega molto tempo per fermarsi completamente, quindi possiamo supporre che quando le oscillazioni sono abbastanza piccole il marmo abbia raggiunto il fondo (anche se potrebbe continuare ad oscillare). Nell'immagine seguente è possibile vedere i primi otto passaggi (foto del marmo) del GD.

enter image description here

Se continuiamo a scattare foto del marmo non compie movimenti apprezzabili, si dovrebbe ingrandire l'immagine:

enter image description here

Potremmo continuare a prendere le foto ed i movimenti saranno più irrelevants.

Quindi raggiungere un punto in cui GD apporta cambiamenti molto piccoli nella funzione obiettivo è chiamato convergenza, il che non significa che abbia raggiunto il risultato ottimale (ma è davvero abbastanza vicino, se non su di esso).

Il valore di precisione può essere scelto come soglia in cui si iterazioni consecutive di GD sono quasi gli stessi:

grad(i) = 0.0001 
grad(i+1) = 0.000099989 <-- grad has changed less than 0.01% => STOP 
+0

Accetto la tua risposta, ma non hai chiarito se GD è la funzione di costo o il coefficiente. Il commento di Thomas Jungblut dice che è la convergenza dei coefficienti che si rifletterà nella funzione di costo, quindi mi sembra "non importa" ... Grazie per la risposta dettagliata però! –

+0

GD è un algoritmo generale per trovare il minimo in una funzione convessa. Quella funzione può essere la funzione di costo di un problema ML o di qualsiasi altra funzione. – jabaldonedo

+0

Ho anche un po 'di confusione su questo, e ancora non riesco a trovare una risposta chiara in quanto questo passaggio (verificare la convergenza) non è presente in tutti gli articoli che ho trovato finora. Possiamo calcolare la funzione di costo in ogni passaggio per vedere se cambia molto da un passaggio all'altro. Ma calcolare la funzione di costo può essere anche costoso. C'è un algoritmo di discesa del gradiente stocastico dove possiamo usare parte dei dati per calcolare la discesa stessa, ma abbiamo ancora bisogno di tutti i dati per calcolare la funzione di costo? Non è ancora chiaro per me. – Vadim