tutorial net machine-learning neural-network deep-learning caffe gradient-descent

machine-learning - tutorial - net forward



¿Qué es `lr_policy` en Caffe? (2)

Es una práctica común disminuir la tasa de aprendizaje (lr) a medida que avanza el proceso de optimización / aprendizaje. Sin embargo, no está claro cómo exactamente se debe disminuir la tasa de aprendizaje como una función del número de iteración.

Si usa DIGITS como interfaz para Caffe, podrá ver visualmente cómo las diferentes opciones afectan la tasa de aprendizaje.

fijo: la tasa de aprendizaje se mantiene fija durante todo el proceso de aprendizaje.

inv: la velocidad de aprendizaje decae como ~ 1/T

paso: la tasa de aprendizaje es por partes constante, cayendo cada X iteraciones

multipaso: constante por partes a intervalos arbitrarios

Puede ver exactamente cómo se calcula la velocidad de aprendizaje en la función SGDSolver<Dtype>::GetLearningRate ( solvers / sgd_solver.cpp línea ~ 30).

Recientemente, encontré un enfoque interesante y poco convencional para el ajuste de la tasa de aprendizaje: el trabajo de Leslie N. Smith, "No More Pesky Learning Rate Guessing Games" . En su informe, Leslie sugiere usar lr_policy que alterna entre disminuir e incrementar la tasa de aprendizaje. Su trabajo también sugiere cómo implementar esta política en Caffe.

Solo trato de descubrir cómo puedo usar Caffe . Para hacerlo, simplemente eché un vistazo a los diferentes archivos .prototxt en la carpeta de ejemplos. Hay una opción que no entiendo:

# The learning rate policy lr_policy: "inv"

Los posibles valores parecen ser:

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

¿Podría alguien explicar esas opciones?


Si miras dentro del archivo /caffe-master/src/caffe/proto/caffe.proto (puedes encontrarlo en línea here ) verás las siguientes descripciones:

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