2013-06-24 12 views
5

Mi sono insegnato l'apprendimento automatico con alcune risorse online, ma ho una domanda sulla discesa del gradiente che non riuscivo a capire.Discesa gradiente: eseguiamo iterazioni su TUTTO il set di allenamento con ogni passo in GD? oppure Cambiamo GD per ogni set di allenamento?

La formula per discesa del gradiente è data dalla regressione logistica seguenti:

Repeat { 
    θj = θj−α/m∑(hθ(x)−y)xj 
} 

Dove θj è il coefficiente j variabile; α è il tasso di apprendimento; hθ(x) è l'ipotesi; y è il valore reale e xj è il valore della variabile j. m è il numero di set di allenamento. hθ(x), sono per ogni set di allenamento (vale a dire per che cosa è il segno di somma).

Questo è il posto dove mi confondo.

Non è chiaro per me se la somma rappresenti il ​​mio intero set di allenamento o quante iterazioni ho fatto fino a quel momento.

Ad esempio, immagino di avere 10 esempi di formazione. Se eseguo la discesa del gradiente dopo ogni esempio di allenamento, i miei coefficienti saranno molto diversi allora se eseguirò la discesa del gradiente dopo tutti e 10 gli esempi di allenamento.

Vedere sotto come il primo modo è diversa Il secondo modo:

Primo modo

  • Fase 1: Poiché i coefficienti inizializzati a 0, hθ (x) = 0
  • Fase 2: Eseguire la discesa del gradiente sul primo esempio di allenamento. termine sommatoria comprende solo esempio 1 formazione
  • Fase 3: Ora utilizzare nuovi coefficienti per gli esempi di formazione 1 & 2 ... termine sommatoria comprende primi esempi 2 di formazione
  • Fase 4: eseguire di nuovo discesa del gradiente.
  • Fase 5: Ora utilizzare nuovi coefficienti per gli esempi di formazione 1,2 & 3 ... termine sommatoria comprende primi esempi 3 di formazione
  • continuerà fino a quando la convergenza o tutti esempi di addestramento utilizzati.

Secondo modo

  • Fase 1: Poiché i coefficienti inizializzati a 0, hθ (x) = 0 per tutti i 10 esempi di addestramento
  • Passo 2: Eseguire 1 fase di discesa del gradiente utilizzando tutti 10 esempi di formazione. I coefficienti saranno diversi dal primo modo perché il termine di sommazione include tutti i 10 esempi di allenamento
  • Passaggio 3: utilizzare nuovamente i nuovi coefficienti su tutti e 10 gli esempi di addestramento.termine sommatoria comprende tutti esempi 10 di formazione
  • Fase 4: eseguire discesa del gradiente e continuare a usare i coefficienti sulla tutti esempi fino convergenza

Spero che spiega la mia confusione. Qualcuno sa qual è il modo corretto?

Edit: Aggiunta funzione di costo e la funzione di ipotesi

cost function = −1/m∑[ylog(hθ(x))+(1−y)log(1−hθ(x))] 
hθ(x) = 1/(1+ e^-z) 
and z= θo + θ1X1+θ2X2 +θ3X3...θnXn 
+0

Discesa gradiente per quale metodo di apprendimento macchina/funzione di perdita? perceptron? SVM? – carlosdc

+0

@carlosdc Non è SVM quindi presumo che sia perceptron? Scusate ma il corso in cui l'ho imparato da (coursera) non ha mai usato il termine perceptron. Insegnava SVM, ma quello era più avanti nel corso e io non sto usando questa equazione, quindi presumo che questo non sia un SVM. Comunque potrei dire? –

+0

@carlosdc l'equazione che ho fornito è la derivata della funzione di costo ... L'ipotesi è '1/(1+ e^-z)' e 'z = θo + θ1X1 + θ2X2 + θ3X3 ... θnXn' .. . La funzione di costo è: '-1/mΣ [ylog (hθ (x)) + (1-y) log (1-hθ (x))]' –

risposta

7

Il secondo modo si sta descrivendo è il modo corretto per eseguire Gradient Descent. Il vero gradiente dipende dall'intero set di dati, quindi una singola iterazione della discesa del gradiente richiede l'utilizzo di tutto il set di dati. (Questo è vero per qualsiasi algoritmo di apprendimento in cui è possibile prendere il gradiente)

Il "primo modo" è vicino a qualcosa che si chiama discesa gradiente stocastica. L'idea è che l'utilizzo dell'intero set di dati per un aggiornamento potrebbe essere eccessivo, soprattutto se alcuni dei punti dati sono ridondanti. In questo caso, selezioniamo un punto casuale dal set di dati, impostando essenzialmente m = 1. Quindi aggiorniamo in base alle selezioni successive di singoli punti nel set di dati. In questo modo possiamo eseguire m aggiornamenti con lo stesso costo di un aggiornamento di Gradient Descent. Ma ogni aggiornamento è un po 'rumoroso, che può rendere difficile la convergenza verso la soluzione finale.

Il compromesso tra questi approcci si chiama "MiniBatch". Prendendo il gradiente dell'intero set di dati è un giro completo di elaborazione "batch", in quanto abbiamo bisogno dell'intero set di dati a portata di mano. Invece faremo un mini batch, selezionando solo un piccolo sottoinsieme dell'intero set di dati. In questo caso abbiamo impostato k, 1 < k < m, dove k è il numero di punti nel mini batch. Selezioniamo k punti di dati casuali per creare il gradiente da ogni iterazione e quindi eseguire l'aggiornamento. Ripeti fino alla convergenza. Ovviamente, aumentare/diminuire k è un compromesso tra velocità e accuratezza.

Nota: sia per la discesa stocastica con gradiente batch & sia per la selezione casuale del punto di dati successivo. Se si utilizza lo stesso ordine di iterazione per ciascun punto di dati, è possibile ottenere risultati davvero strani/cattivi, spesso divergenti dalla soluzione.

+0

Grazie! Compresa la nota extra. Ho i miei dati tutti ordinati in ordine di y = 0 allora y = 1, ma ora lo randomizzerò. Grazie ancora! –

0

In caso di discesa gradiente discontinua (prendere tutti i campioni), la soluzione convergerà più velocemente. Nel caso della discesa del gradiente stocastico (prendere un campione alla volta) la convergenza sarà più lenta.

Quando il set di allenamento non è enorme, utilizzare la discesa del gradiente batch. Ma ci sono situazioni in cui il set di allenamento non è fisso. Per es. l'addestramento avviene al volo: continui a ricevere sempre più campioni e ad aggiornare il tuo vettore di conseguenza. In questo caso devi aggiornare per campione.

Problemi correlati