Cos’è `lr_policy` in Caffe?

Cerco solo di scoprire come posso usare Caffe . Per fare ciò, ho appena dato un’occhiata ai diversi file .prototxt nella cartella degli esempi. C’è un’opzione che non capisco:

 # The learning rate policy lr_policy: "inv" 

I valori possibili sembrano essere:

  • "fixed"
  • "inv"
  • "step"
  • "multistep"
  • "stepearly"
  • "poly"

Qualcuno potrebbe spiegare per favore queste opzioni?

Se guardi all’interno del file /caffe-master/src/caffe/proto/caffe.proto (puoi trovarlo online qui ) vedrai le seguenti descrizioni:

 // The learning rate decay policy. The currently implemented learning rate // policies are as follows: // - fixed: always return base_lr. // - step: return base_lr * gamma ^ (floor(iter / step)) // - exp: return base_lr * gamma ^ iter // - inv: return base_lr * (1 + gamma * iter) ^ (- power) // - multistep: similar to step but it allows non uniform steps defined by // stepvalue // - poly: the effective learning rate follows a polynomial decay, to be // zero by the max_iter. return base_lr (1 - iter/max_iter) ^ (power) // - sigmoid: the effective learning rate follows a sigmod decay // return base_lr ( 1/(1 + exp(-gamma * (iter - stepsize)))) // // where base_lr, max_iter, gamma, step, stepvalue and power are defined // in the solver parameter protocol buffer, and iter is the current iteration. 

È prassi comune ridurre il tasso di apprendimento (lr) man mano che il processo di ottimizzazione / apprendimento progredisce. Tuttavia, non è chiaro come esattamente il tasso di apprendimento debba essere diminuito in funzione del numero di iterazione.

Se utilizzi DIGITS come interfaccia per Caffe, sarai in grado di vedere visivamente come le diverse scelte influenzano il tasso di apprendimento.

corretto: il tasso di apprendimento viene mantenuto fisso durante tutto il processo di apprendimento.


inv: il tasso di apprendimento sta decadendo come ~ 1/T
inserisci la descrizione dell'immagine qui


passo: il tasso di apprendimento è costante a tratti, lasciando cadere ogni iterazione X.
inserisci la descrizione dell'immagine qui


multistep: costante costante a intervalli arbitrari
inserisci la descrizione dell'immagine qui


Puoi vedere esattamente come viene calcolato il tasso di apprendimento nella funzione SGDSolver::GetLearningRate ( solvers / sgd_solver.cpp line ~ 30).


Recentemente, mi sono imbattuto in un approccio interessante e non convenzionale all’ottimizzazione del tasso di apprendimento: il lavoro di Leslie N. Smith “No More Pesky Learning Rate Guessing Games” . Nella sua relazione, Leslie suggerisce di usare lr_policy che alterna tra la diminuzione e l’ aumento del tasso di apprendimento. Il suo lavoro suggerisce anche come implementare questa politica in Caffe.