wake-up-neo.com

Was ist "lr_policy" in Caffe?

Ich versuche nur herauszufinden, wie ich Caffe verwenden kann. Zu diesem Zweck habe ich mir nur die verschiedenen .prototxt Dateien im Beispielordner. Es gibt eine Option, die ich nicht verstehe:

# The learning rate policy
lr_policy: "inv"

Mögliche Werte scheinen zu sein:

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

Könnte jemand diese Optionen erläutern?

34
Martin Thoma

Wenn Sie in die Datei /caffe-master/src/caffe/proto/caffe.proto Schauen (diese finden Sie online hier ), sehen Sie die folgenden Beschreibungen:

// 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.
40
w1res

Es ist üblich, die Lernrate (lr) im Verlauf des Optimierungs-/Lernprozesses zu verringern. Es ist jedoch nicht klar, wie genau die Lernrate in Abhängigkeit von der Iterationszahl verringert werden sollte.

Wenn Sie ZIFFERN als Schnittstelle zu Caffe verwenden, können Sie visuell sehen, wie sich die verschiedenen Auswahlmöglichkeiten auf die Lernrate auswirken.

fest: Die Lernrate bleibt während des gesamten Lernprozesses fest.


inv: Die Lernrate sinkt als ~ 1/T
enter image description here


Schritt: Die Lernrate ist stückweise konstant und sinkt bei jeder X-Iteration
enter image description here


mehrstufig: stückweise konstant in beliebigen Intervallen
enter image description here


Wie genau die Lernrate berechnet wird, sehen Sie in der Funktion SGDSolver<Dtype>::GetLearningRate ( solvers/sgd_solver.cpp Zeile ~ 30).


Kürzlich stieß ich auf einen interessanten und unkonventionellen Ansatz zur Lernratenoptimierung: Leslie N. Smiths Arbeit "No More Pesky Learning Rate Guessing Games" . In seinem Bericht schlägt Leslie vor, lr_policy das wechselt zwischen abnehmender und zunehmender Lernrate. Seine Arbeit schlägt auch vor, wie diese Richtlinie in Caffe implementiert werden kann.

52
Shai