2016-03-22 5 views
30

Sto studiando TensorFlow e come usarlo, anche se non sono un esperto di reti neurali e deep learnig (solo le basi).Gradient Descent vs Adagrad vs Momentum in TensorFlow

Seguendo le esercitazioni non capisco la differenza reale e pratica tra i tre ottimizzatori per una perdita. Guardo il API e comprendo i principi, ma le mie domande sono:

1. Quando è preferibile utilizzare uno anziché gli altri?

2. Ci sono differenze importanti da sapere?

+1

Non c'è nessuna teoria su quale si suppone ottimizzatore per lavorare meglio su , ad esempio, MNIST, quindi le persone ne provano diverse e ne scelgono una che funzioni meglio per il loro problema. Gradient Descent è in genere il peggiore di tutti, Momentum/AdaGrad può essere migliore/peggiore dell'altro a seconda del set di dati –

+0

Ok, ho bisogno di creare un modello per il riconoscimento di immagini con 4 - 5 classi di riconoscimento. Se utilizzo il set di dati Imagenet, cosa mi suggerisci? – Kyrol

+0

AdamOptimizer sembra funzionare bene su Imagenet –

risposta

85

Ecco una breve spiegazione basata sulla mia comprensione:

  • slanciohelps SGD per navigare lungo le direzioni competenti e ammorbidisce le oscillazioni nel irrilevante. Semplicemente aggiunge una frazione della direzione del passaggio precedente a un passo corrente. Ciò consente di ottenere un'amplificazione della velocità nella direzione corretta e attenua le oscillazioni in direzioni errate. Questa frazione è solitamente nell'intervallo (0, 1). Ha anche senso usare lo slancio adattivo. All'inizio dell'apprendimento, un grande slancio ostacolerà il tuo progresso, quindi ha senso usare qualcosa come 0.01 e una volta che tutti gli alti gradienti sono scomparsi puoi usare un momento più grande. C'è un problema con lo slancio: quando siamo molto vicini all'obiettivo, il nostro slancio nella maggior parte dei casi è molto alto e non sa che dovrebbe rallentare. Questo può farla perdere o oscillare attorno ai minimi
  • il gradiente accelerato nesterov risolve questo problema iniziando a rallentare in anticipo. Nel momento in cui calcoliamo prima il gradiente e poi facciamo un salto in quella direzione, amplificato da qualsiasi moto avessimo prima. NAG fa la stessa cosa ma in un altro ordine: all'inizio facciamo un grande salto basato sulle nostre informazioni memorizzate, quindi calcoliamo il gradiente e facciamo una piccola correzione. Questo cambiamento apparentemente irrilevante dà significativi aumenti di velocità pratica.
  • AdaGrad o gradiente adattivo consente di adeguare la velocità di apprendimento in base ai parametri. Esegue aggiornamenti più grandi per parametri infrequenti e aggiornamenti più piccoli per uno frequente. Per questo motivo è adatto per dati sparsi (NLP o riconoscimento di immagini). Un altro vantaggio è che elimina sostanzialmente la necessità di sintonizzare il tasso di apprendimento. Ogni parametro ha il suo tasso di apprendimento e, a causa delle peculiarità dell'algoritmo, il tasso di apprendimento è in diminuzione monotona. Questo causa il problema più grande: ad un certo punto del tempo il tasso di apprendimento è così piccolo che il sistema smette di apprendere.
  • AdaDeltaresolves il problema del tasso di apprendimento monotonicamente decrescente in AdaGrad. In AdaGrad il tasso di apprendimento è stato calcolato approssimativamente come diviso per la somma delle radici quadrate. In ogni fase si aggiunge un'altra radice quadrata alla somma, che fa aumentare costantemente il denominatore. In AdaDelta invece di sommare tutte le radici quadrate passate usa la finestra scorrevole che consente di ridurre la somma. RMSprop è molto simile a AdaDelta
  • Adam o slancio adattivo è un algoritmo simile a AdaDelta. Ma oltre a memorizzare i tassi di apprendimento per ciascuno dei parametri, memorizza anche i cambiamenti di momentum per ciascuno di essi separatamente.

    A few visualizations: enter image description here enter image description here

Direi che SGD, Momentum e Nesterov sono inferiori rispetto all'ultima 3.

+1

Finalmente qualcuno mi brilla! :) Grazie davvero per la risposta! – Kyrol

+7

Grazie per l'incredibile post! triste ma vero, mi sono appena iscritto per darti +1 a causa delle GIF –

+2

questo, signore, è una risposta ben pensata –

Problemi correlati